Indholdsfortegnelse:
- Trin 1: Tilslut NodeMCU til Wi-Fi
- Trin 2: Anmod om data fra HTTPS fra ANWB.nl
- Trin 3: Gør data til brugbare oplysninger
- Trin 4: Installer udløseren
- Trin 5: Designfeedback
- Trin 6: Kør koden
Video: Trafikrapportkontrol (NL) Med dørmåtte: 6 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
I denne instruktive vil jeg beskrive, hvordan man bygger en dørmåtte, der kontrollerer trafikrapporter om hollandske motorveje. Når du træder udenfor på din dørmåtte, og der er trafikprop på din rute, bliver måtten til en rød farve. Når der ikke er trafikprop, bliver måtten grøn.
Jeg arbejder på et NodeMCU 1.0 (ESP0-12E-modul). Koden til dette projekt kan også fungere på andre enheder (f.eks. Arduino -tavler). Dette projekt er baseret på en hollandsk kilde til trafikrapporter, ANWB.
Hvad vi har brug for til dette projekt:
- NodeMCU - Jumperwires - LEDlight or strip - Analog sensor (Aluminiuim folie, Svamp) - Wi -Fi forbindelse - Dørmåtte
Skridt, vi skal tage:
1. Tilslut NodeMCu til Wi-Fi 2. Anmod om data via HTTPS fra ANWB.nl 3. Gør data til brugbare oplysninger 4. Installer udløseren 5. Design feedback
Trin 1: Tilslut NodeMCU til Wi-Fi
Dette trin viser, hvordan du udfører en vellykket HTTPSRequest for at se, om enheden er forbundet til internettet.
Installer først ESP8266 -biblioteket i Arduino IDE. Åbn fra eksempler ESP8266>
Udfyld dine Wi-Fi-legitimationsoplysninger øverst i din kode, som vist herunder:
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASS";
Upload koden til din enhed, og kontroller, om NodeMCU opretter forbindelse til internettet. HTTPSRequest -eksemplet bruger Github som standard til at hente oplysninger fra. Når HTTPSRequest lykkedes, modtager du Github -data i den serielle skærm.
Trin 2: Anmod om data fra HTTPS fra ANWB.nl
I dette andet trin ændrer du datakilden fra standard til den nødvendige kilde til dette projekt: ANWB.nl.
Øverst i din kode skal du ændre char* host til www.anwb.nl (eller en anden kilde, du gerne vil have dine data fra):
const char* host = "www.anwb.nl";!! Hvis du bruger en anden kilde, vil trin 3 være forskellig fra min kode. Trin 3 har brug for specifik kodning for at hente brugbar information!
Dernæst skal du ændre string -url'en i funktionsopsætningen til "/feeds/gethf", stien, hvor oplysningerne er hentet fra:
String url = "/feeds/gethf";!! Hvis du bruger en anden kilde, skal du bruge stien til din kilde!
Når du uploader koden, skal du få et svar med alle data fra www.anwb.nl/feeds/gethf. Denne kode gemmes i en streng kaldet linje.
Trin 3: Gør data til brugbare oplysninger
Indtil nu kørte koden kun, da NodeMCU blev startet eller nulstillet, fordi al koden er i opsætningsfunktionen. For at indstille udløseren til løbende at køre koden, skal du ændre placeringen af koden, der kører HTTPS -anmodningen. Under loop -funktionen tilføjer du en anden funktion. Jeg har kaldt det void extractData:
extractData () {
}
Kopiér en del af koden fra opsætningsfunktionen til extractData (). Start med følgende linje indtil afslutningen af opsætningsfunktionen:
hvis (! client.connect (host, Koden er nu i din nye funktion, så fjern den kopierede kode fra opsætningsfunktionen.
Ring derefter til extractData -funktionen i loop -funktionen, og tilføj lidt forsinkelse for at give nodeMCU tid til at hvile:
void loop () {
extractData (); forsinkelse (30000); // dette fjernes senere, når vi har en analog sensor}
Da de data, du modtager, er gemt i en streng, og der kun er brug for dele af denne streng, skal du skrive et par af loops.
Kontroller først alle positionerne af ordet 'vej'. Efter ordet 'vej' følger vejens navn (A1, A2 osv.).
Inden du begynder at skrive for -loops, skal du deklarere nogle variabler, du skal bruge:
int noOfPos = 0;
boolsk hasRunOnce = false; int fra = 0; int roadArray [20];
Nu er det tid til at skrive nogle sløjfer. Jeg har skrevet for -loops i bunden af extractData -funktionen. Jeg forsøgte at opdele det i separate funktioner, men jeg kunne ikke få det til at fungere.
For løkke nr. 1: Find positionerne for ordet vej i strenglinjen:
for (int i = 0; i <line.length (); i ++) {int pos = line.indexOf ("road \": ", fra); roadArray [noOfPos] = pos; noOfPos+= 1; fra = pos + 1; hvis (hasRunOnce == true && pos == line.indexOf ("road \": ")) {i = line.length (); } hasRunOnce = true; }
Kontroller derefter, hvilke veje der har et trafikprop, ved at bruge positionerne i for -løkken ovenfra. Placeringen af vejenes navn er altid den samme og starter 7 tegn og slutter 10 tegn efter ordet vej.
Nu definerer vi matrixnavnetOfRoadArray, som vil blive udfyldt i det næste for loop:
String nameOfRoadArray [20];
For løkke nr. 2: Find alle navnene på vejene med input fra for sløjfe 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); }
MatrixnavnetOfRoudArray skal udfyldes med alle de trafikpropper, der signaleres.
Dernæst skal du kontrollere, om din vej er i rækken af veje med trafikprop. Udskriv navnetOfRoadArray for at få vejene i dataene. Gør dette ved at tilføje Serial.println (nameOfRoadArray [k]); ind i 2. for sløjfe som:
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]); }
Hvis det er rigtigt, vil du se alle vejene med trafikprop i den serielle skærm.
Inden du skriver den sidste For -loop, skal du erklære en boolean som en global variabel. Den boolske, kaldet trafficJam er som standard falsk og ændres, hvis funktionen extractData returnerer true for en trafikprop. Følgende kode kommer oven på.ino -filen:
boolsk trafikJam = falsk;
For sløjfe nr. 3: Kontroller, om vejen, i dette tilfælde A1, er på listen over trafikpropper.
for (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// ændr A1 til din foretrukne trafik trafficJam = true;}
Hvis du udskriver trafficJam i den serielle skærm, ved du, om der er trafikprop på A1 eller ej.
Sæt denne kode i bunden af extractData -funktionen:
Serial.println (trafficJam); // se om der er trafikprop
Med disse oplysninger vil vi arbejde videre med systemets feedback i trin 5.
Trin 4: Installer udløseren
Da vi nu kan hente dataene med succes fra kilden, er det tid til at bygge en sensor, der vil udløse nodeMCU til at køre funktionen extractData. Jeg valgte at lave en analog sensor ud af min dørmåtte. Du kan ændre udløseren ved at bruge en anden sensor.
Bygger den analoge sensor
Jeg brugte 2 stykker aluminiumsfolie, to springtråde og en svamp.
Bor et hul i svampen, dette er stedet, hvor aluminiumsfolierne kommer i kontakt. Lim aluminiumsfolie på begge sider af svampen. Tilslut jumperkabler til aluminiumsfolien. Tilslut jumperkablerne til nodeMCU. Den ene side til A0-stiften og den anden til en V3-ben. Læg svampen under din dørmåtte, og du har lige ændret din dørmåtte til en sensor. Fantastisk!
Koden til at læse værdi fra sensoren for at se, om der står nogen på dørmåtten:
int sensorValue = analogRead (A0);
hvis (sensorValue == 1024) {extractData (); }
Når aluminiumsfolien får kontakt (når nogen står på måtten), er sensorValue 1024. Dette resulterer i, at funktionen extractData () udløses. Og det er præcis det, vi ønsker, at systemet skal gøre.
Trin 5: Designfeedback
Jeg brugte en LEDstrip til at give brugeren feedback. Når der er trafikprop, lyser lyset rødt. Når vejen er god at gå, bliver den grøn. Jeg brugte adafruit neopixel biblioteket til at styre min LEDstrip.
Skriv denne kode øverst i din fil for at sikre, at LEDstrip er defineret:
#omfatte
#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);
Skriv den næste kode i opsætningsfunktionen:
// neopixel
pixels.begin (); pixels.show ();
Og følgende kode i loop -funktionen:
hvis (trafficJam == true) {
for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 255, 0, 0); // røde pixels.show (); forsinkelse (200); }} andet {for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 0, 255, 0); // grønne pixels.show (); forsinkelse (200); }
I koden ovenfor er der en if/else -funktion. Når funktionen extractData returnerer tilstedeværelsen af en trafikprop, bliver LEDstripen rød. Hvis ikke, bliver LED -stripen grøn.
Trin 6: Kør koden
Hvis vi kører den komplette kode nu, skal sensoren og lyset fungere. Når du står på dørmåtten, tilsluttes sensoren, og extractData -funktionen kører. Når den vej, vi leder efter, er i rækken af vejnavne, er LEDstripen rød, hvilket signalerer en trafikprop. Hvis det ikke er i arrayet, bliver LEDstrip grønt, og du ved, at du er god til at gå!
Hav en sikker rejse og tak fordi du læste med. Jeg håber, at du har fundet inspiration eller information. Hvis du har fået feedback, er du velkommen til at svare!
Anbefalede:
Trin-for-trin uddannelse i robotik med et sæt: 6 trin
Trin-for-trin uddannelse i robotteknologi med et kit: Efter ganske få måneder med at bygge min egen robot (se alle disse), og efter at jeg to gange havde dele mislykkedes, besluttede jeg at tage et skridt tilbage og tænke min strategi og retning. De flere måneders erfaring var til tider meget givende, og
Akustisk levitation med Arduino Uno trin for trin (8 trin): 8 trin
Akustisk levitation med Arduino Uno Step-by Step (8-trin): ultralyds lydtransducere L298N Dc kvindelig adapter strømforsyning med en han-DC-pin Arduino UNOBreadboard Sådan fungerer det: Først uploader du kode til Arduino Uno (det er en mikrokontroller udstyret med digital og analoge porte til konvertering af kode (C ++)
Hjemmeautomatisering Trin for trin Brug af Wemos D1 Mini Med PCB -design: 4 trin
Hjemmeautomatisering Trin for trin Brug af Wemos D1 Mini Med PCB -design: Hjemmeautomatisering Trin for trin ved hjælp af Wemos D1 Mini med PCB -design For et par uger siden udgav vi en tutorial "Home Automation using Raspberry Pi" i rootsaid.com, som blev godt modtaget blandt hobbyfolk og universitetsstuderende. Så kom et af vores medlemmer
Ciclop 3d Scanner My Way Trin for trin: 16 trin (med billeder)
Ciclop 3d Scanner My Way Step by Step: Hej alle sammen, jeg kommer til at indse den berømte Ciclop 3D -scanner.Alle trin, der er godt forklaret på det originale projekt, er ikke til stede.Jeg lavede nogle rettelser for at forenkle processen, først Jeg udskriver basen, og end jeg genstarter printkortet, men fortsæt
Sådan styrer du husholdningsapparater med fjernsyn med fjernbetjening med timerfunktion: 7 trin (med billeder)
Sådan styrer du husholdningsapparater med fjernsyn med fjernbetjening med timerfunktion: Selv efter 25 års introduktion til forbrugermarkedet er infrarød kommunikation stadig meget relevant i de seneste dage. Uanset om det er dit 55 tommer 4K -fjernsyn eller dit billydsystem, har alt brug for en IR -fjernbetjening for at reagere på vores