Pomóż w opracowaniu witryny, udostępniając artykuł znajomym!

W tym projekcie pokażę, jak zaprojektować i zbudować prosty obwód detektora do określania prędkości poruszającego się samochodu lub dowolnego poruszającego się obiektu za pomocą Arduino NANO i czujników podczerwieni (IR).

Zasada działania

Czujniki podczerwieni są główną częścią tego projektu. Praktycznie można wprowadzić ustawienia czujników podczerwieni na różne sposoby, ale w tym projekcie użyłem dwóch czujników podczerwieni typu odblaskowego, umieszczając je w odległości 30 cm od siebie.

Czujnik podczerwieni zawiera diodę IR (nadajnik) i fototranzystor (odbiornik). Kiedy obiekt przechodzi między czujnikami, światło odbija się od obiektu i pada na fototranzystor. Wykorzystywany jest wzmacniacz operacyjny IC (LM393), do którego podłączony jest fototranzystor. Kiedy obiekt znajduje się przed czujnikiem, wysyła logiczny WYSOKI sygnał do Arduino.

Oznacza to, że gdy jadący samochód dotrze do pierwszego czujnika podczerwieni, zostanie aktywowany. Od tego momentu uruchamia się timer, który będzie kontynuował odliczanie, aż samochód dotrze do drugiego czujnika podczerwieni.

Wybierając odległość między czujnikami w promieniu 5 metrów, możesz obliczyć prędkość, z jaką samochód będzie się przemieszczał z pierwszego czujnika do drugiego, ponieważ znasz już czas prowadzenia pojazdu.

Użyta formuła: Prędkość = odległość / czas, gdzie

  • Prędkość - prędkość,
  • odległość - odległość między czujnikami,
  • Czas - czas mierzony przez moduł Arduino.

Wszystkie obliczenia i zbieranie danych są wykonywane przez Arduino, a końcowy wynik jest wyświetlany na module LCD 16X2.

Używane komponenty

KomponentSpecyfikacjaLiczbaGdzie kupić
ArduinoNano Rev3.01Odniesienie
Czujnik podczerwieniIR FC-512Odniesienie
LCD16X2 (1602A)1Odniesienie
Jednostka napędowa12 woltów1
PrzełączSPST1Odniesienie
Potencjometr10 kΩ1Odniesienie

Zarys projektu

Poniższy rysunek przedstawia schemat obwodu projektu detektora prędkości pojazdu.

Obwód czujnika prędkości

W Arduino piny D2 i D3 to przerwania, gdzie D2 to int.0, a D3 to int.1. Styki wyjściowe czujników podczerwieni są połączone z tymi stykami.

Wyświetlacz LCD jest podłączony do styków Arduino D4-D9, gdzie D4 jest podłączony do RS, D5 jest podłączony do E, a D6-D9 Arduino jest podłączony do styków D4-D7 wyświetlacza LCD. Piny 15 (A) i 16 (K) służą do podświetlenia wyświetlacza LCD.

Potencjometr R1 służy do ręcznej regulacji kontrastu wyświetlacza przez V0.

Opis styków modułu LCD (1602A):

VSS„-” Moc modułu
Vdd„+” Moc modułu
VOWyświetl kontrast sterowania
RSZarejestruj wybór
RwWybór trybu zapisu lub odczytu
EUmożliwienie dostępu do wskaźnika
DB0-DB7Bity interfejsu
A„+” Podświetlenie zasilania
K„-” Podświetlenie zasilania

Programowanie

Na początku kodu plik nagłówkowy jest zadeklarowany pod nazwą „LiquidCrystal.h”, która jest używana na wyświetlaczu LCD. W następnym wierszu styki LCD są wskazane w funkcji „LiquidCrystal lcd (4, 5, 6, 7, 8)”. Tutaj liczba w nawiasach pokazuje szpilki Arduino, które są podłączone do LCD.

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

W liniach 4 i 5, czujnik1 i czujnik2 są deklarowane jako liczby całkowite (liczba całkowita) - są to wyjścia Arduino, które są podłączone do czujników podczerwieni.

 int sensor1 = 2; int sensor2 = 3; 

