Elektronička glasačka mašina s modulom SD kartice

Elektronička glasačka mašina s modulom SD kartice

U ovom ćemo postu izraditi sklop za elektronički glasovni uređaj pomoću modula Arduino i SD kartice, gdje se podaci o izborima pohranjuju na SD kartici.



Po

AŽURIRAJ:

Ovaj je krug nadograđen na poboljšanu verziju u kojoj se rezultati mogu pregledavati na priloženom LCD zaslonu, a detalje možete pronaći u donjem dijelu posta





Korištenje 16x2 LCD dislay-a

Zaslon 16 x 2 prikazuje status glasačkog stroja, a kad glasujete, prikazat će se ime kandidata zajedno s aktiviranjem LED-a i zujalice.

Napomena: Predloženi projekt napravljen je samo u obrazovne svrhe i nije namijenjen stvarnoj izbornoj uporabi.



Elektronički automati za glasanje ugrađeni su kako bi se ubrzao izborni proces i smanjila upotreba papira, a ti razlozi neizravno smanjuju troškove povezane s izborima.

Elektronički uređaji za glasanje pružaju vrhunsku sigurnost prije tradicionalne metode glasačkog listića.

Prijevoz tih skupnih glasačkih kutija rizičan je nego prijevoz kompaktnih strojeva, gdje prijevare za hvatanje vozila ne mogu promijeniti podatke u EVM-u (elektronički glasački stroj) iako netko može zauzeti vozilo.

Neke zemlje pokazuju interes za EVM-ove indijske proizvodnje zbog vrhunske sigurnosti. Zemlje poput SAD-a i dalje se drže tradicionalne metode glasanja na papiru za svoje izbore zbog većeg rizika od hakiranja i promjene izbornih podataka.

Pa, što je Indijance učinilo EVM-ove sigurnijima? Pa, SAD je napravio glasačke strojeve napunjene operativnim sustavom Windows i umrežene poslužiteljima kako bi olakšao brojanje glasova. To hakerima otvara puno rupa u promjeni izbornih podataka.

EVM-ovi indijske proizvodnje samostalni su uređaji i nisu povezani s internetom ili poslužiteljima. Za brojanje glasova, strojevi se prenose u kabinu za brojanje, gdje će biti objavljeni rezultati, a nema srednjeg čovjeka.

Predloženi projekt dizajniran je sa sličnom funkcionalnošću indijskih EVM-ova, ali učinjeno je puno modifikacija.

Krenimo sada na konstrukcijske detalje projekta.

Izgled kruga:

Dijagram rasporeda EVM

Predloženi EVM krug može primiti samo 6 kandidata. Predviđen je kontrolni gumb sličan upravljačkoj jedinici u stvarnim EVM-ima. Nakon što je osoba glasala, gumbi za glasanje su onemogućeni.

Gumbi za glasanje ponovno su omogućeni tek nakon pritiska na kontrolni gumb. Kontrolni gumb bit će postavljen u blizini odgovorne osobe koja kontrolira izbornu kabinu.

Nakon što je osoba glasala, priznaje se aktiviranje LED-a i zujalice. Osoba također može potvrditi glasovanje kojemu je dala na zaslonu, na nekoliko sekundi prikazat će ime kandidata ili stranke. Ova značajka još uvijek nije prisutna u stvarnim EVM-ovima.

Shematski dijagram:

Arduino koji prikazuje povezanost:




Arduino EVM krug za prikaz povezivosti

Strujni krug podijeljen je u dva dijela kako bi se izbjegle zabune prilikom dupliciranja projekta. Gornji sklop opisuje ožičenje između LCD zaslona i arduina. Podesite promjenjivi otpor za optimalni kontrast.

Krug elektroničkog glasačkog stroja s modulom SD kartice i Arduinom

Ovdje je ostatak sklopa koji se sastoji od 9V baterije, prekidača, sedam tipki, LED-a, zujalice i još važnije modula SD kartice.

SD kartica pohranit će podatke odmah nakon glasanja. Po završetku izbora SD kartica se ubacuje u računalo kako bi se proglasilo prebrojavanje glasova i rezultat.

Predloženi dizajn može zabilježiti do 4.294.967.295 (što je više od 4 milijarde) glasova po kandidatu i 25.769.803.770 (više od 25 milijardi, što je više od triput od trenutne svjetske populacije) glasova po stroju, a još uvijek je više od 99,9% SD kartica prazno .

Ovo je daleko učinkovitije od stvarnih EVM-a koji mogu zabilježiti 3840 glasova po stroju.

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------//

……… To je masivan program.

Kako upravljati ovim EVM krugom:

• UKLJUČITE stroj, on će potvrditi zvučnim signalom da je sve u redu. Ako stroj nije u redu, začuje se zvučni signal i prikazuje poruku o pogrešci na LCD-u.
• Pritisnite kontrolnu tipku, sada je spremna za snimanje jednog glasa.
• Jednom kada je glas snimljen, aktivirat će LED i oglasiti se na sekundu i prikazati ime kandidata za kojeg ste glasovali nekoliko sekundi.
• Za snimanje sljedećeg glasanja potrebno je ponovno pritisnuti kontrolni gumb. Svaki put kad se pritisne kontrolna tipka, zujalo daje 3 kratka zvučna signala.
• To se mora nastaviti sve dok posljednji birač nije dao svoj glas. Nije potrebno pritisnuti kontrolni gumb nakon posljednjeg glasanja birača.
• Nakon što je izvršeno posljednje glasanje, stroj treba odmah isključiti pomoću prekidača za isključivanje i ukloniti SD karticu. Tako da se nikakvi podaci neće mijenjati.
• Priključite SD karticu u računalo i možete vidjeti 6 tekstualnih datoteka kao što je prikazano dolje:

Rezultat SD kartice pohranjen u računalu

Otvaranjem datoteke prikazat će se ime kandidata i broj glasova, kao što je prikazano u nastavku:

Autorski prototip:

Ilustracija modula SD kartice:

Napomena 1: Svaki prekid u napajanju vratit će brojanje glasova na nulu.
Napomena 2: Molimo promijenite ime kandidata u programu.
String Party1 = 'MODI'
String Party2 = 'TRUMP'
String Party3 = 'PUTIN' // Ovdje stavite imena kandidata.
String Party4 = 'Abdul Kalam'
String Party5 = 'djevojački'
String Party6 = 'Swagatam'
Napomena 3: Ako se određenoj stranci / kandidatu ne da glas, tekstualna datoteka neće se pojaviti na SD kartici.

Nadogradnja gore navedenog dizajna

Ovu posebno nadograđenu verziju projekta elektroničkog glasačkog stroja zatražio je Sumesh chourasia, koji je strastveni čitatelj ove web stranice.

Ovaj je projekt poboljšanje u odnosu na gore objašnjeni Elektronički glasovni uređaj. Glavni nedostatak gore navedenog EVM-a (Electronic Voting Machine) bio je rezultat koji se nije mogao vidjeti na LCD zaslonu 16 x 2, već se može vidjeti samo na računalu.

U ovom ćemo projektu uzvratiti spomenuto izvlačenje, a novopredloženim dizajnom možemo odmah vidjeti rezultat 6 kandidata na LCD zaslonu.

Poteškoće s kojima smo se susreli:

Sve ulazno / izlazne pinove (Arduina) prethodnog EVM projekta koristili su zaslon 16 x 2, modul SD kartice, gumbi za glasanje, kontrolni gumb i zujalica. Nema više mjesta za povezivanje bilo kojeg novog gumba.

Nakon nekih istraživanja otkrili smo da se bilo koji I / O pinovi mogu u bilo kojem trenutku promijeniti na izlaz na ulaz i obrnuto.

Nakon pažljivog promatranja odabrali smo LED / zujalicu za gumb za spremanje. Sada je ovaj pin programiran i kao ulaz (gumb za spremanje) i kao izlaz (zujalo).

Imajte na umu da je klin za spremanje / zujanje dodijeljen u bilo kojem stanju trenutno, tj. Izlaz ili ulaz.

Krug:

Priključak LCD-a na Arduino:

Samo se povežite prema ranijim shemama i upotrijebite 10K potenciometar za podešavanje kontrasta gledanja, a ostatak sklopa je samorazumljiv.

S1 do S6 su glasački gumbi putem kojih birači unose svoj izbor. Gumb za spremanje i kontrolu mora se držati podalje od glasačke jedinice (pod nadzorom nadležne biračke kabine).

Novi 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
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------//

Kako se upravlja ovim elektroničkim uređajem za glasanje:

  • Nakon dovršenog postavljanja hardvera prenesite kôd s imenima kandidata po želji.
  • Uključite stroj, ako je sve u redu, oglašit će se dugačak zvučni signal.
  • Sada pritisnite kontrolni gumb i sada može zabilježiti jedan glas.
  • Nakon svakog glasanja mora se jednom pritisnuti kontrolni gumb.
  • Nakon što se odradi posljednji glas, pritisnite gumb Spremi, čime ćete spremiti rezultate i zatražit ćete da isključite napajanje (tako da rezultate možete gledati privatno).
  • Ponovno spojite napajanje koje će automatski početi prikazivati ​​rezultate. Ako kandidat nije dobio glas, prikazuje se 'null'.
  • Da biste proveli nove izbore, morate formatirati SD karticu / izbrisati sve datoteke generirane ovim EVM-om.

Napominjemo da ovom EVM-u treba neprekidno napajanje, svaki prekid će brojati glasove na nulu.

Molimo upišite imena kandidata u šifru (najviše 16 slova):

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

String Party1 = 'MODI'

String Party2 = 'TRUMP'

String Party3 = 'PUTIN' // Ovdje stavite imena kandidata.

String Party4 = 'Abdul Kalam'

String Party5 = 'djevojački'

String Party6 = 'Swagatam'

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

Time je projekt završen. Ako imate bilo kakvih pitanja u vezi s ovim projektom, slobodno ih izrazite u odjeljku za komentare, možda ćete dobiti brzi odgovor.




Prethodno: Krug osjetnika vode u spremniku automobila Sljedeće: 3 jednopolna jednostruka IC 220V podesiva kruga napajanja