Innholdsfortegnelse:

Trafikkrapportkontroll (NL) Med dørmatte: 6 trinn
Trafikkrapportkontroll (NL) Med dørmatte: 6 trinn

Video: Trafikkrapportkontroll (NL) Med dørmatte: 6 trinn

Video: Trafikkrapportkontroll (NL) Med dørmatte: 6 trinn
Video: Abodee Tutorials #3 | Hachiman – Omnioutil Bucket 2024, November
Anonim
Trafikkrapportkontroll (NL) Med dørmatte
Trafikkrapportkontroll (NL) Med dørmatte

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

Installer utløseren
Installer utløseren
Installer utløseren
Installer utløseren
Installer utløseren
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: