Máy bỏ phiếu điện tử với mô-đun thẻ SD

Hãy Thử Công Cụ CủA Chúng Tôi Để LoạI Bỏ Các VấN Đề





Trong bài đăng này, chúng tôi sẽ xây dựng một mạch cho Máy bỏ phiếu điện tử sử dụng Arduino và mô-đun thẻ SD, nơi dữ liệu bầu cử được lưu trữ trong thẻ SD.

Bởi



CẬP NHẬT:

Mạch này đã được nâng cấp lên một phiên bản cải tiến, trong đó kết quả có thể được xem trên màn hình LCD đính kèm, bạn có thể xem chi tiết ở phần dưới cùng của bài viết

Sử dụng Màn hình LCD 16x2

Màn hình 16 x 2 hiển thị trạng thái của máy bỏ phiếu và khi bạn bỏ phiếu, tên của ứng cử viên sẽ được hiển thị cùng với việc kích hoạt đèn LED và còi.



Lưu ý: Dự án đề xuất chỉ được thực hiện cho mục đích giáo dục và không nhằm mục đích sử dụng bầu cử thực sự.

Máy bỏ phiếu điện tử được thực hiện để đẩy nhanh quá trình bầu cử và giảm giấy sử dụng và những lý do này gián tiếp làm giảm chi phí liên quan đến bầu cử.

Máy bỏ phiếu điện tử cung cấp khả năng bảo mật cao hơn so với phương pháp bỏ phiếu giấy truyền thống.

Việc vận chuyển những thùng phiếu số lượng lớn đó rủi ro hơn vận chuyển những chiếc máy nhỏ gọn, nơi mà những gian lận bắt giữ phương tiện không thể thay đổi dữ liệu trong EVM (Máy bỏ phiếu điện tử) mặc dù một người có thể bắt được xe.

Một số quốc gia đang bày tỏ sự quan tâm đến EVM do Ấn Độ sản xuất do tính bảo mật vượt trội. Các quốc gia như Mỹ vẫn theo phương pháp bỏ phiếu giấy truyền thống cho cuộc bầu cử của họ do nguy cơ bị hack và thay đổi dữ liệu bầu cử cao hơn.

Vậy, điều gì đã khiến người Ấn Độ làm cho EVM an toàn hơn? Vâng, Hoa Kỳ đã tạo ra các máy bỏ phiếu được tải bằng hệ điều hành windows và nối mạng với các máy chủ để giúp việc kiểm phiếu dễ dàng. Điều này mở ra rất nhiều kẽ hở để tin tặc có thể làm thay đổi dữ liệu bầu cử.

EVM do Ấn Độ sản xuất là thiết bị độc lập và không được kết nối với internet hoặc máy chủ. Để kiểm phiếu, máy được đưa đến quầy kiểm phiếu, nơi kết quả sẽ được công bố và không có người trung gian.

Dự án đề xuất được thiết kế với chức năng tương tự như EVM của Ấn Độ, nhưng có rất nhiều sửa đổi được thực hiện.

Bây giờ chúng ta hãy chuyển sang các chi tiết xây dựng của dự án.

Bố cục mạch:

Sơ đồ bố trí EVM

Mạch EVM được đề xuất chỉ có thể chứa 6 ứng cử viên. Một nút điều khiển được cung cấp tương tự như đơn vị điều khiển trong EVM thực. Sau khi một người phân loại phiếu bầu của mình, các nút phiếu bầu sẽ bị vô hiệu hóa.

Các nút bỏ phiếu chỉ được bật lại sau khi nhấn nút điều khiển. Nút điều khiển sẽ được đặt gần người phụ trách điều khiển buồng bầu cử.

Sau khi một người bỏ phiếu, anh ấy / cô ấy được công nhận với việc kích hoạt đèn LED và còi. Người đó cũng có thể xác nhận phiếu bầu mà họ đã bỏ trong màn hình, nó sẽ hiển thị tên ứng cử viên hoặc tên đảng trong vài giây. Tính năng này vẫn không xuất hiện trong EVM thực.

Sơ đồ:

Arduino hiển thị kết nối:




Mạch Arduino EVM để hiển thị kết nối

Mạch được chia thành hai phần để tránh nhầm lẫn trong khi lặp lại dự án. Mạch trên mô tả cách đấu dây giữa màn hình LCD và arduino. Điều chỉnh biến trở để có độ tương phản tối ưu.

Mạch máy bỏ phiếu điện tử với mô-đun thẻ SD và Arduino

Đây là phần còn lại của mạch bao gồm pin 9V, công tắc, bảy nút nhấn, đèn LED, còi và quan trọng hơn là mô-đun thẻ SD.

Thẻ SD sẽ lưu trữ dữ liệu ngay lập tức sau khi bỏ phiếu. Khi cuộc bầu cử kết thúc, thẻ SD được lắp vào máy tính để thông báo kết quả và kết quả kiểm phiếu.

Thiết kế được đề xuất có thể ghi nhận tới 4.294.967.295 (tương đương hơn 4 tỷ) phiếu bầu cho mỗi ứng viên và 25.769.803.770 (hơn 25 tỷ, nhiều hơn gấp ba lần dân số thế giới hiện tại) phiếu bầu cho mỗi máy và vẫn còn hơn 99,9% thẻ SD vẫn còn trống .

Điều này hiệu quả hơn nhiều so với EVM thực có thể ghi 3840 phiếu bầu cho mỗi máy.

Chương trình:

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

……… Đó là một chương trình lớn.

Cách vận hành Mạch EVM này:

• BẬT máy lên, máy sẽ ghi nhận bằng một tiếng bíp cho biết mọi thứ đều ổn. Nếu máy không ổn, máy sẽ phát ra tiếng bíp nhanh và hiển thị thông báo lỗi trên màn hình LCD.
• Nhấn nút điều khiển, bây giờ nó đã sẵn sàng để ghi một phiếu bầu.
• Khi phiếu bầu được ghi lại, nó sẽ kích hoạt đèn LED và phát ra tiếng bíp trong một giây và hiển thị tên của ứng cử viên mà bạn đã bỏ phiếu trong vài giây.
• Để ghi phiếu bầu tiếp theo, bạn phải nhấn lại nút điều khiển. Mỗi khi nhấn nút điều khiển, còi sẽ phát ra 3 tiếng bíp ngắn.
• Việc này phải được tiếp tục cho đến khi cử tri cuối cùng bỏ phiếu. Không cần nhấn nút điều khiển sau khi cử tri cuối cùng bỏ phiếu.
• Sau khi bỏ phiếu cuối cùng, nên tắt máy ngay lập tức bằng công tắc tắt và rút thẻ SD. Để không có dữ liệu nào bị thay đổi.
• Cắm thẻ SD vào máy tính và bạn có thể thấy 6 tệp văn bản như hình dưới đây:

Kết quả thẻ SD được lưu trữ trong máy tính

Mở tệp sẽ hiển thị tên của ứng cử viên và số phiếu bầu, như minh họa bên dưới:

Nguyên mẫu của tác giả:

Hình minh họa Mô-đun thẻ SD:

Lưu ý 1: Bất kỳ sự gián đoạn nào trong việc cung cấp điện sẽ đặt lại số phiếu bầu về không.
Lưu ý 2: Vui lòng thay đổi tên ứng viên trong chương trình.
String Party1 = 'MODI'
String Party2 = 'TRUMP'
String Party3 = 'PUTIN' // Đặt tên ứng viên tại đây.
String Party4 = 'Abdul Kalam'
String Party5 = 'Girish'
String Party6 = 'Swagatam'
Lưu ý 3: Nếu không có phiếu bầu nào được bỏ cho một đảng / ứng cử viên cụ thể, tệp văn bản sẽ không xuất hiện trong thẻ SD.

Nâng cấp thiết kế trên

Phiên bản nâng cấp đặc biệt của dự án máy bỏ phiếu điện tử này được yêu cầu bởi Sumesh chourasia, một độc giả cuồng nhiệt của trang web này.

