آلة التصويت الإلكترونية مع وحدة بطاقة SD

جرب أداة القضاء على المشاكل





في هذا المنشور ، سنقوم ببناء دائرة لآلة التصويت الإلكترونية باستخدام وحدة بطاقة SD واردوينو حيث يتم تخزين بيانات الانتخابات في بطاقة SD.

بواسطة



تحديث:

تمت ترقية هذه الدائرة إلى إصدار محسّن يمكن من خلاله عرض النتائج عبر شاشة LCD مرفقة ، ويمكنك الحصول على التفاصيل في القسم السفلي من المنشور

استخدام شاشة عرض 16 × 2 LCD

تُظهر شاشة مقاس 16 × 2 حالة آلة التصويت وعندما تدلي بصوتك ، سيتم عرض اسم المرشح جنبًا إلى جنب مع تنشيط LED والجرس.



ملاحظة: المشروع المقترح هو لغرض تعليمي فقط وليس مخصصًا للاستخدام الانتخابي الحقيقي.

يتم استخدام آلات التصويت الإلكترونية لتسريع العملية الانتخابية وتقليل استخدام الورق وهذه الأسباب تقلل بشكل غير مباشر من النفقات المتعلقة بالانتخابات.

توفر آلات التصويت الإلكترونية أمانًا فائقًا قبل طريقة الاقتراع الورقية التقليدية.

يعد نقل صناديق الاقتراع الكبيرة هذه محفوفًا بالمخاطر مقارنة بنقل الآلات المدمجة ، حيث لا يمكن لعمليات الاحتيال التي تقوم بها عملية الاستيلاء على السيارة تغيير البيانات الموجودة في آلة التصويت الإلكترونية (EVM) حتى لو كان الشخص قادرًا على الاستيلاء على السيارة.

تبدي بعض الدول اهتمامًا بأجهزة EVM المصنعة في الهند نظرًا للأمان الفائق. لا تزال دول مثل الولايات المتحدة تتمسك بطريقة الاقتراع الورقية التقليدية لانتخاباتها بسبب ارتفاع مخاطر القرصنة وتغيير بيانات الانتخابات.

إذن ، ما الذي جعل الهند أكثر أمانًا من أجهزة EVM؟ حسنًا ، جعلت الولايات المتحدة آلات التصويت محملة بنظام التشغيل windows ومتصلة بشبكة مع الخوادم لتسهيل فرز الأصوات. هذا يفتح الكثير من الثغرات للمتسللين لتغيير بيانات الانتخابات.

أجهزة EVM الهندية الصنع هي أجهزة قائمة بذاتها وليست متصلة بالإنترنت أو خوادم. لفرز الأصوات ، يتم نقل الآلات إلى كشك العد ، حيث سيتم إعلان النتائج ولا يوجد وسيط.

تم تصميم المشروع المقترح بوظائف مماثلة لأجهزة EVM الهندية ، ولكن تم إجراء الكثير من التعديلات.

دعنا الآن ننتقل إلى التفاصيل الإنشائية للمشروع.

تخطيط الدائرة:

مخطط تخطيط EVM

يمكن أن تستوعب دائرة EVM المقترحة 6 مرشحين فقط. يتم توفير زر تحكم مماثل لوحدة التحكم في أجهزة EVM الحقيقية. بعد أن يكتب الشخص صوته ، يتم تعطيل أزرار الاقتراع.

لا يتم تمكين أزرار الاقتراع مرة أخرى إلا بعد الضغط على زر التحكم. سيتم وضع زر التحكم بالقرب من الشخص المسؤول الذي يتحكم في كابينة الانتخابات.

بعد أن يدلي الشخص بصوته ، يتم الاعتراف به من خلال تنشيط LED والجرس. يمكن للشخص أيضًا تأكيد التصويت الذي أدلى به في الشاشة ، وسيظهر اسم المرشح أو اسم الحزب لبضع ثوان. هذه الميزة لا تزال غير موجودة في أجهزة EVM الحقيقية.

رسم تخطيطى:

اردوينو عرض الاتصال:




دائرة Arduino EVM لعرض التوصيل

الدائرة مقسمة إلى قسمين لتجنب الالتباس أثناء تكرار المشروع. تصف الدائرة أعلاه الأسلاك بين شاشة LCD واردوينو. اضبط المقاوم المتغير للحصول على التباين الأمثل.

دائرة آلة التصويت الإلكترونية مع وحدة بطاقة SD و Arduino

هنا بقية الدائرة تتكون من بطارية 9 فولت ، ومفتاح ، وسبعة أزرار دفع ، ومصباح 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 = 'ترامب'
String Party3 = 'PUTIN' // ضع أسماء المرشحين هنا.
String Party4 = عبد الكلام
String Party5 = 'Girish'
String Party6 = 'Swagatam'
ملاحظة 3: إذا لم يتم التصويت على حزب / مرشح معين ، فلن يظهر الملف النصي في بطاقة SD.

ترقية التصميم أعلاه

طلبت سوميش شوراسيا هذه النسخة المحدثة من مشروع آلة التصويت الإلكترونية ، وهي قارئ نهم لهذا الموقع.

هذا المشروع هو تحسين على آلة التصويت الإلكترونية الموضحة أعلاه. كان العيب الرئيسي لـ EVM (آلة التصويت الإلكترونية) أعلاه هو عدم إمكانية عرض النتيجة على شاشة LCD مقاس 16 × 2 ، ولكن يمكن عرضها فقط على الكمبيوتر.

في هذا المشروع ، سنقوم بإسقاط التراجع المذكور ومع التصميم المقترح حديثًا يمكننا عرض نتيجة 6 مرشحين على شاشة LCD على الفور.

الصعوبات التي واجهناها:

تم استخدام جميع دبابيس الإدخال / الإخراج (في Arduino) لمشروع EVM السابق من خلال شاشة 16 × 2 ووحدة بطاقة SD وأزرار الاقتراع وزر التحكم والجرس. لا مزيد من المساحة المتبقية لتوصيل أي زر جديد.

بعد إجراء بعض الأبحاث ، وجدنا أنه يمكن تغيير أي دبابيس إدخال / إخراج إلى إخراج إلى إدخال والعكس بالعكس في أي وقت.

بعد المراقبة الدقيقة ، اخترنا دبوس LED / الجرس كزر حفظ. الآن تمت برمجة هذا الدبوس كمدخلات (زر حفظ) وإخراج (صفارة).

لاحظ أنه يتم تعيين دبوس الحفظ / الجرس في أي حالة في لحظة ، أي الإخراج أو الإدخال.

الدائرة:

اتصال 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------//

كيفية تشغيل آلة التصويت الإلكترونية هذه:

  • مع اكتمال إعداد الأجهزة ، قم بتحميل الكود بأسماء المرشحين التي ترغب فيها.
  • قم بتشغيل الجهاز ، إذا كان كل شيء على ما يرام ، فسوف يصدر صوتًا طويلاً.
  • الآن اضغط على زر التحكم ويمكنه الآن تسجيل صوت واحد.
  • بعد كل تصويت ، يجب الضغط على زر التحكم مرة واحدة.
  • بمجرد الإدلاء بآخر تصويت ، اضغط على زر حفظ وهذا سيحفظ النتائج ويطالبك بفصل مصدر الطاقة (بحيث يمكنك عرض النتائج على انفراد).
  • أعد توصيل الإمداد وسيبدأ تلقائيًا في إظهار النتائج. إذا لم يحصل المرشح على أي صوت ، فإنه يعرض 'لاغية'.
  • لإجراء انتخابات أخرى ، عليك تهيئة بطاقة SD / حذف جميع الملفات التي تم إنشاؤها بواسطة EVM.

يرجى ملاحظة أن جهاز EVM هذا يحتاج إلى طاقة مستمرة ، وأي انقطاع سيؤدي إلى تحويل عدد الأصوات إلى صفر.

يرجى كتابة أسماء المرشحين في الكود (16 حرفًا كحد أقصى):

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

String Party1 = 'MODI'

String Party2 = 'ترامب'

String Party3 = 'PUTIN' // ضع أسماء المرشحين هنا.

String Party4 = عبد الكلام

String Party5 = 'Girish'

String Party6 = 'Swagatam'

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

بهذا ينتهي المشروع ، إذا كان لديك أي أسئلة بخصوص هذا المشروع فلا تتردد في التعبير عنها في قسم التعليقات ، فقد تتلقى ردًا سريعًا.




زوج من: دائرة استشعار المياه لخزان السيارة التالي: 3 دوائر إمداد طاقة قابلة للتعديل أحادية الحالة الصلبة 220 فولت