เครื่องลงคะแนนอิเล็กทรอนิกส์พร้อมโมดูลการ์ด SD

ลองใช้เครื่องมือของเราเพื่อกำจัดปัญหา





ในโพสต์นี้เราจะสร้างวงจรสำหรับเครื่องลงคะแนนอิเล็กทรอนิกส์โดยใช้ Arduino และโมดูลการ์ด SD ซึ่งข้อมูลการเลือกตั้งจะถูกเก็บไว้ในการ์ด SD

โดย



อัพเดท:

วงจรนี้ได้รับการอัปเกรดเป็นเวอร์ชันที่ปรับปรุงแล้วซึ่งสามารถดูผลลัพธ์ผ่านจอ LCD ที่แนบมาได้คุณสามารถดูรายละเอียดได้ที่ส่วนล่างของโพสต์

ใช้ 16x2 LCD Dislay

หน้าจอ 16 x 2 แสดงสถานะของเครื่องลงคะแนนและเมื่อคุณลงคะแนนชื่อของผู้สมัครจะแสดงพร้อมกับการเปิดใช้งาน LED และเสียงกริ่ง



หมายเหตุ: โครงการที่เสนอจัดทำขึ้นเพื่อการศึกษาเท่านั้นและไม่ได้มีไว้สำหรับการเลือกตั้งจริง

เครื่องลงคะแนนอิเล็กทรอนิกส์ถูกนำมาใช้เพื่อเร่งกระบวนการเลือกตั้งและลดกระดาษการใช้งานและเหตุผลเหล่านี้ช่วยลดค่าใช้จ่ายที่เกี่ยวข้องกับการเลือกตั้งทางอ้อม

เครื่องลงคะแนนอิเล็กทรอนิกส์ให้การรักษาความปลอดภัยที่เหนือกว่าก่อนวิธีการลงคะแนนกระดาษแบบเดิม

การขนส่งกล่องลงคะแนนจำนวนมากเหล่านี้มีความเสี่ยงมากกว่าการขนส่งเครื่องจักรขนาดเล็กซึ่งการฉ้อโกงในการจับยานพาหนะไม่สามารถเปลี่ยนแปลงข้อมูลใน EVM (เครื่องลงคะแนนอิเล็กทรอนิกส์) แม้ว่าจะสามารถจับรถได้ก็ตาม

บางประเทศแสดงความสนใจ EVM ที่ผลิตในอินเดียเนื่องจากความปลอดภัยที่เหนือกว่า ประเทศเช่นสหรัฐอเมริกายังคงยึดติดกับวิธีการลงคะแนนกระดาษแบบเดิมสำหรับการเลือกตั้งเนื่องจากมีความเสี่ยงสูงกว่าที่จะถูกแฮ็กและแก้ไขข้อมูลการเลือกตั้ง

แล้วอะไรที่ทำให้ EVM ของอินเดียปลอดภัยขึ้น? สหรัฐอเมริกาได้สร้างเครื่องลงคะแนนที่เต็มไปด้วยระบบปฏิบัติการ windows และเชื่อมต่อกับเซิร์ฟเวอร์เพื่อให้การนับคะแนนเป็นเรื่องง่าย ซึ่งเป็นการเปิดช่องโหว่มากมายสำหรับแฮกเกอร์ในการแก้ไขข้อมูลการเลือกตั้ง

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 พันล้านซึ่งมากกว่าสามเท่าของประชากรโลกในปัจจุบัน) ต่อเครื่องและยังมีการ์ด SD มากกว่า 99.9% ที่ยังว่างอยู่ .

ซึ่งมีประสิทธิภาพมากกว่า 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 Circuit:

•เปิดเครื่องเครื่องจะรับทราบพร้อมเสียงบี๊บแสดงว่าทุกอย่างเรียบร้อยดี หากเครื่องไม่ดีเครื่องจะส่งเสียงบี๊บอย่างรวดเร็วและแสดงข้อความแจ้งข้อผิดพลาดบนจอ LCD
•กดปุ่มควบคุมตอนนี้ก็พร้อมที่จะบันทึกหนึ่งโหวต
•เมื่อบันทึกการลงคะแนนแล้ว LED จะเปิดใช้งานและส่งเสียงบี๊บหนึ่งวินาทีและแสดงชื่อของผู้สมัครที่คุณโหวตให้เป็นเวลาสองถึงสามวินาที
•ในการบันทึกการลงคะแนนครั้งต่อไปต้องกดปุ่มควบคุมอีกครั้ง ทุกครั้งที่กดปุ่มควบคุมเสียงกริ่งจะส่งเสียงบี๊บสั้น ๆ 3 ครั้ง
•ต้องดำเนินการต่อไปจนกว่าผู้มีสิทธิเลือกตั้งคนสุดท้ายจะลงคะแนน ไม่จำเป็นต้องกดปุ่มควบคุมหลังจากผู้มีสิทธิเลือกตั้งคนสุดท้ายออกเสียงลงคะแนน
•หลังจากโหวตครั้งสุดท้ายแล้วควรปิดเครื่องทันทีโดยใช้สวิตช์ปิดและควรถอดการ์ด SD ออก เพื่อไม่ให้ข้อมูลถูกเปลี่ยนแปลง
•เสียบการ์ด SD เข้ากับคอมพิวเตอร์และคุณจะเห็นไฟล์ข้อความ 6 ไฟล์ดังที่แสดงด้านล่าง:

ผลลัพธ์การ์ด SD ที่เก็บไว้ในคอมพิวเตอร์

