Wraz z rosnącą popularnością Smart Cities zawsze istnieje zapotrzebowanie na inteligentne rozwiązania dla każdej domeny. IoT umożliwił inteligentne miasta dzięki funkcji kontroli przez Internet. Osoba może sterować urządzeniami zainstalowanymi w domu lub biurze z dowolnego miejsca na świecie za pomocą smartfona lub dowolnego urządzenia podłączonego do Internetu. W inteligentnym mieście istnieje wiele domen, a inteligentny parking jest jedną z popularnych domen w inteligentnym mieście.
W branży inteligentnego parkowania pojawiło się wiele innowacji, takich jak inteligentny system zarządzania parkingiem, sterowanie inteligentną bramą, inteligentne kamery, które mogą wykrywać typy pojazdów, ANPR (automatyczne rozpoznawanie tablic rejestracyjnych), inteligentny system płatności, inteligentny system wjazdu i wiele innych. Dzisiaj zostanie zastosowane podobne podejście i zostanie zbudowane inteligentne rozwiązanie parkingowe, które będzie wykorzystywać czujnik ultradźwiękowy do wykrywania obecności pojazdu i wyzwalania automatycznego otwierania lub zamykania bramy. NodeMCU ESP8266 będzie tutaj używany jako główny kontroler do sterowania wszystkimi podłączonymi do niego urządzeniami peryferyjnymi.
ESP8266 to najpopularniejszy kontroler do tworzenia aplikacji opartych na IoT, ponieważ ma wbudowaną obsługę Wi-Fi do łączenia się z Internetem. Wcześniej używaliśmy go do tworzenia wielu projektów IoT, takich jak:
- System bezpieczeństwa oparty na IOT
- Inteligentna skrzynka połączeniowa do automatyki domowej
- System monitorowania zanieczyszczenia powietrza oparty na IOT
- Wyślij dane do ThingSpeak
Sprawdź wszystkie projekty oparte na ESP8266 tutaj.
W tym inteligentnym systemie parkingowym IoT wyślemy dane do serwera internetowego w celu sprawdzenia dostępności miejsca do parkowania pojazdów. Tutaj używamy Firebase jako bazy danych Iot, aby uzyskać dane o dostępności miejsc parkingowych. W tym celu musimy znaleźć adres hosta Firebase i tajny klucz do autoryzacji. Jeśli wiesz już, jak używać Firebase z NodeMCU, możesz przejść dalej, w przeciwnym razie powinieneś najpierw nauczyć się używać konsoli Google Firebase z ESP8266 NodeMCU, aby uzyskać adres hosta i tajny klucz.
Wymagane składniki
- ESP8266 NodeMCU
- Czujnik ultradźwiękowy
- Silnik serwo prądu stałego
- Czujniki podczerwieni
- Wyświetlacz LCD 16x2 i2c
- Zworki
Schemat obwodu
Schemat obwodu dla tego systemu parkowania pojazdów opartego na IoT przedstawiono poniżej. Obejmuje dwa czujniki IR, dwa serwomotory, jeden czujnik ultradźwiękowy i jeden wyświetlacz LCD 16x2.
Tutaj ESP8266 będzie kontrolować cały proces, a także wysyłać informacje o dostępności parkingu do Google Firebase, aby można było je monitorować z dowolnego miejsca na świecie przez Internet. Dwa czujniki podczerwieni są używane przy bramie wjazdowej i wyjazdowej, aby wykryć obecność samochodu i automatycznie otworzyć lub zamknąć bramę. Czujnik podczerwieni służy do wykrywania dowolnego obiektu poprzez wysyłanie i odbieranie promieni podczerwonych, dowiedz się więcej o czujniku podczerwieni tutaj.
Dwa serwomechanizmy będą działać jako brama wjazdowa i wyjazdowa i obracają się, aby otworzyć lub zamknąć bramę. Wreszcie, czujnik ultradźwiękowy jest używany do wykrywania, czy miejsce parkingowe jest dostępne lub zajęte i odpowiednio wysyła dane do ESP8266. Obejrzyj film podany na końcu tego samouczka, aby zrozumieć całą pracę projektu.
Tak będzie wyglądał ten kompletny prototyp systemu inteligentnego parkowania:
Programowanie ESP8266 NodeMCU dla rozwiązania Smart Parking
Kompletny kod z działającym filmem znajduje się na końcu tego samouczka, tutaj wyjaśniamy cały program, aby zrozumieć działanie projektu.
Aby zaprogramować NodeMCU, wystarczy podłączyć NodeMCU do komputera za pomocą kabla Micro USB i otworzyć Arduino IDE. Biblioteki są wymagane dla wyświetlacza I2C i silnika serwo. Na wyświetlaczu LCD zostanie wyświetlona dostępność miejsc parkingowych, a serwomotory będą używane do otwierania i zamykania bram wjazdowych i wyjazdowych. Wire.h biblioteki zostaną wykorzystane do interfejsu LCD w protokole I2C. Piny dla I2C w NodeMCU ESP8266 to D1 (SCL) i D2 (SDA). Użyta tutaj baza danych będzie Firebase, więc tutaj dołączamy również bibliotekę (FirebaseArduino.h) dla tego samego.
#zawierać
Następnie dołącz dane logowania do Firebase pobrane z Google Firebase. Obejmują one nazwę hosta zawierającą nazwę projektu i tajny klucz. Aby znaleźć te wartości, postępuj zgodnie z poprzednim samouczkiem dotyczącym Firebase.
#define FIREBASE_HOST "smart-parking-7f5b6.firebaseio.com" #define FIREBASE_AUTH "suAkUQ4wXRPW7nA0zJQVsx3H2LmeBDPGmfTMBHCT"
Dołącz poświadczenia Wi-Fi, takie jak identyfikator SSID Wi-Fi i hasło.
#define WIFI_SSID "CircuitDigest" #define WIFI_PASSWORD "circuitdigest101"
Zainicjalizuj LCD I2C adresem urządzenia (tutaj jest to 0x27) i typem wyświetlacza LCD. Zawiera również serwomotory do bramy wjazdowej i wyjazdowej.
LiquidCrystal_I2C lcd (0x27, 16, 2); Servo myservo; Servo myservo1;
Rozpocznij komunikację I2C dla I2C LCD.
Wire.begin (D2, D1);
Podłącz serwomotor wejściowy i wyjściowy do pinów D5, D6 NodeMCU.
myservo.attach (D6); myservos.attach (D5);
Wybierz styk wyzwalania czujnika ultradźwiękowego jako wyjście i styk echa jako wejście. Czujnik ultradźwiękowy będzie używany do wykrywania dostępności miejsca parkingowego. Jeśli samochód zajął miejsce to będzie się świecić, w przeciwnym razie nie będzie się świecić.
pinMode (TRIG, OUTPUT); pinMode (ECHO, INPUT);
Dwa piny D0 i D4 NodeMCU służą do odczytu czujnika podczerwieni. Czujnik podczerwieni będzie działał jako czujnik bramki wejścia i wyjścia. To wykryje obecność samochodu.
pinMode (carExited, INPUT); pinMode (carEnter, INPUT);
Połącz się z Wi-Fi i poczekaj chwilę, aż się połączy.
WiFi.begin (WIFI_SSID, WIFI_PASSWORD); Serial.print ("Łączenie z"); Serial.print (WIFI_SSID); while (WiFi.status ()! = WL_CONNECTED) { Serial.print ("."); opóźnienie (500); }
Rozpocznij połączenie z Firebase, używając hosta i tajnego klucza jako danych logowania.
Firebase.begin (FIREBASE_HOST, FIREBASE_AUTH);
Rozpocznij i2c 16x2 LCD i ustaw pozycję kursora w 0- tym wierszu 0- tej kolumnie.
lcd.begin (); lcd.setCursor (0, 0);
Weź odległość z czujnika ultradźwiękowego. Zostanie to wykorzystane do wykrycia obecności pojazdu w określonym miejscu. Najpierw wyślij impuls 2 mikrosekundowy, a następnie odczytaj odebrany impuls. Następnie zamień go na „cm”. Dowiedz się więcej o pomiarze odległości za pomocą czujnika ultradźwiękowego tutaj.
digitalWrite (TRIG, LOW); delayMicroseconds (2); digitalWrite (TRIG, HIGH); delayMicroseconds (10); digitalWrite (TRIG, LOW); duration = pulseIn (ECHO, HIGH); odległość = (czas trwania / 2) / 29,1;
Odczytaj cyfrowo pin czujnika podczerwieni jako czujnik wejścia i sprawdź, czy jest wysoki. Jeśli jest wysoka, zwiększ liczbę wpisów i wydrukuj ją na wyświetlaczu LCD 16x2, a także na monitorze szeregowym.
int carEntry = digitalRead (carEnter); if (carEntry == HIGH) { countYes ++; Serial.print ("Car Entered ="); Serial.println (countYes); lcd.setCursor (0, 1); lcd.print ("Wprowadzono samochód");
Przesuń również kąt silnika serwa, aby otworzyć bramę wjazdową. Zmień kąt w zależności od przypadku użycia.
for (pos = 140; pos> = 45; pos - = 1) { myservos.write (pos); opóźnienie (5); } opóźnienie (2000); for (pos = 45; pos <= 140; pos + = 1) { // w krokach co 1 stopień myservos.write (pos); opóźnienie (5); }
I wyślij odczyt do Firebase za pomocą funkcji pushString w bibliotece Firebase .
Firebase.pushString ("/ Stan parkowania /", fireAvailable);
Wykonaj podobne kroki jak powyżej dla wyjścia czujnika podczerwieni i wyjścia serwomotoru.
int carExit = digitalRead (carExited); if (carExit == HIGH) { countYes--; Serial.print ("Car Exited ="); Serial.println (countYes); lcd.setCursor (0, 1); lcd.print ("Wyjście z samochodu"); for (pos1 = 140; pos1> = 45; pos1 - = 1) { myservo.write (pos1); opóźnienie (5); } opóźnienie (2000); for (pos1 = 45; pos1 <= 140; pos1 + = 1) { // w krokach co 1 stopień myservo.write (pos1); opóźnienie (5); } Firebase.pushString ("/ Stan parkowania /", fireAvailable); lcd.clear (); }
Sprawdź, czy samochód wjechał na miejsce parkingowe i czy podjechał to świeci się dioda dająca sygnał, że miejsce jest pełne.
if (odległość <6) { Serial.println ("Zajęty"); digitalWrite (led, WYSOKI); }
W przeciwnym razie pokaż, że miejsce jest dostępne.
if (odległość> 6) { Serial.println ("Dostępne"); digitalWrite (led, LOW); }
Oblicz całkowitą pustą przestrzeń na parkingu i zapisz ją w ciągu, aby wysłać dane do bazy Firebase.
Empty = allSpace - count Tak; Available = String ("Available =") + String (Empty) + String ("/") + String (allSpace); fireAvailable = String ("Available =") + String (Empty) + String ("/") + String (allSpace); Wydrukuj również dane na i2C LCD. lcd.setCursor (0, 0); lcd.print (dostępny);
W ten sposób można śledzić dostępność miejsc parkingowych online w Firebase, jak pokazano na poniższej migawce:
To kończy cały system inteligentnego parkowania przy użyciu modułu ESP8266 NodeMCU i różnych urządzeń peryferyjnych. Możesz użyć innych czujników również w zamian za czujnik ultradźwiękowy i IR. Istnieje szerokie zastosowanie inteligentnego systemu parkowania i można dodać różne produkty, aby uczynić go bardziej inteligentnym. Skomentuj poniżej, jeśli masz jakiekolwiek wątpliwości, lub sięgnij do naszego forum, aby uzyskać dodatkowe wsparcie.