Cronômetro de Slot Car a Laser com Display GLCD – Precisão para Pistas RC
Componentes e Materiais
- 1x Arduino Mega 2560
- 1x Módulo Laser KY-008
- 1x Sensor receptor laser (par do KY-008)
- 1x Display GLCD KS0108 (128x64)
Aplicativos e Serviços
- Arduino IDE
- Biblioteca openGLCD: bitbucket.org/bperrybap/openglcd
- Pinout GLCD: playground.arduino.cc
Sobre o Projeto
Introdução
Portão de cronometragem para pista de slot car (autorama). Laser + sensor detectam passagem do carro; GLCD mostra volta atual, tempo da última volta, melhor tempo e tempo da volta em andamento.
Hardware
- Laser KY-008: 3 pinos (-, +, S). Curto S+VCC no 5V (laser sempre ligado) ou S em pino digital para controle.
- Sensor: GND, VCC, SIGNAL → pino digital Arduino (pino 2 no código).
- GLCD: Conector dedicado facilitado (imagem). Biblioteca openGLCD.
Maior desafio: alinhamento preciso laser-sensor.
Código Completo (openGLCD)
/* Time keeping digital gate - Tal Ofer */
#include
// Variáveis de tempo
unsigned long currentRunStartMillis, lastRunInMillis, bestRunInMillis, savedMillis;
int currentLap = 0;
int sec_val, milli_val;
// Áreas de texto no GLCD
gText t1, t2, t3;
// Sensor laser
const int gateSensorPin = 2;
int gateSensorState, lastgateSensorState = LOW;
unsigned long lastDebounceTime = 0;
const int debounceDelay = 50;
void setup() {
pinMode(gateSensorPin, INPUT);
delay(50); // Estabiliza sensor/laser
GLCD.Init(NON_INVERTED);
// Define áreas de exibição
t1.DefineArea(textAreaTOP, lcdnums14x24); // Voltas + tempo atual
t2.DefineArea(0, GLCD.CenterY, 8, 2, fixednums7x15); // Última volta
t3.DefineArea(GLCD.CenterX, GLCD.CenterY, 8, 2, fixednums7x15); // Melhor volta
t3.SetFontColor(WHITE); t3.ClearArea();
// Rótulos fixos
GLCD.SelectFont(System5x7);
GLCD.CursorTo(1, 4); GLCD.print("LAST");
GLCD.CursorTo(11, 4); GLCD.print("BEST");
// Reset parâmetros
currentRunStartMillis = lastRunInMillis = bestRunInMillis = 0;
currentLap = 0;
}
void loop() {
int reading = digitalRead(gateSensorPin);
// Debounce
if (reading != lastgateSensorState) lastDebounceTime = millis();
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != gateSensorState) {
gateSensorState = reading;
if (gateSensorState == LOW) { // Feixe interrompido = volta completa
savedMillis = millis();
if (currentLap > 0) {
lastRunInMillis = savedMillis - currentRunStartMillis;
if (lastRunInMillis < bestRunInMillis || bestRunInMillis == 0)
bestRunInMillis = lastRunInMillis;
}
currentRunStartMillis = savedMillis;
currentLap++;
}
}
}
lastgateSensorState = reading;
// Atualiza display
savedMillis = millis();
if (currentLap > 0)
calcResultFromMillis(savedMillis - currentRunStartMillis, &sec_val, &milli_val);
else
calcResultFromMillis(0, &sec_val, &milli_val);
// VOLTAS + TEMPO ATUAL
t1.CursorTo(0, 0);
t1.Printf(F("%02d"), currentLap);
t1.CursorTo(3, 0);
t1.Printf(F("%02d.%03d"), sec_val, milli_val);
// ÚLTIMA VOLTA
calcResultFromMillis(lastRunInMillis, &sec_val, &milli_val);
t2.CursorTo(1, 1);
t2.Printf(F("%02d.%03d"), sec_val, milli_val);
// MELHOR VOLTA
calcResultFromMillis(bestRunInMillis, &sec_val, &milli_val);
t3.CursorTo(1, 1);
t3.Printf(F("%02d.%03d"), sec_val, milli_val);
}
void calcResultFromMillis(unsigned long value, int *sec, int *milli) {
*sec = int(value / 1000);
*milli = value - *sec * 1000;
}
Funcionamento
- Feixe laser contínuo → sensor em HIGH.
- Carro passa → interrompe feixe → sensor LOW (com debounce 50ms).
- Calcula tempo desde última interrupção → volta completa.
- Atualiza: número de voltas, tempo volta atual, última volta, melhor volta.
- Formato: SS.mmm (segundos.milissegundos).
Melhorias Possíveis
- Múltiplas pistas (mais sensores + portas).
- Log em SD card para análise posterior.
- Transmissão sem fio para PC/app.
- Detecção de direção (2 sensores) para evitar contagem dupla.
Processo de manufatura
- Guia Especializado de Marcação a Laser em Alumínio: Precisão, Durabilidade e Aplicações Industriais
- Guia Completo de Marcação a Laser: Tipos, Benefícios e Aplicações
- Marcação a Laser por Fibra: Precisão, Velocidade e Versatilidade para Indústrias Modernas
- Ponteiro Laser: Design, Fabricação e Visão Geral de Segurança
- Montanhas-Russas: Dos Trenós de Neve aos Gigantes de Aço
- Lasers de Semicondutor: Geração de Luz de Precisão para Tecnologia Moderna
- Lasers de Estado Sólido: Tecnologia, Aplicações e Tendências Futuras
- A Ampulheta: História, Artesanato e Atrativo Moderno
- Como Instalar Display TFT 3.5″ Kuman no RetroPie – Guia Passo a Passo
- Rpibot: Robô Móvel de Baixo Custo e Expansível para Aprendizado de Sistemas Embarcados