Небольшой проект с использованием Arduino Uno для определения скорости различных движущихся объектов с помощью двух ИК-датчиков.
Комплектующие
Для создания детектора скорости нам понадобятся всего несколько деталей наряду с платой Arduino Uno.
- Arduino UNO × 1
- Светодиод (использовать с резистором) × 1
- Резистор 100 Ом
- ИК-датчик приближения × 2
- Провода-перемычки
- Кабель USB-A - Mini-USB
Для проекта я использовал сенсоры, купленные на Амазоне - OLatus OL-IR-SENSOR-READYMADE (ссылка):
Из программного обеспечения для работы нам понадобится Arduino IDE.
Схема соединения
Ниже приведена принципиальная схема нашего детектора скорости.
Прошу простить, схема общая, без резистора и в ней я поздно заметил, что провода немного перепутаны. Я использовал ИК-датчики, которые указаны в разделе компонентов.

Я бы однозначно предложил подключить к общему катоду светодиода резистор на 100 Ом. Но интересно, можно ли в теории подключить общий катод напрямую к GND вместо того, чтобы подключать его к контакту 11 и понижать его? Пишите в комментариях.
Итоговое устройство не в боксе выглядело так:

Код детектора
Код для нашего детектора скорости ниже. Загрузите его в Arduino после того, как вы собрали схему. sen1
- это первый датчик. sen2
- второй. ledPin
- контакт к светодиоду RGB. Расстояние между моими датчиками составляло 7,5 см, но вы можете настроить под себя переменную speedconst
.
int sen1=A0;
int sen2=A3;
int ledPin=9;
unsigned long t1=0;
unsigned long t2=0;
float velocity;
float velocity_real;
float timeFirst;
float timeScnd;
float diff;
float speedConst=7.5; //in cm.
void setup()
{
Serial.begin(9600);
pinMode(sen1,INPUT);
pinMode(sen2,INPUT);
analogWrite(11,LOW);
analogWrite(10,HIGH);
}
void loop()
{
if (analogRead(sen1)<500 && analogRead(sen2)>500)
{
timeFirst = millis();
digitalWrite(ledPin, LOW);
delay(30);
}
if (analogRead(sen2)>500 && analogRead(sen1)<500)
{
timeScnd = millis();
diff = timeScnd - timeFirst;
velocity = speedConst / diff;
velocity_real = (velocity*360)/100; //milliseconds to hours and centimetres to kilometeres.
delay(30);
digitalWrite(ledPin, HIGH);
Serial.print("\n the velocity is : ");
Serial.println(velocity_real);
Serial.print(" km/hr. ");
delay(500);
digitalWrite(ledPin,LOW);
delay(500);
}
/*else if(analogRead(sen2)<500 && analogRead(sen1)<500) //uncomment if you want to write it
{
Serial.print("\n Error:404/ the object is tooo big.");
}*/
/* else{Serial.print("\n error:404/no object detected ");} //uncomment if you want to write it
}
Итоговое видео
Это довольно простой, но интересный проект по измерению скорости, а также получению данных о скорости на последовательном мониторе ПК небольших объектов, таких как игрушечные машинки и т.п., скорость которых трудно измерить.
27 декабря 2020 в 10:46
Ничего я не увидел кроме рекламы. И нафига приводить неправильную схему?
27 декабря 2020 в 15:32
1. Ругаться плохо, много болезней от этого.
2. Скажите, пожалуйста, если мы уберем рекламу вы готовы оплачивать работу людей — авторов, переводчиков, редакторов и т.д.?
3. В чем «неправильность» схемы?