Ηλεκτρονικό μηχάνημα ψηφοφορίας με μονάδα κάρτας SD

Δοκιμάστε Το Όργανο Μας Για Την Εξάλειψη Των Προβλημάτων





Σε αυτήν την ανάρτηση πρόκειται να κατασκευάσουμε ένα κύκλωμα για ένα ηλεκτρονικό μηχάνημα ψηφοφορίας χρησιμοποιώντας τη μονάδα κάρτας Arduino και SD όπου τα εκλογικά δεδομένα αποθηκεύονται στην κάρτα SD.

Με



ΕΚΣΥΓΧΡΟΝΙΖΩ:

Αυτό το κύκλωμα έχει αναβαθμιστεί σε βελτιωμένη έκδοση στην οποία τα αποτελέσματα μπορούν να προβληθούν μέσω συνδεδεμένης οθόνης LCD, μπορείτε να λάβετε τις λεπτομέρειες στο κάτω μέρος της ανάρτησης

Χρησιμοποιώντας 16x2 LCD Dislay

Μια οθόνη 16 x 2 δείχνει την κατάσταση του μηχανήματος ψηφοφορίας και όταν ψηφίζετε, το όνομα του υποψηφίου θα εμφανίζεται μαζί με την ενεργοποίηση του LED και του βομβητή.



Σημείωση: Το προτεινόμενο έργο έχει σχεδιαστεί μόνο για εκπαιδευτικούς σκοπούς και δεν προορίζεται για πραγματική εκλογική χρήση.

Τα ηλεκτρονικά μηχανήματα ψηφοφορίας εφαρμόζονται για την επιτάχυνση της εκλογικής διαδικασίας και τη μείωση του χαρτιού χρήσης και αυτοί οι λόγοι μειώνουν έμμεσα τα έξοδα που σχετίζονται με τις εκλογές.

Τα ηλεκτρονικά μηχανήματα ψηφοφορίας παρέχουν ανώτερη ασφάλεια πριν από την παραδοσιακή μέθοδο ψηφοφορίας.

Η μεταφορά αυτών των χύδην κάλπη είναι επικίνδυνη από τη μεταφορά συμπαγών μηχανών, όπου οι απάτες κατά τη λήψη οχημάτων δεν μπορούν να αλλάξουν τα δεδομένα στο EVM (Ηλεκτρονική μηχανή ψηφοφορίας), παρόλο που κάποιος μπορεί να συλλάβει το όχημα.

Ορισμένες χώρες δείχνουν ενδιαφέρον για τα ΙΜΜ που κατασκευάζονται από την Ινδία λόγω της ανώτερης ασφάλειας. Χώρες όπως οι ΗΠΑ εξακολουθούν να ακολουθούν την παραδοσιακή μέθοδο ψηφοφορίας για τις εκλογές τους λόγω υψηλότερου κινδύνου παραβίασης και αλλαγής των εκλογικών δεδομένων.

Λοιπόν, τι έκανε τους Ινδούς να κάνουν τα EVM πιο ασφαλή; Λοιπόν, οι ΗΠΑ έκαναν μηχανήματα ψηφοφορίας φορτωμένα με λειτουργικό σύστημα παραθύρων και δικτυωμένα με διακομιστές για να διευκολύνουν την καταμέτρηση των ψήφων. Αυτό ανοίγει πολλά κενά για τους χάκερ να αλλάξουν τα δεδομένα των εκλογών.

Τα ΙΜΜ που κατασκευάζονται από την Ινδία είναι αυτόνομες συσκευές και δεν συνδέονται με Διαδίκτυο ή διακομιστές. Για τη μέτρηση των ψήφων, τα μηχανήματα μεταφέρονται στο θάλαμο μέτρησης, όπου τα αποτελέσματα θα δηλωθούν και δεν υπάρχει μέσος.

Το προτεινόμενο έργο έχει σχεδιαστεί με παρόμοια λειτουργικότητα Ινδικών EVM, αλλά, έχουν γίνει πολλές τροποποιήσεις.

Τώρα ας προχωρήσουμε σε κατασκευαστικές λεπτομέρειες του έργου.

Διάταξη κυκλώματος:

Διάγραμμα διάταξης EVM

Το προτεινόμενο κύκλωμα EVM μπορεί να φιλοξενήσει μόνο 6 υποψηφίους. Παρέχεται ένα κουμπί ελέγχου παρόμοιο με τη μονάδα ελέγχου σε πραγματικά EVM. Αφού ένα άτομο κάνει την ψήφο του, απενεργοποιούνται τα κουμπιά.

Τα κουμπιά ψηφοφορίας ενεργοποιούνται ξανά μόνο αφού πατήσετε το κουμπί ελέγχου. Το κουμπί ελέγχου θα τοποθετηθεί κοντά στον υπεύθυνο που ελέγχει το εκλογικό θάλαμο.

Αφού ένα άτομο ψηφίσει, αναγνωρίζεται με την ενεργοποίηση του LED και του βομβητή. Το άτομο μπορεί επίσης να επιβεβαιώσει την ψήφο στον οποίο έδωσε στην οθόνη, θα εμφανίσει το όνομα του υποψηφίου ή το όνομα του κόμματος για μερικά δευτερόλεπτα. Αυτή η δυνατότητα δεν υπάρχει ακόμα σε πραγματικά EVM.

Σχηματικό διάγραμμα:

Το Arduino εμφανίζει συνδεσιμότητα:




Κύκλωμα Arduino EVM για εμφάνιση συνδεσιμότητας

Το κύκλωμα χωρίζεται σε δύο μέρη για την αποφυγή σύγχυσης κατά την αναπαραγωγή του έργου. Το παραπάνω κύκλωμα περιγράφει την καλωδίωση μεταξύ της οθόνης LCD και του arduino. Ρυθμίστε τη μεταβλητή αντίσταση για βέλτιστη αντίθεση.

Κύκλωμα Ηλεκτρονικής Ψηφοφορίας με Μονάδα Κάρτας SD και Arduino

Εδώ είναι το υπόλοιπο κύκλωμα που αποτελείται από μπαταρία 9V, διακόπτη, επτά κουμπιά, LED, βομβητή και το πιο σημαντικό στοιχείο κάρτας SD.

Η κάρτα SD θα αποθηκεύει τα δεδομένα αμέσως μετά την ψηφοφορία. Μόλις τελειώσουν οι εκλογές, η κάρτα SD τοποθετείται σε έναν υπολογιστή για να δηλώσει τον αριθμό και το αποτέλεσμα των ψήφων.

Ο προτεινόμενος σχεδιασμός μπορεί να καταγράψει έως και 4.294.967.295 (που είναι πάνω από 4 δισεκατομμύρια) ψήφους ανά υποψήφιο και 25.769.803.770 (πάνω από 25 δισεκατομμύρια που είναι περισσότερες από τρεις φορές τον τρέχοντα παγκόσμιο πληθυσμό) ψήφους ανά μηχανή και ακόμη περισσότερη από 99,9% κάρτα SD είναι ακόμα άδεια .

Αυτό είναι πολύ πιο αποτελεσματικό από τα πραγματικά EVM που μπορούν να καταγράψουν 3840 ψήφους ανά μηχανή.

Πρόγραμμα:

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

……… Αυτό είναι ένα τεράστιο πρόγραμμα.

Πώς να χρησιμοποιήσετε αυτό το κύκλωμα EVM:

• Ενεργοποιήστε το μηχάνημα, θα αναγνωρίσει με ένα ηχητικό σήμα που δείχνει ότι όλα είναι καλά. Εάν το μηχάνημα δεν είναι σωστό, ηχεί γρήγορα και εμφανίζει το μήνυμα σφάλματος στην οθόνη LCD.
• Πατήστε το κουμπί ελέγχου, τώρα είναι έτοιμο να καταγράψει μία ψήφο.
• Μόλις καταγραφεί η ψηφοφορία, θα ενεργοποιηθεί το LED και θα ηχήσει για ένα δευτερόλεπτο και θα εμφανίσει το όνομα του υποψηφίου στον οποίο ψηφίσατε για μερικά δευτερόλεπτα.
• Για την καταγραφή της επόμενης ψηφοφορίας, το κουμπί ελέγχου πρέπει να πατηθεί ξανά. Κάθε φορά που πατάτε το κουμπί ελέγχου, ο βομβητής δίνει 3 σύντομα μπιπ.
• Αυτό πρέπει να συνεχιστεί έως ότου ψηφίσει ο τελευταίος ψηφοφόρος. Δεν χρειάζεται να πατήσετε το κουμπί ελέγχου μετά την τελευταία ψηφοφορία που ψηφίζει την ψηφοφορία.
• Μετά την τελευταία ψηφοφορία, το μηχάνημα θα πρέπει να απενεργοποιηθεί αμέσως χρησιμοποιώντας το διακόπτη απενεργοποίησης και η κάρτα SD πρέπει να αφαιρεθεί. Για να μην τροποποιηθούν δεδομένα.
• Συνδέστε την κάρτα SD σε έναν υπολογιστή και μπορείτε να δείτε 6 αρχεία κειμένου όπως φαίνεται παρακάτω:

Το αποτέλεσμα της κάρτας SD είναι αποθηκευμένο στον υπολογιστή

Το άνοιγμα ενός αρχείου θα εμφανίσει το όνομα του υποψηφίου και τον αριθμό των ψήφων, όπως φαίνεται παρακάτω:

Πρωτότυπο συγγραφέα:

Απεικόνιση της ενότητας κάρτας SD:

Σημείωση 1: Οποιαδήποτε διακοπή της τροφοδοσίας θα επαναφέρει τον αριθμό ψήφων στο μηδέν.
Σημείωση 2: Αλλάξτε το όνομα του υποψηφίου στο πρόγραμμα.
String Party1 = 'MODI'
String Party2 = 'TRUMP'
String Party3 = 'PUTIN' // Τοποθετήστε τα ονόματα των υποψηφίων εδώ.
String Party4 = 'Abdul Kalam'
String Party5 = 'Girish'
String Party6 = 'Swagatam'
Σημείωση 3: Εάν δεν δοθεί ψήφος σε ένα συγκεκριμένο κόμμα / υποψήφιο, το αρχείο κειμένου δεν θα εμφανίζεται στην κάρτα SD.

Αναβάθμιση του παραπάνω σχεδιασμού

Αυτή η συγκεκριμένη αναβαθμισμένη έκδοση του έργου ηλεκτρονικών μηχανών ψηφοφορίας ζητήθηκε από τον Sumesh chourasia, ο οποίος είναι άπληστος αναγνώστης αυτού του ιστότοπου.

Αυτό το έργο είναι μια βελτίωση σε σχέση με την ηλεκτρονική μηχανή ψηφοφορίας που εξηγείται παραπάνω. Το κύριο μειονέκτημα του παραπάνω EVM (Electronic Voting Machine) ήταν ότι το αποτέλεσμα δεν μπορούσε να προβληθεί στην οθόνη LCD 16 x 2, αλλά μπορεί να προβληθεί μόνο στον υπολογιστή.

Σε αυτό το έργο πρόκειται να ρίξουμε προς τα κάτω το αναφερόμενο draw back και με τον νέο προτεινόμενο σχεδιασμό μπορούμε να δούμε το αποτέλεσμα των 6 υποψηφίων στην οθόνη LCD αμέσως.

Δυσκολίες που συναντήσαμε:

Όλες οι ακίδες εισόδου / εξόδου (του Arduino) του προηγούμενου έργου EVM χρησιμοποιήθηκαν από την οθόνη 16 x 2, τη μονάδα κάρτας SD, τα κουμπιά ψηφοφορίας, το κουμπί ελέγχου και το βομβητή. Δεν υπάρχει πλέον χώρος για σύνδεση νέου κουμπιού.

Μετά από κάποια έρευνα, διαπιστώσαμε ότι τυχόν ακίδες I / O μπορούν να αλλάξουν σε έξοδο σε είσοδο και αντίστροφα σε οποιοδήποτε σημείο.

Μετά από προσεκτική παρατήρηση επιλέξαμε το πινέλο LED / buzzer ως κουμπί αποθήκευσης. Τώρα αυτός ο πείρος προγραμματίστηκε τόσο ως είσοδος (κουμπί αποθήκευσης) όσο και ως έξοδος (βομβητής).

Λάβετε υπόψη ότι ο πείρος αποθήκευσης / βομβητή εκχωρείται σε οποιαδήποτε κατάσταση σε μια στιγμή, δηλαδή έξοδο ή είσοδο.

Το κύκλωμα:

Σύνδεση LCD με Arduino:

Απλώς συνδεθείτε σύμφωνα με τα προηγούμενα σχήματα και χρησιμοποιήστε ποτενσιόμετρο 10K για τη ρύθμιση της αντίθεσης προβολής. Το υπόλοιπο κύκλωμα είναι αυτονόητο.

Τα S1 έως S6 είναι κουμπιά ψηφοφορίας μέσω των οποίων οι ψηφοφόροι εισάγουν την επιλογή τους. Το κουμπί αποθήκευσης και ελέγχου πρέπει να διατηρείται μακριά από τη μονάδα ψηφοφορίας (υπό τον έλεγχο του υπεύθυνου του εκλογικού κέντρου).

Νέο πρόγραμμα:
//--------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------//

Πώς να χρησιμοποιήσετε αυτήν την ηλεκτρονική μηχανή ψηφοφορίας:

  • Με την ολοκλήρωση της εγκατάστασης υλικού ανεβάστε τον κωδικό με τα ονόματα των υποψηφίων που επιθυμείτε.
  • Ενεργοποιήστε το μηχάνημα, αν όλα είναι καλά, θα δώσει ένα μακρύ μπιπ.
  • Τώρα πατήστε το κουμπί ελέγχου και τώρα μπορεί να καταγράψει μία ψήφο.
  • Μετά από κάθε ψηφοφορία, το κουμπί ελέγχου πρέπει να πατηθεί μία φορά.
  • Μόλις περάσει η τελευταία ψηφοφορία, πατήστε το κουμπί αποθήκευσης, αυτό θα αποθηκεύσει τα αποτελέσματα και θα σας ζητήσει να αποσυνδέσετε το τροφοδοτικό (έτσι ώστε να μπορείτε να δείτε τα αποτελέσματα ιδιωτικά).
  • Επανασυνδέστε την τροφοδοσία, θα αρχίσει αυτόματα να δείχνει τα αποτελέσματα. Εάν ένας υποψήφιος δεν έλαβε καμία ψήφο, εμφανίζεται η ένδειξη 'null'.
  • Για να διεξαγάγετε άλλες εκλογές, πρέπει να μορφοποιήσετε την κάρτα SD / να διαγράψετε όλα τα αρχεία που δημιουργούνται από αυτό το EVM.

Λάβετε υπόψη ότι αυτό το EVM χρειάζεται αδιάλειπτη ισχύ. Οποιαδήποτε διακοπή θα κάνει το πλήθος των ψήφων στο μηδέν.

Παρακαλώ γράψτε τα ονόματα των υποψηφίων στον κωδικό (έως 16 γράμματα):

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

String Party1 = 'MODI'

String Party2 = 'TRUMP'

String Party3 = 'PUTIN' // Τοποθετήστε τα ονόματα των υποψηφίων εδώ.

String Party4 = 'Abdul Kalam'

String Party5 = 'Girish'

String Party6 = 'Swagatam'

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

Αυτό ολοκληρώνει το έργο, εάν έχετε οποιεσδήποτε ερωτήσεις σχετικά με αυτό το έργο μη διστάσετε να το εκφράσετε στην ενότητα σχολίων, ενδέχεται να λάβετε μια γρήγορη απάντηση.




Προηγούμενο: Κύκλωμα αισθητήρα νερού δεξαμενής αυτοκινήτου Επόμενο: 3 κυκλώματα μονής ισχύος 220V ρυθμιζόμενα κυκλώματα τροφοδοσίας