Votação Eletrônica com Módulo de Cartão SD

Neste post, vamos construir um circuito para uma máquina de votação eletrônica usando o Arduino e o módulo do cartão SD, onde os dados eleitorais são armazenados no cartão SD.

De

ATUALIZAR:

Este circuito foi atualizado para uma versão atualizada, na qual os resultados podem ser vistos em uma tela LCD anexada. Você pode obter os detalhes na seção inferior do post

Usando Displays LCD 16×2

Uma tela 16 x 2 mostra o status da máquina de votar e, quando você votar, o nome do candidato será exibido junto com a ativação do LED e da campainha.

Nota: O projeto proposto é realizado apenas para fins educacionais e não para uso real nas eleições.

As urnas eletrônicas são implementadas para acelerar o processo eleitoral e reduzir o uso de papel, e esses motivos indiretamente reduzem as despesas relacionadas às eleições.

As máquinas de votação eletrônicas oferecem segurança superior ao método tradicional de votação em papel.

Transportar essas urnas a granel é arriscado do que transportar máquinas compactas, onde as fraudes de captura de veículos não podem alterar os dados no EVM (Electronic Voting Machine), mesmo que se possa capturar o veículo.

Alguns países mostram interesse em EVMs fabricadas na Índia devido à segurança superior. Países como os EUA EUA Eles ainda aderem ao método tradicional de votação em papel para suas eleições devido ao aumento do risco de hackers e adulteração de dados eleitorais.

Então, o que fez os índios tornarem os EVMs mais seguros? Bem, EE. EUA Ele criou máquinas de votação carregadas com o sistema operacional Windows e conectadas em rede com servidores para que a votação conte facilmente. Isso abre muitas brechas para os hackers alterarem os dados eleitorais.

EVMs fabricados na Índia são dispositivos separados e não estão conectados à Internet ou servidores. Para contar os votos, as máquinas são levadas ao estande de contagem, onde os resultados serão declarados e não haverá intermediários.

O projeto proposto foi projetado com funcionalidade semelhante às EVMs indianas, mas muitas modificações são feitas.

Agora vamos aos detalhes de construção do projeto.

Projeto de circuito:

Diagrama de Design do EVM

O circuito EVM proposto pode acomodar apenas 6 candidatos. Um botão de controle semelhante à unidade de controle é fornecido em EVMs reais. Depois que uma pessoa vota seu voto, os botões de votação ficam desativados.

Os botões de votação são ativados novamente somente depois de pressionar o botão de controle. O botão de controle será colocado perto da pessoa responsável por controlar a cabine de votação.

Depois que uma pessoa faz um voto, ela é reconhecida com a ativação do LED e da campainha. A pessoa também pode confirmar o voto a quem ele fez na tela, o nome do candidato ou o nome do partido será exibido por alguns segundos. Esse recurso ainda não está presente em EVMs reais.

Diagrama esquemático:

Arduino mostrando conectividade:




Circuito EVM do Arduino para mostrar conectividade

 

O circuito é dividido em duas partes para evitar confusão enquanto o projeto é duplicado. O circuito acima descreve a fiação entre o LCD e o arduino. Ajuste a resistência variável para um contraste ideal.

Circuito de urna eletrônica com módulo de cartão SD e Arduino

Aqui está o resto do circuito composto por bateria de 9V, interruptor, sete botões, LEDs, campainha e, mais importante, o módulo do cartão SD.

O cartão SD armazenará os dados instantaneamente após a votação. Terminada a eleição; o cartão SD é inserido em um computador para declarar a contagem de votos e o resultado.

O design proposto pode registrar até 4.294.967.295 (mais de 4 bilhões) de votos por candidato e 25.769.803.770 (mais de 25 bilhões, mais de três vezes a população mundial atual) por máquina e até mais de 99,9% do cartão SD ainda está vazio.

Isso é muito mais eficiente que os EVMs reais, que podem registrar 3.840 votos por máquina.

Programa:

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

……… Esse é um programa massivo.

Como operar este circuito EVM:

• Ligue a máquina, isso será confirmado com um sinal sonoro indicando que está tudo ok. Se o equipamento não estiver bom, ele emite um bipe rapidamente e exibe a mensagem de erro no LCD.
• Pressione o botão de controle, agora você está pronto para gravar uma votação.
• Depois que a votação for registrada, ele ativará o LED e emitirá um sinal sonoro por um segundo e exibirá o nome do candidato que votou por alguns segundos.
• Para gravar a próxima votação, o botão de controle deve ser pressionado novamente. Cada vez que o botão de controle é pressionado, a campainha emite 3 bipes curtos.
• Isso deve continuar até o último eleitor votar. Não há necessidade de pressionar o botão de controle depois que o último eleitor votou.
• Após a última votação, a máquina deve ser desligada imediatamente com o interruptor desligado e o cartão SD deve ser removido. Para que os dados não sejam alterados.
• Conecte o cartão SD ao computador e você verá 6 arquivos de texto, como mostrado abaixo:

Resultado do cartão SD armazenado no computador

A abertura de um arquivo exibirá o nome do candidato e o número de votos, conforme ilustrado abaixo:

1590360488 181 votacao eletronica com modulo de cartao sd projetos de

Protótipo do autor:

1590360490 799 votacao eletronica com modulo de cartao sd projetos de

Ilustração do módulo do cartão SD:

Nota 1: Qualquer interrupção na fonte de alimentação redefinirá a contagem de votos para zero.
Nota 2: altere o nome do candidato no programa.
String Party1 = "MODI";
String Party2 = "TRUMP";
String Party3 = "PUTIN"; // Coloque aqui os nomes dos candidatos.
String Party4 = "Abdul Kalam";
String Party5 = "Girish";
String Party6 = "Swagatam";
Nota 3: Se um partido / candidato em particular não for votado, o arquivo de texto não aparecerá no cartão SD.

Atualizando o design anterior

Esta versão aprimorada específica do projeto de urna eletrônica foi solicitada por Sumesh chourasia, que é um ávido leitor deste site.

Este projeto é uma melhoria em relação à máquina de votação eletrônica explicada acima. A principal desvantagem do EVM (Electronic Voting Machine) anterior era que o resultado não podia ser visto na tela LCD de 16 x 2, mas apenas no computador.

Neste projeto, vamos abater o revés mencionado e, com o projeto proposto recentemente, podemos ver instantaneamente o resultado dos 6 candidatos na tela LCD.

Dificuldades que encontramos:

Todos os pinos de entrada / saída (do Arduino) do projeto EVM anterior foram usados ​​pelo monitor 16 x 2, módulo de cartão SD, botões de votação, botão de controle e campainha. Não há mais espaço para conectar novos botões.

Após algumas pesquisas, descobrimos que qualquer pino de E / S pode ser alternado da saída para a entrada e vice-versa a qualquer momento.

Após uma observação cuidadosa, escolhemos o pino do LED / campainha como o botão salvar. Agora este pino programado como entrada (botão salvar) e saída (campainha).

Observe que o pino de gravação / toque é atribuído em qualquer um dos estados em um instante, isto é, saída ou entrada.

O circuito:

Conexão de LCD para Arduino:

Basta conectar de acordo com os diagramas acima e usar o potenciômetro de 10K para ajustar o contraste da tela; O resto do circuito é auto-explicativo.

S1 a S6 são botões de votação através dos quais os eleitores entram em sua escolha. O botão salvar e controlar deve ser mantido longe da unidade de votação (sob o controle da cabine de votação responsável).

Novo programa:
//--------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------//

Como operar esta urna eletrônica:

  • Com a instalação do hardware concluída, carregue o código com os nomes de candidatos desejados.
  • Ligue a máquina, se estiver tudo bem, emitirá um sinal sonoro longo.
  • Agora pressione o botão de controle e agora você pode gravar uma única votação.
  • Após cada votação, o botão de controle deve ser pressionado uma vez.
  • Após a última votação, pressione o botão Salvar. Isso salvará os resultados e solicitará que você desconecte a fonte de alimentação (para que você possa ver os resultados em particular).
  • Reconecte o suprimento, ele começará automaticamente a mostrar os resultados. Se um candidato não obteve um voto, ele mostra "nulo".
  • Para fazer outra escolha, você precisa formatar o cartão SD / excluir todos os arquivos gerados por este EVM.

Observe que este EVM precisa de energia ininterrupta; qualquer interrupção fará com que a contagem de votos seja zero.

Escreva o nome dos candidatos no código (máximo de 16 letras):

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

String Party1 = "MODI";

String Party2 = "TRUMP";

String Party3 = "PUTIN"; // Coloque aqui os nomes dos candidatos.

String Party4 = "Abdul Kalam";

String Party5 = "Girish";

String Party6 = "Swagatam";

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

Isso conclui o projeto, se você tiver alguma dúvida sobre esse projeto; Sinta-se livre para expressar na seção de comentários, você pode obter uma resposta rápida.



FONTE

Nota: Este foi traduzido do Inglês para português (auto)

Pode conter erros de tradução

Olá, se tiver algum erro de tradução (AUTO), falta de link para download etc...

Veja na FONTE até ser revisado o post.

Status (Não Revisado)

Se tiver algum erro coloque nos comentários

Mas se gostou compartilhe!!!


Veja mais

Axtudo
Axtudohttps://www.axtudo.com/
“Solidários, seremos união. Separados uns dos outros seremos pontos de vista. Juntos, alcançaremos a realização de nossos propósitos.” (Bezerra de Menezes)

Comentários

DEIXE UMA RESPOSTA

Por favor digite seu comentário!
Por favor, digite seu nome aqui

Compartilhe

Últimos Posts

00:20:57

EXISTE IDADE PARA EMPREENDER? |Com Tiago Fonseca e Davi...

#EXISTE #IDADE #PARA #EMPREENDER #Tiago #Fonseca #Davi #Braga #Final Está rolando uma sequência de LIVES as...
00:02:03

COMO TORNAR A SUA OFERTA MAIS ESPECÍFICA | ERICO...

Você sempre pode ser mais específico. Entre para o nosso grupo #GaleraRaiz no Telegram: link➤http:formuladelancamento.com.br/raiz Você também pode me ... #COMO ...

Como e Porque COMER FÍGADO | O Alimento Mais...

#Como #Porque #COMER #FÍGADO #Alimento #Mais #Nutritivo #Planeta Neste vídeo eu falo do alimento de maior densidade...
00:19:34

ESSE MÉTODO TRANSFORMA SUAS HABILIDADES EM DINHEIRO| Tiago Fonseca...

#ESSE #MÉTODO #TRANSFORMA #SUAS #HABILIDADES #DINHEIRO #Tiago #Fonseca #Pablo #Marçal #Parte2 Neste vídeo Tiago...
00:31:56

Quais são os 3 tipos de lançamento e quando...

O episódio de hoje tá imperdível! Você sabia que existem 3 tipos de lançamento? No episódio de hoje explicamos cada um deles e esclarecemos quando...

Medalhão de carne| Na Cozinha com Oloares Ferreira

#Medalhão #carne #Cozinha #Oloares #Ferreira Mais uma receita de torta para você. Veja e aprenda como fazer esse medalhão de...