Mudanças entre as edições de "Medidor de Velocidade Papel Alumínio"

De Garoa Hacker Clube
Ir para navegação Ir para pesquisar
Linha 7: Linha 7:
   
 
== Código==
 
== Código==
 
 
<pre>
 
<pre>
unsigned long Time = 0;
 
unsigned long delta_time = 0;
 
 
#define sensor_1 22 // Pino do sensor
 
#define sensor_2 53 // Pino do sensor
 
#define Esperando 13 // Pino do LED de leitura
 
   
float dist = 74; // Distância entre os sensores em mm
 
 
/*
 
/*
   
Linha 26: 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>
*/
 
  +
 
#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() {
+
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.
pinMode(Esperando, OUTPUT);
 
  +
lcd_1.print("hello world!");
Serial.begin(9600);
 
  +
delay(500);
digitalWrite(Esperando,LOW);
 
  +
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");
 
digitalWrite(Esperando,HIGH);
 
while (digitalRead(sensor_2)) {
 
while (digitalRead(sensor_2)) {
digitalWrite(Esperando,HIGH);
 
 
}
 
}
digitalWrite(Esperando,LOW);
 
 
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();
 
lcd_1.print("Esperando");
 
digitalWrite(Esperando,LOW);
 
}
 
}
  +
//IGNORAR DAQUI PARA BAIXO
 
if (!digitalRead(sensor_2)) {
 
if (!digitalRead(sensor_2)) {
 
Time = micros();
 
Time = micros();
Linha 73: Linha 103:
 
}
 
}
 
}
 
}
  +
  +
 
</pre>
 
</pre>

Edição das 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);
  }
}