Olá pessoal ! Bom dia ,

Estou inciciando um projeto para gerenciar voltas em uma pista de Slot car 
(autorama) com o arduino.
Dei os primeiros passos na elaboração do código, porém sou iniciante em 
programação e me faltam alguns conhecimentos que certamente podem ser
encontrados aqui no grupo para que eu possa desembaraçar o projeto e
continuar com sua execução.
Iniciei o código com um contador simples, porém gostaria de implementar 
uma função no loop que lesse quando fosse completado o número de 20 voltas
e então acionasse um relê, e ainda implementar um contador de tempo em
millis entre os intervalos de acionamento e estou “empacado” nessas funções
do loop.
Solicito ainda uma análise do fluxo do programa para possíveis sugestões, 
complementações, etc.

agradeço desde já !

Miguel

>>>>>> Componentes do gerenciador de voltas

1 LCD 16x2
1 buzzer (1 pino)
1 arduino standalone
1 micro sdcard
2 sensores IR um para cada pista // detecta passagem do carro aciona
contagem de tempo e de voltas (2 pinos)
1 rele para ligar desligar energia nas pistas (1 pino)
outros: pista, carros, aceleradores, fonte de energia 6 volts
tipo de corrida = 4 baterias de 20 voltas, total 80 voltas
========fluxo do programa conta voltas ======== 
//inicio de corrida 

//escreve mensagem no lcd “gerenciador pronto, posicionar os carros na
pista e acionar o botão”

// aciona um botão que abre a contagem regressiva de 4 segundos no LCD e bip
sonoro acompanhando a cada segundo, ao final da contagem relês energizam a
pista e corrida é iniciada

//contagem de voltas

// sensor infra vermelho detecta a passagem dos carros em um ponto da pista
registra número de cada volta de 01 a 20 e o tempo da volta, contagem do
tempo de cada volta em segundos ex: 3,456 segundos (3 casas decimais)

//interrupção de corrida via botão

//no caso de um dos carros sair da pista durante a corrida um botão de
interrupção pode ser acionado, então ocorre um delay de 1000ms ( 1 seg =
penalidade pro carro que saiu da pista) e o relé é acionado cortando a
energia para as 2 pistas. O número de voltas é mantido na tela do LCD e é
mantido também o tempo da volta até o momento da interrupção.

//mensagem no LCD “ corrida interrompida, reposicionar o carro na pista”

//Após o carro ser reposicionado na pista, aciona-se o botão que inicia uma
contagem regressiva de 3 segundos com bip sonoro, então os reles são
reativados, energizando a pista e a corrida é reiniciada

// o botão de reinicio de corrida é o mesmo botão de interrupção de
corrida função dele aciona pino digital no arduino que liga ou desliga o
relé da energia das pistas.

// quando um carro completa 20 voltas o relê desliga as pistas e então os
carros trocam de pista para inicio de outra bateria, mas o número de voltas
da bateria anterior é somado ao numero de voltas da próxima bateria e assim
por diante, até o total de 80 voltas ex.: { bateria 01 1 carro ,1 pista 1,
20 voltas) e (carro 2, pista 2, 19 voltas)} + {bateria 02 será (carro 1,
pista 2, 20 voltas+próximas voltas),(carro 2, pista 1, 19 voltas+próximas
voltas)} e assim por diante até que um dos carros complete 80 voltas.

//encerramento da corrida

//quando um dos dois carros completarem 80 voltas o relê corta energia para
as pistas os tempos e número de voltas são registrados no sd card em
arquivo txt

//mensagem no LCD “ corrida encerrada, resultados: vencedor carro da pista
atual: “1” ou “2” melhor tempo = 3,456 seg. tempo médio = 3,456 seg. “80
voltas ”

//mensagem no LCD “ corrida encerrada, resultados carro da pista atual “2”

melhor tempo = 3,450 seg. tempo médio = 3,450 seg. “78” voltas ”

//mensagem no LCD “acione o botão para iniciar uma nova corrida”

// as 3 últimas mensagens são repetidas continuamente até o botão se
acionado

======== fim =======
// código preliminar gerenciador voltas slot car arduino
const int sensorpista = 2; // Pino digital 2 para uma pista
int contadorsensor = 0; // Contador para cada vez que o sensor da pista é
acionado
int sensorestado = 0; // Estado atual do sensor
int sensorultimoestado= 0; // Estado anterior do sensor
void setup() {
pinMode(sensorpista, INPUT); // Definindo o pino digital 2 como entrada
Serial.begin(9600); // Disponibiliza o serial Monitor
}
void loop() {
sensorestado = digitalRead(sensorpista); // Lê o estado pino 2 e armazena
em sensorestado
if (sensorestado != sensorultimoestado) { //Compara Estado atual pino 2
c/Est.anterior
if (sensorestado == HIGH) { //Se o Estado atual for ALTO
contadorsensor++; // Incrementa o contador
Serial.print("numero de acionamentos: "); // Mostra frase: "número de
acionamentos"
Serial.println(contadorsensor, DEC); // Mostra o n de vezes que foi acionado
Serial.println("segundos"); //ainda falta implementar
delay (100);
}
else { // Senão
sensorultimoestado=sensorestado; // Salva o Estado atual do Últim Est para
o próximo loop
}}}

Exibições: 1553

Responder esta

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço