Medidor de Velocidade Papel Alumínio
Circuito
Bem simples, apenas um Arduino com o GND ligado a um dos trilhos e deois sensores que são lâminas de papel aluminio por cima deste trilho, quando o trem passa ele fecha contato e detecta que o momento, quando passa pelo segundo o Arduino calcula a velocidade e manda via serial.
TODO
colocar um display para exibir a velocidade.melhorar o código com uma função para fazer o Seria.print- não sei
Código
#include <LiquidCrystal.h> #define SENSOR_1 7 // Pino do sensor 1 #define SENSOR_2 8 // Pino do sensor 2 #define LED_STATUS 13 // Pino do LED de leitura const float DIST_MM = 74; // Distância em mm LiquidCrystal lcd(12, 11, 5, 4, 3, 2); unsigned long startTime = 0; // Tempo em microssegundos unsigned long elapsedTime = 0; // Tempo decorrido em microssegundos float speed_mm_per_us = 0; // Velocidade em mm/µs float speed_kmh = 0; // Velocidade em km/h void setup() { lcd.begin(16, 2); // Inicializa o LCD com 16 colunas e 2 linhas pinMode(SENSOR_1, INPUT_PULLUP); pinMode(SENSOR_2, INPUT_PULLUP); pinMode(LED_STATUS, OUTPUT); lcd.print("hello world!"); delay(500); lcd.clear(); lcd.print("Vel(cm/s) Maquete"); lcd.setCursor(0, 1); lcd.print("Vel(Km/h): Real"); delay(2000); lcd.clear(); lcd.print("Esperando"); } void loop() { if (!digitalRead(SENSOR_1)) { startTime = micros(); lcd.clear(); lcd.print("Fazendo leitura"); digitalWrite(LED_STATUS, HIGH); while (digitalRead(SENSOR_2)) { // Espera até o SENSOR_2 ser acionado } elapsedTime = micros() - startTime; calculateSpeed(); displaySpeed(); delay(5000); lcd.clear(); lcd.print("Esperando"); digitalWrite(LED_STATUS, LOW); } if (!digitalRead(SENSOR_2)) { startTime = micros(); lcd.clear(); lcd.print("Fazendo leitura"); digitalWrite(LED_STATUS, HIGH); while (digitalRead(SENSOR_1)) { // Espera até o SENSOR_2 ser acionado } elapsedTime = micros() - startTime; calculateSpeed(); displaySpeed(); delay(5000); lcd.clear(); lcd.print("Esperando"); digitalWrite(LED_STATUS, LOW); } } void calculateSpeed() { // Calcula a velocidade em mm/µs e km/h speed_mm_per_us = DIST_MM / elapsedTime; speed_kmh = speed_mm_per_us * 3600 * 87; // 87 é o fator de escala } void displaySpeed() { lcd.clear(); lcd.print("Vel(cm/s): "); lcd.print(speed_mm_per_us * 1e5); // Convertendo para cm/s lcd.setCursor(0, 1); lcd.print("Vel(Km/h): "); lcd.print(speed_kmh); // Velocidade em km/h }