Innholdsfortegnelse:
- Trinn 1: Koble NodeMCU til Wi-Fi
- Trinn 2: Be om data fra HTTPS fra ANWB.nl
- Trinn 3: Gjør data til brukbar informasjon
- Trinn 4: Installer utløseren
- Trinn 5: Tilbakemelding fra design
- Trinn 6: Kjør koden
Video: Trafikkrapportkontroll (NL) Med dørmatte: 6 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:23
I denne instruksen vil jeg beskrive hvordan du bygger en dørmatte som vil kontrollere trafikkrapporter om nederlandske motorveier. Når du går ut på dørmatten din og det er trafikkork på ruten, vil matten bli rød. Når det ikke er trafikkork, blir matten grønn.
Jeg skal jobbe med en NodeMCU 1.0 (ESP0-12E-modul). Koden for dette prosjektet kan også fungere på andre enheter (f.eks. Arduino -kort). Dette prosjektet er basert på en nederlandsk kilde for trafikkrapporter, ANWB.
Hva vi trenger for dette prosjektet:
- NodeMCU - Stikkledninger - LED -lys eller stripe - Analog sensor (aluminiumsfolie, svamp) - Wi -Fi -tilkobling - Dørmatte
Trinn vi må ta:
1. Koble NodeMCu til Wi-Fi 2. Be om data via HTTPS fra ANWB.nl 3. Gjør data til brukbar informasjon 4. Installer utløseren 5. Design tilbakemelding
Trinn 1: Koble NodeMCU til Wi-Fi
Dette trinnet viser hvordan du gjør en vellykket HTTPSRequest for å se om enheten er koblet til internett.
Installer først ESP8266 -biblioteket i Arduino IDE. Åpne fra eksempler ESP8266>
Fyll ut Wi-Fi-legitimasjonen din øverst i koden, som vist nedenfor:
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASS";
Last opp koden til enheten din og sjekk om NodeMCU kobler til internett. HTTPSRequest -eksemplet bruker Github som standard for å hente informasjon fra. Når HTTPSRequest lyktes, mottar du Github -dataene i den serielle skjermen.
Trinn 2: Be om data fra HTTPS fra ANWB.nl
I dette andre trinnet endrer du datakilden fra standard til kilden som trengs for dette prosjektet: ANWB.nl.
Øverst i koden endrer du char* host til www.anwb.nl (eller en annen kilde du vil hente dataene dine fra):
const char* host = "www.anwb.nl";!! Hvis du bruker en annen kilde, vil trinn 3 være forskjellig fra koden min. Trinn 3 trenger spesifikk koding for å hente nyttig informasjon!
Deretter endrer du nettadressen i funksjonsoppsettet til "/feeds/gethf", banen hvor informasjonen er hentet fra:
String url = "/feeds/gethf";!! Hvis du bruker en annen kilde, bruker du stien til kilden din!
Når du laster opp koden, bør du få et svar med alle dataene fra www.anwb.nl/feeds/gethf. Denne koden lagres i en streng som kalles linje.
Trinn 3: Gjør data til brukbar informasjon
Frem til nå kjørte koden bare når NodeMCU ble startet eller tilbakestilt, fordi all koden er i oppsettfunksjonen. For å stille utløseren til å kjøre koden kontinuerlig, må du endre posisjonen til koden som kjører HTTPS -forespørselen. Under sløyfefunksjonen legger du til en annen funksjon. Jeg har kalt det void extractData:
extractData () {
}
Kopier en del av koden fra oppsettfunksjonen til extractData (). Start med følgende linje til slutten av oppsettfunksjonen:
if (! client.connect (host, Koden er nå i din nye funksjon, så fjern den kopierte koden fra oppsettsfunksjonen.
Deretter kaller du extractData -funksjonen i loop -funksjonen og legger til litt forsinkelse for å gi nodeMCU tid til å hvile:
void loop () {
extractData (); forsinkelse (30000); // dette vil bli fjernet senere når vi har en analog sensor}
Siden dataene du mottar er lagret i en streng og bare deler av denne strengen er nødvendig, må du skrive et par for løkker.
Sjekk først alle posisjonene til ordet 'vei'. Etter ordet 'vei' vil navnet på veien følge (A1, A2, etc.).
Før du begynner å skrive for loops, må du deklarere noen variabler du skal bruke:
int noOfPos = 0;
boolsk hasRunOnce = false; int fra = 0; int roadArray [20];
Nå er det på tide å skrive noen sløyfer. Jeg har skrevet for loops nederst i extractData -funksjonen. Jeg prøvde å dele det inn i separate funksjoner, men jeg kunne ikke få det til å fungere.
For løkke nr. 1: finn posisjonene til ordet vei i strenglinjen:
for (int i = 0; i <line.length (); i ++) {int pos = line.indexOf ("road \": ", fra); roadArray [noOfPos] = pos; noOfPos+= 1; fra = pos + 1; if (hasRunOnce == true && pos == line.indexOf ("road \": ")) {i = line.length (); } hasRunOnce = true; }
Sjekk deretter hvilke veier som har trafikkork, ved å bruke posisjonene til forløkken ovenfra. Plasseringen av navnet på veiene er alltid det samme og starter 7 tegn og slutter 10 tegn etter ordet vei.
Nå definerer vi matrisenavnetOfRoadArray, som skal fylles ut i neste for løkke:
String nameOfRoadArray [20];
For sløyfe nr. 2: Finn alle navnene på veiene med inngangen fra for løkke 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); }
MatrisenavnetOfRoudArray bør fylles med alle trafikkorkene som signaliseres.
Deretter skal du sjekke om veien din er i en rekke veier med trafikkork. Skriv ut nameOfRoadArray for å få veiene i dataene. Gjør dette ved å legge til Serial.println (nameOfRoadArray [k]); inn i 2. for løkke 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 riktig, vil du se alle veiene med trafikkork i seriell skjerm.
Før du skriver den siste For -løkken, må du deklarere en boolsk som en global variabel. Den boolske, kalt trafficJam, er som standard falsk og vil endres hvis funksjonen extractData returnerer true for et trafikkork. Følgende kode kommer på toppen av.ino -filen:
boolsk trafficJam = false;
For sløyfe nr. 3: Kontroller om veien, i dette tilfellet A1, er i listen over trafikkork.
for (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// endre A1 til veien til din fordel trafikkJam = true;}
Hvis du skriver ut trafficJam i den serielle skjermen, vet du om det er trafikkork på A1 eller ikke.
Sett denne koden nederst i extractData -funksjonen:
Serial.println (trafficJam); // se om det er trafikkork
Med denne informasjonen kommer vi til å jobbe videre med tilbakemeldingene til systemet i trinn 5.
Trinn 4: Installer utløseren
Siden vi nå kan hente dataene vellykket fra kilden, er det på tide å bygge en sensor som vil utløse nodenMCU for å kjøre funksjonen extractData. Jeg valgte å lage en analog sensor av dørmatten min. Du kan endre utløseren ved å bruke en annen sensor.
Bygg den analoge sensoren
Jeg brukte 2 stykker aluminiumsfolie, to hoppetråder og en svamp.
Bor et hull i svampen, dette er stedet hvor aluminiumsfoliene kommer i kontakt. Lim aluminiumsfolie på begge sider av svampen. Koble ledertrådene til aluminiumsfolien. Koble jumperledningene til nodenMCU. Den ene siden til A0-pinnen og den andre til en V3-pinne. Sett svampen under dørmatten din, og du har nettopp byttet dørmatten til en sensor. Rått!
Koden for å lese verdien fra sensoren for å se om noen står på dørmatten:
int sensorValue = analogRead (A0);
if (sensorValue == 1024) {extractData (); }
Når aluminiumsfolien tar kontakt (når noen står på matten), er sensorValue 1024. Dette resulterer i at funksjonen extractData () avfyres. Og det er akkurat det vi vil at systemet skal gjøre.
Trinn 5: Tilbakemelding fra design
Jeg brukte en LEDstrip for å gi tilbakemelding til brukeren. Når det er trafikkork, lyser fargen rød. Når veien er god å gå, blir den grønn. Jeg brukte adafruit neopixel -biblioteket til å kontrollere LEDstripen min.
Skriv denne koden øverst i filen for å sikre at LED -stripen er definert:
#inkludere
#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 neste koden i oppsettfunksjonen:
// neopiksel
pixels.begin (); piksler.vis ();
Og følgende kode i sløyfefunksjonen:
hvis (trafficJam == true) {
for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 255, 0, 0); // røde piksler. vis (); forsinkelse (200); }} annet {for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 0, 255, 0); // grønne piksler. vis (); forsinkelse (200); }
I koden ovenfor er det en if/else -funksjon. Når funksjonen extractData returnerer tilstedeværelsen av et trafikkork, blir LED -stripen rød. Hvis ikke, blir LED -stripen grønn.
Trinn 6: Kjør koden
Hvis vi kjører den komplette koden nå, skal sensoren og lyset fungere. Når du står på dørmatten, kobles sensoren til og extractData -funksjonen kjøres. Når vi er på utkikk etter veinavn, er veien vi leter etter til stede, LED -stripen blir rød og signaliserer et trafikkork. Hvis den ikke er i serien, blir LEDstripen grønn, og du vet at du er god til å gå!
Ha en trygg reise og takk for at du leser. Jeg håper du fant litt inspirasjon eller informasjon. Hvis du har noen tilbakemeldinger, kan du svare!
Anbefalt:
Raspberry Pi -eske med kjølevifte med CPU -temperaturindikator: 10 trinn (med bilder)
Raspberry Pi-eske med kjølevifte med CPU-temperaturindikator: Jeg hadde introdusert bringebær pi (heretter som RPI) CPU-temperaturindikatorkrets i det forrige prosjektet. Kretsen viser ganske enkelt RPI 4 forskjellige CPU-temperaturnivå som følger.- Grønn LED ble slått på når CPU -temperaturen er innenfor 30 ~
Tilpasset dørmatte utløst dørklokke .: 6 trinn
Custom Door Mat Triggered Door Bell .: Hei! Mitt navn er Justin, jeg er ungdom på videregående, og denne instruksjonsfilen vil vise deg hvordan du lager en dørklokke som utløses når noen tråkker på dørmatten din, og kan være hvilken melodi eller sang du vil! Siden dørmatten utløser døren
Slik demonterer du en datamaskin med enkle trinn og bilder: 13 trinn (med bilder)
Slik demonterer du en datamaskin med enkle trinn og bilder: Dette er en instruksjon om hvordan du demonterer en PC. De fleste grunnkomponentene er modulære og fjernes lett. Det er imidlertid viktig at du er organisert om det. Dette vil bidra til å hindre deg i å miste deler, og også i å gjøre monteringen igjen
PCB -design med enkle og enkle trinn: 30 trinn (med bilder)
PCB -design med enkle og enkle trinn: HELLO VENNER Den veldig nyttige og enkle opplæringen for de som ønsker å lære PCB -design, kan komme i gang
Hvordan lage en delt skjermvideo med fire trinn: 4 trinn (med bilder)
Hvordan lage en delt skjermvideo med fire trinn: Vi ser ofte en samme person vise i en scene to ganger i et TV -spill. Og så vidt vi vet har ikke skuespilleren en tvillingbror. Vi har også sett at to sangvideoer blir satt på en skjerm for å sammenligne sangferdighetene sine. Dette er kraften til spl