Mudanças entre as edições de "Medidor de Velocidade"
Ir para navegação
Ir para pesquisar
(→Código) |
(→Código) |
||
(2 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 7: | Linha 7: | ||
== Código== |
== Código== |
||
+ | <pre> |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
− | |||
⚫ | |||
/* |
/* |
||
Linha 24: | Linha 18: | ||
v = dist/Time*3600*87[km/h em escala real] |
v = dist/Time*3600*87[km/h em escala real] |
||
⚫ | |||
+ | #include <LiquidCrystal.h> |
||
⚫ | |||
+ | |||
⚫ | |||
⚫ | |||
⚫ | |||
+ | |||
⚫ | |||
+ | |||
⚫ | |||
⚫ | |||
+ | |||
+ | float vel = 0; //em mm/s |
||
+ | |||
+ | LiquidCrystal lcd_1(12, 11, 5, 4, 3, 2); |
||
− | void setup() |
+ | void setup(){ |
+ | lcd_1.begin(16, 2); // Set up the number of columns and rows on the LCD. |
||
+ | |||
pinMode(sensor_1, INPUT_PULLUP); |
pinMode(sensor_1, INPUT_PULLUP); |
||
− | pinMode(sensor_2, INPUT_PULLUP); |
+ | pinMode(sensor_2, INPUT_PULLUP); |
+ | // Print a message to the LCD. |
||
⚫ | |||
+ | lcd_1.print("hello world!"); |
||
− | Serial.begin(9600); |
||
+ | delay(500); |
||
⚫ | |||
+ | lcd_1.setCursor(0, 0); |
||
+ | lcd_1.print("vel(cm/s)maquete"); |
||
+ | lcd_1.setCursor(0, 1); |
||
+ | lcd_1.print("Vel(Km/h): real"); |
||
+ | delay(2000); |
||
+ | lcd_1.clear(); |
||
+ | lcd_1.print("Esperando"); |
||
+ | |||
} |
} |
||
− | void loop() |
+ | void loop(){ |
if (!digitalRead(sensor_1)) { |
if (!digitalRead(sensor_1)) { |
||
Time = micros(); |
Time = micros(); |
||
+ | lcd_1.clear(); |
||
+ | lcd_1.print("Fazendo leitura"); |
||
⚫ | |||
while (digitalRead(sensor_2)) { |
while (digitalRead(sensor_2)) { |
||
⚫ | |||
} |
} |
||
⚫ | |||
delta_time = micros() - Time; |
delta_time = micros() - Time; |
||
+ | |||
− | Serial.println(delta_time); |
||
+ | //APARTIR DAQUI DEVERIA SER UMA FUNÇÂO// |
||
− | Serial.println(115*313.2/delta_time/1000); |
||
+ | //// Eu não sei tipagem ._. //// |
||
− | Serial.println(); |
||
+ | ////// Vai dar merda ... ////// |
||
+ | |||
+ | vel = dist/delta_time; //em mm/us |
||
+ | lcd_1.clear(); |
||
+ | lcd_1.print("vel(cm/s): "); |
||
+ | lcd_1.print(vel*pow(10, 5)); |
||
+ | lcd_1.setCursor(0, 1); |
||
+ | lcd_1.print("Vel(Km/h): "); |
||
+ | lcd_1.print(vel*3600*87); |
||
delay(5000); |
delay(5000); |
||
+ | lcd_1.clear(); |
||
⚫ | |||
⚫ | |||
} |
} |
||
+ | //IGNORAR DAQUI PARA BAIXO |
||
if (!digitalRead(sensor_2)) { |
if (!digitalRead(sensor_2)) { |
||
Time = micros(); |
Time = micros(); |
||
Linha 70: | Linha 102: | ||
delay(5000); |
delay(5000); |
||
} |
} |
||
+ | } |
||
− | }</code> |
||
+ | |||
+ | |||
+ | </pre> |
Edição atual tal como às 11h55min de 31 de agosto de 2024
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
Código
/* Escala H0 1:87 Velocidade = Espaço / Tempo v = dist [mm] / Time [micro_sec] v = dist/Time*3600 [km/h] v = dist/Time*3600*87[km/h em escala real] */ #include <LiquidCrystal.h> #define sensor_1 7 // Pino do sensor #define sensor_2 8 // Pino do sensor #define Esperando 13 // Pino do LED de leitura float dist = 74; //em mm unsigned long Time = 0; //micro sec unsigned long delta_time = 0; //micro sec float vel = 0; //em mm/s LiquidCrystal lcd_1(12, 11, 5, 4, 3, 2); void setup(){ lcd_1.begin(16, 2); // Set up the number of columns and rows on the LCD. pinMode(sensor_1, INPUT_PULLUP); pinMode(sensor_2, INPUT_PULLUP); // Print a message to the LCD. lcd_1.print("hello world!"); delay(500); lcd_1.setCursor(0, 0); lcd_1.print("vel(cm/s)maquete"); lcd_1.setCursor(0, 1); lcd_1.print("Vel(Km/h): real"); delay(2000); lcd_1.clear(); lcd_1.print("Esperando"); } void loop(){ if (!digitalRead(sensor_1)) { Time = micros(); lcd_1.clear(); lcd_1.print("Fazendo leitura"); digitalWrite(Esperando,HIGH); while (digitalRead(sensor_2)) { } delta_time = micros() - Time; //APARTIR DAQUI DEVERIA SER UMA FUNÇÂO// //// Eu não sei tipagem ._. //// ////// Vai dar merda ... ////// vel = dist/delta_time; //em mm/us lcd_1.clear(); lcd_1.print("vel(cm/s): "); lcd_1.print(vel*pow(10, 5)); lcd_1.setCursor(0, 1); lcd_1.print("Vel(Km/h): "); lcd_1.print(vel*3600*87); delay(5000); lcd_1.clear(); lcd_1.print("Esperando"); digitalWrite(Esperando,LOW); } //IGNORAR DAQUI PARA BAIXO if (!digitalRead(sensor_2)) { Time = micros(); while (digitalRead(sensor_1)) { digitalWrite(Esperando,HIGH); } digitalWrite(Esperando,LOW); delta_time = micros() - Time; Serial.print("Time: "); Serial.println(Time); Serial.print("Delta: "); Serial.println(delta_time); Serial.print("Velocidade: "); Serial.print(dist/delta_time); Serial.println("mm/us"); Serial.print("Velocidade: "); Serial.print(dist*3600*87/delta_time); Serial.println("Km/h"); Serial.println(); delay(5000); } }