- Materiais requisitados
- Calculando a velocidade e mostrando no velocímetro analógico
- Diagrama de circuito e conexões
- Explicação de programação
Medir a velocidade / rpm de um veículo ou motor sempre foi um projeto fascinante de tentar. Neste projeto, iremos construir um Velocímetro Analógico usando o Arduino. Usaremos o módulo Sensor IR para medir a velocidade. Existem outras formas / sensores para isso, como o sensor Hall para medir a velocidade, mas usar um sensor IR é fácil porque o módulo sensor IR é um dispositivo muito comum e podemos obtê-lo facilmente no mercado e também pode ser usado em qualquer tipo de veículo motorizado.
Neste projeto, vamos mostrar a velocidade tanto na forma analógica quanto na digital. Ao fazer este projeto, também aprimoraremos nossas habilidades no aprendizado do Arduino e do motor de passo, pois este projeto envolve o uso de interrupções e temporizadores. Ao final deste projeto você poderá calcular a velocidade e distâncias percorridas por qualquer objeto girando e visualizá-las em uma tela LCD 16x2 em formato digital e também em medidor analógico. Então, vamos começar com este Circuito Velocímetro e Odômetro com Arduino
Materiais requisitados
- Arduino
- Um motor de passo bipolar (4 fios)
- Driver de motor de passo (Módulo L298n)
- Módulo sensor infravermelho
- Visor LCD 16 * 2
- Resistor 2.2k
- Fios de conexão
- Breadboard.
- Fonte de energia
- Impressão da imagem do velocímetro
Calculando a velocidade e mostrando no velocímetro analógico
Um sensor de infravermelho é um dispositivo que pode detectar a presença de um objeto na frente dele. Usamos dois rotores de pás (ventoinha) e colocamos o sensor IR próximo a eles de forma que toda vez que as pás girarem o sensor IR detecte. Em seguida, usamos a ajuda de temporizadores e interrupções no Arduino para calcular o tempo necessário para uma rotação completa do motor.
Aqui neste projeto, usamos a interrupção de prioridade mais alta para detectar rpm e a configuramos em modo crescente. Assim, sempre que a saída do sensor for LOW para High, a função RPMCount () será executada. E como usamos o rotor de duas pás, significa que a função será chamada 4 vezes em uma rotação.
Uma vez que o tempo gasto é conhecido, podemos calcular o RPM usando as fórmulas abaixo, onde 1000 / tempo gasto nos dará o RPS (revolução por segundo) e multiplicá-lo por 60 fornecerá o RPM (revolução por minuto)
rpm = (60/2) * (1000 / (milis () - tempo)) * REV / bladesInFan;
Depois de obter RPM, a velocidade pode ser calculada pela fórmula dada:
Velocidade = rpm * (2 * Pi * raio) / 1000
Sabemos que Pi = 3,14 e o raio é 4,7 polegadas
Mas primeiro precisamos converter o raio em metros de polegadas:
raio = ((raio * 2,54) /100,0) metros Velocidade = rpm * 60,0 * (2,0 * 3,14 * raio) / 1000,0) em quilômetros por hora
Aqui, multiplicamos rpm por 60 para converter rpm em rph (revolução por hora) e dividimos por 1000 para converter metros / hora em quilômetros / hora.
Depois de termos a velocidade em kmh, podemos mostrar esses valores diretamente no LCD na forma digital, mas para mostrar a velocidade na forma analógica precisamos fazer mais um cálculo para descobrir o não. de etapas, o motor de passo deve se mover para mostrar a velocidade no medidor analógico.
Aqui nós usamos um motor de passo bipolar de 4 fios para medidor analógico, que tem 1,8 grau significa 200 passos por revolução.
Agora temos que mostrar 280 Kmh no velocímetro. Então, para mostrar o motor de passo de 280 Kmh precisa se mover 280 graus
Portanto, temos maxSpeed = 280
E maxSteps será
maxSteps = 280 / 1,8 = 155 etapas
Agora temos uma função em nosso código Arduino, a saber, função de mapa , que é usada aqui para mapear a velocidade em etapas.
Etapas = mapa (velocidade, 0, maxSpeed , 0, maxSteps);
Então agora nós temos
etapas = mapa (velocidade, 0,280,0,155);
Depois de calcular as etapas, podemos aplicar diretamente essas etapas na função do motor de passo para mover o motor de passo. Também precisamos cuidar das etapas atuais ou do ângulo do motor de passo usando cálculos dados
currSteps = Passos etapas = currSteps-preSteps preSteps = currSteps
aqui currSteps são as etapas atuais que vêm do último cálculo e preSteps são as últimas etapas executadas.
Diagrama de circuito e conexões
O diagrama do circuito para este velocímetro analógico é simples, aqui usamos o LCD 16x2 para mostrar a velocidade em formato digital e o motor de passo para girar a agulha do velocímetro analógico.
O LCD 16x2 é conectado nos seguintes pinos analógicos do Arduino.
RS - A5
RW - GND
EN - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0
Um resistor de 2.2k é usado para definir o brilho do LCD. Um módulo de sensor IR, que é usado para detectar a lâmina do ventilador para calcular o rpm, é conectado à interrupção 0 significa pino D2 do Arduino.
Aqui, usamos um driver de motor de passo denominado módulo L293N. Os pinos IN1, IN2, IN3 e IN4 do driver do motor de passo são conectados diretamente ao D8, D9, D10 e D11 do Arduino. O resto das conexões são fornecidas no diagrama de circuito.
Explicação de programação
O código completo do Arduino Speedomete r é fornecido no final, aqui estamos explicando algumas partes importantes dele.
Na parte de programação, incluímos todas as bibliotecas necessárias, como biblioteca de motor de passo, biblioteca LiquidCrystal LCD e pinos declarados para eles.
#incluir
Depois disso, pegamos algumas variáveis e macros para realizar os cálculos. Os cálculos já são explicados na seção anterior.
byte volátil REV; unsigned long int rpm, RPM; st longo sem sinal = 0; muito tempo sem sinal; int ledPin = 13; int led = 0, RPMlen, prevRPM; sinalizador int = 0; int flag1 = 1; #define bladesInFan 2 float radius = 4.7; // polegada int preSteps = 0; float stepAngle = 360.0 / (float) stepsPerRevolution; float minSpeed = 0; float maxSpeed = 280.0; float minSteps = 0; float maxSteps = maxSpeed / stepAngle;
Depois disso, inicializamos o LCD, Serial, interrupção e motor de passo na função de configuração
void setup () { myStepper.setSpeed (60); Serial.begin (9600); pinMode (ledPin, OUTPUT); lcd.begin (16,2); lcd.print ("Velocímetro"); atraso (2000); attachInterrupt (0, RPMCount, RISING); }
Depois disso, lemos o rpm na função de loop e realizamos um cálculo para obter a velocidade e convertê-la em etapas para operar o motor de passo para mostrar a velocidade na forma analógica.
loop void () { readRPM (); raio = ((raio * 2,54) /100,0); // convertendo no medidor int Speed = ((float) RPM * 60,0 * (2,0 * 3,14 * raio) /1000,0); // RPM em 60 minutos, diâmetro do pneu (2pi r) r é o raio, 1000 para converter em km int Steps = map (Speed, minSpeed, maxSpeed, minSteps, maxSteps); if (sinalizador1) { Serial.print (velocidade); Serial.println ("Kmh"); lcd.setCursor (0,0); lcd.print ("RPM:"); lcd.print (RPM); lcd.print (""); lcd.setCursor (0,1); lcd.print ("Velocidade:"); lcd.print (velocidade); lcd.print ("Km / h"); flag1 = 0; } int currSteps = Passos;etapas internas = currSteps-preSteps; preSteps = currSteps; myStepper.step (etapas); }
Aqui temos a função reapRPM () para calcular o RPM.
int readRPM () { if (REV> = 10 or millis ()> = st + 1000) // ATUALIZARÁ APÓS A CADA 10 LEITURAS ou 1 segundo em inatividade { if (flag == 0) flag = 1; rpm = (60/2) * (1000 / (milis () - tempo)) * REV / bladesInFan; tempo = milis (); REV = 0; int x = rpm; enquanto (x! = 0) { x = x / 10; RPMlen ++; } Serial.println (rpm, DEC); RPM = rpm; atraso (500); st = milis (); flag1 = 1; } }
Finalmente, temos a rotina de interrupção que é responsável por medir a revolução do objeto
void RPMCount () { REV ++; if (led == LOW) { led = HIGH; } else { led = LOW; } digitalWrite (ledPin, led); }
É assim que você pode simplesmente construir um velocímetro analógico usando o Arduino. Isso também pode ser construído usando o sensor Hall e a velocidade pode ser exibida no smartphone, siga este tutorial do Velocímetro Arduino para o mesmo.