การเปิดไฟล์จะแสดงชื่อผู้สมัครและจำนวนโหวตดังภาพประกอบด้านล่าง:

ต้นแบบของผู้แต่ง:

ภาพประกอบของโมดูลการ์ด SD:

หมายเหตุ 1: การขัดจังหวะการจ่ายไฟใด ๆ จะรีเซ็ตการนับคะแนนเป็นศูนย์
หมายเหตุ 2: โปรดเปลี่ยนชื่อผู้สมัครในโปรแกรม
String Party1 = 'MODI'
String Party2 = 'TRUMP'
String Party3 = 'PUTIN' // ใส่ชื่อผู้สมัครที่นี่
String Party4 = 'อับดุลคาลาม'
String Party5 = 'Girish'
String Party6 = 'Swagatam'
หมายเหตุ 3: หากไม่มีการโหวตให้กับพรรคใดพรรคหนึ่ง / ผู้สมัครไฟล์ข้อความจะไม่ปรากฏในการ์ด SD

การอัพเกรดการออกแบบด้านบน

โครงการเครื่องลงคะแนนอิเล็กทรอนิกส์รุ่นอัพเกรดนี้ได้รับการร้องขอจาก Sumesh chourasia ซึ่งเป็นผู้อ่านเว็บไซต์นี้ตัวยง

โครงการนี้เป็นการปรับปรุงเครื่องลงคะแนนอิเล็กทรอนิกส์ที่อธิบายข้างต้น ข้อเสียเปรียบหลักของ EVM (เครื่องลงคะแนนอิเล็กทรอนิกส์) ข้างต้นคือไม่สามารถดูผลลัพธ์บนจอ LCD 16 x 2 ได้ แต่สามารถดูได้บนคอมพิวเตอร์เท่านั้น

ในโปรเจ็กต์นี้เราจะถ่ายทำที่กล่าวถึงการดึงกลับและด้วยการออกแบบที่เสนอใหม่เราสามารถดูผลลัพธ์ของผู้สมัคร 6 คนบนจอ LCD ได้ทันที

ความยากลำบากที่เราพบ:

พินอินพุต / เอาท์พุตทั้งหมด (ของ Arduino) ของโครงการ EVM ก่อนหน้านี้ถูกใช้โดยจอแสดงผล 16 x 2, โมดูลการ์ด SD, ปุ่มลงคะแนน, ปุ่มควบคุมและเสียงกริ่ง ไม่เหลือพื้นที่สำหรับเชื่อมต่อปุ่มใหม่

หลังจากการวิจัยบางส่วนเราพบว่าพิน I / O ใด ๆ สามารถเปลี่ยนเป็นเอาต์พุตเป็นอินพุตและในทางกลับกันได้ทุกเมื่อ

หลังจากสังเกตอย่างถี่ถ้วนแล้วเราจึงเลือกขา 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------//

วิธีการใช้งานเครื่องลงคะแนนอิเล็กทรอนิกส์นี้:

  • เมื่อตั้งค่าฮาร์ดแวร์เสร็จแล้วอัปโหลดรหัสพร้อมชื่อผู้สมัครที่คุณต้องการ
  • เปิดเครื่องหากทุกอย่างเรียบร้อยดีก็จะส่งเสียงบี๊บยาว ๆ
  • ตอนนี้กดปุ่มควบคุมและตอนนี้มันสามารถบันทึกการโหวตครั้งเดียว
  • หลังจากโหวตทุกครั้งจะต้องกดปุ่มควบคุมหนึ่งครั้ง
  • เมื่อโหวตครั้งสุดท้ายแล้วให้กดปุ่มบันทึกซึ่งจะบันทึกผลลัพธ์และแจ้งให้คุณยกเลิกการเชื่อมต่อแหล่งจ่ายไฟ (เพื่อให้คุณสามารถดูผลลัพธ์แบบส่วนตัวได้)
  • เชื่อมต่อแหล่งจ่ายอีกครั้งมันจะเริ่มแสดงผลลัพธ์โดยอัตโนมัติ หากผู้สมัครไม่ได้รับการโหวตใด ๆ ระบบจะแสดง 'null'
  • ในการดำเนินการเลือกตั้งอีกครั้งคุณต้องฟอร์แมตการ์ด SD / ลบไฟล์ทั้งหมดที่สร้างโดย EVM นี้

โปรดทราบว่า EVM นี้ต้องการพลังที่ไม่สะดุดการหยุดชะงักใด ๆ จะทำให้การนับคะแนนเป็นศูนย์

กรุณาเขียนชื่อผู้สมัครในรหัส (สูงสุด 16 ตัวอักษร):

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

String Party1 = 'MODI'

String Party2 = 'TRUMP'

String Party3 = 'PUTIN' // ใส่ชื่อผู้สมัครที่นี่

String Party4 = 'อับดุลคาลาม'

String Party5 = 'Girish'

String Party6 = 'Swagatam'

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

สรุปโครงการนี้หากคุณมีคำถามใด ๆ เกี่ยวกับโครงการนี้อย่าลังเลที่จะแสดงความคิดเห็นในส่วนความคิดเห็นคุณอาจได้รับคำตอบอย่างรวดเร็ว




คู่ของ: วงจรเซ็นเซอร์ถังน้ำในรถยนต์ ถัดไป: วงจรจ่ายไฟแบบโซลิดสเตทเดี่ยว IC 220V แบบปรับได้ 3 แบบ