Dự án này là một cải tiến so với Máy bỏ phiếu điện tử đã giải thích ở trên. Hạn chế chính của EVM (Máy bỏ phiếu điện tử) ở trên là không thể xem kết quả trên màn hình LCD 16 x 2 mà chỉ có thể xem trên máy tính.

Trong dự án này, chúng tôi sẽ chụp lại bản vẽ được đề cập và với thiết kế mới được đề xuất, chúng tôi có thể xem kết quả của 6 ứng cử viên trên màn hình LCD ngay lập tức.

Những khó khăn mà chúng tôi gặp phải:

Tất cả các chân đầu vào / đầu ra (của Arduino) của dự án EVM trước đây đã được sử dụng bởi màn hình 16 x 2, mô-đun thẻ SD, các nút bỏ phiếu, nút điều khiển và còi. Không còn chỗ trống để kết nối bất kỳ nút mới nào.

Sau một số nghiên cứu, chúng tôi nhận thấy rằng bất kỳ chân I / O nào cũng có thể được thay đổi thành đầu ra thành đầu vào và ngược lại tại bất kỳ điểm nào.

Sau khi quan sát kỹ lưỡng, chúng tôi chọn chân đèn LED / còi làm nút lưu. Bây giờ ghim này được lập trình làm cả đầu vào (nút lưu) và đầu ra (buzzer).

Lưu ý rằng chân lưu / bộ rung được chỉ định ở bất kỳ trạng thái nào tại một đầu ra hoặc đầu vào tức thì.

Mạch:

Kết nối LCD với Arduino:

Chỉ cần kết nối theo các sơ đồ trước đó và sử dụng chiết áp 10K để điều chỉnh phần còn lại của độ tương phản xem của mạch là tự giải thích.

S1 đến S6 là các nút bỏ phiếu qua đó cử tri đưa ra lựa chọn của họ. Nút lưu và nút điều khiển phải được đặt cách xa đơn vị bỏ phiếu (dưới sự kiểm soát của buồng phiếu phụ trách).

Chương trình mới:
//--------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------//

Cách vận hành máy bỏ phiếu Điện tử này:

  • Với thiết lập phần cứng hoàn tất, hãy tải lên mã với tên ứng viên mong muốn của bạn.
  • Bật máy lên, nếu mọi thứ ổn sẽ phát ra tiếng bíp dài.
  • Bây giờ hãy nhấn nút điều khiển và bây giờ nó có thể ghi lại một phiếu bầu.
  • Sau mỗi lần bỏ phiếu, nút điều khiển phải được nhấn một lần.
  • Sau khi bỏ phiếu cuối cùng, nhấn nút lưu, nút này sẽ lưu kết quả và nhắc bạn ngắt kết nối nguồn điện (để bạn có thể xem kết quả một cách riêng tư).
  • Kết nối lại nguồn cung cấp nó sẽ tự động bắt đầu hiển thị kết quả. Nếu một ứng cử viên không nhận được bất kỳ phiếu bầu nào, nó sẽ hiển thị 'trống'.
  • Để tiến hành một cuộc bầu cử khác, bạn phải định dạng thẻ SD / xóa tất cả các tệp được tạo bởi EVM này.

Xin lưu ý rằng EVM này cần nguồn điện liên tục, bất kỳ sự gián đoạn nào sẽ chuyển số phiếu bầu về không.

Vui lòng viết tên ứng viên vào mã (tối đa 16 chữ cái):

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

String Party1 = 'MODI'

String Party2 = 'TRUMP'

String Party3 = 'PUTIN' // Đặt tên ứng viên tại đây.

String Party4 = 'Abdul Kalam'

String Party5 = 'Girish'

String Party6 = 'Swagatam'

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

Điều đó kết thúc dự án, nếu bạn có bất kỳ câu hỏi nào liên quan đến dự án này, vui lòng bày tỏ trong phần bình luận, bạn có thể nhận được trả lời nhanh chóng.




Một cặp: Mạch cảm biến nước két trên ô tô Tiếp theo: 3 Mạch nguồn đơn IC 220V có thể điều chỉnh trạng thái rắn