Elektronikus szavazógép SD kártya modullal

Próbálja Ki A Műszerünket A Problémák Kiküszöbölésére





Ebben a bejegyzésben egy áramkört fogunk létrehozni egy elektronikus szavazógép számára az Arduino és az SD kártya modul segítségével, ahol a választási adatokat az SD kártyán tároljuk.

Által



FRISSÍTÉS:

Ezt az áramkört egy továbbfejlesztett verzióra frissítették, amelyben az eredményeket egy mellékelt LCD kijelzőn lehet megtekinteni, a részletekről a bejegyzés alsó részében tájékozódhat.

16x2 LCD Dislay használata

16 x 2-es kijelző mutatja a szavazógép állapotát, és amikor leadja a szavazatát, a jelölt neve megjelenik a LED és a hangjelző aktiválásával együtt.



Megjegyzés: A javasolt projekt csak oktatási célokra készült, és nem valós választási célokra készült.

Az elektronikus szavazógépeket a választási folyamat felgyorsítása és a használati papír csökkentése érdekében valósítják meg, és ezek az okok közvetett módon csökkentik a választásokkal kapcsolatos kiadásokat.

Az elektronikus szavazógépek kiemelkedő biztonságot nyújtanak a hagyományos papíron történő szavazás előtt.

Az ömlesztett urnák szállítása kockázatos, mint kompakt gépek szállítása, ahol a gépjármű-elfogási csalások nem változtathatják meg az EVM (elektronikus szavazógép) adatait annak ellenére, hogy képesek rögzíteni a járművet.

Egyes országok az indiai gyártmányú EVM-ek iránt érdeklődést mutatnak a kiemelkedő biztonság miatt. Az olyan országok, mint az Egyesült Államok, választásaiknál ​​továbbra is ragaszkodnak a hagyományos papíron történő szavazáshoz, mivel nagyobb a kockázata a hackelésnek és a választási adatok megváltoztatásának.

Tehát mi tette az indiánok biztonságosabbá az EVM-eket? Nos, az Egyesült Államok a Windows operációs rendszerrel ellátott és szerverekkel hálózatba kötött szavazógépeket gyártotta, hogy megkönnyítse a szavazatok számolását. Ez rengeteg kiskaput nyit meg a hackerek számára a választási adatok megváltoztatására.

Az indiai gyártmányú EVM-ek önálló eszközök, és nem kapcsolódnak internethez vagy szerverekhez. A szavazatok számlálásához a gépeket a számlálófülkébe viszik, ahol az eredményeket közlik, és nincs középső ember.

A javasolt projektet az indiai EVM-ek hasonló funkcionalitásával tervezték, de sok módosítás történt.

Most térjünk át a projekt konstrukciós részleteire.

Áramkör elrendezése:

EVM elrendezési diagram

A javasolt EVM áramkör csak 6 jelöltet tud befogadni. A vezérlőgomb a valós EVM-ek vezérlőegységéhez hasonlóan biztosított. Miután egy személy leadta a szavazatát, a szavazó gombokat letiltják.

Az urnák csak a vezérlőgomb megnyomása után engedélyezhetők újra. A vezérlőgombot a választási fülkét irányító felelős közelében helyezik el.

Miután egy személy leadta a szavazatát, a LED és a hangjelző aktiválásával nyugtázzák. Az a személy is megerősítheti azt a szavazatot, akinek leadta a kijelzőt, ez néhány másodpercig mutatja a jelölt nevét vagy a párt nevét. Ez a funkció még mindig nincs jelen a valódi EVM-ekben.

Sematikus ábrája:

Arduino megjeleníti a kapcsolatot:




Arduino EVM áramkör a kapcsolat megjelenítéséhez

Az áramkör két részre van felosztva, hogy elkerüljük az összetévesztéseket, miközben a projekt megismétlődik. A fenti áramkör az LCD kijelző és az arduino közötti vezetékeket írja le. Állítsa be a változtatható ellenállást az optimális kontraszt érdekében.

Elektronikus szavazógép áramkör SD kártya modullal és Arduino

Itt van az áramkör többi része, amely 9 V-os akkumulátort, kapcsolót, hét nyomógombot, LED-et, hangjelzőt és még fontosabb SD-kártya modult tartalmaz.

Az SD-kártya a szavazás leadása után azonnal tárolja az adatokat. Miután a választás lejárt, az SD-kártyát behelyezték a számítógépbe a szavazatok számának és eredményének deklarálásához.

A javasolt konstrukció jelöltenként legfeljebb 4 294 967 295 (ami több mint 4 milliárd) szavazatot és gépenként 25 769 803 770 (több mint 25 milliárd, ami a világ jelenlegi lakosságának háromszorosa) szavazatot tud felvenni, és még mindig több mint 99,9% az SD kártya .

Ez sokkal hatékonyabb, mint a valódi EVM-ek, amelyek gépenként 3840 szavazatot tudnak rögzíteni.

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

……… Ez egy hatalmas program.

Az EVM áramkör működtetése:

• Kapcsolja be a gépet, és hangjelzéssel nyugtázza, hogy minden rendben van. Ha a gép nincs rendben, gyorsan csipog, és megjeleníti a hibaüzenetet az LCD-n.
• Nyomja meg a vezérlőgombot, így készen áll egy szavazat rögzítésére.
• A szavazás rögzítése után a LED bekapcsol és egy másodpercig sípol, és pár másodpercig megjeleníti annak a jelöltnek a nevét, akire szavazott.
• A következő szavazás rögzítéséhez a vezérlőgombot újra meg kell nyomni. A vezérlőgomb minden egyes megnyomásakor a hangjelző 3 rövid hangjelzést ad.
• Ezt addig kell folytatni, amíg az utolsó választópolgár leadja szavazatát. Miután az utolsó választópolgár leadta a szavazást, nem kell megnyomnia a vezérlőgombot.
• Az utolsó szavazat leadása után a gépet a kikapcsoló segítségével azonnal ki kell kapcsolni, és ki kell venni az SD-kártyát. Annak érdekében, hogy semmilyen adat ne változzon.
• Csatlakoztassa az SD-kártyát egy számítógéphez, és 6 szövegfájlt láthat az alábbiak szerint:

Az SD-kártya eredménye a számítógépen tárolva

A fájl megnyitása megmutatja a jelölt nevét és a szavazatok számát, az alábbiak szerint:

A szerző prototípusa:

Az SD-kártya modul illusztrációja:

1. megjegyzés: Az áramellátás bármely megszakadása nullára állítja a szavazatok számát.
2. megjegyzés: Kérjük, változtassa meg a jelölt nevét a programban.
String Party1 = 'MODI'
String Party2 = 'TRUMP'
String Party3 = 'PUTIN' // Helyezze ide a jelölt neveket.
String Party4 = 'Abdul Kalam'
String Party5 = 'Girish'
String Party6 = 'Swagatam'
3. megjegyzés: Ha egy adott pártra / jelöltre nincs szavazat, a szöveges fájl nem jelenik meg az SD-kártyán.

A fenti terv frissítése

Az elektronikus szavazógép-projekt ezen frissített változatát Sumesh chourasia kérte, aki lelkesen olvassa ezt a weboldalt.

Ez a projekt az elektronikus szavazógép fentebb kifejtett fejlesztése. A fenti EVM (elektronikus szavazógép) fő hátránya az volt, hogy az eredmény nem volt megtekinthető a 16 x 2-es LCD kijelzőn, de csak a számítógépen.

Ebben a projektben le fogjuk lőni az említett lehívást, és az újonnan javasolt kialakítással azonnal megtekinthetjük a 6 jelölt eredményét az LCD kijelzőn.

Nehézségek, amelyekkel találkoztunk:

Az előző EVM projekt összes bemeneti / kimeneti gombját (az Arduino-ból) felhasználta a 16 x 2-es kijelző, az SD-kártya modul, az urnák, a vezérlőgomb és a hangjelző. Nincs több hely új gombok csatlakoztatására.

Néhány kutatás után azt tapasztaltuk, hogy az I / O csapok bármikor megváltoztathatók kimenetre bemenetre és fordítva.

Gondos megfigyelés után a LED / hangjelző csapot választottuk mentés gombra. Ez a pin mind bemenetként (mentés gomb), mind kimenetként (hangjelző) programozva van.

Ne feledje, hogy a mentés / hangjelző csap az állapot bármelyikéhez hozzárendelésre kerül egy pillanat alatt, azaz kimenet vagy bemenet.

Az áramkör:

LCD-Arduino kapcsolat:

Csak csatlakoztassa a korábbi vázlatoknak megfelelően, és használjon 10K potenciométert a látási kontraszt beállításához az áramkör többi része magától értetődő.

Az S1 – S6 olyan szavazógomb, amelyen keresztül a választópolgárok megadhatják választásukat. A mentés és vezérlés gombot távol kell tartani az urnától (a szavazófülke ellenőrzése alatt).

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

Az elektronikus szavazógép működtetése:

  • A hardver befejezése után töltse fel a kódot a kívánt jelölt nevével.
  • Kapcsolja be a gépet, ha minden rendben van, akkor hosszú hangjelzést ad.
  • Most nyomja meg a vezérlőgombot, és most egyetlen szavazatot rögzíthet.
  • Minden szavazás után egyszer meg kell nyomni a vezérlőgombot.
  • Miután leadta az utolsó szavazást, nyomja meg a mentés gombot, ezzel elmenti az eredményeket, és felszólítja Önt, hogy húzza ki az áramellátást (hogy privát módon megtekinthesse az eredményeket).
  • Csatlakoztassa újra a tápfeszültséget, és az eredmények automatikusan megjelennek. Ha egy jelölt nem kapott szavazatot, akkor az „null” értéket mutat.
  • Újabb választások lebonyolításához meg kell formáznia az SD-kártyát / törölnie kell az EVM által létrehozott összes fájlt.

Felhívjuk figyelmét, hogy ehhez az EVM-hez megszakítás nélküli áramellátás szükséges, minden megszakítás esetén a szavazatok száma nullára változik.

Kérjük, írja be a jelölt nevét a kódba (legfeljebb 16 betű):

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

String Party1 = 'MODI'

String Party2 = 'TRUMP'

String Party3 = 'PUTIN' // Helyezze ide a jelölt neveket.

String Party4 = 'Abdul Kalam'

String Party5 = 'Girish'

String Party6 = 'Swagatam'

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

Ezzel befejeződött a projekt. Ha bármilyen kérdése van a projekttel kapcsolatban, nyugodtan fejezze ki a megjegyzés részben, akkor gyors választ kaphat.




Előző: Autótartály vízérzékelő áramköre Következő: 3 szilárdtestű egyszeres IC 220V állítható tápegység