В этом проекте будет показано, как измерить скорость передвигающейся машины (или человека, или какого-либо другого объекта) с помощью нехитрого устройства на Arduino. Автоинспекция использует подобный тип системы для регистрации превышения скорости транспортных средств. Наш проект немного отличается от системы, используемой дорожной полицией, но общая концепция детектора скорости автомобиля такая же.

В этом проекте будет показано, как измерить скорость передвигающейся машины (или человека, или какого-либо другого объекта) с помощью нехитрого устройства на Arduino. Автоинспекция использует подобный тип системы для регистрации превышения скорости транспортных средств. Наш проект немного отличается от системы, используемой дорожной полицией, но общая концепция детектора скорости автомобиля такая же.
Оба ИК-датчика подключены к контактам прерывания Arduino, и они обнаруживают спад сигнала. Цель использования прерывания заключается в том, что оно повышает эффективность системы. ЖК-дисплей подключен к Arduino, и измеренная скорость отображается на ЖК-дисплее.
Когда автомобиль движется перед первым датчиком, он передает выходной сигнал в Arduino, Arduino обнаруживает спад сигнала, теперь запускается внутренний таймер Arduino, а когда автомобиль движется перед вторым датчиком, таймер останавливается. Теперь Arduino измеряет скорость автомобиля, которая измеряется расстоянием во времени: скорость = расстояние/время.
ИК-датчик включает в себя ИК-светодиод и фототранзистор. Когда объект проходит между датчиками, свет отражается от объекта и падает на фототранзистор. Здесь используется операционный усилитель IC (LM358) и к нему подключен фототранзистор. Когда объект оказывается перед датчиком, он посылает логический высокий сигнал в Arduino.
Принципиальная схема подключения показана на рисунке ниже. В качестве управляющего устройства используется Arduino Nano. Вы можете использовать любые другие варианты Arduino по вашему выбору.


Код программы детектора скорости на Arduino представлен далее.
#include<LiquidCrystal.h>
LiquidCrystal lcd(4, 5, 6, 7, 8, 9);
int sensor1 = 2;
int sensor2 = 3;
int Time1;
int Time2;
int Time;
int flag = 0;
int distance = 27;
float Speed;
void setup() {
attachInterrupt(0,fun1,RISING);
attachInterrupt(1,fun2,FALLING);
lcd.begin(16,2);
lcd.clear();
lcd.print("SPEED MEASURMENT");
}
void fun1()
{
Time1 = millis();
if (flag == 0) {flag = 1;}
else {flag = 0;}
}
void fun2()
{
Time2 = millis();
if (flag == 0) {flag = 1;}
else {flag = 0;}
}
void loop() {
if (flag == 0){
if (Time1 > Time2) {Time = Time1 - Time2; Speed = (distance*1000)/Time;}
else if (Time2 > Time1) {Time = Time2 - Time1; Speed = (distance*1000)/Time;}
else {Speed = 0;}
}
if (Speed == 0) {
lcd.setCursor(0, 1);
lcd.print(".......OK.......");
}
else {
lcd.setCursor(2, 1);
lcd.print(Speed);
lcd.print(" cm/sec");
delay(10000);
Time1 = 0;
Time2 = 0;
}
}

© digitrode.ru