Aparat de vot electronic cu modul SD Card

Încercați Instrumentul Nostru Pentru Eliminarea Problemelor





În acest post vom construi un circuit pentru o mașină de vot electronic folosind modulul Arduino și cardul SD, unde datele alegerilor sunt stocate în cardul SD.

De



ACTUALIZAȚI:

Acest circuit a fost actualizat la o versiune îmbunătățită în care rezultatele pot fi vizualizate pe un ecran LCD atașat, puteți obține detaliile în secțiunea de jos a postării

Utilizarea ecranului LCD 16x2

Un afișaj de 16 x 2 arată starea aparatului de vot și, atunci când votați, numele candidatului va fi afișat împreună cu activarea LED-ului și a sonorului.



Notă: Proiectul propus este realizat numai cu scop educativ și nu este destinat utilizării reale a alegerilor.

Aparatele de votare electronice sunt implementate pentru a accelera procesul electoral și pentru a reduce hârtia de utilizare, iar aceste motive reduc indirect cheltuielile legate de alegeri.

Mașinile de votare electronice oferă o securitate superioară înainte de metoda tradițională de vot pe hârtie.

Transportul urnelor de vot în vrac este riscant decât transportul mașinilor compacte, în cazul în care fraudele de captură a vehiculelor nu pot modifica datele din EVM (Mașina de vot electronic), chiar dacă cineva este capabil să capteze vehiculul.

Unele țări manifestă interes pentru EVM-uri fabricate în India datorită securității superioare. Țări precum SUA rămân în continuare la metoda tradițională de vot pe hârtie pentru alegerile lor din cauza riscului mai mare de piratare și de modificare a datelor electorale.

Deci, ce a făcut indianul să facă EVM-urile mai sigure? Ei bine, SUA au făcut mașini de vot încărcate cu sistemul de operare Windows și conectate în rețea cu servere pentru a face votul mai ușor. Acest lucru deschide o mulțime de lacune pentru hackeri pentru a modifica datele alegerilor.

EVM-urile fabricate în indian sunt dispozitive independente și nu sunt conectate la internet sau la servere. Pentru numărarea voturilor, mașinile sunt transportate la standul de numărare, unde rezultatele vor fi declarate și nu există un mijloc.

Proiectul propus este proiectat cu funcționalități similare EVM-urilor indiene, dar există multe modificări făcute.

Acum să trecem la detaliile de construcție ale proiectului.

Aspectul circuitului:

Diagrama aspectului EVM

Circuitul EVM propus poate găzdui doar 6 candidați. Un buton de control este furnizat similar cu unitatea de control în EVM-uri reale. După ce o persoană își casează votul, butoanele de scrutin sunt dezactivate.

Butoanele de scrutin sunt activate din nou numai după apăsarea butonului de control. Butonul de control va fi plasat lângă persoana responsabilă care controlează cabina electorală.

După ce o persoană a votat, acesta este recunoscut cu activarea LED-ului și a sonorului. Persoana poate confirma, de asemenea, votul căruia i-a exprimat în afișaj, va afișa numele candidatului sau numele partidului pentru câteva secunde. Această caracteristică nu este încă prezentă în EVM-uri reale.

Diagramă schematică:

Arduino afișează conectivitate:




Circuit Arduino EVM pentru afișarea conectivității

Circuitul este împărțit în două părți pentru a evita confuziile în timpul duplicării proiectului. Circuitul de mai sus descrie cablarea dintre afișajul LCD și arduino. Reglați rezistorul variabil pentru un contrast optim.

Circuit electronic al mașinii de vot cu modul card SD și Arduino

Iată restul circuitului format din baterie de 9V, comutator, șapte butoane, LED, sonerie și, mai important, modul card SD.

Cardul SD va stoca datele imediat după vot. După încheierea alegerilor, cardul SD este introdus pe un computer pentru a declara numărul de voturi și rezultatul.

Designul propus poate înregistra până la 4.294.967.295 (adică peste 4 miliarde) de voturi pe candidat și 25.769.803.770 (mai mult de 25 de miliarde, ceea ce reprezintă mai mult de trei ori populația actuală a lumii) voturi pe mașină și încă mai mult de 99,9% cardul SD este încă gol .

Acest lucru este mult mai eficient decât EVM-urile reale, care pot înregistra 3840 de voturi pe mașină.

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

……… Acesta este un program masiv.

Cum se operează acest circuit EVM:

• Porniți aparatul, acesta va confirma cu un semnal sonor, indicând că totul este în regulă. Dacă aparatul nu este bine, acesta emite un bip rapid și afișează mesajul de eroare pe ecranul LCD.
• Apăsați butonul de control, acum este gata să înregistreze un vot.
• Odată înregistrat votul, acesta va activa LED-ul și va emite un bip pentru o secundă și va afișa numele candidatului căruia l-ați votat timp de câteva secunde.
• Pentru a înregistra următorul vot, butonul de control trebuie apăsat din nou. De fiecare dată când este apăsat butonul de comandă, soneria emite 3 bipuri scurte.
• Acest lucru trebuie continuat până când ultimul alegător și-a exprimat votul. Nu este nevoie să apăsați butonul de control după ce ultimul votant a castigat votul.
• După ce s-a emis ultimul vot, aparatul trebuie oprit imediat folosind comutatorul oprit și cardul SD ar trebui îndepărtat. Pentru a nu se modifica datele.
• Conectați cardul SD la un computer și puteți vedea 6 fișiere text așa cum se arată mai jos:

Rezultatul cardului SD stocat în computer

Deschiderea unui dosar va afișa numele candidatului și numărul de voturi, după cum se arată mai jos:

Prototipul autorului:

Ilustrarea modulului cardului SD:

Notă 1: Orice întrerupere a alimentării cu energie va reseta numărul de voturi la zero.
Nota 2: Vă rugăm să schimbați numele candidatului în program.
String Party1 = „MODI”
String Party2 = 'TRUMP'
String Party3 = 'PUTIN' // Plasați aici numele candidatelor.
String Party4 = „Abdul Kalam”
String Party5 = „Girish”
String Party6 = „Swagatam”
Notă 3: Dacă nu se votează un anumit partid / candidat, fișierul text nu va apărea pe cardul SD.

Actualizarea designului de mai sus

Această versiune actualizată specială a proiectului mașinii de vot electronic a fost solicitată de Sumesh chourasia, care este un cititor pasionat al acestui site web.

Acest proiect este o îmbunătățire față de mașina de vot electronic explicată mai sus. Principalul dezavantaj al EVM (Mașină de votare electronică) de mai sus a fost că rezultatul nu a putut fi vizualizat pe afișajul LCD de 16 x 2, dar poate fi vizualizat doar pe computer.

În acest proiect vom trage în jos menționat retrage și cu noul proiect propus putem vizualiza instantaneu rezultatul celor 6 candidați pe ecranul LCD.

Dificultăți pe care le-am întâmpinat:

Toți pinii de intrare / ieșire (ai Arduino) ai proiectului EVM anterior au fost utilizați de afișajul 16 x 2, modulul cardului SD, butoanele de vot, butonul de control și buzzer. Nu mai rămâne spațiu pentru conectarea vreunui buton nou.

După unele cercetări, am constatat că orice pin I / O poate fi schimbat în ieșire în intrare și invers în orice moment.

După o observație atentă, am ales pinul LED / buzzer ca buton de salvare. Acum acest pin programat atât ca intrare (buton de salvare), cât și ca ieșire (buzzer).

Rețineți că pinul de salvare / buzzer este atribuit oricărei stări într-un moment, adică ieșire sau intrare.

Circuitul:

Conexiune LCD la Arduino:

Conectați-vă conform schemelor anterioare și utilizați potențiometrul de 10K pentru reglarea contrastului de vizualizare, restul circuitului se explică de la sine.

S1 - S6 sunt butoane de vot prin care alegătorii își introduc alegerea. Butonul de salvare și control trebuie ținut departe de unitatea de votare (sub controlul cabinei de votare în sarcină).

Program nou:
//--------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------//

Cum se operează acest aparat de vot electronic:

  • Odată cu configurarea hardware finalizată, încărcați codul cu numele candidatului dorit.
  • Porniți mașina, dacă totul este în regulă, va emite un semnal sonor lung.
  • Acum apăsați butonul de control și acum poate înregistra un singur vot.
  • După fiecare vot, butonul de control trebuie apăsat o singură dată.
  • Odată ce ultimul vot este exprimat, apăsați butonul de salvare pentru a salva rezultatele și vă va solicita să deconectați sursa de alimentare (astfel încât să puteți vizualiza rezultatele în privat).
  • Reconectați alimentarea, aceasta va începe automat să afișeze rezultatele. Dacă un candidat nu a obținut niciun vot, acesta afișează „nul”.
  • Pentru a efectua alte alegeri, trebuie să formatați cardul SD / să ștergeți toate fișierele generate de acest EVM.

Vă rugăm să rețineți că acest EVM are nevoie de energie neîntreruptă, orice întrerupere va reduce numărul de voturi la zero.

Vă rugăm să scrieți numele candidaților în cod (maximum 16 litere):

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

String Party1 = „MODI”

String Party2 = 'TRUMP'

String Party3 = 'PUTIN' // Plasați aici numele candidatelor.

String Party4 = „Abdul Kalam”

String Party5 = „Girish”

String Party6 = „Swagatam”

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

Aceasta încheie proiectul, dacă aveți întrebări cu privire la acest proiect, nu ezitați să le exprimați în secțiunea de comentarii, este posibil să primiți un răspuns rapid.




Precedent: Circuitul senzorului de apă al rezervorului auto Următorul: 3 circuite de alimentare cu energie reglabile cu un singur IC în stare solidă