Pomozte vývoji webu a sdílení článku s přáteli!

V tomto projektu vám ukážu, jak navrhnout a postavit jednoduchý detektorový obvod pro určení rychlosti pohybujícího se automobilu nebo jakéhokoli pohybujícího se objektu pomocí Arduino NANO a infračervených senzorů (IR).

Princip činnosti

Hlavní součástí tohoto projektu jsou infračervené senzory. Prakticky můžete nastavení IR senzorů realizovat různými způsoby, ale v tomto projektu jsem použil dva IR senzory reflexního typu, které jsou umístěny ve vzdálenosti 30 cm od sebe.

IR senzor obsahuje IR LED (vysílač) a fototranzistor (přijímač). Když objekt přechází mezi senzory, světlo se od objektu odráží a dopadá na fototranzistor. Je použit operační zesilovač IC (LM393), ke kterému je připojen fototranzistor. Když je objekt před senzorem, pošle logický HIGH signál do Arduina.

To znamená, že když se pohybující vůz dostane k prvnímu IR senzoru, bude aktivován. Od této chvíle se spustí časovač, který bude pokračovat v odpočítávání, dokud auto nedosáhne druhého IR senzoru.

Výběrem vzdálenosti mezi senzory do 5 metrů můžete vypočítat rychlost, s jakou se vůz bude pohybovat od prvního senzoru k druhému, protože již znáte dobu řízení.

Použitý vzorec: Rychlost = vzdálenost / čas, kde

  • Rychlost - rychlost,
  • vzdálenost - vzdálenost mezi čidly,
  • Čas - čas měřený modulem Arduino.

Veškeré výpočty a sběr dat provádí Arduino a konečný výsledek je zobrazen na LCD modulu 16X2.

Použité komponenty

SoučástSpecifikacePočetKde koupit
ArduinoNano Rev3.01Odkaz
IR senzorIR FC-512Odkaz
LCD16X2 (1602A)1Odkaz
Napájecí jednotka12 voltů1
PřepínačSPST1Odkaz
Potenciometr10 kΩ1Odkaz

Přehled projektu

Následující obrázek znázorňuje schéma zapojení detektoru rychlosti vozidla.

Obvod detektoru rychlosti

V Arduinu jsou piny D2 a D3 přerušení, kde D2 je int.0 a D3 je int.1. K těmto kontaktům jsou připojeny výstupní kontakty IR senzorů.

LCD displej je připojen k pinům D4-D9 od Arduina, kde je D4 připojen k RS, D5 je připojen k E a D6-D9 Arduino je připojen k pinům D4-D7 na LCD. Kolíky 15 (A) a 16 (K) slouží k osvětlení LCD.

Potenciometr R1 se používá k ručnímu nastavení kontrastu displeje přes V0.

Popis kontaktů modulu LCD (1602A):

VSS"-" Výkon modulu
Vdd"+" Výkon modulu
VOKontrast zobrazení
RSVýběr registrace
RwVýběr režimu zápisu nebo čtení
EPovolení přístupu k indikátoru
DB0-DB7Bity rozhraní
A"+" Podsvícení napájení
K"-" Podsvícení napájení

Programování

Na začátku kódu je soubor záhlaví deklarován názvem „LiquidCrystal.h“, který se používá pro LCD displej. V dalším řádku jsou kontakty na LCD displeji označeny funkcí „LiquidCrystal lcd (4, 5, 6, 7, 8)“. Zde číslo v závorkách ukazuje Arduino piny, které jsou připojeny k LCD.

 #include LiquidCrystal lcd (4, 5, 6, 7, 8, 9); 

V řádcích 4 a 5 jsou senzor1 a senzor2 deklarovány jako celá čísla (integer) - jedná se o Arduino výstupy, které jsou připojeny k IR senzorům.

 int senzor1 = 2; int senzor2 = 3; 

Poté jsou 4 celá čísla deklarována s názvem Time1, Time2, Time a flag. Kde „Time1“ je měřený čas, kdy je aktivováno „sensor1“, a „Time2“ je měřený čas, kdy je aktivováno „sensor2“. Čas je rozdíl mezi časem 1 a časem2, který je ekvivalentní době, během které auto projíždělo mezi senzorem 1 a senzorem2, nebo senzorem2 a senzorem1.

 int Time1; int Time2; int Čas; int flag = 0; 

Pak deklarujeme celočíselnou konstantní vzdálenost, kterou je vzdálenost mezi čidly IR1 a IR2 v centimetrech. Vzal jsem si například vzdálenost 30 cm, samozřejmě můžete změnit svou hodnotu (nejlépe do 5 metrů).

 int vzdálenost = 30; 

Dále je proměnná Rychlost deklarována jako číslo s plovoucí desetinnou čárkou (typ float). A slouží k ukládání rychlosti vozidla.

 rychlost plováku; 

Když je spuštěno „void setup ()“, jsou spuštěny 2 funkce externího obsluhy přerušení „attachInterrupt (0, fun1, RISING)“ a „attachInterrupt (1, fun2, FALLING)“. Například „attachInterrupt (0, fun1, RISING)) znamená, že když IR2 detekuje klesající vlnu (int.0), přerušení spustí funkci fun1.

LCD displej se spouští pomocí funkce "lcd.begin (16, 2)". Je vymazána pomocí funkce lcd.clear (). Na obrazovce „SPEED MEASURMENT“ se vytiskne zpráva „lcd.print“.

 void setup () {attachInterrupt (0, fun1, RISING); attachInterrupt (1, fun2, FALLING); lcd.begin (16, 2); lcd.clear (); lcd.print ("RYCHLOST MĚŘENÍ"); } 

void fun1 () začíná, když je aktivován "interrupt0 (int.0)". V této funkci se aktuální čas měří pomocí „Time1 = millis ()“.

Funkce void fun2 () je stejná jako „void fun1 ()“, ale začíná, když je aktivována funkce „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;}} 

V „void loop ()“ se čas měří pomocí „Time1“ a „Time2“. „Čas“ by měl být kladný, pokud je navíc použit. Tento cyklus je však proveden, když je použit parametr flag = 0, proto je použita podmínka "if". Pokud jsou "Time1" a "Time2" stejné, "Speed" bude nula.

Řádek 47 kontroluje, zda (Speed == 0). Pokud je tato podmínka splněna, je na LCD displeji vytištěno „… .OK ….“, což znamená, že systém je připraven k použití.

Řádky 51 a níže jsou zodpovědné za zobrazování rychlosti pohybujícího se objektu na LCD displeji po „Time1“ a „Time2“.

 void loop () {if (flag == 0) {if (Time1> Time2) {Time = Time1 - Time2; Rychlost = (vzdálenost * 1000) / Čas;} jinak pokud (Čas2> Čas1) {Čas = Čas2 - Čas1; Rychlost = (vzdálenost * 1000) / Čas;} jinak {Rychlost = 0;}} pokud (Rychlost == 0) {lcd.setCursor (0, 1); lcd.print ("……. OK ……."); } else {lcd.setCursor (2, 1); lcd.print (Rychlost); lcd.print ("cm / sec"); zpoždění (10500); Time1 = 0; Čas2 = 0; }} 

Úplný náčrt projektu:

Detektor rychlosti pohybujícího se objektu na Arduino (471 bytů, staženo: 42)

Demonstrace práce

Na níže uvedené animaci můžete vidět ukázku projektu. Snímače jsou umístěny ve vzdálenosti 30 cm a mezi nimi je simulován pohyb rukojeti. V tomto případě byla rychlost pohybu rukojeti fixována na 17 cm / s.

Tento vývoj lze samozřejmě přenést do reálných podmínek - na silnici, měřením rychlosti vozidla.

Demonstrace projektu

Pomozte vývoji webu a sdílení článku s přáteli!

Kategorie: