Với sự phổ biến ngày càng tăng của các Thành phố thông minh, luôn có nhu cầu về các giải pháp thông minh cho mọi miền. IoT đã kích hoạt khả năng của Thành phố thông minh với tính năng điều khiển qua internet. Một người có thể điều khiển các thiết bị được lắp đặt trong nhà hoặc văn phòng của mình từ bất kỳ đâu trên thế giới chỉ bằng cách sử dụng điện thoại thông minh hoặc bất kỳ thiết bị kết nối internet nào. Có nhiều miền trong thành phố thông minh và Bãi đậu xe thông minh là một trong những miền phổ biến trong Thành phố thông minh.
Ngành công nghiệp bãi đỗ xe thông minh đã chứng kiến một số đổi mới như Hệ thống quản lý bãi đỗ xe thông minh, Kiểm soát cổng thông minh, Camera thông minh có thể phát hiện loại phương tiện, ANPR (Nhận dạng biển số tự động), Hệ thống thanh toán thông minh, Hệ thống ra vào thông minh và nhiều hơn nữa. Ngày nay, phương pháp tương tự sẽ được tuân theo và một giải pháp đỗ xe thông minh sẽ được xây dựng, sử dụng cảm biến siêu âm để phát hiện sự hiện diện của xe và kích hoạt cổng tự động mở hoặc đóng. Ở đây, ESP8266 NodeMCU sẽ được sử dụng làm bộ điều khiển chính để điều khiển tất cả các thiết bị ngoại vi gắn vào nó.
ESP8266 là bộ điều khiển phổ biến nhất để xây dựng các ứng dụng dựa trên IoT vì nó có hỗ trợ sẵn có cho Wi-Fi để kết nối với internet. Trước đây chúng tôi đã sử dụng nó để xây dựng nhiều dự án IoT như:
- Hệ thống bảo mật dựa trên IOT
- Hộp nối thông minh cho tự động hóa gia đình
- Hệ thống giám sát ô nhiễm không khí dựa trên IOT
- Gửi dữ liệu đến ThingSpeak
Kiểm tra tất cả Dự án dựa trên ESP8266 tại đây.
Trong Hệ thống đỗ xe thông minh IoT này, chúng tôi sẽ gửi dữ liệu tới máy chủ web để tìm kiếm chỗ trống cho bãi đỗ xe. Ở đây chúng tôi đang sử dụng firebase làm cơ sở dữ liệu Iot để lấy dữ liệu về tính khả dụng của bãi đậu xe. Để làm được điều này, chúng tôi cần tìm địa chỉ máy chủ Firebase và khóa bí mật để ủy quyền. Nếu bạn đã biết cách sử dụng firebase với NodeMCU thì bạn có thể tiếp tục, trước tiên bạn nên học cách sử dụng Google Firebase Console với ESP8266 NodeMCU để lấy địa chỉ máy chủ và khóa bí mật.
Thành phần bắt buộc
- ESP8266 NodeMCU
- Thiết bị cảm biến sóng siêu âm
- Động cơ Servo DC
- Cảm biến IR
- Màn hình LCD 16x2 i2c
- Người nhảy
Sơ đồ mạch
Sơ đồ mạch cho hệ thống đỗ xe dựa trên IoT này được đưa ra dưới đây. Nó bao gồm hai cảm biến IR, hai động cơ servo, một cảm biến siêu âm và một LCD 16x2.
Tại đây, ESP8266 sẽ kiểm soát toàn bộ quy trình và cũng gửi thông tin về tình trạng đỗ xe tới Google Firebase để có thể giám sát nó từ mọi nơi trên thế giới qua internet. Hai cảm biến IR được sử dụng tại cổng ra vào để phát hiện sự có mặt của xe hơi và tự động mở hoặc đóng cổng. Cảm biến IR được sử dụng để phát hiện bất kỳ đối tượng nào bằng cách gửi và nhận tia hồng ngoại, tìm hiểu thêm về cảm biến IR tại đây.
Hai Servos sẽ hoạt động như cổng ra vào và chúng xoay để mở hoặc đóng cổng. Cuối cùng, một cảm biến siêu âm được sử dụng để phát hiện xem khe đỗ xe còn trống hoặc bị chiếm dụng hay không và gửi dữ liệu tới ESP8266 cho phù hợp. Kiểm tra video ở cuối hướng dẫn này để hiểu toàn bộ hoạt động của dự án.
Đây là diện mạo của Nguyên mẫu hệ thống đỗ xe thông minh hoàn chỉnh này:
Lập trình ESP8266 NodeMCU cho Giải pháp đỗ xe thông minh
Mã hoàn chỉnh với video hoạt động được đưa ra ở cuối hướng dẫn này, ở đây chúng tôi sẽ giải thích chương trình hoàn chỉnh để hiểu hoạt động của dự án.
Để lập trình NodeMCU, chỉ cần cắm NodeMCU vào Máy tính bằng Cáp Micro USB và mở Arduino IDE. Các thư viện được yêu cầu cho I2C Display và Servo Motor. Màn hình LCD sẽ hiển thị tính khả dụng của Bãi đậu xe và động cơ Servo sẽ được sử dụng để mở và đóng các cổng Vào và Ra. Các Wire.h thư viện sẽ được sử dụng để giao tiếp LCD trong giao thức I2C. Các chân cho I2C trong ESP8266 NodeMCU là D1 (SCL) và D2 (SDA). Cơ sở dữ liệu được sử dụng ở đây sẽ là Firebase vì vậy ở đây chúng tôi cũng bao gồm cả thư viện (FirebaseArduino.h) cho cùng một.
#include
Sau đó, bao gồm thông tin đăng nhập firebase nhận được từ Google Firebase. Chúng sẽ bao gồm tên Máy chủ chứa tên dự án của bạn và khóa bí mật. Để tìm các giá trị này, hãy làm theo hướng dẫn trước trên Firebase.
#define FIREBASE_HOST "smart-parking-7f5b6.firebaseio.com" #define FIREBASE_AUTH "suAkUQ4wXRPW7nA0zJQVsx3H2LmeBDPGmfTMBHCT"
Bao gồm thông tin đăng nhập Wi-Fi như WiFi SSID và mật khẩu.
#define WIFI_SSID "CircuitDigest" #define WIFI_PASSWORD "circuitdigest101"
Khởi tạo LCD I2C với địa chỉ thiết bị (Đây là 0x27) và loại LCD. Cũng bao gồm Động cơ Servo cho cổng vào và ra.
Màn hình LCD LiquidCrystal_I2C (0x27, 16, 2); Servo myservo; Servo myservo1;
Bắt đầu giao tiếp I2C cho I2C LCD.
Wire.begin (D2, D1);
Kết nối Động cơ Servo vào và ra với các chân D5, D6 của NodeMCU.
myservo.attach (D6); myservos.attach (D5);
Chọn Chân kích hoạt của cảm biến siêu âm làm Đầu ra và Chân tiếng vọng làm Đầu vào. Cảm biến siêu âm sẽ được sử dụng để phát hiện vị trí đỗ xe còn trống. Nếu Xe ô tô đã chiếm chỗ thì nó sẽ phát sáng còn lại nó sẽ không phát sáng.
pinMode (TRIG, OUTPUT); pinMode (ECHO, INPUT);
Hai chân D0 và D4 của NodeMCU được sử dụng để đọc cảm biến IR. Cảm biến IR sẽ hoạt động như cảm biến cổng vào và ra. Điều này sẽ phát hiện sự hiện diện của ô tô.
pinMode (carExited, INPUT); pinMode (carEnter, INPUT);
Kết nối với WiFi và đợi một lúc cho đến khi nó được kết nối.
WiFi.begin (WIFI_SSID, WIFI_PASSWORD); Serial.print ("Đang kết nối với"); Serial.print (WIFI_SSID); while (WiFi.status ()! = WL_CONNECTED) { Serial.print ("."); chậm trễ (500); }
Bắt đầu kết nối với Firebase bằng Máy chủ lưu trữ và Khóa bí mật làm bằng chứng xác thực.
Firebase.begin (FIREBASE_HOST, FIREBASE_AUTH);
Bắt đầu I2C LCD 16x2 và vị trí con trỏ đặt ở 0 thứ hàng 0 thứ cột.
lcd.begin (); lcd.setCursor (0, 0);
Lấy khoảng cách từ cảm biến siêu âm. Điều này sẽ được sử dụng để phát hiện sự hiện diện của xe tại một điểm cụ thể. Đầu tiên gửi xung 2 micro giây và sau đó đọc xung nhận được. Sau đó chuyển nó thành 'cm'. Tìm hiểu thêm về cách đo khoảng cách bằng cảm biến siêu âm tại đây.
digitalWrite (TRIG, LOW); delayMicroseconds (2); digitalWrite (TRIG, HIGH); delayMicroseconds (10); digitalWrite (TRIG, LOW); thời lượng = xungIn (ECHO, CAO); khoảng cách = (thời lượng / 2) / 29,1;
Đọc kỹ thuật số chân cảm biến IR như cảm biến mục nhập và kiểm tra xem nó có cao không. Nếu nó cao thì hãy đếm mục nhập tăng dần và in nó ra màn hình LCD 16x2 và cả màn hình nối tiếp.
int carEntry = digitalRead (carEnter); if (carEntry == HIGH) { countYes ++; Serial.print ("Xe đã vào ="); Serial.println (đếm Có); lcd.setCursor (0, 1); lcd.print ("Xe đã vào");
Đồng thời di chuyển góc của động cơ servo để mở cổng vào. Thay đổi góc theo trường hợp sử dụng của bạn.
for (pos = 140; pos> = 45; pos - = 1) { myservos.write (pos); chậm trễ (5); } trì hoãn (2000); for (pos = 45; pos <= 140; pos + = 1) { // trong các bước của 1 độ myservos.write (pos); chậm trễ (5); }
Và gửi bài đọc tới firebase bằng cách sử dụng chức năng pushString của thư viện Firebase.
Firebase.pushString ("/ Trạng thái đậu xe /", fireAvailable);
Thực hiện các bước tương tự như trên đối với Exit IR sensor và Exit servo motor.
int carExit = digitalRead (carExited); if (carExit == HIGH) { countYes--; Serial.print ("Xe Đã Thoát ="); Serial.println (đếm Có); lcd.setCursor (0, 1); lcd.print ("Xe Đã Thoát"); for (pos1 = 140; pos1> = 45; pos1 - = 1) { myservo.write (pos1); chậm trễ (5); } trì hoãn (2000); for (pos1 = 45; pos1 <= 140; pos1 + = 1) { // trong các bước 1 bậc myservo.write (pos1); chậm trễ (5); } Firebase.pushString ("/ Trạng thái đỗ xe /", fireAvailable); lcd.clear (); }
Kiểm tra xem xe đã đến điểm đỗ chưa và nếu xe đã đến thì đèn led phát sáng báo hiệu điểm đỗ đã đầy.
if (khoảng cách <6) { Serial.println ("Đã chiếm"); digitalWrite (dẫn đầu, CAO); }
Khác cho thấy rằng vị trí có sẵn.
if (khoảng cách> 6) { Serial.println ("Có sẵn"); digitalWrite (dẫn đầu, THẤP); }
Tính tổng không gian trống bên trong bãi đậu xe và lưu nó trong chuỗi để gửi dữ liệu đến firebase.
Empty = allSpace - countYes; Có sẵn = String ("Có sẵn =") + Chuỗi (Rỗng) + Chuỗi ("/") + Chuỗi (allSpace); fireAvailable = String ("Có sẵn =") + Chuỗi (Trống) + Chuỗi ("/") + Chuỗi (allSpace); Đồng thời in dữ liệu ra màn hình LCD i2C. lcd.setCursor (0, 0); lcd.print (Có sẵn);
Đây là cách bạn có thể theo dõi tình trạng sẵn có của bãi đậu xe trực tuyến trên Firebase như thể hiện trong ảnh chụp nhanh bên dưới:
Điều này hoàn thiện hệ thống đỗ xe thông minh hoàn chỉnh bằng cách sử dụng Mô-đun NodeMCU ESP8266 và các thiết bị ngoại vi khác nhau. Bạn cũng có thể sử dụng các cảm biến khác để thay thế cho cảm biến Siêu âm và IR. Có rất nhiều ứng dụng của Hệ thống đỗ xe thông minh và các sản phẩm khác nhau có thể được thêm vào để làm cho nó thông minh hơn. Bình luận bên dưới nếu bạn có bất kỳ nghi ngờ nào hoặc truy cập vào diễn đàn của chúng tôi để được hỗ trợ thêm.