Elektronski glasovalni stroj z modulom SD kartice

Elektronski glasovalni stroj z modulom SD kartice

V tem prispevku bomo zgradili vezje za elektronski glasovalni stroj z uporabo modula Arduino in kartice SD, kjer bodo podatki o volitvah shranjeni na kartici SD.



Avtor

NADGRADNJA:

To vezje je nadgrajeno na izboljšano različico, v kateri si lahko rezultate ogledate na priloženem LCD zaslonu, podrobnosti pa najdete v spodnjem delu prispevka





Uporaba 16x2 LCD dislay

Zaslon 16 x 2 prikazuje stanje glasovalne naprave in ko oddate svoj glas, bo prikazano ime kandidata skupaj z aktivacijo LED in zvočnega signala.

Opomba: Predlagani projekt je narejen izključno v izobraževalne namene in ni namenjen resnični volitvi.



Elektronski glasovalni stroji so vgrajeni za pospešitev volilnega postopka in zmanjšanje uporabnega papirja, kar posredno zmanjšuje stroške, povezane z volitvami.

Elektronski glasovalni avtomati zagotavljajo vrhunsko varnost pred tradicionalno metodo glasovanja po papirju.

Prevoz teh razsutih volilnih skrinjic je tvegan kot prevoz kompaktnih strojev, kjer prevare z zajemanjem vozil ne morejo spremeniti podatkov v EVM (elektronski glasovalni avtomat), čeprav lahko vozilo zajame vozilo.

Nekatere države kažejo zanimanje za indijsko izdelane EVM-je zaradi vrhunske varnosti. Države, kot so ZDA, se še vedno držijo tradicionalne metode glasovanja na papirju za svoje volitve zaradi večje nevarnosti vdora in spreminjanja volilnih podatkov.

Torej, kaj je Indijca naredilo EVM-je bolj varne? No, ZDA so izdelale glasovalne stroje, naložene z operacijskim sistemom Windows in povezane v strežnike, da so olajšale štetje glasov. To hekerjem odpira veliko vrzeli pri spreminjanju volilnih podatkov.

Indijski EVM so samostojne naprave in niso povezane z internetom ali strežniki. Za štetje glasov se stroji odpeljejo do števnice, kjer bodo razglašeni rezultati in brez posrednika.

Predlagani projekt je zasnovan s podobno funkcionalnostjo indijskih EVM, vendar je bilo narejenih veliko sprememb.

Zdaj pa pojdimo na konstrukcijske podrobnosti projekta.

Postavitev vezja:

Diagram postavitve EVM

Predlagano vezje EVM lahko sprejme le 6 kandidatov. Na voljo je krmilni gumb, podoben krmilni enoti v resničnih EVM-jih. Ko oseba odda svoj glas, so glasovni gumbi onemogočeni.

Glasovni gumbi so ponovno omogočeni šele po pritisku na nadzorni gumb. Gumb za nadzor bo nameščen blizu odgovorne osebe, ki nadzoruje volilno kabino.

Potem ko je oseba oddala glas, jo / jo potrdi z vklopom LED in zvočnega signala. Oseba lahko na zaslonu potrdi tudi glas, ki mu ga je oddala, nekaj sekund bo prikazal ime kandidata ali ime stranke. Ta funkcija še ni prisotna v pravih EVM-jih.

Shematski diagram:

Arduino, ki prikazuje povezljivost:




Vezje Arduino EVM za prikaz povezljivosti

Vezje je razdeljeno na dva dela, da se izognemo zmedi med podvajanjem projekta. Zgornje vezje opisuje ožičenje med LCD zaslonom in arduinom. Prilagodite spremenljivi upor za optimalen kontrast.

Vezje elektronskega glasovalnega stroja z modulom SD kartice in Arduino

Tu je preostali del vezja, ki ga sestavljajo 9V baterija, stikalo, sedem potisnih gumbov, LED, zvočni signal in še pomembneje modul kartice SD.

Kartica SD bo podatke shranila takoj po oddanem glasovanju. Po končanih volitvah se kartica SD vstavi v računalnik, da razglasi štetje glasov in rezultat.

Predlagana zasnova lahko zabeleži do 4.294.967.295 (kar je več kot 4 milijarde) glasov na kandidata in 25.769.803.770 (več kot 25 milijard, kar je več kot trikrat več kot trenutno prebivalstvo sveta) glasov na stroj in še vedno več kot 99,9% SD kartica je še vedno prazna .

To je veliko bolj učinkovito kot pravi EVM, ki lahko zabeležijo 3840 glasov na stroj.

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 ogromen program.

Kako upravljati to vezje EVM:

• VKLOPITE stroj, s piskom bo potrdil, da je vse v redu. Če naprava ni v redu, se hitro oglasi in na LCD-prikazovalniku prikaže sporočilo o napaki.
• Pritisnite nadzorni gumb, zdaj je pripravljen za en glas.
• Ko je glasovanje zabeleženo, bo za sekundo aktiviralo LED in piskalo ter za nekaj sekund prikazalo ime kandidata, za katerega ste glasovali.
• Za snemanje naslednjega glasovanja je treba znova pritisniti nadzorni gumb. Vsakič, ko pritisnete gumb za upravljanje, zvočni signal sproži 3 kratke piske.
• To je treba nadaljevati, dokler ni glasoval zadnji volivec. Po zadnjem glasovanju volivcev ni treba pritisniti nadzornega gumba.
• Po oddaji zadnjega glasovanja je treba stroj takoj izklopiti s stikalom za izklop in odstraniti kartico SD. Tako da nobeni podatki ne bodo spremenjeni.
• Priklopite kartico SD v računalnik in na njej bo prikazano 6 besedilnih datotek, kot je prikazano spodaj:

Rezultat kartice SD je shranjen v računalniku

Odpiranje datoteke bo prikazalo ime kandidata in število glasov, kot je prikazano spodaj:

Avtorjev prototip:

Prikaz modula kartice SD:

Opomba 1: Vsaka prekinitev napajanja bo štetje glasov ponastavila na nič.
Opomba 2: V programu spremenite ime kandidata.
String Party1 = 'MODI'
String Party2 = 'TRUMP'
String Party3 = 'PUTIN' // Tukaj postavite imena kandidatov.
String Party4 = 'Abdul Kalam'
String Party5 = 'Girish'
String Party6 = 'Swagatam'
Opomba 3: Če določena stranka / kandidat ne glasuje, besedilna datoteka ne bo prikazana na kartici SD.

Nadgradnja zgornjega dizajna

To posebno nadgrajeno različico projekta elektronskega glasovalnega stroja je zahteval Sumesh chourasia, ki je navdušen bralec te spletne strani.

Ta projekt predstavlja izboljšanje v primerjavi z zgoraj pojasnjenim sistemom za elektronsko glasovanje. Glavna pomanjkljivost zgoraj omenjenega EVM (Electronic Voting Machine) je bila, da rezultata ni bilo mogoče videti na 16 x 2 LCD zaslonu, ampak ga je mogoče videti le v računalniku.

V tem projektu bomo omenjeni žreb vrnili nazaj in z novo predlaganim dizajnom si lahko na LCD zaslonu takoj ogledamo rezultat 6 kandidatov.

Težave, s katerimi smo se srečevali:

Vsi vhodni / izhodni zatiči (Arduino) prejšnjega projekta EVM so bili uporabljeni z zaslonom 16 x 2, modulom SD kartice, gumbi za glasovanje, nadzornim gumbom in brenčalom. Ni več prostora za priklop katerega koli novega gumba.

Po nekaj raziskavah smo ugotovili, da je mogoče kateri koli vhodno / izhodni zatič kadar koli spremeniti v izhod v vhod in obratno.

Po natančnem opazovanju smo za gumb za shranjevanje izbrali zatič LED / brenčalo. Zdaj je ta zatič programiran kot vhod (gumb za shranjevanje) in izhod (zvočni signal).

Upoštevajte, da je zatič za shranjevanje / brenčanje dodeljen v katerem koli stanju v trenutku, tj.izhodu ali vhodu.

Vezje:

Povezava med LCD in Arduino:

Preprosto povežite v skladu s prejšnjimi shemami in uporabite 10K potenciometer za nastavitev kontrasta gledanja, ostalo vezje je samo po sebi razumljivo.

S1 do S6 so glasovni gumbi, s pomočjo katerih volivci vnesejo svojo izbiro. Gumb za shranjevanje in nadzor mora biti oddaljen od volilne enote (pod nadzorom odgovorne volilne kabine).

Nov 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 uporabljati ta elektronski glasovni avtomat:

  • Po končani namestitvi strojne opreme naložite kodo z imeni kandidatov, ki jih želite.
  • Vklopite stroj, če bo vse v redu, bo dal dolg pisk.
  • Zdaj pritisnite nadzorni gumb in zdaj lahko posname en glas.
  • Po vsakem glasovanju je treba enkrat pritisniti nadzorni gumb.
  • Po oddaji zadnjega glasovanja pritisnite gumb shrani, s čimer boste shranili rezultate in vas pozvali, da odklopite napajanje (tako da si lahko rezultate ogledate zasebno).
  • Ponovno priključite napajalnik, ki se bo samodejno začel prikazovati rezultate. Če kandidat ni prejel nobenega glasu, se prikaže 'nično'.
  • Za izvedbo novih volitev morate formatirati kartico SD / izbrisati vse datoteke, ki jih ustvari ta EVM.

Upoštevajte, da ta EVM potrebuje neprekinjeno napajanje, vsaka prekinitev bo štetje glasov zvrnila na nič.

V kodo vpišite imena kandidatov (največ 16 črk):

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

String Party1 = 'MODI'

String Party2 = 'TRUMP'

String Party3 = 'PUTIN' // Tukaj postavite imena kandidatov.

String Party4 = 'Abdul Kalam'

String Party5 = 'Girish'

String Party6 = 'Swagatam'

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

S tem je projekt zaključen. Če imate kakršna koli vprašanja v zvezi s tem projektom, vas prosimo, da izrazite v oddelku za komentarje, boste morda hitro odgovorili.




Prejšnja: Krog senzorja za vodo v rezervoarju za avto Naprej: 3 polprevodniška enosmerna napajalna vezja IC 220V