Elektroninis balsavimo aparatas su SD kortelių moduliu

Išbandykite Mūsų Instrumentą, Kaip Pašalinti Problemas





Šiame įraše mes sukursime elektroninio balsavimo automato grandinę, naudodami „Arduino“ ir SD kortelių modulį, kur rinkimų duomenys saugomi SD kortelėje.

Iki



ATNAUJINTI:

Ši grandinė buvo patobulinta iki patobulintos versijos, kurioje rezultatus galima peržiūrėti per pridedamą LCD ekraną. Išsamią informaciją galite rasti įrašo apačioje.

Naudojant 16x2 LCD ekraną

16 x 2 ekrane rodoma balsavimo mašinos būsena, o kai atiduosite savo balsą, bus rodomas kandidato vardas kartu su šviesos diodo ir garsinio signalo įjungimu.



Pastaba: siūlomas projektas yra skirtas tik švietimo tikslams ir nėra skirtas realiam rinkimų naudojimui.

Elektroninės balsavimo mašinos yra įdiegtos, kad paspartintų rinkimų procesą ir sumažintų naudojimo popierių, todėl šios priežastys netiesiogiai sumažina su rinkimais susijusias išlaidas.

Elektroninės balsavimo mašinos užtikrina aukštesnį saugumą prieš tradicinį popierinį balsavimo būdą.

Transportuoti šias birias rinkimų dėžes yra rizikinga, nei gabenti kompaktiškas mašinas, kur sukčiavus transporto priemonėms negalima pakeisti EVM (elektroninio balsavimo aparato) duomenų, net jei jis gali užfiksuoti transporto priemonę.

Kai kurios šalys domisi Indijos pagamintais EVM dėl aukščiausio lygio saugumo. Tokios šalys kaip JAV savo rinkimuose vis dar laikosi tradicinio popierinio balsavimo metodo dėl didesnės įsilaužimo ir rinkimų duomenų pakeitimo rizikos.

Taigi, kas padarė indą, kad EVM būtų saugesni? Na, JAV padarė balsavimo mašinas, pakrautas su „Windows“ operacine sistema ir sujungtas su serveriais, kad būtų lengva suskaičiuoti balsus. Tai atveria daugybę spragų hakeriams pakeisti rinkimų duomenis.

Indijoje pagaminti EVM yra atskiri įrenginiai ir neprijungti prie interneto ar serverių. Balsų skaičiavimui mašinos pernešamos į balsų skaičiavimo kabiną, kur bus paskelbti rezultatai, o vidutinio žmogaus nebus.

Siūlomas projektas sukurtas panašiai kaip Indijos EVM funkcionalumas, tačiau yra atlikta daug modifikacijų.

Dabar pereikime prie konstrukcinių projekto detalių.

Grandinės išdėstymas:

EVM maketo schema

Siūlomoje EVM grandinėje gali dalyvauti tik 6 kandidatai. Valdymo mygtukas yra panašus į realių EVM valdymo bloką. Asmeniui atidavus balsą, balsavimo mygtukai išjungiami.

Balsavimo mygtukai vėl įjungiami tik paspaudus valdymo mygtuką. Valdymo mygtukas bus šalia atsakingo asmens, kuris valdo rinkimų kabiną.

Kai asmuo atidavė balsą, jis / ji bus patvirtintas įsijungus šviesos diodą ir garsinį signalą. Asmuo taip pat gali patvirtinti balsą, kurį atidavė ekrane, per kelias sekundes bus rodomas kandidato vardas arba partijos pavadinimas. Ši funkcija vis dar nėra tikrose EVM.

Schema:

„Arduino“, rodantis ryšį:




„Arduino“ EVM grandinė, skirta rodyti ryšį

Grandinė yra padalinta į dvi dalis, kad būtų išvengta painiavos, kartojant projektą. Pirmiau pateiktoje grandinėje aprašytas laidas tarp LCD ekrano ir „Arduino“. Norėdami sureguliuoti optimalų kontrastą, sureguliuokite kintamą rezistorių.

Elektroninė balsavimo automato grandinė su SD kortelės moduliu ir „Arduino“

Čia yra likusi grandinė, kurią sudaro 9 V akumuliatorius, jungiklis, septyni mygtukai, šviesos diodas, garsinis signalas ir dar svarbiau SD kortelės modulis.

Atidavus balsą, SD kortelė išsaugos duomenis iškart. Pasibaigus rinkimams, SD kortelė įdėta į kompiuterį, kad būtų deklaruotas balsų skaičius ir rezultatas.

Siūlomas dizainas gali užregistruoti iki 4 294 967 295 (tai yra daugiau nei 4 mlrd.) Balsų vienam kandidatui ir 25 769 803 770 (daugiau nei 25 mlrd., Tai yra daugiau nei tris kartus daugiau nei dabartiniai pasaulio gyventojai) balsus už mašiną, o vis tiek daugiau nei 99,9% SD kortelė vis dar tuščia .

Tai yra daug efektyviau nei tikri EVM, kurie gali užregistruoti 3840 balsų už mašiną.

Programa:

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

……… Tai didžiulė programa.

Kaip valdyti šią EVM grandinę:

• Įjunkite mašiną, ji patvirtins pypsėjimu, nurodydama, kad viskas gerai. Jei mašina nėra gerai, ji greitai pypteli ir LCD ekrane parodo klaidos pranešimą.
• Paspauskite valdymo mygtuką, dabar jis yra pasirengęs įrašyti vieną balsą.
• Įrašius balsą, jis suaktyvins šviesos diodą ir sekundę pypsės bei porą sekundžių parodys kandidato, už kurį balsavai, vardą.
• Norėdami įrašyti kitą balsavimą, valdymo mygtuką reikia paspausti dar kartą. Kiekvieną kartą, kai paspaudžiamas valdymo mygtukas, garsinis signalas pasigirsta 3 trumpus pyptelėjimus.
• Tai turi būti tęsiama tol, kol paskutinis rinkėjas atiduos savo balsą. Po to, kai paskutinis rinkėjas balsuoja, nereikia spausti valdymo mygtuko.
• Atidavus paskutinį balsą, mašiną reikia nedelsiant išjungti naudojant išjungimo jungiklį ir išimti SD kortelę. Kad jokie duomenys nebūtų pakeisti.
• Prijunkite SD kortelę prie kompiuterio ir galite pamatyti 6 tekstinius failus, kaip parodyta žemiau:

SD kortelės rezultatas saugomas kompiuteryje

Atidarius failą bus parodytas kandidato vardas ir balsų skaičius, kaip parodyta žemiau:

Autoriaus prototipas:

SD kortelės modulio iliustracija:

1 pastaba: nutraukus maitinimą, balsų skaičius bus nulinis.
2 pastaba: Programoje pakeiskite kandidato vardą.
Styginių vakarėlis1 = „MODI“
Styginių vakarėlis2 = 'TRUMP'
String Party3 = 'PUTIN' // Čia įrašykite kandidatų vardus.
Styginių vakarėlis4 = 'Abdul Kalam'
Styginių vakarėlis5 = 'Girish'
Styginių vakarėlis6 = 'Swagatam'
3 pastaba: Jei tam tikrai partijai / kandidatui nebalsuojama, teksto failas nebus rodomas SD kortelėje.

Pirmiau minėto dizaino atnaujinimas

Šios konkrečios patobulintos elektroninio balsavimo mašinos projekto versijos paprašė Sumeshas chourasia, kuris yra aistringas šios svetainės skaitytojas.

Šis projektas yra aukščiau paaiškinto elektroninio balsavimo automato patobulinimas. Pagrindinis minėto EVM (elektroninio balsavimo aparato) trūkumas buvo tai, kad rezultato nebuvo galima matyti 16 x 2 skystųjų kristalų ekrane, tačiau jį galima matyti tik kompiuteryje.

Šiame projekte mes nušauksime minėtą atsiėmimą ir naujai pasiūlytu dizainu galime iškart pamatyti 6 kandidatų rezultatus LCD ekrane.

Sunkumai, su kuriais susidūrėme:

Visus ankstesnio EVM projekto įvesties / išvesties kaiščius („Arduino“) panaudojo 16 x 2 ekranas, SD kortelių modulis, balsavimo mygtukai, valdymo mygtukas ir garsinis signalas. Nebeliko vietos naujam mygtukui prijungti.

Atlikę keletą tyrimų, mes nustatėme, kad bet kurį įvesties / išvesties kaištį galima pakeisti į išvestį į įvestį ir atvirkščiai bet kuriuo metu.

Atidžiai stebėję, kaip išsaugojimo mygtuką pasirinkome LED / garso signalą. Dabar šis kaištis užprogramuotas kaip įvestis (išsaugojimo mygtukas) ir išvestis (zumeris).

Atkreipkite dėmesį, kad išsaugojimo / skambučio kaištis akimirksniu priskiriamas bet kuriai būsenai, t. Y. Išvesties ar įvesties.

Grandinė:

LCD ir „Arduino“ ryšys:

Tiesiog prijunkite pagal ankstesnes schemas ir naudokite 10K potenciometrą, kad sureguliuotumėte žiūrėjimo kontrastą, likusi grandinė yra savaime suprantama.

Nuo S1 iki S6 yra balsavimo mygtukai, per kuriuos rinkėjai pateikia savo pasirinkimą. Išsaugojimo ir valdymo mygtukas turi būti laikomas atokiau nuo rinkimų biuro (kontroliuojamas apklausos kabinoje).

Nauja programa:
//--------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------//

Kaip valdyti šį elektroninį balsavimo aparatą:

  • Atlikę aparatinės įrangos sąranką, įkelkite kodą su norimais kandidatų vardais.
  • Įjunkite mašiną, jei viskas gerai, tai ilgai pypsės.
  • Dabar paspauskite valdymo mygtuką ir dabar jis galės įrašyti vieną balsą.
  • Po kiekvieno balsavimo valdymo mygtuką reikia paspausti vieną kartą.
  • Atidavus paskutinį balsą, paspauskite išsaugojimo mygtuką, kad išsaugotumėte rezultatus ir paragintumėte atjungti maitinimo šaltinį (kad galėtumėte peržiūrėti rezultatus privačiai).
  • Prijunkite maitinimą iš naujo, tada rezultatai bus automatiškai rodomi. Jei kandidatas negavo jokio balso, rodoma „nulis“.
  • Norėdami surengti kitus rinkimus, turite suformatuoti SD kortelę / ištrinti visus šio EVM sugeneruotus failus.

Atkreipkite dėmesį, kad šiam EVM reikia nepertraukiamo maitinimo. Bet koks pertraukimas nulems balsų skaičių.

Kode nurodykite kandidatų vardus (daugiausia 16 raidžių):

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

Styginių vakarėlis1 = 'MODI'

Styginių vakarėlis2 = 'TRUMP'

String Party3 = 'PUTIN' // Čia įrašykite kandidatų vardus.

Styginių vakarėlis4 = 'Abdul Kalam'

Styginių vakarėlis5 = 'Girish'

Styginių vakarėlis6 = 'Swagatam'

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

Tuo projektas baigtas. Jei turite klausimų dėl šio projekto, nedvejodami išsakykite komentarų skyriuje, galite gauti greitą atsakymą.




Pora: Automobilių bako vandens jutiklio grandinė Kitas: 3 kietojo kūno vienos IC 220V reguliuojamos maitinimo grandinės