Cuprins:

Verificarea raportului de trafic (NL) cu ușă: 6 pași
Verificarea raportului de trafic (NL) cu ușă: 6 pași

Video: Verificarea raportului de trafic (NL) cu ușă: 6 pași

Video: Verificarea raportului de trafic (NL) cu ușă: 6 pași
Video: DISTRIBUȚII care nu se schimbă NICIODATĂ 2024, Iulie
Anonim
Verificarea raportului de trafic (NL) cu pașaport
Verificarea raportului de trafic (NL) cu pașaport

În acest instructiv, voi descrie cum să construiți un ușor care să verifice rapoartele de trafic ale autostrăzilor olandeze. Odată ce ieși afară pe covorașul tău și există un blocaj de trafic pe traseul tău, covorașul va deveni roșu. Când nu există blocaj de trafic, covorașul va deveni verde.

Voi lucra la un NodeMCU 1.0 (modul ESP0-12E). Codul pentru acest proiect ar putea funcționa și pe alte dispozitive (de exemplu, plăci Arduino). Acest proiect se bazează pe o sursă olandeză pentru rapoarte de trafic, ANWB.

De ce avem nevoie pentru acest proiect:

- NodeMCU - Fire jumper - LEDlight sau strip - Senzor analogic (folie aluminiuim, burete) - Conexiune Wi-Fi - Doormat

Pașii pe care trebuie să-i facem:

1. Conectați NodeMCu la Wi-Fi 2. Solicitați date prin HTTPS de la ANWB.nl 3. Transformați datele în informații utilizabile 4. Instalați declanșatorul 5. Feedback de proiectare

Pasul 1: Conectați NodeMCU la Wi-Fi

Acest pas va arăta cum să faceți o cerere HTTPS de succes pentru a vedea dacă dispozitivul este conectat la internet.

Mai întâi, instalați biblioteca ESP8266 în Arduino IDE. Deschideți din exemplele ESP8266>

Completați datele de conectare Wi-Fi din partea de sus a codului, așa cum se arată mai jos:

const char * ssid = "YOUR_SSID";

const char * password = "YOUR_PASS";

Încărcați codul pe dispozitiv și verificați dacă NodeMCU se conectează la internet. Exemplul HTTPSRequest folosește Github ca implicit pentru a obține informații. Când solicitarea HTTPS a reușit, primiți datele Github pe monitorul serial.

Pasul 2: Solicitați date de la HTTPS de la ANWB.nl

În acest al doilea pas, schimbați sursa de date de la valoarea implicită la sursa necesară pentru acest proiect: ANWB.nl.

În partea de sus a codului, schimbați gazda char * la www.anwb.nl (sau o altă sursă din care doriți să obțineți datele):

const char * host = "www.anwb.nl";!! Dacă utilizați o altă sursă, pasul 3 va fi diferit de codul meu. Pasul 3 are nevoie de codificare specifică pentru a prelua informații utilizabile!

Apoi, schimbați URL-ul șirului din setarea funcției la „/ feeds / gethf”, calea de unde sunt preluate informațiile:

String url = "/ feeds / gethf";!! Dacă utilizați o altă sursă, utilizați calea către sursa dvs.!

Când încărcați codul, ar trebui să primiți un răspuns cu toate datele de pe www.anwb.nl/feeds/gethf. Acest cod este salvat într-un șir numit linie.

Pasul 3: Transformați datele în informații utilizabile

Până acum, codul a funcționat numai când NodeMCU a fost pornit sau resetat, deoarece tot codul se află în funcția de configurare. Pentru a seta declanșatorul să ruleze codul continuu, trebuie să schimbați poziția codului care execută solicitarea HTTPS. Sub funcția buclă, adăugați o altă funcție. Am numit-o nulă extractData:

extractData () {

}

Copiați o parte din cod din funcția de configurare în extractData (). Începeți cu următoarea linie până la sfârșitul funcției de configurare:

if (! client.connect (host, Codul se află acum în noua dvs. funcție, deci eliminați codul copiat din funcția de configurare.

Apoi, apelați funcția extractData în funcția de buclă și adăugați o anumită întârziere pentru a da timp nodului MCU să se odihnească:

bucla nulă () {

extractData (); întârziere (30000); // acest lucru va fi eliminat mai târziu când avem un senzor analog}

Deoarece datele pe care le primiți sunt stocate într-un șir și sunt necesare doar părți ale acestui șir, trebuie să scrieți câteva bucle.

Mai întâi, verificați toate pozițiile cuvântului „drum”. După cuvântul „drum”, va urma numele drumului (A1, A2 etc.).

Înainte de a începe să scrieți buclele, trebuie să declarați câteva variabile pe care le veți folosi:

int noOfPos = 0;

boolean hasRunOnce = false; int de la = 0; int roadArray [20];

Acum este timpul să scrieți câteva bucle. Am scris buclele pentru în partea de jos a funcției extractData. Am încercat să îl împart în funcții separate, dar nu am reușit să funcționeze.

Pentru bucla nr. 1: găsiți pozițiile cuvântului drum în linia șirului:

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 = adevărat; }

Apoi, verificați ce drumuri au blocaj de trafic, utilizând pozițiile buclei for de sus. Poziția numelui drumurilor este întotdeauna aceeași și începe cu 7 caractere și se termină 10 caractere după cuvântul drum.

Acum definim matricea nameOfRoadArray, care va fi completată în următoarea buclă:

String nameOfRoadArray [20];

Pentru bucla nr. 2: Găsiți toate numele drumurilor cu intrarea din bucla 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); }

Aranjamentul nameOfRoudArray ar trebui să fie umplut cu toate blocajele de trafic semnalate.

Apoi, veți verifica dacă drumul dvs. se află în gama de drumuri cu blocaj de trafic. Imprimați numeleOfRoadArray pentru a obține drumurile în date. Faceți acest lucru adăugând Serial.println (nameOfRoadArray [k]); în a 2-a buclă pentru:

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

Dacă este corect, veți vedea toate drumurile cu blocaj de trafic pe monitorul Serial.

Înainte de a scrie ultima buclă For, trebuie să declarați un boolean ca variabilă globală. Booleanul, numit trafficJam, este implicit fals și se va schimba dacă funcția extractData va reveni adevărată pentru un blocaj de trafic. Următorul cod se află deasupra fișierului.ino:

boolean trafficJam = false;

Pentru bucla nr. 3: Verificați dacă drumul, în acest caz A1, se află în lista blocajelor de trafic.

for (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// schimbați A1 pe drumul favorit dvs. trafficJam = true;}

Dacă tipăriți trafficJam pe monitorul serial, știți dacă există blocaj de trafic pe A1 sau nu.

Puneți acest cod în partea de jos a funcției extractData:

Serial.println (trafficJam); // vezi dacă există un blocaj de trafic

Cu aceste informații, vom lucra în continuare la feedback-ul sistemului în pasul 5.

Pasul 4: Instalați declanșatorul

Instalați declanșatorul
Instalați declanșatorul
Instalați declanșatorul
Instalați declanșatorul
Instalați declanșatorul
Instalați declanșatorul

Deoarece acum putem prelua datele cu succes de la sursă, este timpul să construim un senzor care va declanșa nodul MCU pentru a rula funcția extractData. Am ales să fac un senzor analogic din covorașul meu. Puteți schimba declanșatorul folosind un alt senzor.

Construirea senzorului analogic

Am folosit 2 bucăți de folie de aluminiu, două fire jumper și un burete.

Faceți o gaură în burete, acesta este locul în care foliile de aluminiu vor intra în contact. Lipiți folie de aluminiu pe ambele părți ale buretelui. Conectați firele jumperului la folia de aluminiu. Conectați firele jumperului la nodul MCU. O parte a pinului A0 și cealaltă a pinului V3. Puneți buretele sub covoraș și tocmai v-ați schimbat covorașul într-un senzor. Minunat!

Codul pentru a citi valoarea senzorului pentru a vedea dacă cineva stă pe covor:

int sensorValue = analogRead (A0);

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

Când folia de aluminiu intră în contact (când cineva stă pe covor), sensorValue este 1024. Acest lucru duce la declanșarea funcției extractData (). Și exact asta vrem să facă sistemul.

Pasul 5: Feedback de proiectare

Am folosit un LEDstrip pentru a oferi feedback utilizatorului. Când există un blocaj de trafic, lumina se va colora în roșu. Când drumul este bun de parcurs, va deveni verde. Am folosit biblioteca adafruit neopixel pentru a-mi controla LEDstrip-ul.

Scrieți acest cod în partea de sus a fișierului pentru a vă asigura că LEDstrip este definit:

#include

#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);

Scrieți următorul cod în funcția de configurare:

// neopixel

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

Și următorul cod în funcția de buclă:

if (trafficJam == true) {

for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 255, 0, 0); // pixeli roșii.show (); întârziere (200); }} else {for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 0, 255, 0); // pixeli verzi.show (); întârziere (200); }

În codul de mai sus există o funcție if / else. Când funcția extractData returnează prezența unui blocaj de trafic, LEDstrip va deveni roșu. Dacă nu, LEDstrip-ul va deveni verde.

Pasul 6: Rulați codul

Dacă rulăm codul complet acum, senzorul și lumina ar trebui să funcționeze. Când stați pe covoare, senzorul se va conecta și funcția extractData va rula. Când se află în gama de nume de drumuri, drumul pe care îl căutăm este prezent, LEDstrip-ul va deveni roșu, semnalând un blocaj de trafic. Dacă nu este în matrice, LEDstrip-ul va deveni verde și știți că sunteți bine să mergeți!

Aveți o călătorie sigură și vă mulțumim pentru lectură. Sper că ai găsit ceva inspirație sau informații. Dacă ați primit feedback, nu ezitați să răspundeți!

Recomandat: