Projetos de circuito eletrônicoProjetos de engenharia do ArduinoMáquina de votação eletrônica com módulo de cartão SD

Máquina de votação eletrônica com módulo de cartão SD

Relacionados

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

De

ATUALIZAR:

Este circuito foi atualizado para uma versão melhorada na qual os resultados podem ser visualizados em um display LCD conectado, você pode obter os detalhes na seção inferior do post

Usando a tela LCD 16×2

Um display 16 x 2 mostra o status da urna eletrônica e quando você votar, o nome do candidato será exibido junto com o acionamento do LED e do buzzer.

Nota: O projeto proposto é feito apenas para fins educacionais e não para uso eleitoral real.

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

As urnas eletrônicas fornecem segurança superior antes do método tradicional de votação em papel.

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

Alguns países estão mostrando interesse em EVMs fabricados na Índia devido à segurança superior. Países como os EUA ainda seguem o método tradicional de votação em papel para suas eleições devido ao maior risco de hackear e alterar os dados eleitorais.

Então, o que tornou os EVMs indianos mais seguros? Bem, máquinas de votação feitas nos EUA carregadas com sistema operacional Windows e conectadas em rede com servidores para facilitar a contagem de votos. Isso abre muitas brechas para os hackers alterarem os dados eleitorais.

Os EVMs fabricados na Índia são dispositivos autônomos e não conectados à Internet ou servidores. Para a apuração dos votos as máquinas são levadas para a cabine de apuração, onde serão declarados os resultados e não haverá intermediários.

O projeto proposto é projetado com funcionalidade semelhante aos EVMs indianos, mas há muitas modificações feitas.

Agora vamos passar para os detalhes construtivos do projeto.

Disposição do circuito:

DIAGRAMA DE LAYOUT EVM

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

Os botões de votação são ativados novamente somente após pressionar o botão de controle. O botão de controle será colocado próximo ao responsável que controla a cabine eleitoral.

Depois de uma pessoa votar, ela é reconhecida com a ativação do LED e da campainha. A pessoa também pode confirmar o voto para quem lançou no display, ele mostrará o nome do candidato ou o nome do partido por alguns segundos. Esse recurso ainda não está presente em EVMs reais.

Diagrama esquemático:

Arduino exibindo conectividade:




CIRCUITO ARDUINO EVM PARA EXIBIR CONECTIVIDADE

O circuito é dividido em duas partes para evitar confusões na duplicação do projeto. O circuito acima descreve a fiação entre o display LCD e o arduino. Ajuste o resistor 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, LED, campainha e mais importante módulo de 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) votos por candidato e 25.769.803.770 (mais de 25 bilhões, o que é mais do que o triplo da população mundial atual) votos por máquina e ainda mais de 99,9% do cartão SD ainda está vazio .

Isso é muito mais eficiente do que os EVMs reais, que podem registrar 3840 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 enorme.

Como operar este circuito EVM:

• Ligue a máquina, ela reconhecerá com um bipe indicando que está tudo bem. Se a máquina não estiver bem, ela emite um bipe rapidamente e exibe a mensagem de erro no LCD.
• Pressione o botão de controle, agora está pronto para gravar um voto.
• Assim que o voto for registrado, ele ativará o LED e emitirá um bipe por um segundo e exibirá o nome do candidato em quem você votou por alguns segundos.
• Para gravar o próximo voto, 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é que o último eleitor tenha votado. Não há necessidade de pressionar o botão de controle após o último votante votar.
• Após o último voto, a máquina deve ser desligada imediatamente usando o botão de desligar e o cartão SD deve ser removido. Para que nenhum dado seja alterado.
• Conecte o cartão SD a um computador e você verá 6 arquivos de texto conforme mostrado abaixo:

RESULTADO DO CARTÃO SD ARMAZENADO NO COMPUTADOR

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

IMG 6243A1C28843E

Protótipo do autor:

IMG 6243A1C2C8BED

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

Nota 1: Qualquer interrupção no fornecimento de energia irá zerar a contagem de votos.
Nota 2: Por favor, altere o nome do candidato no programa.
String Party1 = “MODI”;
String Party2 = “TRUMP”;
String Party3 = “PUTIN”; //Coloque os nomes dos candidatos aqui.
String Party4 = “Abdul Kalam”;
String Party5 = “Girish”;
String Party6 = “Swagatam”;
Nota 3: Se nenhum voto for dado a um determinado partido/candidato, o arquivo de texto não aparecerá no cartão SD.

Atualizando o design acima

Esta versão atualizada do projeto da urna eletrônica foi solicitada por Sumesh chourasia, que é um ávido leitor deste site.

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

Neste projeto vamos derrubar o mencionado inconveniente e com o novo design proposto podemos ver o resultado dos 6 candidatos no display LCD instantaneamente.

Dificuldades que encontramos:

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

Após algumas pesquisas descobrimos que quaisquer pinos de E/S podem ser alterados de saída para entrada e vice-versa em qualquer ponto.

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

Observe que o pino salvar / buzzer é atribuído em qualquer um dos estados em um instante, ou seja, saída ou entrada.

O circuito:

Conexão LCD para Arduino:

Basta conectar de acordo com os esquemas anteriores e usar o potenciômetro de 10K para ajustar o contraste de visualização; resto do circuito é auto-explicativo.

S1 a S6 são botões de votação por meio dos quais os eleitores inserem sua escolha. O botão salvar e controlar deve ser mantido afastado da urna (sob 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 configuração de hardware concluída, carregue o código com os nomes dos candidatos desejados.
  • Ligue a máquina, se tudo estiver bem, ele emitirá um bipe longo.
  • Agora pressione o botão de controle e agora ele pode gravar um único voto.
  • Após cada votação, o botão de controle deve ser pressionado uma vez.
  • Assim que o último voto for lançado, pressione o botão Salvar, isso salvará os resultados e solicitará que você desconecte a fonte de alimentação (para que você possa visualizar os resultados em particular).
  • Reconecte a alimentação e automaticamente começará a mostrar os resultados. Se um candidato não obteve nenhum voto, ele exibe “null”.
  • Para realizar outra eleição, é necessário formatar o cartão SD/apagar todos os arquivos gerados por este EVM.

Observe que este EVM precisa de energia ininterrupta, qualquer interrupção rolará a contagem de votos para zero.

Por favor, escreva os nomes dos candidatos no código (máximo de 16 letras):

//———————————————— —-//

String Party1 = “MODI”;

String Party2 = “TRUMP”;

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

String Party4 = “Abdul Kalam”;

String Party5 = “Girish”;

String Party6 = “Swagatam”;

//———————————————— —–//

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

Hashtags: #Máquina #votação #eletrônica #módulo #cartão
 

FONTE


Nota: Este conteúdo 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 conteúdo.
Status (Ok Até agora)


Se tiver algum erro coloque nos comentários

Mas se gostou compartilhe!!!

Relacionados

Relacionados