Πίνακας περιεχομένων:

Έλεγχος Αναφοράς Κυκλοφορίας (NL) Με Doormat: 6 Βήματα
Έλεγχος Αναφοράς Κυκλοφορίας (NL) Με Doormat: 6 Βήματα

Βίντεο: Έλεγχος Αναφοράς Κυκλοφορίας (NL) Με Doormat: 6 Βήματα

Βίντεο: Έλεγχος Αναφοράς Κυκλοφορίας (NL) Με Doormat: 6 Βήματα
Βίντεο: EXCLUSIVE: Captain Ray Bowyer on his SHOCKING Encounter w/ MASSIVE UFOs, Alderney 2007 | UFO / UAP 2024, Νοέμβριος
Anonim
Έλεγχος αναφοράς κίνησης (NL) Με Doormat
Έλεγχος αναφοράς κίνησης (NL) Με Doormat

Σε αυτό το διδακτικό θα περιγράψω πώς να φτιάξετε μια πόρτα που θα ελέγχει τις εκθέσεις κυκλοφορίας των ολλανδικών αυτοκινητοδρόμων. Μόλις βγείτε έξω με την πόρτα σας και υπάρχει μποτιλιάρισμα στη διαδρομή σας, το χαλί θα γίνει κόκκινο. Όταν δεν υπάρχει μποτιλιάρισμα, το χαλί θα γίνει πράσινο.

Θα δουλέψω σε ένα NodeMCU 1.0 (ESP0-12E Module). Ο κώδικας για αυτό το έργο θα μπορούσε να λειτουργήσει και σε άλλες συσκευές (π.χ. πίνακες Arduino). Αυτό το έργο βασίζεται σε μια ολλανδική πηγή για τις εκθέσεις κυκλοφορίας, το ANWB.

Τι χρειαζόμαστε για αυτό το έργο:

- NodeMCU - Jumper wires - LEDlight or strip - Analog sensor (Aluminiuim foil, Sponge) - Wi -Fi connection - Doormat

Βήματα που πρέπει να κάνουμε:

1. Συνδέστε το NodeMCu σε Wi-Fi 2. Ζητήστε δεδομένα μέσω HTTPS από το ANWB.nl 3. Μετατρέψτε τα δεδομένα σε χρήσιμες πληροφορίες 4. Εγκαταστήστε τη σκανδάλη 5. Σχεδιάστε σχόλια

Βήμα 1: Συνδέστε το NodeMCU σε Wi-Fi

Αυτό το βήμα θα δείξει πώς να κάνετε ένα επιτυχημένο HTTPSRequest για να δείτε εάν η συσκευή είναι συνδεδεμένη στο διαδίκτυο.

Αρχικά, εγκαταστήστε τη βιβλιοθήκη ESP8266 στο Arduino IDE. Ανοίξτε από παραδείγματα ESP8266>

Συμπληρώστε τα διαπιστευτήριά σας Wi-Fi στο επάνω μέρος του κωδικού σας, όπως φαίνεται παρακάτω:

const char* ssid = "YOUR_SSID";

const char* password = "YOUR_PASS";

Ανεβάστε τον κωδικό στη συσκευή σας και ελέγξτε αν το NodeMCU συνδέεται στο διαδίκτυο. Το παράδειγμα HTTPSRequest χρησιμοποιεί το Github ως προεπιλογή για να λάβει πληροφορίες. Όταν το HTTPSRequest πέτυχε, λαμβάνετε τα δεδομένα Github στη σειριακή οθόνη.

Βήμα 2: Ζητήστε δεδομένα από το HTTPS από το ANWB.nl

Σε αυτό το δεύτερο βήμα, αλλάζετε την προέλευση δεδομένων από την προεπιλεγμένη στην πηγή που απαιτείται για αυτό το έργο: ANWB.nl.

Στην κορυφή του κωδικού σας, αλλάξτε το char* host σε www.anwb.nl (ή άλλη πηγή από την οποία θέλετε να λάβετε τα δεδομένα σας):

const char* host = "www.anwb.nl";!! Εάν χρησιμοποιείτε άλλη πηγή, το βήμα 3 θα είναι διαφορετικό από τον κωδικό μου. Το βήμα 3 χρειάζεται συγκεκριμένη κωδικοποίηση για την ανάκτηση χρήσιμων πληροφοριών!

Στη συνέχεια, αλλάξτε το url συμβολοσειράς στη ρύθμιση συνάρτησης σε "/feeds/gethf", τη διαδρομή από την οποία αντλούνται οι πληροφορίες:

Url συμβολοσειράς = "/feeds/gethf";!! Εάν χρησιμοποιείτε άλλη πηγή, χρησιμοποιήστε τη διαδρομή προς την πηγή σας!

Όταν ανεβάζετε τον κώδικα θα πρέπει να λάβετε μια απάντηση με όλα τα δεδομένα από τη διεύθυνση www.anwb.nl/feeds/gethf. Αυτός ο κωδικός αποθηκεύεται σε μια συμβολοσειρά που ονομάζεται γραμμή.

Βήμα 3: Μετατρέψτε τα δεδομένα σε χρήσιμες πληροφορίες

Μέχρι τώρα, ο κώδικας εκτελούνταν μόνο κατά την εκκίνηση ή την επαναφορά του NodeMCU, επειδή όλος ο κώδικας βρίσκεται στη λειτουργία εγκατάστασης. Για να ρυθμίσετε τη σκανδάλη για την συνεχή εκτέλεση του κώδικα, πρέπει να αλλάξετε τη θέση του κώδικα που εκτελεί το αίτημα HTTPS. Κάτω από τη λειτουργία βρόχου, προσθέτετε μια άλλη συνάρτηση. Το ονόμασα void extractData:

extractData () {

}

Αντιγράψτε μέρος του κώδικα από τη λειτουργία εγκατάστασης στο extractData (). Ξεκινήστε με την ακόλουθη γραμμή μέχρι το τέλος της λειτουργίας ρύθμισης:

if (! client.connect (host, Ο κωδικός είναι τώρα στη νέα σας λειτουργία, οπότε αφαιρέστε τον αντιγραμμένο κώδικα από τη λειτουργία ρύθμισης.

Στη συνέχεια, καλέστε τη συνάρτηση extractData στη λειτουργία βρόχου και προσθέστε κάποια καθυστέρηση για να δώσετε στο nodeMCU χρόνο ανάπαυσης:

void loop () {

extractData (); καθυστέρηση (30000) // αυτό θα αφαιρεθεί αργότερα όταν έχουμε έναν αναλογικό αισθητήρα}

Δεδομένου ότι τα δεδομένα που λαμβάνετε είναι αποθηκευμένα σε μια συμβολοσειρά και χρειάζονται μόνο τμήματα αυτής της συμβολοσειράς, πρέπει να γράψετε δύο βρόχους.

Αρχικά, ελέγξτε όλες τις θέσεις της λέξης «δρόμος». Μετά τη λέξη «δρόμος», θα ακολουθήσει το όνομα του δρόμου (Α1, Α2, κ.λπ.).

Πριν ξεκινήσετε να γράφετε τους βρόχους for, πρέπει να δηλώσετε ορισμένες μεταβλητές που πρόκειται να χρησιμοποιήσετε:

int noOfPos = 0;

boolean hasRunOnce = false; int από = 0; int roadArray [20];

Τώρα ήρθε η ώρα να γράψουμε κάποιους βρόχους. Έχω γράψει τους βρόχους for στο κάτω μέρος της συνάρτησης extractData. Προσπάθησα να το χωρίσω σε ξεχωριστές συναρτήσεις, αλλά δεν κατάφερα να λειτουργήσει.

Για τον βρόχο Νο 1: βρείτε τις θέσεις της λέξης δρόμος στη γραμμή συμβολοσειρών:

για (int i = 0; i <line.length (); i ++) {int pos = line.indexOf ("road \": ", from); roadArray [noOfPos] = pos; noOfPos+= 1; from = pos + 1; if (hasRunOnce == true && pos == line.indexOf ("road \": ")) {i = line.length (); } hasRunOnce = true; }

Στη συνέχεια, ελέγξτε σε ποιους δρόμους υπάρχει μποτιλιάρισμα, χρησιμοποιώντας τις θέσεις του βρόχου for από πάνω. Η θέση του ονόματος των δρόμων είναι πάντα η ίδια και ξεκινούν 7 χαρακτήρες και τελειώνουν 10 χαρακτήρες μετά τη λέξη δρόμος.

Τώρα ορίζουμε το όνομα πίνακαOfRoadArray, το οποίο πρόκειται να συμπληρωθεί στον επόμενο βρόχο:

String nameOfRoadArray [20];

Για τον βρόχο Νο 2: Βρείτε όλα τα ονόματα των δρόμων με την είσοδο από για τον βρόχο αριθ. 1

για (int k = 0; k <20; k ++) {int pos = roadArray [k]; int positionOfRoadName = pos + 7; int endOfPositionOfRoadName = pos + 10; nameOfRoadArray [k] = line.substring (positionOfRoadName, endOfPositionOfRoadName); }

Το όνομα του πίνακαOfRoudArray πρέπει να είναι γεμάτο με όλα τα σήματα κυκλοφοριακής συμφόρησης.

Στη συνέχεια, θα ελέγξετε αν ο δρόμος σας βρίσκεται στη σειρά δρόμων με μποτιλιάρισμα. Εκτυπώστε το όνομαOfRoadArray για να δείτε τους δρόμους στα δεδομένα. Κάνετε αυτό προσθέτοντας το Serial.println (nameOfRoadArray [k]). στο 2ο για βρόχο όπως:

για (int k = 0; k <20; k ++) {int pos = roadArray [k]; int positionOfRoadName = pos + 7; int endOfPositionOfRoadName = pos + 10; nameOfRoadArray [k] = line.substring (positionOfRoadName, endOfPositionOfRoadName); Serial.println (nameOfRoadArray [k]); }

Αν είναι σωστό, θα δείτε όλους τους δρόμους με μποτιλιάρισμα στην σειριακή οθόνη.

Πριν γράψετε τον τελευταίο βρόχο For, πρέπει να δηλώσετε ένα boolean ως καθολική μεταβλητή. Το boolean, που ονομάζεται trafficJam είναι από προεπιλογή ψευδές και θα αλλάξει εάν η συνάρτηση extractData θα επιστρέψει true για ένα μποτιλιάρισμα. Ο ακόλουθος κώδικας βρίσκεται πάνω από το αρχείο.ino:

boolean trafficJam = false;

Για τον βρόχο αρ. 3: Ελέγξτε εάν ο δρόμος, σε αυτή την περίπτωση Α1, βρίσκεται στη λίστα μποτιλιάρισμα.

για (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// αλλαγή A1 σε δρόμο της εύνοιας σας trafficJam = true;}

Εάν εκτυπώσετε το trafficJam στη σειριακή οθόνη, γνωρίζετε εάν υπάρχει κυκλοφοριακή συμφόρηση στο A1 ή όχι.

Βάλτε αυτόν τον κώδικα στο κάτω μέρος της συνάρτησης extractData:

Serial.println (trafficJam); // δείτε αν υπάρχει μποτιλιάρισμα

Με αυτές τις πληροφορίες θα εργαστούμε περαιτέρω για την ανατροφοδότηση του συστήματος στο βήμα 5.

Βήμα 4: Εγκαταστήστε το Trigger

Εγκαταστήστε το Trigger
Εγκαταστήστε το Trigger
Εγκαταστήστε το Trigger
Εγκαταστήστε το Trigger
Εγκαταστήστε το Trigger
Εγκαταστήστε το Trigger

Δεδομένου ότι μπορούμε τώρα να ανακτήσουμε τα δεδομένα με επιτυχία από την πηγή, ήρθε η ώρα να δημιουργήσουμε έναν αισθητήρα που θα ενεργοποιήσει το nodeMCU να εκτελέσει τη συνάρτηση extractData. Επέλεξα να φτιάξω έναν αναλογικό αισθητήρα από την πόρτα μου. Μπορείτε να αλλάξετε τη σκανδάλη χρησιμοποιώντας έναν άλλο αισθητήρα.

Δημιουργία αναλογικού αισθητήρα

Χρησιμοποίησα 2 κομμάτια αλουμινόχαρτο, δύο καλώδια και ένα σφουγγάρι.

Τρυπήστε μια τρύπα στο σφουγγάρι, αυτό είναι το σημείο όπου θα έρθουν σε επαφή τα αλουμινόχαρτα. Κολλήστε αλουμινόχαρτο και στις δύο πλευρές του σφουγγαριού. Συνδέστε καλώδια βραχυκυκλωτήρων στο αλουμινόχαρτο. Συνδέστε τα καλώδια βραχυκυκλωτήρων στο nodeMCU. Η μία πλευρά στον ακροδέκτη A0 και η άλλη σε έναν ακροδέκτη V3. Βάλτε το σφουγγάρι κάτω από την πόρτα σας και μόλις αλλάξατε την πόρτα σας σε αισθητήρα. Φοβερός!

Ο κωδικός για την ανάγνωση της τιμής από τον αισθητήρα για να δείτε αν κάποιος στέκεται στο χαλί:

int sensorValue = analogRead (A0);

if (sensorValue == 1024) {extractData (); }

Όταν το αλουμινόχαρτο έρχεται σε επαφή (όταν κάποιος στέκεται στο χαλί), το sensorValue είναι 1024. Αυτό έχει ως αποτέλεσμα την εκτόξευση της λειτουργίας extractData (). Και αυτό ακριβώς θέλουμε να κάνει το σύστημα.

Βήμα 5: Σχεδιασμός σχολίων

Χρησιμοποίησα μια λωρίδα LED για να δώσω σχόλια στον χρήστη. Όταν υπάρχει μποτιλιάρισμα, το φως θα χρωματιστεί κόκκινο. Όταν ο δρόμος είναι καλός, θα γίνει πράσινος. Χρησιμοποίησα τη βιβλιοθήκη neafixel adafruit για τον έλεγχο της λωρίδας LED μου.

Γράψτε αυτόν τον κωδικό στο επάνω μέρος του αρχείου σας για να βεβαιωθείτε ότι έχει καθοριστεί η λωρίδα LED:

#περιλαμβάνω

#define PIXEL_PIN D5 #define PIXEL_COUNT 10 #define PIXEL_TYPE NEO_GRB + NEO_KHZ800 Adafruit_NeoPixel pixels = Adafruit_NeoPixel (PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);

Γράψτε τον επόμενο κώδικα στη συνάρτηση ρύθμισης:

// neopixel

pixels.begin (); pixels.show ();

Και ο ακόλουθος κώδικας στη λειτουργία βρόχου:

εάν (trafficJam == true) {

για (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 255, 0, 0); // κόκκινα pixels.show (); καθυστέρηση (200)? }} else {for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 0, 255, 0); // πράσινα pixels.show (); καθυστέρηση (200)? }

Στον παραπάνω κώδικα υπάρχει μια συνάρτηση if/else. Όταν η συνάρτηση extractData επιστρέψει την παρουσία εμπλοκής κυκλοφορίας, η λωρίδα LED θα γίνει κόκκινη. Εάν όχι, η λωρίδα LED θα γίνει πράσινη.

Βήμα 6: Εκτελέστε τον κώδικα

Εάν τρέξουμε τώρα τον πλήρη κώδικα, ο αισθητήρας και το φως θα πρέπει να λειτουργήσουν. Όταν στέκεστε στο χαλί, ο αισθητήρας θα συνδεθεί και θα εκτελεστεί η λειτουργία extractData. Όταν υπάρχει μια σειρά από ονόματα δρόμων, ο δρόμος που ψάχνουμε είναι παρών, η λωρίδα LED θα γίνει κόκκινη, σηματοδοτώντας ένα μποτιλιάρισμα. Εάν δεν είναι στη συστοιχία, η λωρίδα LED θα γίνει πράσινη και ξέρετε ότι είστε έτοιμοι!

Καλό ταξίδι και ευχαριστώ για την ανάγνωση. Ελπίζω να βρήκατε κάποια έμπνευση ή πληροφορίες. Εάν έχετε κάποια σχόλια, μη διστάσετε να απαντήσετε!

Συνιστάται: