Elektroniczna maszyna do głosowania z modułem karty SD

Wypróbuj Nasz Instrument Do Eliminowania Problemów





W tym poście zamierzamy zbudować obwód dla Elektronicznej Maszyny do Głosowania z wykorzystaniem Arduino i modułu karty SD, gdzie dane wyborcze są przechowywane na karcie SD.

Przez



AKTUALIZACJA:

Ten obwód został zaktualizowany do ulepszonej wersji, w której wyniki można oglądać na dołączonym wyświetlaczu LCD, szczegóły można znaleźć w dolnej części postu

Korzystanie z wyświetlacza LCD 16x2

Wyświetlacz 16 x 2 pokazuje stan automatu do głosowania, a kiedy oddasz głos, zostanie wyświetlona nazwa kandydata wraz z włączeniem diody LED i brzęczyka.



Uwaga: Proponowany projekt ma charakter wyłącznie edukacyjny i nie jest przeznaczony do rzeczywistego wykorzystania wyborczego.

Elektroniczne maszyny do głosowania są wdrażane w celu przyspieszenia procesu wyborczego i zmniejszenia zużycia papieru, a te przyczyny pośrednio zmniejszają wydatki związane z wyborami.

Elektroniczne maszyny do głosowania zapewniają najwyższe bezpieczeństwo przed tradycyjną metodą głosowania papierowego.

Transport tych zbiorczych urn wyborczych jest ryzykowny niż transport kompaktowych maszyn, w których oszustwa związane z przechwyceniem pojazdów nie mogą zmienić danych w EVM (elektronicznej maszynie do głosowania), nawet jeśli są w stanie przechwycić pojazd.

Niektóre kraje wykazują zainteresowanie produktami EVM wyprodukowanymi w Indiach ze względu na najwyższy poziom bezpieczeństwa. Kraje takie jak USA nadal trzymają się tradycyjnej papierowej metody głosowania podczas wyborów ze względu na większe ryzyko włamania i zmiany danych wyborczych.

Więc co sprawiło, że Hindusi uczyniły EVM bardziej bezpiecznymi? Cóż, w USA maszyny do głosowania są załadowane systemem operacyjnym Windows i połączone w sieć z serwerami, aby ułatwić liczenie głosów. Otwiera to wiele luk dla hakerów, którzy mogą zmienić dane wyborcze.

Indyjskie EVM są samodzielnymi urządzeniami i nie są podłączone do internetu ani serwerów. W celu liczenia głosów maszyny są przenoszone do kabiny liczącej, gdzie ogłaszane są wyniki, bez pośrednika.

Proponowany projekt jest zaprojektowany z podobną funkcjonalnością jak indyjskie EVM, ale wprowadzono wiele modyfikacji.

Przejdźmy teraz do szczegółów konstrukcyjnych projektu.

Układ obwodu:

Schemat układu EVM

Proponowany obwód EVM może pomieścić tylko 6 kandydatów. Przycisk sterujący jest podobny do jednostki sterującej w prawdziwych EVM. Po oddaniu głosu przez osobę przyciski do głosowania są nieaktywne.

Przyciski do głosowania są ponownie włączane dopiero po naciśnięciu przycisku sterującego. Przycisk sterujący zostanie umieszczony w pobliżu osoby kierującej budką wyborczą.

Po oddaniu głosu osoba zostaje potwierdzona aktywacją diody LED i brzęczyka. Osoba może również potwierdzić głos, na kogo oddała głos na wyświetlaczu, przez kilka sekund pokaże się nazwisko kandydata lub nazwa partii. Ta funkcja nie jest nadal obecna w prawdziwych EVM.

Schemat:

Arduino wyświetlające łączność:




Obwód Arduino EVM do wyświetlania łączności

Obwód jest podzielony na dwie części, aby uniknąć nieporozumień podczas powielania projektu. Powyższy obwód opisuje okablowanie między wyświetlaczem LCD a arduino. Wyreguluj rezystor zmienny, aby uzyskać optymalny kontrast.

Elektroniczny obwód maszyny do głosowania z modułem karty SD i Arduino

Oto reszta obwodu składająca się z baterii 9V, wyłącznika, siedmiu przycisków, diody LED, brzęczyka i co ważniejsze modułu karty SD.

Karta SD zapisze dane natychmiast po oddaniu głosu. Po zakończeniu wyborów do komputera wkłada się kartę SD, aby zadeklarować liczbę i wynik głosów.

Proponowany projekt może zarejestrować do 4 294 967 295 (czyli ponad 4 miliardy) głosów na kandydata i 25 769 803770 (ponad 25 miliardów, czyli ponad trzykrotnie więcej niż obecna populacja świata) głosów na maszynę, a nadal ponad 99,9% karty SD jest nadal pusta .

Jest to o wiele bardziej wydajne niż prawdziwe EVM, które mogą rejestrować 3840 głosów na maszynę.

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

Jak obsługiwać ten obwód EVM:

• Włącz maszynę, potwierdzi to sygnałem dźwiękowym wskazującym, że wszystko jest w porządku. Jeśli urządzenie nie działa prawidłowo, emituje szybki sygnał dźwiękowy i wyświetla komunikat o błędzie na wyświetlaczu LCD.
• Naciśnij przycisk sterowania, teraz jest gotowy do zarejestrowania jednego głosu.
• Gdy głosowanie zostanie nagrane, włączy się dioda LED i wyda sygnał dźwiękowy na sekundę oraz wyświetli nazwisko kandydata, na którego głosowałeś przez kilka sekund.
• Aby nagrać następny głos, należy ponownie nacisnąć przycisk sterujący. Za każdym naciśnięciem przycisku sterującego brzęczyk wydaje 3 krótkie dźwięki.
• Czynność tę należy kontynuować do momentu oddania głosu przez ostatniego wyborcę. Nie ma potrzeby wciskania przycisku sterującego po ostatnim głosowaniu kastowym.
• Po ostatnim głosowaniu należy natychmiast wyłączyć urządzenie wyłącznikiem i wyjąć kartę SD. Aby żadne dane nie zostały zmienione.
• Podłącz kartę SD do komputera i zobaczysz 6 plików tekstowych, jak pokazano poniżej:

Wynik z karty SD przechowywany w komputerze

Otwarcie pliku spowoduje wyświetlenie nazwiska kandydata i liczby głosów, jak pokazano poniżej:

Prototyp autora:

Ilustracja modułu karty SD:

Uwaga 1: Każda przerwa w zasilaniu zresetuje licznik głosów do zera.
Uwaga 2: Proszę zmienić nazwisko kandydata w programie.
String Party1 = 'MODI'
String Party2 = 'TRUMP'
String Party3 = 'PUTIN' // Tutaj umieść nazwy kandydatów.
String Party4 = 'Abdul Kalam'
String Party5 = 'Girish'
String Party6 = 'Swagatam'
Uwaga 3: Jeśli nie zostanie oddany żaden głos na określoną partię / kandydata, plik tekstowy nie pojawi się na karcie SD.

Uaktualnienie powyższego projektu

Ta konkretna, ulepszona wersja projektu elektronicznego automatu do głosowania została zamówiona przez Sumesh Chourasia, który jest zapalonym czytelnikiem tej witryny.

Ten projekt jest ulepszeniem w stosunku do opisanej powyżej elektronicznej maszyny do głosowania. Główną wadą powyższego EVM (Electronic Voting Machine) było to, że wynik nie był widoczny na wyświetlaczu LCD 16 x 2, ale można go było oglądać tylko na komputerze.

W tym projekcie zamierzamy zlikwidować wspomnianą wadę, a dzięki nowo zaproponowanemu projektowi możemy natychmiast zobaczyć wynik 6 kandydatów na wyświetlaczu LCD.

Trudności, które napotkaliśmy:

Wszystkie piny wejścia / wyjścia (Arduino) z poprzedniego projektu EVM zostały wykorzystane przez wyświetlacz 16 x 2, moduł karty SD, przyciski głosowania, przycisk sterujący i brzęczyk. Nie ma już miejsca na podłączenie nowego przycisku.

Po pewnych badaniach stwierdziliśmy, że dowolne piny I / O można w dowolnym momencie zamienić na wyjście na wejście i odwrotnie.

Po uważnej obserwacji wybraliśmy diodę / pin brzęczyka jako przycisk zapisu. Teraz ten pin zaprogramowany jako wejście (przycisk zapisywania) i wyjście (brzęczyk).

Zwróć uwagę, że pin zapisywania / brzęczyka jest przypisany do dowolnego stanu w danej chwili, tj. Wyjścia lub wejścia.

Obwód:

Połączenie LCD z Arduino:

Wystarczy podłączyć zgodnie z wcześniejszymi schematami i użyć potencjometru 10K do regulacji kontrastu widoku, reszta obwodu jest oczywista.

S1 do S6 to przyciski do głosowania, za pomocą których wyborcy wprowadzają swój wybór. Przycisk zapisywania i kontroli musi być trzymany z dala od jednostki głosowania (pod kontrolą odpowiedzialnego za budkę wyborczą).

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

Jak obsługiwać ten elektroniczny automat do głosowania:

  • Po zakończeniu konfiguracji sprzętu prześlij kod z nazwiskami pożądanych kandydatów.
  • Włącz maszynę, jeśli wszystko jest w porządku, wyda długi sygnał dźwiękowy.
  • Teraz naciśnij przycisk sterujący, a teraz może nagrać pojedynczy głos.
  • Po każdym głosowaniu należy raz nacisnąć przycisk sterujący.
  • Po oddaniu ostatniego głosu naciśnij przycisk „Zapisz”, co spowoduje zapisanie wyników i wyświetlenie monitu o odłączenie zasilania (tak, aby można było obejrzeć wyniki prywatnie).
  • Podłącz ponownie zasilanie, automatycznie zacznie wyświetlać wyniki. Jeśli kandydat nie uzyskał żadnego głosu, wyświetla się „null”.
  • Aby przeprowadzić kolejne wybory, musisz sformatować kartę SD / usunąć wszystkie pliki wygenerowane przez ten EVM.

Należy pamiętać, że ten EVM wymaga nieprzerwanego zasilania, każda przerwa spowoduje, że liczba głosów spadnie do zera.

Proszę wpisać nazwiska kandydatów w kodzie (maksymalnie 16 liter):

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

String Party1 = 'MODI'

String Party2 = 'TRUMP'

String Party3 = 'PUTIN' // Tutaj umieść nazwy kandydatów.

String Party4 = 'Abdul Kalam'

String Party5 = 'Girish'

String Party6 = 'Swagatam'

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

Na tym kończy się projekt, jeśli masz jakiekolwiek pytania dotyczące tego projektu, możesz śmiało je wyrazić w sekcji komentarzy, możesz otrzymać szybką odpowiedź.




Poprzedni: Obwód czujnika wody w zbiorniku samochodu Dalej: 3 półprzewodnikowe, pojedyncze, regulowane obwody zasilania 220 V IC