Pomôžte rozvoju stránky a zdieľajte článok s priateľmi!

V tomto projekte vám ukážem, ako navrhnúť a vybudovať jednoduchý detektorový obvod na určenie rýchlosti pohybujúceho sa automobilu alebo akéhokoľvek pohybujúceho sa objektu pomocou Arduino NANO a infračervených senzorov (IR).

Princíp činnosti

Hlavnou súčasťou tohto projektu sú infračervené senzory. Prakticky môžete nastavenie IR senzorov implementovať rôznymi spôsobmi, ale v tomto projekte som použil dva IR senzory reflexného typu, ktoré sú umiestnené vo vzdialenosti 30 cm od seba.

IR senzor obsahuje IR LED (vysielač) a fototranzistor (prijímač). Keď objekt prechádza medzi senzormi, svetlo sa odráža od objektu a padá na fototranzistor. Používa sa operačný zosilňovač IC (LM393), ku ktorému je pripojený fototranzistor. Keď je objekt pred senzorom, pošle logický HIGH signál do Arduina.

To znamená, že keď sa pohybujúce auto dostane na prvý IR senzor, bude aktivované. Od tohto momentu sa spustí časovač, ktorý sa bude naďalej odpočítavať, až kým auto nedosiahne druhý IR snímač.

Výberom vzdialenosti medzi senzormi do 5 metrov môžete vypočítať rýchlosť, s akou sa bude auto pohybovať z prvého senzora do druhého, pretože už poznáte čas jazdy.

Použitý vzorec: Rýchlosť = vzdialenosť / čas, kde

  • Rýchlosť - rýchlosť,
  • vzdialenosť - vzdialenosť medzi snímačmi,
  • Čas - čas meraný modulom Arduino.

Všetky výpočty a zber údajov vykonáva Arduino a konečný výsledok je zobrazený na LCD module 16X2.

Použité komponenty

komponentovšpecifikáciaPočetKde kúpiť
ArduinoNano Rev3.01odkaz
IR senzorIR FC-512odkaz
LCD16X2 (1602A)1odkaz
Výkonová jednotka12 voltov1
prepínačSPST1odkaz
potenciometer10 kΩ1odkaz

Náčrt projektu

Na nasledujúcom obrázku je znázornená schéma zapojenia projektu detektora rýchlosti vozidla.

Obvod detektora rýchlosti

V Arduine sú piny D2 a D3 prerušeniami, kde D2 je int.0 a D3 je int.1. K týmto kontaktom sú pripojené výstupné kontakty IR snímačov.

LCD displej je pripojený k pinom D4-D9 od Arduino, kde je D4 pripojený k RS, D5 je pripojený k E a D6-D9 Arduino je pripojený k D4-D7 pinom LCD. Kolíky 15 (A) a 16 (K) sa používajú na osvetlenie LCD.

Potenciometer R1 sa používa na manuálne nastavenie kontrastu displeja cez V0.

Popis kontaktov modulu LCD (1602A):

VSS"-" Výkon modulu
VDD"+" Výkon modulu
VOZobrazenie kontrastu ovládania
RSVýber registra
RWVýber režimu zápisu alebo čítania
EPovolenie prístupu k indikátoru
DB0-DB7Bity rozhrania
"+" Podsvietenie napájania
K"-" Podsvietenie napájania

programovanie

Na začiatku kódu je súbor s hlavičkou deklarovaný názvom „LiquidCrystal.h“, ktorý sa používa pre LCD displej. V nasledujúcom riadku sú kontakty LCD označené funkciou „LiquidCrystal lcd (4, 5, 6, 7, 8)“. Tu číslo v zátvorkách ukazuje Arduino piny, ktoré sú pripojené k LCD.

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

V riadkoch 4 a 5 sú senzor1 a senzor2 deklarované ako celé čísla (integer) - to sú Arduino výstupy, ktoré sú pripojené k IR snímačom.

 int senzor1 = 2; int senzor2 = 3; 

Potom sú 4 celé čísla deklarované s názvom Time1, Time2, Time a flag. Kde “Time1” je meraný čas, keď je aktivovaný “sensor1” a “Time2” je meraný čas, keď je aktivovaný “sensor2”. Čas je rozdiel medzi Časom 1 a Časom2, ktorý je ekvivalentom času, počas ktorého vozidlo jazdilo medzi senzorom 1 a senzorom2, alebo snímačom2 a snímačom1.

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

Potom deklarujeme celočíselnú konštantnú vzdialenosť, ktorá je vzdialenosťou medzi snímačmi IR1 a IR2 v centimetroch. Vzal som si napríklad vzdialenosť 30 cm, samozrejme môžete zmeniť svoju hodnotu (najlepšie do 5 metrov).

 int vzdialenosť = 30; 

Ďalej je premenná Rýchlosť deklarovaná ako číslo s plávajúcou desatinnou čiarkou (typ float). Používa sa na uloženie rýchlosti vozidla.

 rýchlosť plaváka; 

Keď sa spustí „void setup ()“, spúšťajú sa 2 externé funkcie spracovania prerušenia „attachInterrupt (0, fun1, RISING)“ a „attachInterrupt (1, fun2, FALLING)“. Napríklad, “attachInterrupt (0, fun1, RISING”) znamená, že keď IR2 deteguje klesajúcu vlnu (int.0), prerušenie spustí funkciu fun1.

LCD displej sa spustí pomocou funkcie "lcd.begin (16, 2)". Vymaže sa pomocou funkcie lcd.clear (). Na obrazovke „SPEED MEASURMENT“ sa vytlačí hlásenie pomocou funkcie „lcd.print“.

 void setup () {attachInterrupt (0, fun1, RISING); attachInterrupt (1, fun2, FALLING); lcd.begin (16, 2); lcd.clear (); lcd.print ("SPEED MERANIE"); } 

void fun1 () začína, keď je aktivované "prerušenie0 (int.0)". V tejto funkcii sa aktuálny čas meria pomocou „Time1 = millis ()“.

Funkcia void fun2 () je rovnaká ako funkcia void fun1 (), ale začína, keď je aktivovaná funkcia „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 ()“ sa čas meria pomocou „Time1“ a „Time2“. „Čas“ by mal byť pozitívny, preto ak sa použije dodatočne. Tento cyklus sa však vykoná, keď sa použije flag = 0, preto sa použije podmienka "if". Ak sú "Time1" a "Time2" rovnaké, "Speed" bude nula.

Riadok 47 kontroluje, či (Speed == 0). Ak je táto podmienka splnená, na LCD displeji sa zobrazí „… .OK ….“, čo znamená, že systém je pripravený na použitie.

Riadky 51 a nižšie sú zodpovedné za zobrazovanie rýchlosti pohybujúceho sa objektu na LCD displeji po tom, ako sa čas „Time1“ a „Time2“ stanú nulou.

 void loop () {if (flag == 0) {if (Time1> Time2) {Time = Time1 - Time2; Speed = (vzdialenosť * 1000) / Time;} else ak (Time2> Time1) {Time = Time2 - Time1; Speed = (vzdialenosť * 1000) / Time;} else {Speed = 0;}} ak (Speed == 0) {lcd.setCursor (0, 1); lcd.print ("……. OK ……."); } else {lcd.setCursor (2, 1); lcd.print (Rýchlosť); lcd.print ("cm / sec"); oneskorenie (10500); Time1 = 0; Čas2 = 0; }} 

Úplný náčrt projektu:

Detektor rýchlosti pohybujúceho sa objektu na Arduino (471 bytes, stiahnuté: 42)

Demonštrácia práce

Na nižšie uvedenej animácii môžete vidieť ukážku projektu. Snímače sú umiestnené vo vzdialenosti 30 cm a medzi nimi je simulovaný pohyb rukoväte. V tomto prípade bola rýchlosť pohybu rukoväte stanovená na 17 cm / s.

Samozrejme, tento vývoj možno preniesť do reálnych podmienok - na ceste, meraním rýchlosti vozidla.

Demonštrácia projektu

Pomôžte rozvoju stránky a zdieľajte článok s priateľmi!

Kategórie: