Зі зростанням популярності Smart Cities, завжди є попит на розумні рішення для кожного домену. IoT дозволив можливість Smart Cities завдяки функції управління Інтернетом. Людина може керувати пристроями, встановленими в її будинку чи офісі, з будь-якої точки світу, просто використовуючи смартфон або будь-які підключені до Інтернету пристрої. У розумному місті існує декілька доменів, а Smart Parking - один із популярних доменів у Smart City.
Індустрія інтелектуального паркування побачила низку інновацій, таких як система інтелектуального керування паркуванням, система Smart Gate Control, розумні камери, які можуть визначати типи автомобілів, ANPR (автоматичне розпізнавання номерних знаків), система інтелектуальних платежів, система Smart Entry та багато іншого. Сьогодні буде застосовано подібний підхід, і буде розроблено інтелектуальне рішення для паркування, яке використовуватиме ультразвуковий датчик для виявлення присутності автомобіля та спрацьовує автоматичне відкриття або закриття воріт. ESP8266 NodeMCU буде використовуватися тут як основний контролер для управління всіма підключеними до нього периферійними пристроями.
ESP8266 - найпопулярніший контролер для створення додатків на основі IoT, оскільки він має вбудовану підтримку Wi-Fi для підключення до Інтернету. Раніше ми використовували його для побудови багатьох проектів IoT, таких як:
- Система безпеки на основі IOT
- Розумна розподільна коробка для домашньої автоматизації
- Система моніторингу забруднення повітря на основі IOT
- Надішліть дані ThingSpeak
Перевірте тут усі проекти на основі ESP8266.
У цій системі розумного паркування IoT ми надішлемо дані на веб-сервер для пошуку наявності місця для паркування автомобілів. Тут ми використовуємо firebase як базу даних Iot, щоб отримати дані про доступність місць для паркування. Для цього нам потрібно знайти адресу хосту Firebase та секретний ключ для авторизації. Якщо ви вже знаєте, як використовувати firebase з NodeMCU, тоді ви можете рухатись інакше, спершу слід навчитися використовувати консоль Google Firebase з ESP8266 NodeMCU для отримання адреси хосту та секретного ключа.
Потрібні компоненти
- ESP8266 NodeMCU
- Ультразвуковий датчик
- Серводвигун постійного струму
- ІЧ-датчики
- 16x2 i2c РК-дисплей
- Перемички
Кругова діаграма
Схема ланцюга для цієї системи паркування автомобілів на основі IoT наведена нижче. Він включає два ІЧ-датчики, два сервомотори, один ультразвуковий датчик і один РК-дисплей 16x2.
Тут ESP8266 контролюватиме повний процес, а також надсилатиме інформацію про доступність місць для паркування в Google Firebase, щоб за ним можна було контролювати з будь-якої точки світу через Інтернет. Два ІК-датчики використовуються на в'їзних і вихідних воротах для виявлення присутності автомобіля та автоматичного відкривання або закриття воріт. ІЧ-датчик використовується для виявлення будь-якого об’єкта шляхом надсилання та прийому ІЧ-променів. Дізнайтеся більше про ІЧ-датчик тут.
Два сервопривода будуть виконувати роль вхідних і вихідних воріт, і вони обертаються, щоб відкрити або закрити ворота. Нарешті, ультразвуковий датчик використовується для виявлення наявності вільного місця для паркування чи його зайнятості та надсилання даних на ESP8266 відповідно. Перегляньте відео, подане в кінці цього підручника, щоб зрозуміти повну роботу проекту.
Ось як виглядатиме цей повний прототип інтелектуальної системи паркування:
Програмування ESP8266 NodeMCU для інтелектуального паркування
Повний код із робочим відео наведено в кінці цього посібника, тут ми пояснюємо повну програму для розуміння роботи проекту.
Для програмування NodeMCU просто підключіть NodeMCU до комп’ютера за допомогою кабелю Micro USB і відкрийте Arduino IDE. Бібліотеки потрібні для дисплея I2C та сервомотора. РК-дисплей відображатиме наявність місць для паркування, а серводвигуни будуть використовуватися для відкривання та закриття вхідних та вихідних воріт. Бібліотека Wire.h буде використана для інтерфейсу РК в протоколі i2c. Висновками для I2C в ESP8266 NodeMCU є D1 (SCL) і D2 (SDA). База даних, що використовується тут, буде Firebase, тому тут ми також включаємо бібліотеку (FirebaseArduino.h) для неї.
#включати
Потім включіть облікові дані Firebase, отримані від Google Firebase. Вони включатимуть ім’я хосту, що містить назву вашого проекту та секретний ключ. Щоб знайти ці значення, дотримуйтесь попереднього підручника з Firebase.
#define FIREBASE_HOST "smart-parking-7f5b6.firebaseio.com" #define FIREBASE_AUTH "suAkUQ4wXRPW7nA0zJQVsx3H2LmeBDPGmfTMBHCT"
Включіть облікові дані Wi-Fi, такі як SSID WiFi та пароль.
#define WIFI_SSID "CircuitDigest" #define WIFI_PASSWORD "circuitdigest101"
Ініціюйте РК-дисплей I2C з адресою пристрою (тут це 0x27) та типом РК-дисплея. Також включають сервомотори для вхідних та вихідних воріт.
Рідкий Кристал_I2C рідкокристалічний (0x27, 16, 2); Серво мисерво; Servo myservo1;
Запустіть зв'язок I2C для РК-дисплея I2C.
Wire.begin (D2, D1);
Підключіть вхідний та вихідний серводвигун до штифтів D5, D6 NodeMCU.
myservo.attach (D6); myservos.attach (D5);
Виберіть тригерний штифт ультразвукового датчика як вихід, а ехо-штифт як вхід. Ультразвуковий датчик буде використовуватися для виявлення наявності місця для паркування. Якщо Автомобіль зайняв простір, тоді він буде світитися, інакше не буде світитися.
pinMode (TRIG, OUTPUT); pinMode (ECHO, INPUT);
Два висновки D0 і D4 NodeMCU використовуються для зчитування датчика ІЧ-датчика. ІЧ-датчик діятиме як датчик входу та виходу. Це виявить присутність автомобіля.
pinMode (carExited, INPUT); pinMode (carEnter, INPUT);
Підключіться до Wi-Fi та почекайте деякий час, поки він не підключиться.
WiFi.begin (WIFI_SSID, WIFI_PASSWORD); Serial.print ("Підключення до"); Serial.print (WIFI_SSID); while (WiFi.status ()! = WL_CONNECTED) { Serial.print ("."); затримка (500); }
Почніть зв’язок з Firebase із хостом та секретним ключем як облікові дані.
Firebase.begin (FIREBASE_HOST, FIREBASE_AUTH);
Почніть i2c 16x2 РК-дисплей і встановіть положення курсора в 0- му рядку 0- го стовпця.
lcd.begin (); lcd.setCursor (0, 0);
Візьміть відстань від ультразвукового датчика. Це буде використано для виявлення присутності транспортного засобу у конкретному місці. Спочатку відправте імпульс 2 мікросекунди, а потім прочитайте отриманий імпульс. Потім перетворіть його на 'см'. Дізнайтеся більше про вимірювання відстані за допомогою ультразвукового датчика тут.
digitalWrite (TRIG, LOW); delayMicroseconds (2); digitalWrite (TRIG, HIGH); delayMicroseconds (10); digitalWrite (TRIG, LOW); тривалість = pulseIn (ECHO, HIGH); відстань = (тривалість / 2) / 29,1;
Цифрово прочитайте штифт ІЧ-датчика як датчик входу та перевірте, чи він високий. Якщо він високий, збільште кількість записів і надрукуйте його на РК-дисплей 16x2, а також на послідовний монітор.
int carEntry = digitalRead (carEnter); if (carEntry == HIGH) { countYes ++; Serial.print ("Автомобіль в'їхав ="); Serial.println (countYes); lcd.setCursor (0, 1); lcd.print ("Автомобіль в'їхав");
Також перемістіть кут сервомотора, щоб відкрити вхідні ворота. Змінюйте кут нахилу відповідно до вашого варіанту використання.
for (pos = 140; pos> = 45; pos - = 1) { myservos.write (pos); затримка (5); } затримка (2000); for (pos = 45; pos <= 140; pos + = 1) { // з кроком 1 градус myservos.write (pos); затримка (5); }
І надішліть зчитування у firebase за допомогою функції pushString бібліотеки Firebase .
Firebase.pushString ("/ Статус парковки /", fireAvailable);
Виконайте подібні дії, як описано вище для ІЧ-датчика виходу та сервомотора виходу.
int carExit = digitalRead (carExited); if (carExit == HIGH) { countYes--; Serial.print ("Автомобіль виїхав ="); Serial.println (countYes); lcd.setCursor (0, 1); lcd.print ("Автомобіль виїхав"); for (pos1 = 140; pos1> = 45; pos1 - = 1) { myservo.write (pos1); затримка (5); } затримка (2000); for (pos1 = 45; pos1 <= 140; pos1 + = 1) { // з кроком 1 градус myservo.write (pos1); затримка (5); } Firebase.pushString ("/ Статус парковки /", fireAvailable); lcd.clear (); }
Перевірте, чи машина приїхала на місце для паркування, і якщо вона приїхала, тоді світлодіод світиться, подаючи сигнал, що місце заповнене.
if (відстань <6) { Serial.println ("Зайнято"); digitalWrite (led, HIGH); }
Інакше показують, що це місце доступне.
if (відстань> 6) { Serial.println ("Доступно"); digitalWrite (led, LOW); }
Обчисліть загальний порожній простір на стоянці та збережіть його у рядку, щоб відправити дані до firebase.
Порожній = allSpace - countYes; Доступно = Рядок ("Доступно =") + Рядок (Порожній) + Рядок ("/") + Рядок (allSpace); fireAvailable = String ("Available =") + String (Empty) + String ("/") + String (allSpace); Також роздрукуйте дані на РК-дисплеї i2C. lcd.setCursor (0, 0); lcd.print (доступний);
Ось як доступність парковки можна відстежувати в Інтернеті на Firebase, як показано на знімку нижче:
На цьому закінчена повна інтелектуальна система паркування за допомогою модуля ESP8266 NodeMCU та різних периферійних пристроїв. Ви можете використовувати інші датчики також на заміну ультразвукового та ІЧ-датчика. Існує широке застосування інтелектуальної системи паркування, і можна додати різні продукти, щоб зробити її більш розумною. Прокоментуйте нижче, якщо у вас є якісь сумніви чи звернення до нашого форуму для отримання додаткової підтримки.