Mesin Pengundian Elektronik dengan Modul Kad SD

Cuba Instrumen Kami Untuk Menghapuskan Masalah





Dalam posting ini kita akan membina rangkaian untuk Mesin Pengundian Elektronik menggunakan modul kad Arduino dan SD di mana data pemilihan disimpan dalam kad SD.

Oleh



KEMASKINI:

Litar ini telah ditingkatkan ke versi yang lebih baik di mana hasilnya dapat dilihat melalui paparan LCD yang terpasang, anda boleh mendapatkan perinciannya di bahagian bawah pos

Menggunakan Paparan LCD 16x2

Paparan 16 x 2 menunjukkan status mesin mengundi dan semasa anda memberikan suara, nama calon akan dipaparkan bersamaan dengan pengaktifan LED dan buzzer.



Catatan: Projek yang dicadangkan dibuat hanya untuk tujuan pendidikan dan tidak bertujuan untuk penggunaan pilihan raya.

Mesin pengundian elektronik dilaksanakan untuk mempercepat proses pemilihan dan mengurangkan penggunaan kertas dan sebab-sebab ini secara tidak langsung mengurangkan perbelanjaan yang berkaitan dengan pilihan raya.

Mesin pengundian elektronik memberikan keselamatan yang unggul sebelum kaedah pengundian kertas tradisional.

Mengangkut peti undi pukal itu berisiko daripada mengangkut mesin padat, di mana penipuan penangkapan kenderaan tidak dapat mengubah data dalam EVM (Mesin Pengundian Elektronik) walaupun seseorang dapat menangkap kenderaan.

Beberapa negara menunjukkan minat terhadap EVM buatan India kerana keselamatan yang lebih tinggi. Negara-negara seperti AS masih berpegang pada kaedah pengundian kertas tradisional untuk pilihan raya mereka kerana risiko peretasan dan perubahan data pilihan raya yang lebih tinggi.

Oleh itu, apa yang menjadikan India menjadikan EVM lebih selamat? Oleh itu, AS membuat mesin pengundian yang sarat dengan sistem operasi windows dan jaringan dengan pelayan untuk memudahkan pengiraan undi. Ini membuka banyak celah bagi penggodam untuk mengubah data pilihan raya.

EVM buatan India adalah peranti yang berdiri sendiri dan tidak disambungkan ke internet atau pelayan. Untuk mengira suara, mesin dibawa ke bilik penghitungan, di mana hasilnya akan dinyatakan dan tidak ada orang tengah.

Projek yang dicadangkan dirancang dengan fungsi serupa EVM India tetapi, terdapat banyak pengubahsuaian yang dilakukan.

Sekarang mari kita beralih kepada perincian projek yang membina.

Susun atur Litar:

Diagram Susun atur EVM

Litar EVM yang dicadangkan hanya dapat memuatkan 6 calon. Butang kawalan disediakan serupa dengan unit kawalan dalam EVM sebenar. Setelah seseorang memberikan suara, butang suara dilumpuhkan.

Butang undi diaktifkan sekali lagi hanya setelah menekan butang kawalan. Butang kawalan akan diletakkan berhampiran orang yang bertanggungjawab yang mengendalikan bilik pilihan raya.

Selepas seseorang memberikan suara, dia diakui dengan pengaktifan LED dan buzzer. Orang itu juga dapat mengesahkan suara kepada siapa dia memberikannya di paparan, ia akan menunjukkan nama calon atau nama parti selama beberapa saat. Ciri ini masih tidak terdapat dalam EVM sebenar.

Gambarajah skematik:

Arduino memaparkan kesambungan:




Litar Arduino EVM untuk memaparkan kesambungan

Litar ini terbahagi kepada dua bahagian untuk mengelakkan kekeliruan semasa meniru projek. Litar di atas menerangkan pendawaian antara paparan LCD dan arduino. Laraskan perintang pemboleh ubah untuk kontras optimum.

Litar Mesin Pengundian Elektronik dengan Modul Kad SD dan Arduino

Berikut adalah litar selebihnya yang terdiri daripada bateri 9V, suis, tujuh butang tekan, LED, buzzer dan yang lebih penting modul kad SD.

Kad SD akan menyimpan data serta-merta setelah undian diberikan. Setelah pilihan raya selesai, kad SD dimasukkan ke komputer untuk menyatakan jumlah dan keputusan undi.

Reka bentuk yang dicadangkan boleh mencatatkan sehingga 4,294,967,295 (yang lebih daripada 4 bilion) undi setiap calon dan 25,769,803,770 (lebih daripada 25 bilion yang lebih daripada tiga kali jumlah penduduk dunia sekarang) undi setiap mesin dan kad SD lebih dari 99,9% masih kosong .

Ini jauh lebih cekap daripada EVM sebenar yang boleh mencatat 3840 undi setiap mesin.

Program:

//--------Program Developed by R.Girish------//
#include
#include
#include
LiquidCrystal lcd(7, 6, 5, 4, 3, 2)
//----------------------------------------------------//
String Party1 = 'MODI'
String Party2 = 'TRUMP'
String Party3 = 'PUTIN' // Place the Candidate Names Here.
String Party4 = 'Abdul Kalam'
String Party5 = 'Girish'
String Party6 = 'Swagatam'
//-----------------------------------------------------//
const int btn_1 = A0
const int btn_2 = A1
const int btn_3 = A2
const int btn_4 = A3
const int btn_5 = A4
const int btn_6 = A5
const int ctrl_btn = 8
const int cs = 10
const int LED = 9
boolean ballot = false
File Party1File
File Party2File
File Party3File
File Party4File
File Party5File
File Party6File
unsigned long int Party1_Count = 0
unsigned long int Party2_Count = 0
unsigned long int Party3_Count = 0
unsigned long int Party4_Count = 0
unsigned long int Party5_Count = 0
unsigned long int Party6_Count = 0
void setup()
{
pinMode(btn_1,INPUT)
pinMode(btn_2,INPUT)
pinMode(btn_3,INPUT)
pinMode(btn_4,INPUT)
pinMode(btn_5,INPUT)
pinMode(btn_6,INPUT)
pinMode(ctrl_btn,INPUT)
pinMode(cs,OUTPUT)
pinMode(LED,OUTPUT)
digitalWrite(btn_1,HIGH)
digitalWrite(btn_2,HIGH)
digitalWrite(btn_3,HIGH)
digitalWrite(btn_4,HIGH)
digitalWrite(btn_5,HIGH)
digitalWrite(btn_6,HIGH)
digitalWrite(ctrl_btn,HIGH)
lcd.begin(16,2)
lcd.clear()
lcd.setCursor(0,0)
lcd.print(' Electronic')
lcd.setCursor(0,1)
lcd.print(' Voting Machine')
delay(2000)
if (!SD.begin(cs))
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('SD Card failed')
lcd.setCursor(0,1)
lcd.print('or not present')
while(true)
{
digitalWrite(LED, HIGH)
delay(100)
digitalWrite(LED, LOW)
delay(100)
}
}
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Machine Status:')
lcd.setCursor(0,1)
lcd.print('Initialized !!!')
digitalWrite(LED,HIGH)
delay(2000)
digitalWrite(LED,LOW)
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Machine is ready')
lcd.setCursor(0,1)
lcd.print('----------------')
while(!ballot)
{
if(digitalRead(ctrl_btn) == LOW)
{
ballot = true
for(int y = 0 y <3 y++)
{
digitalWrite(LED, HIGH)
delay(100)
digitalWrite(LED, LOW)
delay(100)
}
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Cast Your Vote')
lcd.setCursor(0,1)
lcd.print('----------------')
}
}
}
void loop()
{
while(ballot)
{
if(digitalRead(btn_1) == LOW)
{
Party_1()
}
if(digitalRead(btn_2) == LOW)
{
Party_2()
}
if(digitalRead(btn_3) == LOW)
{
Party_3()
}
if(digitalRead(btn_4) == LOW)
{
Party_4()
}
if(digitalRead(btn_5) == LOW)
{
Party_5()
}
if(digitalRead(btn_6) == LOW)
{
Party_6()
}
}
}
void Party_1()
{
ballot = false
SD.remove('Party1.txt')
Party1File = SD.open('Party1.txt', FILE_WRITE)
if(Party1File)
{
Party1_Count = Party1_Count + 1
lcd.clear()
lcd.setCursor(0,0)
lcd.print('You voted for:')
lcd.setCursor(0,1)
lcd.print(Party1)
Party1File.println('------------------------------------')
Party1File.print('Result for: ')
Party1File.println(Party1)
Party1File.print('------------------------------------')
Party1File.println(' ')
Party1File.print('Number of Votes = ')
Party1File.print(Party1_Count)
Party1File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Party_2()
{
ballot = false
SD.remove('Party2.txt')
Party2File = SD.open('Party2.txt', FILE_WRITE)
if(Party2File)
{
Party2_Count = Party2_Count + 1
lcd.clear()
lcd.setCursor(0,0)
lcd.print('You voted for:')
lcd.setCursor(0,1)
lcd.print(Party2)
Party2File.println('------------------------------------')
Party2File.print('Result for: ')
Party2File.println(Party2)
Party2File.print('------------------------------------')
Party2File.println(' ')
Party2File.print('Number of Votes = ')
Party2File.print(Party2_Count)
Party2File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Party_3()
{
ballot = false
SD.remove('Party3.txt')
Party3File = SD.open('Party3.txt', FILE_WRITE)
if(Party3File)
{
Party3_Count = Party3_Count + 1
lcd.clear()
lcd.setCursor(0,0)
lcd.print('You voted for:')
lcd.setCursor(0,1)
lcd.print(Party3)
Party3File.println('------------------------------------')
Party3File.print('Result for: ')
Party3File.println(Party3)
Party3File.print('------------------------------------')
Party3File.println(' ')
Party3File.print('Number of Votes = ')
Party3File.print(Party3_Count)
Party3File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Party_4()
{
ballot = false
SD.remove('Party4.txt')
Party4File = SD.open('Party4.txt', FILE_WRITE)
if(Party4File)
{
Party4_Count = Party4_Count + 1
lcd.clear()
lcd.setCursor(0,0)
lcd.print('You voted for:')
lcd.setCursor(0,1)
lcd.print(Party4)
Party4File.println('------------------------------------')
Party4File.print('Result for: ')
Party4File.println(Party4)
Party4File.print('------------------------------------')
Party4File.println(' ')
Party4File.print('Number of Votes = ')
Party4File.print(Party4_Count)
Party4File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Party_5()
{
ballot = false
SD.remove('Party5.txt')
Party5File = SD.open('Party5.txt', FILE_WRITE)
if(Party5File)
{
Party5_Count = Party5_Count + 1
lcd.clear()
lcd.setCursor(0,0)
lcd.print('You voted for:')
lcd.setCursor(0,1)
lcd.print(Party5)
Party5File.println('------------------------------------')
Party5File.print('Result for: ')
Party5File.println(Party5)
Party5File.print('------------------------------------')
Party5File.println(' ')
Party5File.print('Number of Votes = ')
Party5File.print(Party5_Count)
Party5File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Party_6()
{
ballot = false
SD.remove('Party6.txt')
Party6File = SD.open('Party6.txt', FILE_WRITE)
if(Party6File)
{
Party6_Count = Party6_Count + 1
lcd.clear()
lcd.setCursor(0,0)
lcd.print('You voted for:')
lcd.setCursor(0,1)
lcd.print(Party6)
Party6File.println('------------------------------------')
Party6File.print('Result for: ')
Party6File.println(Party6)
Party6File.print('------------------------------------')
Party6File.println(' ')
Party6File.print('Number of Votes = ')
Party6File.print(Party6_Count)
Party6File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Error()
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Unable to log')
lcd.setCursor(0,1)
lcd.print('data to SD card')
for(int x = 0 x <100 x++)
{
digitalWrite(LED, HIGH)
delay(250)
digitalWrite(LED, LOW)
delay(250)
}
}
void Tone()
{
digitalWrite(LED, HIGH)
delay(1000)
digitalWrite(LED, LOW)
delay(1500)
lcd.clear()
lcd.setCursor(0,0)
lcd.print(' Thanks for')
lcd.setCursor(0,1)
lcd.print(' Voting!!!')
delay(1500)
lcd.clear()
lcd.setCursor(0,0)
lcd.print(' Not Ready')
lcd.setCursor(0,1)
lcd.print('----------------')
}
void ctrl()
{
while(!ballot)
{
if(digitalRead(ctrl_btn) == LOW)
{
ballot = true
for(int y = 0 y <3 y++)
{
digitalWrite(LED, HIGH)
delay(100)
digitalWrite(LED, LOW)
delay(100)
}
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Cast Your Vote')
lcd.setCursor(0,1)
lcd.print('----------------')
}
}
}
//--------Program Developed by R.Girish------//

……… Itu adalah program besar.

Cara mengendalikan Litar EVM ini:

• Hidupkan mesin, ia akan mengakui dengan bunyi bip yang menunjukkan semuanya baik-baik saja. Sekiranya mesin tidak baik, ia berbunyi dengan cepat dan memaparkan mesej ralat pada LCD.
• Tekan butang kawalan, sekarang siap mencatat satu suara.
• Setelah suara dicatat, ia akan mengaktifkan LED dan berbunyi sebentar dan memaparkan nama calon yang anda pilih selama beberapa saat.
• Untuk merakam suara seterusnya butang kawalan harus ditekan lagi. Setiap kali butang kawalan ditekan, buzzer memberikan 3 bip pendek.
• Ini mesti diteruskan sehingga pemilih terakhir memberikan suara. Tidak perlu menekan butang kawalan setelah pengundi terakhir melakukan pemilihan.
• Setelah suara terakhir dilemparkan, mesin harus segera dimatikan menggunakan suis mati dan kad SD harus dikeluarkan. Sehingga tidak ada data yang akan diubah.
• Pasangkan kad SD ke komputer dan anda dapat melihat 6 fail teks seperti gambar di bawah:

Hasil kad SD disimpan dalam komputer

Membuka fail akan menunjukkan nama calon dan jumlah suara, seperti yang digambarkan di bawah:

Prototaip pengarang:

Ilustrasi Modul kad SD:

Catatan 1: Sebarang gangguan dalam bekalan kuasa akan menetapkan semula jumlah undi menjadi sifar.
Catatan 2: Tukar nama calon dalam program ini.
Pesta Tali1 = 'MODI'
Pesta Tali2 = 'TRUMP'
Pesta Tali3 = 'PUTIN' // Letakkan Nama Calon Di Sini.
String Party4 = 'Abdul Kalam'
Pesta Tali5 = 'Girish'
Pesta String6 = 'Swagatam'
Catatan 3: Jika tidak ada suara yang diberikan kepada pihak / calon tertentu, file teks tidak akan muncul di kartu SD.

Meningkatkan Reka Bentuk Di Atas

Projek mesin pengundian elektronik versi peningkatan khusus ini diminta oleh Sumesh chourasia, yang merupakan pembaca laman web ini.

Projek ini adalah peningkatan berbanding Mesin Pengundian Elektronik yang dijelaskan di atas. Kelemahan utama EVM (Mesin Pengundian Elektronik) di atas adalah hasilnya tidak dapat dilihat pada paparan LCD 16 x 2, tetapi hanya dapat dilihat di komputer.

Dalam projek ini kita akan menurunkan undian yang disebutkan dan dengan reka bentuk yang baru dicadangkan kita dapat melihat hasil 6 calon di paparan LCD dengan serta-merta.

Kesukaran yang kami hadapi:

Semua pin input / output (dari Arduino) dari projek EVM sebelumnya telah digunakan oleh paparan 16 x 2, modul kad SD, butang suara, butang kawalan dan buzzer. Tidak ada ruang lagi untuk menyambungkan butang baru.

Selepas beberapa kajian kami mendapati bahawa pin I / O boleh ditukar menjadi output menjadi input dan sebaliknya pada bila-bila masa.

Setelah diperhatikan dengan teliti kami memilih pin LED / buzzer sebagai butang simpan. Sekarang pin ini diprogramkan sebagai input (butang simpan) dan output (buzzer).

Perhatikan bahawa pin save / buzzer diberikan pada salah satu keadaan pada seketika iaitu output atau input.

Litar:

Sambungan LCD ke Arduino:

Cukup sambungkan seperti pada skema sebelumnya dan gunakan potensiometer 10K untuk menyesuaikan kontras tontonan litar yang lain.

S1 hingga S6 adalah butang undi di mana pengundi memasukkan pilihan mereka. Butang simpan dan kawalan mesti dijauhkan dari unit pemungutan suara (di bawah kawalan pengawal selia yang bertanggungjawab).

Program Baru:
//--------Program Developed by R.Girish------//
#include
#include
#include
LiquidCrystal lcd(7, 6, 5, 4, 3, 2)
//----------------------------------------------------//
String Party1 = 'MODI'
String Party2 = 'TRUMP'
String Party3 = 'PUTIN' // Place the Candidate Names Here.
String Party4 = 'Abdul Kalam'
String Party5 = 'Girish'
String Party6 = 'Swagatam'
//-----------------------------------------------------//
const int btn_1 = A0
const int btn_2 = A1
const int btn_3 = A2
const int btn_4 = A3
const int btn_5 = A4
const int btn_6 = A5
const int ctrl_btn = 8
const int cs = 10
int LED = 9
int saveTest = 0
int A = 0
int B = 0
int C = 0
int D = 0
int E = 0
int F = 0
boolean ballot = false
File Party1File
File Party2File
File Party3File
File Party4File
File Party5File
File Party6File
File save
unsigned long int Party1_Count = 0
unsigned long int Party2_Count = 0
unsigned long int Party3_Count = 0
unsigned long int Party4_Count = 0
unsigned long int Party5_Count = 0
unsigned long int Party6_Count = 0
void setup()
{
pinMode(btn_1, INPUT)
pinMode(btn_2, INPUT)
pinMode(btn_3, INPUT)
pinMode(btn_4, INPUT)
pinMode(btn_5, INPUT)
pinMode(btn_6, INPUT)
pinMode(ctrl_btn, INPUT)
pinMode(cs, OUTPUT)
pinMode(LED, OUTPUT)
digitalWrite(btn_1, HIGH)
digitalWrite(btn_2, HIGH)
digitalWrite(btn_3, HIGH)
digitalWrite(btn_4, HIGH)
digitalWrite(btn_5, HIGH)
digitalWrite(btn_6, HIGH)
digitalWrite(ctrl_btn, HIGH)
lcd.begin(16, 2)
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F(' Electronic'))
lcd.setCursor(0, 1)
lcd.print(F(' Voting Machine'))
delay(2000)
if (!SD.begin(cs))
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('SD Card failed'))
lcd.setCursor(0, 1)
lcd.print('or not present')
while (true)
{
digitalWrite(LED, HIGH)
delay(100)
digitalWrite(LED, LOW)
delay(100)
}
}
if (SD.exists('save.txt'))
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('Opening Results'))
lcd.setCursor(0, 1)
lcd.print(F('----------------'))
delay(1500)
DisplayResult()
}
else
{
Party1File = SD.open('Party1.txt', FILE_WRITE)
if (Party1File)
{
Party1File.println('--------Null-------')
Party1File.close()
}
else
{
Error()
}
Party2File = SD.open('Party2.txt', FILE_WRITE)
if (Party2File)
{
Party2File.println('--------Null-------')
Party2File.close()
}
else
{
Error()
}
Party3File = SD.open('Party3.txt', FILE_WRITE)
if (Party3File)
{
Party3File.println('--------Null-------')
Party3File.close()
}
else
{
Error()
}
Party4File = SD.open('Party4.txt', FILE_WRITE)
if (Party4File)
{
Party4File.println('--------Null-------')
Party4File.close()
}
else
{
Error()
}
Party5File = SD.open('Party5.txt', FILE_WRITE)
if (Party5File)
{
Party5File.println('--------Null-------')
Party5File.close()
}
else
{
Error()
}
Party6File = SD.open('Party6.txt', FILE_WRITE)
if (Party6File)
{
Party6File.println('--------Null-------')
Party6File.close()
}
else
{
Error()
}
}
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('Machine Status:'))
lcd.setCursor(0, 1)
lcd.print(F('Initialized !!!'))
digitalWrite(LED, HIGH)
delay(2000)
digitalWrite(LED, LOW)
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('Machine is ready'))
lcd.setCursor(0, 1)
lcd.print(F('----------------'))
while (!ballot)
{
if (digitalRead(ctrl_btn) == LOW)
{
ballot = true
for (int y = 0 y <3 y++)
{
digitalWrite(LED, HIGH)
delay(100)
digitalWrite(LED, LOW)
delay(100)
}
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('Cast Your Vote'))
lcd.setCursor(0, 1)
lcd.print(F('----------------'))
}
}
}
void loop()
{
pinMode(LED, INPUT)
if (digitalRead(LED) == HIGH)
{
save = SD.open('save.txt', FILE_WRITE)
if (save)
{
save.println('Results File')
save.close()
}
else
{
Error()
}
}
if (SD.exists('save.txt'))
{
while (true)
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('Results Saved'))
lcd.setCursor(0, 1)
lcd.print(F('Successfully.'))
delay(1500)
lcd.setCursor(0, 0)
lcd.print(F('Disconnect the'))
lcd.setCursor(0, 1)
lcd.print(F('Power Supply'))
delay(1500)
}
}
if (digitalRead(btn_1) == LOW)
{
Party_1()
}
if (digitalRead(btn_2) == LOW)
{
Party_2()
}
if (digitalRead(btn_3) == LOW)
{
Party_3()
}
if (digitalRead(btn_4) == LOW)
{
Party_4()
}
if (digitalRead(btn_5) == LOW)
{
Party_5()
}
if (digitalRead(btn_6) == LOW)
{
Party_6()
}
}
void Party_1()
{
ballot = false
SD.remove('Party1.txt')
Party1File = SD.open('Party1.txt', FILE_WRITE)
if (Party1File)
{
Party1_Count = Party1_Count + 1
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('You voted for:'))
lcd.setCursor(0, 1)
lcd.print(Party1)
Party1File.print(Party1_Count)
Party1File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Party_2()
{
ballot = false
SD.remove('Party2.txt')
Party2File = SD.open('Party2.txt', FILE_WRITE)
if (Party2File)
{
Party2_Count = Party2_Count + 1
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('You voted for:'))
lcd.setCursor(0, 1)
lcd.print(Party2)
Party2File.print(Party2_Count)
Party2File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Party_3()
{
ballot = false
SD.remove('Party3.txt')
Party3File = SD.open('Party3.txt', FILE_WRITE)
if (Party3File)
{
Party3_Count = Party3_Count + 1
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('You voted for:'))
lcd.setCursor(0, 1)
lcd.print(Party3)
Party3File.print(Party3_Count)
Party3File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Party_4()
{
ballot = false
SD.remove('Party4.txt')
Party4File = SD.open('Party4.txt', FILE_WRITE)
if (Party4File)
{
Party4_Count = Party4_Count + 1
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('You voted for:'))
lcd.setCursor(0, 1)
lcd.print(Party4)
Party4File.print(Party4_Count)
Party4File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Party_5()
{
ballot = false
SD.remove('Party5.txt')
Party5File = SD.open('Party5.txt', FILE_WRITE)
if (Party5File)
{
Party5_Count = Party5_Count + 1
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('You voted for:'))
lcd.setCursor(0, 1)
lcd.print(Party5)
Party5File.print(Party5_Count)
Party5File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Party_6()
{
ballot = false
SD.remove('Party6.txt')
Party6File = SD.open('Party6.txt', FILE_WRITE)
if (Party6File)
{
Party6_Count = Party6_Count + 1
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('You voted for:'))
lcd.setCursor(0, 1)
lcd.print(Party6)
Party6File.print(Party6_Count)
Party6File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Error()
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('Unable to log'))
lcd.setCursor(0, 1)
lcd.print(F('data to SD card'))
for (int x = 0 x <100 x++)
{
digitalWrite(LED, HIGH)
delay(250)
digitalWrite(LED, LOW)
delay(250)
}
}
void Tone()
{
pinMode(LED, OUTPUT)
digitalWrite(LED, HIGH)
delay(1000)
digitalWrite(LED, LOW)
delay(1500)
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F(' Thanks for'))
lcd.setCursor(0, 1)
lcd.print(F(' Voting!!!'))
delay(1500)
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F(' Not Ready'))
lcd.setCursor(0, 1)
lcd.print('----------------')
}
void ctrl()
{
while (!ballot)
{
pinMode(LED, INPUT)
if (digitalRead(LED) == HIGH)
{
save = SD.open('save.txt', FILE_WRITE)
if (save)
{
save.println('Results File')
save.close()
}
else
{
Error()
}
}
if (SD.exists('save.txt'))
{
while (true)
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('Results Saved'))
lcd.setCursor(0, 1)
lcd.print(F('Successfully.'))
delay(1500)
lcd.setCursor(0, 0)
lcd.print(F('Disconnect the'))
lcd.setCursor(0, 1)
lcd.print(F('Power Supply'))
delay(1500)
}
}
if (digitalRead(ctrl_btn) == LOW)
{
ballot = true
for (int y = 0 y <3 y++)
{
digitalWrite(LED, HIGH)
delay(100)
digitalWrite(LED, LOW)
delay(100)
}
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('Cast Your Vote'))
lcd.setCursor(0, 1)
lcd.print(F('----------------'))
}
}
}
void DisplayResult()
{
while (true)
{
Party1File = SD.open('party1.txt')
if(Party1File)
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(Party1)
while (Party1File.available())
{
lcd.setCursor(A, 1)
lcd.write(Party1File.read())
A = A + 1
}
}
A = 0
delay(2000)
Party1File.close()
Party2File = SD.open('party2.txt')
if(Party2File)
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(Party2)
while (Party2File.available())
{
lcd.setCursor(B, 1)
lcd.write(Party2File.read())
B = B + 1
}
}
B = 0
delay(2000)
Party2File.close()
Party3File = SD.open('party3.txt')
if(Party3File)
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(Party3)
while (Party3File.available())
{
lcd.setCursor(C, 1)
lcd.write(Party3File.read())
C = C + 1
}
}
C = 0
delay(2000)
Party3File.close()
Party4File = SD.open('party4.txt')
if(Party4File)
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(Party4)
while (Party4File.available())
{
lcd.setCursor(D, 1)
lcd.write(Party4File.read())
D = D + 1
}
}
D = 0
delay(2000)
Party4File.close()
Party5File = SD.open('party5.txt')
if(Party5File)
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(Party5)
while (Party5File.available())
{
lcd.setCursor(E, 1)
lcd.write(Party5File.read())
E = E + 1
}
}
E = 0
delay(2000)
Party5File.close()
Party6File = SD.open('party6.txt')
if(Party6File)
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(Party6)
while (Party6File.available())
{
lcd.setCursor(F, 1)
lcd.write(Party6File.read())
F = F + 1
}
}
F = 0
delay(2000)
Party6File.close()
}
}
//--------Program Developed by R.Girish------//

Cara mengendalikan mesin pengundian Elektronik ini:

  • Dengan persediaan perkakasan yang lengkap, muat naik kod dengan nama calon keinginan anda.
  • Hidupkan mesin, jika semuanya baik-baik saja ia akan memberi bunyi bip panjang.
  • Sekarang tekan butang kawalan dan sekarang ia boleh mencatat satu suara.
  • Selepas setiap undian, butang kawalan mesti ditekan sekali.
  • Setelah undian terakhir dilemparkan, tekan butang simpan ini akan menyimpan hasilnya dan meminta anda memutuskan bekalan kuasa (supaya anda dapat melihat hasilnya secara tertutup).
  • Sambungkan semula bekalan itu secara automatik akan mula menunjukkan hasilnya. Sekiranya calon tidak mendapat suara, ia akan menunjukkan 'null'.
  • Untuk mengadakan pilihan raya lain, anda harus memformat kad SD / memadam semua fail yang dihasilkan oleh EVM ini.

Harap maklum bahawa EVM ini memerlukan kuasa tanpa gangguan, sebarang gangguan akan menjadikan jumlah undi menjadi sifar.

Sila tuliskan nama calon dalam kod (maksimum 16 huruf):

// ------------------------------------------------ ---- //

Pesta Tali1 = 'MODI'

Pesta Tali2 = 'TRUMP'

Pesta Tali3 = 'PUTIN' // Letakkan Nama Calon Di Sini.

String Party4 = 'Abdul Kalam'

Pesta Tali5 = 'Girish'

Pesta String6 = 'Swagatam'

// ------------------------------------------------ ----- //

Ini menyimpulkan projek ini, jika anda mempunyai pertanyaan mengenai projek ini, sila nyatakan di bahagian komen, anda mungkin akan mendapat balasan cepat.




Sebelumnya: Litar Sensor Air Tangki Kereta Seterusnya: 3 Litar Bekalan Kuasa Laras IC 220V Keadaan Pepejal