Elektronický hlasovací prístroj s modulom SD karty

Elektronický hlasovací prístroj s modulom SD karty

V tomto príspevku zostrojíme obvod pre elektronické hlasovacie zariadenie pomocou modulu Arduino a SD karty, kde sú volebné údaje uložené na SD karte.



Autor:

AKTUALIZÁCIA:

Tento okruh bol inovovaný na vylepšenú verziu, v ktorej je možné výsledky sledovať na pripojenom LCD displeji, podrobnosti získate v spodnej časti príspevku





Pomocou 16x2 LCD displeja

Displej s rozmermi 16 x 2 zobrazuje stav hlasovacieho zariadenia a pri hlasovaní sa zobrazí meno kandidáta spolu s aktiváciou LED a bzučiaka.

Poznámka: Navrhovaný projekt je vypracovaný iba na vzdelávacie účely a nie je určený na skutočné volebné účely.



Elektronické hlasovacie prístroje sú implementované s cieľom urýchliť volebný proces a znížiť spotrebu papiera a tieto dôvody nepriamo znižujú náklady spojené s voľbami.

Elektronické hlasovacie prístroje poskytujú vynikajúce zabezpečenie pred tradičnou metódou hlasovania.

Preprava týchto hromadných volebných urien je riskantná ako preprava kompaktných strojov, pri ktorých podvody so zachytením vozidla nemôžu zmeniť údaje v elektronickom hlasovacom prístroji EVM, aj keď sú schopné zachytiť vozidlo.

Niektoré krajiny prejavujú záujem o EVM vyrobené v Indii z dôvodu vyššej bezpečnosti. Krajiny ako USA sa pri voľbách stále držia tradičnej metódy hlasovania založenej na hlasovaní z dôvodu vyššieho rizika hacknutia a zmeny volebných údajov.

Čo teda zaistilo, že Indovia vytvorili EVM bezpečnejšie? No, v USA sme hlasovacie prístroje načítali s operačným systémom Windows a prepojili ich so servermi, aby bolo počítanie hlasov ľahké. To otvára hackerom veľa medzier v zmene volebných údajov.

Indické EVM sú samostatné zariadenia a nie sú pripojené k internetu alebo serverom. Na spočítanie hlasov sú stroje prevedené do počítacej kabíny, kde budú vyhlásené výsledky a žiadny prostredník.

Navrhovaný projekt je navrhnutý s podobnou funkčnosťou ako indické EVM, je však vykonaných veľa úprav.

Poďme teraz k konštrukčným detailom projektu.

Rozloženie obvodu:

Diagram usporiadania EVM

Navrhovaný obvod EVM môže ubytovať iba 6 kandidátov. K dispozícii je ovládacie tlačidlo podobné riadiacej jednotke v skutočných EVM. Po tom, ako osoba odovzdá svoj hlas, sú hlasovacie lístky deaktivované.

Tlačidlá hlasovacích lístkov sa znova aktivujú až po stlačení ovládacieho tlačidla. Ovládacie tlačidlo bude umiestnené v blízkosti zodpovednej osoby, ktorá riadi volebný stánok.

Po hlasovaní je osoba aktivovaná LED a bzučiakom. Osoba môže tiež potvrdiť hlas, ktorému odovzdala hlas, na displeji sa na niekoľko sekúnd zobrazí meno kandidáta alebo strana. Táto funkcia nie je stále prítomná v skutočných EVM.

Schematický diagram:

Pripojiteľnosť zobrazujúca Arduino:




Obvod Arduino EVM na zobrazovanie konektivity

Okruh je rozdelený na dve časti, aby nedošlo k zámene pri duplikovaní projektu. Vyššie uvedený obvod popisuje zapojenie medzi LCD displejom a Arduino. Nastavením variabilného odporu dosiahnete optimálny kontrast.

Obvod elektronického hlasovacieho stroja s modulom SD karty a Arduino

Tu je zvyšok obvodu pozostávajúci z 9V batérie, vypínača, siedmich tlačidiel, LED, bzučiaka a čo je dôležitejšie, modulu SD karty.

SD karta uloží dáta okamžite po odovzdaní hlasu. Po skončení volieb sa karta SD vloží do počítača, ktorý deklaruje počet hlasov a výsledok.

Navrhovaný dizajn môže zaznamenať až 4 294 967 295 (čo je viac ako 4 miliardy) hlasov na kandidáta a 25 769 803 770 (viac ako 25 miliárd, čo je viac ako trojnásobok súčasnej svetovej populácie) hlasov na stroj a stále je viac ako 99,9% SD karta prázdna. .

To je oveľa efektívnejšie ako skutočné EVM, ktoré môžu zaznamenať 3 840 hlasov 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 obrovský program.

Ako pracovať s týmto obvodom EVM:

• Zapnite stroj, potvrdí pípnutím, že je všetko v poriadku. Ak stroj nie je v poriadku, rýchlo pípne a na displeji LCD zobrazí chybové hlásenie.
• Stlačte ovládacie tlačidlo, teraz je pripravené na zaznamenanie jedného hlasu.
• Hneď ako sa hlas zaznamená, aktivuje sa LED a na sekundu pípne a na niekoľko sekúnd sa zobrazí meno kandidáta, ktorému ste dali hlas.
• Ak chcete zaznamenať ďalší hlas, musíte znova stlačiť ovládacie tlačidlo. Pri každom stlačení ovládacieho tlačidla bzučiak vydá 3 krátke pípnutia.
• Toto musí pokračovať až do hlasovania posledného voliča. Po hlasovaní nie je potrebné stlačiť ovládacie tlačidlo.
• Po odovzdaní posledného hlasu by malo byť zariadenie okamžite vypnuté pomocou vypínača a karta SD by mala byť vybratá. Takže nebudú zmenené žiadne údaje.
• Pripojte SD kartu k počítaču a uvidíte 6 textových súborov, ako je uvedené nižšie:

Výsledok karty SD uložený v počítači

Otvorením spisu sa zobrazí meno kandidáta a počet hlasov, ako je uvedené nižšie:

Autorský prototyp:

Ilustrácia modulu SD karty:

Poznámka 1: Akékoľvek prerušenie napájania vynuluje počet hlasov.
Poznámka 2: Zmeňte prosím meno kandidáta v programe.
String Party1 = 'MODI'
String Party2 = 'TRUMP'
String Party3 = 'PUTIN' // Sem vložte mená kandidátov.
String Party4 = 'Abdul Kalam'
String Party5 = 'Girish'
String Party6 = 'Swagatam'
Poznámka 3: Ak sa nehlasuje s určitou stranou / kandidátom, textový súbor sa na SD karte nezobrazí.

Aktualizácia vyššie uvedeného dizajnu

Túto konkrétnu inovovanú verziu projektu elektronického hlasovacieho zariadenia požadoval Sumesh chourasia, ktorý je vášnivým čitateľom tejto webovej stránky.

Tento projekt je vylepšením elektronického hlasovacieho zariadenia, ktoré je vysvetlené vyššie. Hlavnou nevýhodou vyššie uvedeného EVM (Electronic Voting Machine) bol výsledok, ktorý nebolo možné zobraziť na 16 x 2 LCD displeji, ale je ho možné sledovať iba na počítači.

V tomto projekte zostrelíme spomínaný drawback a s novo navrhnutým dizajnom si môžeme okamžite pozrieť výsledok 6 kandidátov na LCD displeji.

Problémy, s ktorými sme sa stretli:

Všetky vstupné / výstupné piny (Arduino) predchádzajúceho projektu EVM boli využité displejom 16 x 2, modulom SD karty, hlasovacími tlačidlami, ovládacím tlačidlom a bzučiakom. Už nezostáva priestor na pripojenie žiadneho nového tlačidla.

Po nejakom výskume sme zistili, že akékoľvek I / O piny je možné kedykoľvek zmeniť na výstup na vstup a naopak.

Po dôkladnom pozorovaní sme ako tlačidlo uloženia vybrali pin LED / bzučiak. Teraz je tento pin naprogramovaný ako vstup (tlačidlo uloženia), tak aj výstup (bzučiak).

Všimnite si, že pin save / bzučiak je priradený v ktoromkoľvek zo stavov okamžite, t. J. Na výstup alebo na vstup.

Obvod:

Pripojenie LCD k Arduinu:

Stačí sa pripojiť podľa predchádzajúcich schém a použiť 10K potenciometer na nastavenie kontrastu sledovania. Zvyšok obvodu je zrejmý.

S1 až S6 sú hlasovacie tlačidlá, prostredníctvom ktorých voliči vstupujú do výberu. Tlačidlo na uloženie a kontrolu musí byť držané ďalej od volebnej jednotky (pod kontrolou poverenej volebnej miestnosti).

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

Ako obsluhovať tento elektronický hlasovací prístroj:

  • Po dokončení nastavenia hardvéru nahrajte kód s vašimi menami kandidátov.
  • Zapnite stroj, ak je všetko v poriadku, vydá dlhé pípnutie.
  • Teraz stlačte ovládacie tlačidlo a teraz môže zaznamenať jeden hlas.
  • Po každom hlasovaní musí byť ovládacie tlačidlo stlačené raz.
  • Po odovzdaní posledného hlasu stlačte tlačidlo Uložiť, čím sa uložia výsledky a zobrazí sa výzva na odpojenie napájacieho zdroja (aby ste si mohli výsledky prezrieť súkromne).
  • Znova pripojte zdroj, automaticky sa začnú zobrazovať výsledky. Ak kandidát nezískal žiadny hlas, zobrazí sa „null“.
  • Ak chcete uskutočniť ďalšie voľby, musíte naformátovať kartu SD / odstrániť všetky súbory vygenerované týmto EVM.

Upozorňujeme, že tento EVM vyžaduje neprerušovaný zdroj napájania, akékoľvek prerušenie vynuluje počet hlasov.

Napíšte mená kandidátov do kódu (maximálne 16 písmen):

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

String Party1 = 'MODI'

String Party2 = 'TRUMP'

String Party3 = 'PUTIN' // Sem vložte mená kandidátov.

String Party4 = 'Abdul Kalam'

String Party5 = 'Girish'

String Party6 = 'Swagatam'

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

Tým je projekt uzavretý. Ak máte akékoľvek otázky týkajúce sa tohto projektu, neváhajte ich vyjadriť v sekcii komentárov, môžete dostať rýchlu odpoveď.




Dvojica: Obvod snímača vody v nádrži automobilu Ďalej: 3 polovodičové jednoduché IC 220V nastaviteľné napájacie obvody