Następnie deklarowane są 4 liczby całkowite o nazwie Czas1, Czas2, Czas i flaga. Gdzie „Czas1” to zmierzony czas, gdy „czujnik1” jest włączony, a „Czas2” to zmierzony czas, gdy „czujnik2” jest włączony. Czas jest różnicą między czasem 1 a czasem 2, co odpowiada czasowi, w którym samochód przebywał między czujnikiem 1 a czujnikiem 2 lub czujnikiem 2 i czujnikiem 1.

 int Time1; int Time2; int Czas; int flag = 0; 

Następnie deklarujemy stałą całkowitą, która jest odległością między czujnikami IR1 i IR2 w centymetrach. Na przykład wziąłem odległość 30 cm. Oczywiście możesz zmienić swoją wartość (najlepiej do 5 metrów).

 int odległość = 30; 

Następnie zmienna Speed jest deklarowana jako liczba zmiennoprzecinkowa (typ float). Służy do przechowywania prędkości samochodu.

 prędkość pływaka; 

Po uruchomieniu „void setup ()” uruchamiane są 2 zewnętrzne funkcje obsługi przerwań „attachInterrupt (0, fun1, RISING)” i „attachInterrupt (1, fun2, FALLING)”. Na przykład „attachInterrupt (0, fun1, RISING”) oznacza, że gdy IR2 wykryje spadającą falę (int.0), przerwanie rozpocznie funkcję fun1.

Wyświetlacz LCD jest uruchamiany za pomocą funkcji „lcd.begin (16, 2)”. Jest czyszczony za pomocą funkcji lcd.clear (). Komunikat na ekranie „POMIAR PRĘDKOŚCI” jest drukowany przy użyciu funkcji „lcd.print”.

 void setup () {attachInterrupt (0, fun1, RISING); attachInterrupt (1, fun2, FALLING); lcd.begin (16, 2); lcd.clear (); lcd.print („POMIAR PRĘDKOŚCI”); } 

void fun1 () zaczyna się, gdy aktywowany jest „interrupt0 (int.0)”. W tej funkcji aktualny czas jest mierzony za pomocą „Time1 = millis ()”.

Funkcja void fun2 () jest taka sama jak „void fun1 ()”, ale zaczyna się, gdy „interrupt1 (int.1)” jest aktywowany.

 void fun1 () {Time1 = millis (); if (flag == 0) {flag = 1;} else {flag = 0;}} void fun2 () {Time2 = millis (); if (flag == 0) {flag = 1;} else {flag = 0;}} 

W „void loop ()” czas mierzy się za pomocą „Time1” i „Time2”. „Czas” powinien być dodatni, dlatego jeśli dodatkowo zostanie użyty. Ale ten cykl jest wykonywany, gdy flaga = 0, dlatego używany jest warunek „if”. Jeśli „Time1” i „Time2” są równe, „Speed” będzie równe zero.

Linia 47 sprawdza, czy (prędkość == 0). Jeśli ten warunek jest spełniony, na wyświetlaczu LCD pojawi się „… .OK ….”, co oznacza, że system jest gotowy do użycia.

Linie 51 i poniżej odpowiadają za wyświetlanie prędkości poruszającego się obiektu na wyświetlaczu LCD po tym, jak „Time1” i „Time2” staną się zerem.

 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 (prędkość); lcd.print ("cm / s"); opóźnienie (10500); Czas1 = 0; Czas2 = 0; }} 

Pełny szkic projektu:

Detektor prędkości poruszającego się obiektu w Arduino (471 bajtów, pobrano: 42)

Demonstracja pracy

Na poniższej animacji możesz zobaczyć demonstrację projektu. Czujniki znajdują się w odległości 30 cm, a między nimi symulowany jest ruch uchwytu. W tym przypadku prędkość ruchu klamki została ustalona na 17 cm / s.

Oczywiście rozwój ten można przenieść na rzeczywiste warunki - na drodze, mierząc prędkość pojazdu.

Demonstracja projektu

Pomóż w opracowaniu witryny, udostępniając artykuł znajomym!

Kategoria: