Inhaltsverzeichnis:

Traffic Report Check (NL) mit Fußmatte - Gunook
Traffic Report Check (NL) mit Fußmatte - Gunook

Video: Traffic Report Check (NL) mit Fußmatte - Gunook

Video: Traffic Report Check (NL) mit Fußmatte - Gunook
Video: Slide to unlock - Die Rache der Fußmatte 2024, Juli
Anonim
Traffic Report Check (NL) mit Fußmatte
Traffic Report Check (NL) mit Fußmatte

In diesem anweisbaren werde ich beschreiben, wie man eine Fußmatte baut, die Verkehrsberichte von niederländischen Autobahnen überprüft. Sobald Sie auf Ihrer Fußmatte nach draußen treten und sich auf Ihrer Route ein Stau befindet, wird die Matte rot. Wenn kein Stau herrscht, wird die Matte grün.

Ich werde an einer NodeMCU 1.0 (ESP0-12E-Modul) arbeiten. Der Code für dieses Projekt könnte auch auf anderen Geräten funktionieren (z. B. Arduino-Boards). Dieses Projekt basiert auf einer niederländischen Quelle für Verkehrsmeldungen, dem ANWB.

Was wir für dieses Projekt brauchen:

- NodeMCU - Überbrückungsdrähte - LED-Licht oder -Streifen - Analogsensor (Aluminiumfolie, Schwamm) - Wi-Fi-Verbindung - Fußmatte

Schritte, die wir unternehmen müssen:

1. NodeMCu mit Wi-Fi verbinden 2. Daten über HTTPS von ANWB.nl anfordern 3. Daten in nutzbare Informationen umwandeln 4. Trigger installieren 5. Design-Feedback

Schritt 1: NodeMCU mit Wi-Fi verbinden

Dieser Schritt zeigt, wie Sie eine erfolgreiche HTTPSRequest durchführen, um zu sehen, ob das Gerät mit dem Internet verbunden ist.

Installieren Sie zunächst die ESP8266-Bibliothek in Arduino IDE. Open aus den Beispielen ESP8266 >

Geben Sie oben in Ihrem Code Ihre WLAN-Anmeldeinformationen ein, wie unten gezeigt:

const char* ssid = "IHRE_SSID";

const char* passwort = "YOUR_PASS";

Laden Sie den Code auf Ihr Gerät hoch und prüfen Sie, ob die NodeMCU mit dem Internet verbunden ist. Das HTTPSRequest-Beispiel verwendet Github als Standard, um Informationen abzurufen. Wenn der HTTPSRequest erfolgreich war, erhalten Sie die Github-Daten im seriellen Monitor.

Schritt 2: Daten von HTTPS von ANWB.nl anfordern

In diesem zweiten Schritt ändern Sie die Datenquelle vom Standard in die für dieses Projekt benötigte Quelle: ANWB.nl.

Ändern Sie oben in Ihrem Code char* host in www.anwb.nl (oder eine andere Quelle, von der Sie Ihre Daten beziehen möchten):

const char* host = "www.anwb.nl";!! Wenn Sie eine andere Quelle verwenden, unterscheidet sich Schritt 3 von meinem Code. Schritt 3 erfordert eine spezielle Codierung, um brauchbare Informationen abzurufen!

Als nächstes ändern Sie die String-URL im Funktions-Setup in "/feeds/gethf", den Pfad, aus dem die Informationen stammen:

String-URL = "/feeds/gethf";!! Wenn Sie eine andere Quelle verwenden, verwenden Sie den Pfad zu Ihrer Quelle!

Wenn Sie den Code hochladen, sollten Sie eine Antwort mit allen Daten von www.anwb.nl/feeds/gethf erhalten. Dieser Code wird in einer Zeichenfolge namens line gespeichert.

Schritt 3: Daten in nutzbare Informationen verwandeln

Bisher lief der Code nur, wenn die NodeMCU gestartet oder zurückgesetzt wurde, da sich der gesamte Code in der Setup-Funktion befindet. Um den Trigger so einzustellen, dass der Code kontinuierlich ausgeführt wird, müssen Sie die Position des Codes ändern, der die HTTPS-Anforderung ausführt. Unterhalb der Loop-Funktion fügen Sie eine weitere Funktion hinzu. Ich habe es void ExtractData genannt:

Daten extrahieren(){

}

Kopieren Sie einen Teil des Codes aus der Setup-Funktion in ExtractData(). Beginnen Sie mit der folgenden Zeile bis zum Ende der Setup-Funktion:

if (!client.connect(host, Der Code befindet sich jetzt in Ihrer neuen Funktion, also entfernen Sie den kopierten Code aus der Setup-Funktion.

Rufen Sie als Nächstes die Funktion ExtractData in der Schleifenfunktion auf und fügen Sie eine Verzögerung hinzu, um der nodeMCU Zeit zum Ausruhen zu geben:

Leere Schleife () {

Daten extrahieren(); Verzögerung (30000); // Dies wird später entfernt, wenn wir einen analogen Sensor haben}

Da die empfangenen Daten in einem String gespeichert sind und nur Teile dieses Strings benötigt werden, müssen Sie einige for-Schleifen schreiben.

Überprüfen Sie zunächst alle Positionen des Wortes 'Straße'. Nach dem Wort 'Straße' folgt der Name der Straße (A1, A2 usw.).

Bevor Sie mit dem Schreiben der for-Schleifen beginnen, müssen Sie einige Variablen deklarieren, die Sie verwenden werden:

int noOfPos = 0;

boolesch hasRunOnce = false; int von = 0; int roadArray[20];

Jetzt ist es an der Zeit, einige Schleifen zu schreiben. Ich habe die for-Schleifen unten in die Funktion ExtractData geschrieben. Ich habe versucht, es in separate Funktionen zu unterteilen, aber ich konnte es nicht zum Laufen bringen.

Für Schleife Nr. 1: Suchen Sie die Positionen des Wortes Straße in der Zeichenfolge:

for(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; }

Überprüfen Sie als nächstes, auf welchen Straßen ein Stau besteht, indem Sie die Positionen der for-Schleife von oben verwenden. Die Position der Straßennamen ist immer gleich und beginnt 7 Zeichen und endet 10 Zeichen nach dem Wort Straße.

Nun definieren wir das Array nameOfRoadArray, das in der nächsten for-Schleife gefüllt wird:

String nameOfRoadArray[20];

For-Schleife Nr. 2: Finden Sie alle Namen der Straßen mit der Eingabe von for-Schleife Nr. 1

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

Das Array nameOfRoudArray sollte mit allen signalisierten Staus gefüllt werden.

Als nächstes prüfen Sie, ob Ihre Straße zu den Straßen mit Stau gehört. Geben Sie nameOfRoadArray aus, um die Straßen in den Daten abzurufen. Tun Sie dies, indem Sie Serial.println (nameOfRoadArray[k]); in die 2. for-Schleife wie:

for(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]); }

Wenn es richtig ist, sehen Sie im Serial Monitor alle Straßen mit Stau.

Bevor Sie die letzte For-Schleife schreiben, müssen Sie einen booleschen Wert als globale Variable deklarieren. Der boolesche Wert namens trafficJam ist standardmäßig false und ändert sich, wenn die Funktion ExtractData bei einem Stau true zurückgibt. Der folgende Code wird oben in die.ino-Datei eingefügt:

boolescher TrafficJam = false;

Für Schleife Nr. 3: Prüfen Sie, ob die Straße, in diesem Fall die A1, in der Liste der Staus enthalten ist.

for(int l=0; l < 20; l++){ if(nameOfRoadArray[l] == "A1\""){ // A1 zu deiner bevorzugten Straße ändern trafficJam = true; }

Wenn Sie trafficJam im seriellen Monitor ausdrucken, wissen Sie, ob auf der A1 ein Stau herrscht oder nicht.

Fügen Sie diesen Code am Ende der Funktion ExtractData ein:

Serial.println (trafficJam); //schauen, ob es einen Stau gibt

Mit diesen Informationen werden wir in Schritt 5 weiter an der Rückmeldung des Systems arbeiten.

Schritt 4: Installieren Sie den Auslöser

Installieren Sie den Auslöser
Installieren Sie den Auslöser
Installieren Sie den Auslöser
Installieren Sie den Auslöser
Installieren Sie den Auslöser
Installieren Sie den Auslöser

Da wir die Daten nun erfolgreich aus der Quelle abrufen können, ist es an der Zeit, einen Sensor zu bauen, der die nodeMCU zum Ausführen der Funktion ExtractData auslöst. Ich entschied mich, einen analogen Sensor aus meiner Fußmatte zu machen. Sie können den Trigger ändern, indem Sie einen anderen Sensor verwenden.

Aufbau des analogen Sensors

Ich habe 2 Stück Alufolie, zwei Überbrückungsdrähte und einen Schwamm verwendet.

Bohren Sie ein Loch in den Schwamm, hier treffen die Alufolien aufeinander. Kleben Sie Aluminiumfolie auf beide Seiten des Schwamms. Verbinden Sie die Überbrückungsdrähte mit der Aluminiumfolie. Verbinden Sie die Jumperdrähte mit der nodeMCU. Eine Seite an den A0-Pin und die andere an einen V3-Pin. Legen Sie den Schwamm unter Ihre Fußmatte und Sie haben Ihre Fußmatte gerade in einen Sensor verwandelt. Fantastisch!

Der Code zum Lesen des Wertes vom Sensor, um zu sehen, ob jemand auf der Fußmatte steht:

int sensorValue = analogRead(A0);

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

Bei Kontakt der Alufolie (wenn jemand auf der Matte steht) ist der sensorValue 1024. Dadurch wird die Funktion ExtractData() ausgelöst. Und genau das wollen wir mit dem System.

Schritt 5: Design-Feedback

Ich habe einen LEDstrip verwendet, um dem Benutzer Feedback zu geben. Bei einem Stau leuchtet die Ampel rot. Wenn die Straße gut befahrbar ist, wird sie grün. Ich habe die Neopixel-Bibliothek von adafruit verwendet, um meinen LEDstrip zu steuern.

Schreiben Sie diesen Code oben in Ihre Datei, um sicherzustellen, dass der LEDstrip definiert ist:

#enthalten

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

Schreiben Sie den nächsten Code in die Setup-Funktion:

// Neopixel

Pixel.begin(); Pixel.show();

Und der folgende Code in der Schleifenfunktion:

if (trafficJam == true){

for(int i; i < PIXEL_COUNT; i++) {pixel.setPixelColor (i, 255, 0, 0); // rote Pixel.show(); Verzögerung (200); }} Else{ for(int i; i < PIXEL_COUNT; i++) {pixel.setPixelColor (i, 0, 255, 0); // grüne Pixel.show(); Verzögerung (200); }

Im obigen Code gibt es eine if/else-Funktion. Wenn die Funktion ExtractData das Vorhandensein eines Staus zurückgibt, wird der LEDStrip rot. Wenn nicht, wird der LED-Streifen grün.

Schritt 6: Führen Sie den Code aus

Wenn wir jetzt den vollständigen Code ausführen, sollten der Sensor und das Licht funktionieren. Wenn Sie auf der Fußmatte stehen, verbindet sich der Sensor und die Funktion ExtractData wird ausgeführt. Wenn in der Reihe der Straßennamen die gesuchte Straße vorhanden ist, wird der LED-Streifen rot und signalisiert einen Stau. Wenn es nicht im Array ist, wird der LED-Streifen grün und Sie wissen, dass Sie loslegen können!

Gute Fahrt und danke fürs Lesen. Ich hoffe, Sie haben Inspiration oder Informationen gefunden. Wenn Sie Feedback haben, können Sie gerne antworten!

Empfohlen: