- Απαιτούμενα στοιχεία
- Διάγραμμα κυκλώματος
- Προγραμματισμός ESP8266 NodeMCU για έξυπνη λύση στάθμευσης
Με την αυξανόμενη δημοτικότητα των έξυπνων πόλεων, υπάρχει πάντα ζήτηση για έξυπνες λύσεις για κάθε τομέα. Το IoT έχει ενεργοποιήσει τη δυνατότητα Smart Cities με τη δυνατότητα ελέγχου μέσω διαδικτύου. Ένα άτομο μπορεί να ελέγξει τις συσκευές που είναι εγκατεστημένες στο σπίτι ή το γραφείο του από οπουδήποτε στον κόσμο, χρησιμοποιώντας απλά ένα smartphone ή οποιεσδήποτε συνδεδεμένες στο Διαδίκτυο συσκευές. Υπάρχουν πολλοί τομείς σε μια έξυπνη πόλη και ο Έξυπνος χώρος στάθμευσης είναι ένας από τους δημοφιλείς τομείς στην Έξυπνη Πόλη.
Η βιομηχανία Smart Parking έχει δει πολλές καινοτομίες όπως το Smart Management Management System, Smart Gate Control, Smart Cameras που μπορούν να ανιχνεύσουν τύπους οχημάτων, ANPR (Automatic Number Plate Recognition), Smart Payment System, Smart Entry System και πολλά άλλα. Σήμερα θα ακολουθηθεί παρόμοια προσέγγιση και θα κατασκευαστεί μια έξυπνη λύση στάθμευσης που θα χρησιμοποιεί έναν αισθητήρα υπερήχων για να ανιχνεύει την παρουσία του οχήματος και να ενεργοποιεί την πύλη να ανοίγει ή να κλείνει αυτόματα. Το ESP8266 NodeMCU θα χρησιμοποιηθεί εδώ ως ο κύριος ελεγκτής για τον έλεγχο όλων των περιφερειακών που είναι συνδεδεμένα σε αυτό.
Το ESP8266 είναι ο πιο δημοφιλής ελεγκτής για την κατασκευή εφαρμογών που βασίζονται σε IoT, καθώς διαθέτει ενσωματωμένη υποστήριξη για σύνδεση Wi-Fi στο Διαδίκτυο. Στο παρελθόν χρησιμοποιήσαμε την κατασκευή πολλών έργων IoT όπως:
- Σύστημα ασφαλείας βασισμένο σε IOT
- Smart Junction Box για οικιακό αυτοματισμό
- Σύστημα παρακολούθησης της ατμοσφαιρικής ρύπανσης με βάση το IOT
- Αποστολή δεδομένων στο ThingSpeak
Δείτε ολόκληρο το Έργο ESP8266 εδώ.
Σε αυτό το έξυπνο σύστημα στάθμευσης IoT, θα στείλουμε δεδομένα στον διακομιστή ιστού για να αναζητήσουμε τη διαθεσιμότητα χώρου για χώρο στάθμευσης οχημάτων. Εδώ χρησιμοποιούμε τη βάση δεδομένων firebase ως Iot για να λάβουμε τα δεδομένα διαθεσιμότητας στάθμευσης. Για αυτό πρέπει να βρούμε τη διεύθυνση κεντρικού υπολογιστή του Firebase και το μυστικό κλειδί για εξουσιοδότηση. Εάν γνωρίζετε ήδη τη χρήση του firebase με το NodeMCU τότε μπορείτε να προχωρήσετε αλλιώς θα πρέπει πρώτα να μάθετε να χρησιμοποιείτε το Google Firebase Console με το ESP8266 NodeMCU για να λάβετε τη διεύθυνση κεντρικού υπολογιστή και το μυστικό κλειδί.
Απαιτούμενα στοιχεία
- ESP8266 NodeMCU
- Αισθητήρας υπερήχων
- DC Servo Motor
- Αισθητήρες υπερύθρων
- Οθόνη LCD 16x2 i2c
- Άλτες
Διάγραμμα κυκλώματος
Το διάγραμμα κυκλώματος για αυτό το σύστημα στάθμευσης οχημάτων με βάση το IoT δίνεται παρακάτω. Περιλαμβάνει δύο αισθητήρες υπερύθρων, δύο σερβοκινητήρες, έναν αισθητήρα υπερήχων και έναν LCD 16x2.
Εδώ το ESP8266 θα ελέγξει την πλήρη διαδικασία και θα στείλει επίσης τις πληροφορίες διαθεσιμότητας στάθμευσης στο Google Firebase έτσι ώστε να μπορεί να παρακολουθείται από οπουδήποτε στον κόσμο μέσω του Διαδικτύου. Δύο αισθητήρες υπερύθρων χρησιμοποιούνται στην πύλη εισόδου και εξόδου για την ανίχνευση της παρουσίας του αυτοκινήτου και ανοίγουν ή κλείνουν αυτόματα την πύλη. Ο αισθητήρας IR χρησιμοποιείται για την ανίχνευση οποιουδήποτε αντικειμένου στέλνοντας και λαμβάνοντας τις ακτίνες IR, μάθετε περισσότερα για τον αισθητήρα υπερύθρων εδώ.
Δύο servos θα λειτουργήσουν ως πύλη εισόδου και εξόδου και περιστρέφονται για να ανοίξουν ή να κλείσουν την πύλη. Τέλος, χρησιμοποιείται ένας αισθητήρας υπερήχων για την ανίχνευση εάν η θέση στάθμευσης είναι διαθέσιμη ή καταλαμβάνεται και αποστέλλει τα δεδομένα στο ESP8266 ανάλογα. Ελέγξτε το βίντεο που δόθηκε στο τέλος αυτού του σεμιναρίου για να κατανοήσετε την πλήρη εργασία του έργου.
Έτσι θα φαίνεται αυτό το πλήρες πρωτότυπο σύστημα έξυπνου χώρου στάθμευσης:
Προγραμματισμός ESP8266 NodeMCU για έξυπνη λύση στάθμευσης
Ο πλήρης κώδικας με ένα βίντεο εργασίας δίνεται στο τέλος αυτού του σεμιναρίου, εδώ εξηγούμε το πλήρες πρόγραμμα για να κατανοήσουμε τη λειτουργία του έργου.
Για τον προγραμματισμό NodeMCU, απλώς συνδέστε το NodeMCU στον υπολογιστή με ένα καλώδιο Micro USB και ανοίξτε το Arduino IDE. Οι βιβλιοθήκες απαιτούνται για I2C Display και Servo Motor. Η οθόνη LCD θα εμφανίσει τη διαθεσιμότητα των χώρων στάθμευσης και οι σερβο κινητήρες θα χρησιμοποιηθούν για το άνοιγμα και το κλείσιμο των πυλών εισόδου και εξόδου. Η βιβλιοθήκη Wire.h θα χρησιμοποιηθεί για διασύνδεση LCD σε πρωτόκολλο 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 όπως το WiFi SSID και τον κωδικό πρόσβασης.
#define WIFI_SSID "CircuitDigest" #define WIFI_PASSWORD "circuitdigest101"
Αρχικοποιήστε το I2C LCD με διεύθυνση συσκευής (Εδώ είναι 0x27) και τύπο LCD. Επίσης συμπεριλάβετε τους Servo Motors για είσοδο και έξοδο.
LiquidCrystal_I2C lcd (0x27, 16, 2); Σέρβο myservo; Σέρβο myservo1;
Ξεκινήστε την επικοινωνία I2C για I2C LCD.
Wire.begin (D2, D1);
Συνδέστε το Servo Entry και Exit Motor στους ακροδέκτες D5, D6 του NodeMCU.
myservo.attach (D6); myservos.attach (D5);
Επιλέξτε το Pin Trigger of Ultrasonic sensor as Output και Echo Pin as Input. Ο αισθητήρας υπερήχων θα χρησιμοποιηθεί για την ανίχνευση της διαθεσιμότητας θέσης στάθμευσης. Εάν το Αυτοκίνητο έχει καταλάβει το χώρο τότε θα λάμψει αλλιώς δεν θα λάμπει.
pinMode (TRIG, OUTPUT); pinMode (ECHO, ΕΙΣΟΔΟΣ);
Οι δύο ακίδες D0 και D4 του NodeMCU χρησιμοποιούνται για τη λήψη της ανάγνωσης του αισθητήρα IR. Ο αισθητήρας υπερύθρων θα λειτουργεί ως αισθητήρας πύλης εισόδου και εξόδου. Αυτό θα ανιχνεύσει την παρουσία του αυτοκινήτου.
pinMode (carExited, INPUT); pinMode (carEnter, INPUT);
Συνδεθείτε στο WiFi και περιμένετε λίγο έως ότου συνδεθεί.
WiFi.begin (WIFI_SSID, WIFI_PASSWORD); Serial.print ("Σύνδεση σε"); Serial.print (WIFI_SSID); ενώ (WiFi.status ()! = WL_CONNECTED) { Serial.print ("."); καθυστέρηση (500) }
Ξεκινήστε τη σύνδεση με το Firebase με το Host και το Secret Key ως διαπιστευτήρια.
Firebase.begin (FIREBASE_HOST, FIREBASE_AUTH);
Ξεκινήστε I2C 16x2 LCD και σετ θέση του δρομέα σε 0 Θ σειρά 0 ου στήλη.
lcd.begin (); lcd.setCursor (0, 0);
Πάρτε την απόσταση από τον αισθητήρα υπερήχων. Αυτό θα χρησιμοποιηθεί για την ανίχνευση της παρουσίας του οχήματος στο συγκεκριμένο σημείο. Πρώτα στείλτε τον παλμό των 2 μικροδευτερόλεπτων και μετά διαβάστε τον ληφθέντα παλμό. Στη συνέχεια, μετατρέψτε το στο "cm". Μάθετε περισσότερα σχετικά με τη μέτρηση της απόστασης χρησιμοποιώντας τον αισθητήρα υπερήχων εδώ.
digitalWrite (TRIG, LOW); καθυστέρηση Μικροδευτερόλεπτα (2); digitalWrite (TRIG, HIGH); καθυστέρηση Μικροδευτερόλεπτα (10); digitalWrite (TRIG, LOW); διάρκεια = pulseIn (ECHO, HIGH); απόσταση = (διάρκεια / 2) / 29.1;
Ψηφιακά, διαβάστε τον ακροδέκτη αισθητήρα υπερύθρων ως αισθητήρα εισόδου και ελέγξτε αν είναι υψηλός. Εάν είναι υψηλή, τότε αυξήστε τον αριθμό καταχώρησης και εκτυπώστε την σε οθόνη LCD 16x2 και επίσης στη σειριακή οθόνη.
int carEntry = digitalRead (carEnter); εάν (carEntry == ΥΨΗΛΟΣ) { countΝαι ++; Serial.print ("Car Entered ="); Serial.println (countYes); lcd.setCursor (0, 1); lcd.print ("Το αυτοκίνητο έχει εισαχθεί");
Επίσης, απομακρύνετε τη γωνία σερβοκινητήρα με ανοιχτή πύλη εισόδου. Αλλάξτε τη γωνία ανάλογα με τη θήκη χρήσης σας.
για (pos = 140; pos> = 45; pos - = 1) { myservos.write (pos); καθυστέρηση (5) } καθυστέρηση (2000) για (pos = 45; pos <= 140; pos + = 1) { // σε βήματα 1 βαθμού myservos.write (pos); καθυστέρηση (5) }
Και στείλτε την ανάγνωση στο firebase χρησιμοποιώντας τη λειτουργία pushString της βιβλιοθήκης Firebase.
Firebase.pushString ("/ Κατάσταση στάθμευσης /", fireAvailable);
Κάντε παρόμοια βήματα όπως παραπάνω για τον αισθητήρα Exit IR και τον σερβο κινητήρα Exit.
int carExit = digitalRead (carExited); εάν (carExit == ΥΨΗΛΟ) { countYes--; Serial.print ("Car Exited ="); Serial.println (countYes); lcd.setCursor (0, 1); lcd.print ("Έξοδος αυτοκινήτου"); για (pos1 = 140; pos1> = 45; pos1 - = 1) { myservo.write (pos1); καθυστέρηση (5) } καθυστέρηση (2000) για (pos1 = 45; pos1 <= 140; pos1 + = 1) { // σε βήματα 1 βαθμού myservo.write (pos1); καθυστέρηση (5) } Firebase.pushString ("/ Κατάσταση στάθμευσης /", fireAvailable); lcd.clear (); }
Ελέγξτε αν το αυτοκίνητο έχει φτάσει στο σημείο στάθμευσης και αν έχει φτάσει τότε λάμψη που δίνει το σήμα ότι το σημείο είναι γεμάτο.
εάν (απόσταση <6) { Serial.println ("Occupied"); digitalWrite (led, HIGH); }
Αλλιώς δείξτε ότι το σημείο είναι διαθέσιμο.
εάν (απόσταση> 6) { Serial.println ("Διαθέσιμο"); digitalWrite (led, LOW); }
Υπολογίστε το συνολικό κενό χώρο στο χώρο στάθμευσης και αποθηκεύστε το στη συμβολοσειρά για να στείλετε τα δεδομένα στο firebase.
Empty = allSpace - countΝαι; Διαθέσιμο = String ("Available =") + String (Empty) + String ("/") + String (allSpace); fireAvailable = String ("Available =") + String (Empty) + String ("/") + String (allSpace); Εκτυπώστε επίσης τα δεδομένα στην οθόνη LCD i2C. lcd.setCursor (0, 0); lcd.print (Διαθέσιμο);
Έτσι μπορείτε να παρακολουθείτε τη διαθεσιμότητα χώρων στάθμευσης στο Firebase, όπως φαίνεται στο παρακάτω στιγμιότυπο:
Αυτό ολοκληρώνει το πλήρες έξυπνο σύστημα στάθμευσης χρησιμοποιώντας το ESP8266 NodeMCU Module και διαφορετικά περιφερειακά. Μπορείτε επίσης να χρησιμοποιήσετε άλλους αισθητήρες σε αντικατάσταση αισθητήρα υπερήχων και υπερύθρων. Υπάρχει μια τεράστια εφαρμογή του Smart Parking System και διάφορα προϊόντα μπορούν να προστεθούν για να το κάνουν πιο έξυπνο. Σχολιάστε παρακάτω εάν έχετε οποιαδήποτε αμφιβολία ή επικοινωνήσετε με το φόρουμ μας για περισσότερη υποστήριξη.