Помогнете на развитието на сайта, споделяйки статията с приятели!

В този проект ще ви покажа как да проектирате и изградите проста детекторна верига за определяне скоростта на движещ се автомобил или движещ се обект с помощта на Arduino NANO и инфрачервени сензори (IR).

Принцип на действие

IR сензорите са основната част от този проект. Практически можете да приложите настройката на IR сензорите по различни начини, но в този проект използвах два IR сензора от отразяващ тип, поставяйки ги на разстояние 30 см един от друг.

IR сензорът включва IR LED (предавател) и фототранзистор (приемник). Когато обектът преминава между сензорите, светлината се отразява от обекта и попада върху фототранзистора. Използва се операционен усилвател IC (LM393), към който е свързан фототранзистор. Когато обектът е пред сензора, той изпраща логичен сигнал HIGH към Arduino.

Тоест, когато движеща се кола достигне първия IR сензор, тя ще се активира. От този момент започва таймер, който ще продължи да отброява, докато колата не достигне втория инфрачервен сензор.

Като изберете разстоянието между сензорите в рамките на 5 метра, можете да изчислите скоростта, с която автомобилът ще се движи от първия сензор към втория, тъй като вече знаете времето за управление.

Използвана формула: Скорост = разстояние / Време, където

  • Скорост - скорост,
  • разстояние - разстоянието между сензорите,
  • Време - времето, измерено от модула Arduino.

Всички изчисления и събиране на данни се извършват от Arduino, а крайният резултат се показва на LCD модула 16X2.

Използвани компоненти

компонентспецификацияБрой наКъде да купя
ArduinoNano Rev.3.01връзка
IR сензорIR FC-512връзка
LCD16X2 (1602A)1връзка
Захранващ блок12 волта1
ключSPST1връзка
потенциометър10 kΩ1връзка

Структура на проекта

На следващата фигура е показана електрическа схема на проект за детектор за скорост на превозното средство.

Верига за детектор на скоростта

В Arduino, пина D2 и D3 са прекъсвания, където D2 е int.0 и D3 е int.1. Изходните контакти на инфрачервените сензори са свързани към тези контакти.

LCD дисплеят е свързан към D4-D9 щифтовете на Arduino, където D4 е свързан към RS, D5 е свързан към E, а D6-D9 Arduino е свързан към щифтовете D4-D7 на LCD. Пина 15 (А) и 16 (К) се използват за осветяване на LCD дисплея.

Потенциометърът R1 се използва за ръчно регулиране на контраста на дисплея чрез V0.

Описание на контактите на LCD модула (1602A):

VSSМощност на модула
VDDМощност на модула
VOКонтролен контраст на дисплея
RSИзбор на регистър
RWИзбор на режим на писане или четене
EРазрешаване на достъп до индикатора
DB0-DB7Интерфейсни битове
А"+" Подсветка на захранването
K"-" Подсветка на захранването

програмиране

В началото на кода заглавният файл се декларира с името “LiquidCrystal.h”, което се използва за LCD дисплея. В следващия ред контактите на течнокристалния дисплей са посочени в функцията “LiquidCrystal lcd (4, 5, 6, 7, 8)”. Тук числото в скоби показва щифтовете Arduino, които са свързани към LCD дисплея.

 # включват LiquidCrystal LCD (4, 5, 6, 7, 8, 9); 

В редове 4 и 5, sensor1 и sensor2 са декларирани като цели числа (integer) - това са изходи на Arduino, които са свързани към IR сензори.

 int sensor1 = 2; int sensor2 = 3; 

След това се декларират 4 цели числа с името Time1, Time2, Time и flag. Където “Time1” е измереното време, когато “sensor1” е активирано, а “Time2” е измереното време, когато “sensor2” е активиран. Времето е разликата между Time1 и Time2, което е еквивалентно на времето, през което колата е пътувала между сензор1 и сензор2, или сензор2 и сензор1.

 int Time1; int Time2; int Time; int flag = 0; 

След това декларираме цяло число, което е разстоянието между сензорите IR1 и IR2 в сантиметри. Например, взех разстояние от 30 см. Вие, разбира се, можете да промените стойността си (за предпочитане до 5 метра).

 int distance = 30; 

След това променливата Speed се декларира като число с плаваща запетая (тип float). И се използва за съхраняване на скоростта на автомобила.

 скорост на поплавъка; 

Когато се стартира “void setup ()”, се задействат 2 външни функции за управление на прекъсванията “attachInterrupt (0, fun1, RISING)” и “attachInterrupt (1, fun2, FALLING)”. Например, "attachInterrupt (0, fun1, RISING") означава, че когато IR2 открие падаща вълна (int.0), прекъсването ще стартира функцията fun1.

LCD дисплеят се стартира с функцията "lcd.begin (16, 2)". Изчиства се с помощта на функцията lcd.clear (). На екрана “SPEED MEASURMENT” се отпечатва съобщение, използващо функцията “lcd.print”.

 void setup () {attachInterrupt (0, fun1, RISING); attachInterrupt (1, fun2, FALLING); lcd. започва (16, 2); lcd.clear (); lcd.print ("Измерване на скоростта"); } 

void fun1 () започва, когато е активирана "interrupt0 (int.0)". В тази функция текущото време се измерва с помощта на "Time1 = millis ()".

Функцията void fun2 () е същата като “void fun1 ()”, но тя започва, когато “interrupt1 (int.1)” е активирана.

 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 ()”, Time се измерва с “Time1” и “Time2”. "Време" трябва да бъде положително, следователно, ако е допълнително използвано. Но този цикъл се изпълнява, когато flag = 0, затова се използва условието "if". Ако "Time1" и "Time2" са равни, "Speed" ще бъде нула.

Ред 47 проверява дали (Speed == 0). Ако това условие е вярно, на дисплея се отпечатва “… .OK ….”, което показва, че системата е готова за употреба.

Линии 51 и по-долу са отговорни за показване на скоростта на движещ се обект на LCD дисплея, след като "Time1" и "Time2" станат нула.

 void loop () {if (flag == 0) {if (Time1> Time2) {Time = Time1 - Time2; Скорост = (разстояние * 1000) / Време;} друго, ако (Time2> Time1) {Time = Time2 - Time1; Скорост = (разстояние * 1000) / Време;} друг {Скорост = 0;}} if (Скорост == 0) {lcd.setCursor (0, 1); lcd.print ("……. OK ……."); } else {lcd.setCursor (2, 1); lcd.print (Скорост); lcd.print ("cm / sec"); забавяне (10500); Time1 = 0; Time2 = 0; }} 

Пълна скица на проекта:

Детектор на скоростта на движещ се обект на Arduino (471 байта, изтеглени: 42)

Демонстрация на работа

На анимацията по-долу можете да видите демонстрация на проекта. Сензорите са разположени на разстояние 30 см, а между тях се симулира движението на дръжката. В този случай скоростта на движение на дръжката е фиксирана на 17 cm / s.

Разбира се, това развитие може да се пренесе в реални условия - на пътя, чрез измерване на скоростта на превозното средство.

Демонстрация на проекта

Помогнете на развитието на сайта, споделяйки статията с приятели!

Категория: