Kazalo:

Preverjanje prometnega poročila (NL) s predpražnikom: 6 korakov
Preverjanje prometnega poročila (NL) s predpražnikom: 6 korakov

Video: Preverjanje prometnega poročila (NL) s predpražnikom: 6 korakov

Video: Preverjanje prometnega poročila (NL) s predpražnikom: 6 korakov
Video: Феномен Бруно Грёнинг – документальный фильм — ЧАСТЬ 1 2024, Julij
Anonim
Preverjanje prometnega poročila (NL) s predpražnikom
Preverjanje prometnega poročila (NL) s predpražnikom

V tem navodilu bom opisal, kako zgraditi predpražnik, ki bo preverjal prometna poročila nizozemskih avtocest. Ko stopite ven na predpražnik in na vaši poti nastane zastoj, se bo preproga obarvala rdeče. Ko ni zastoja, bo podloga obarvana zeleno.

Delal bom na NodeMCU 1.0 (modul ESP0-12E). Koda za ta projekt bi lahko delovala tudi na drugih napravah (npr. Plošče Arduino). Ta projekt temelji na nizozemskem viru za poročila o prometu, ANWB.

Kaj potrebujemo za ta projekt:

- NodeMCU - Mostične žice - LED luč ali trak - Analogni senzor (aluminijasta folija, goba) - Povezava Wi -Fi - Predpražnik

Koraki, ki jih moramo narediti:

1. Povežite NodeMCu z Wi-Fi 2. Zahtevajte podatke prek HTTPS od ANWB.nl 3. Pretvorite podatke v uporabne informacije 4. Namestite sprožilec 5. Povratne informacije o načrtovanju

Korak: Povežite NodeMCU z Wi-Fi

Ta korak bo pokazal, kako narediti uspešen HTTPSRequest, da preverite, ali je naprava povezana z internetom.

Najprej namestite knjižnico ESP8266 v Arduino IDE. Odprite iz primerov ESP8266>

Na vrhu kode vnesite poverilnice za Wi-Fi, kot je prikazano spodaj:

const char* ssid = "YOUR_SSID";

const char* geslo = "YOUR_PASS";

Naložite kodo v svojo napravo in preverite, ali se NodeMCU povezuje z internetom. Primer HTTPSRequest za privzete podatke uporablja Github. Ko je HTTPSRequest uspel, prejmete podatke Github na serijski monitor.

Korak: Zahtevajte podatke od HTTPS od ANWB.nl

V tem drugem koraku spremenite vir podatkov iz privzetega v vir, potreben za ta projekt: ANWB.nl.

Na vrhu kode spremenite char* host v www.anwb.nl (ali drug vir, iz katerega želite dobiti svoje podatke):

const char* host = "www.anwb.nl";!! Če uporabljate drug vir, se bo korak 3 razlikoval od moje kode. Korak 3 potrebuje posebno kodiranje za pridobivanje uporabnih informacij!

Nato spremenite URL niza v nastavitvi funkcije na "/feeds/gethf", pot, od koder so vzeti podatki:

Niz url = "/feeds/gethf";!! Če uporabljate drug vir, uporabite pot do svojega vira!

Ko naložite kodo, bi morali dobiti odgovor z vsemi podatki s spletnega mesta www.anwb.nl/feeds/gethf. Ta koda je shranjena v niz, imenovan line.

Korak: Pretvorite podatke v uporabne podatke

Do sedaj se je koda izvajala le ob zagonu ali ponastavitvi NodeMCU, ker je vsa koda v nastavitveni funkciji. Če želite nastaviti, da sprožilec neprekinjeno izvaja kodo, morate spremeniti položaj kode, ki izvaja zahtevo HTTPS. Pod funkcijo zanke dodate še eno funkcijo. Klical sem ga void extractData:

ExtraData () {

}

Kopirajte del kode iz nastavitvene funkcije v extraData (). Začnite z naslednjo vrstico do konca nastavitvene funkcije:

if (! client.connect (gostitelj, Koda je zdaj v vaši novi funkciji, zato odstranite kopirano kodo iz nastavitvene funkcije.

Nato pokličite funkcijo extraData v funkciji zanke in dodajte nekaj zamude, da vozlišču MMCU omogočite počitek:

void loop () {

extraData (); zamuda (30000); // to bomo kasneje odstranili, ko bomo imeli analogni senzor}

Ker so podatki, ki jih prejmete, shranjeni v nizu in so potrebni le deli tega niza, morate napisati nekaj for zank.

Najprej preverite vse položaje besede "cesta". Za besedo "cesta" sledi ime ceste (A1, A2 itd.).

Preden začnete pisati zanke for, morate prijaviti nekatere spremenljivke, ki jih boste uporabili:

int noOfPos = 0;

logično hasRunOnce = false; int od = 0; int roadArray [20];

Zdaj je čas, da napišete nekaj zank. Zanke for sem napisal na dnu funkcije extraData. Poskušal sem ga razdeliti na ločene funkcije, vendar mi ni uspelo.

Za zanko št. 1: poiščite položaje besede cesta v vrstici niza:

for (int i = 0; i <line.length (); i ++) {int pos = line.indexOf ("cesta \": ", od); roadArray [noOfPos] = pos; noOfPos+= 1; from = poz + 1; if (hasRunOnce == true && pos == line.indexOf ("road \": ")) {i = line.length (); } hasRunOnce = true; }

Nato preverite, na katerih cestah je zastoj, tako da položaje for zanke uporabite od zgoraj. Položaj imen cest je vedno enak in se začne 7 znakov in konča 10 znakov za besedo cesta.

Zdaj definiramo ime matrikeOfRoadArray, ki jo bomo zapolnili v naslednji zanki for:

Ime nizaOfRoadArray [20];

Za zanko št. 2: Poiščite vsa imena cest z vnosom iz zanke for št. 1

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

Ime matrikeOfRoudArray je treba napolniti z vsemi signaliziranimi prometnimi zastoji.

Nato boste preverili, ali je vaša cesta na nizu cest z zastojem. Natisnite imeOfRoadArray, da vnesete ceste v podatke. To naredite tako, da dodate Serial.println (nameOfRoadArray [k]); v drugo zanko for, kot je:

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

Če je pravilno, boste na serijskem monitorju videli vse ceste z zastojem.

Preden zapišete zadnjo zanko For, morate logično označiti kot globalno spremenljivko. Logično ime, imenovano trafficJam, je privzeto false in se bo spremenilo, če bo funkcija ExtraData vrnila vrednost true za prometni zastoj. Naslednja koda je na vrhu datoteke.ino:

boolean trafficJam = false;

Za zanko št. 3: Preverite, ali je cesta, v tem primeru A1, na seznamu zastojev.

for (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// spremenite A1 v cesto v vašo korist trafficJam = true;}

Če na serijski monitor natisnete trafficJam, veste, ali je na A1 prometni zastoj ali ne.

To kodo postavite na dno funkcije ExtraData:

Serial.println (trafficJam); // preverite, ali je prišlo do zastoja

S temi informacijami bomo nadalje delali na povratnih informacijah sistema v 5. koraku.

4. korak: Namestite sprožilec

Namestite sprožilec
Namestite sprožilec
Namestite sprožilec
Namestite sprožilec
Namestite sprožilec
Namestite sprožilec

Ker lahko zdaj uspešno pridobimo podatke iz vira, je čas za izdelavo senzorja, ki bo sprožil nodeMCU za izvajanje funkcije extraData. Odločil sem se, da bom iz preproge naredil analogni senzor. Sprožilec lahko spremenite z drugim senzorjem.

Izdelava analognega senzorja

Uporabil sem 2 kosa aluminijaste folije, dve mostički in gobo.

V gobici izvrtajte luknjo, to je kraj, kjer bodo aluminijaste folije stopile v stik. Na obe strani gobice lepite aluminijasto folijo. Mostične žice priključite na aluminijasto folijo. Mostične žice povežite z vozliščem MCU. Ena stran na A0-pin, druga pa na V3-pin. Gobo postavite pod predpražnik in predpražnik ste pravkar spremenili v senzor. Odlično!

Koda za branje vrednosti s senzorja, da vidite, če kdo stoji na preprogi:

int sensorValue = analogRead (A0);

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

Ko aluminijeva folija vzpostavlja stik (ko nekdo stoji na preprogi), je vrednost sensor (senzorValue) 1024. Zaradi tega se sproži funkcija extraData (). In točno to želimo, da sistem naredi.

5. korak: Povratne informacije o oblikovanju

Za povratne informacije uporabniku sem uporabil LED -trak. Ko pride do zastoja, bo lučka obarvana rdeče. Ko bo cesta dobra, bo postala zelena. Za nadzor LED traku sem uporabil knjižnico adapruit neopixel.

To kodo napišite na vrh datoteke, da se prepričate, da je LED trak definiran:

#vključi

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

V funkcijo nastavitve vnesite naslednjo kodo:

// neopixel

pixels.begin (); piksli.show ();

In naslednja koda v funkciji zanke:

if (trafficJam == true) {

za (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 255, 0, 0); // rdeče piksle.show (); zamuda (200); }} else {for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 0, 255, 0); // zelene slikovne pike.show (); zamuda (200); }

V zgornji kodi je funkcija if/else. Ko funkcija ExtraData vrne prisotnost prometnega zastoja, bo LED trak obarvan rdeče. Če ne, bo LED trak obarvan zeleno.

6. korak: Zaženite kodo

Če zdaj zaženemo celotno kodo, bi morali senzor in lučka delovati. Ko stojite na predpražniku, se senzor poveže in zažene se funkcija ExtractData. Ko je v nizu imen cest prisotna cesta, ki jo iščemo, se bo LED -trak obarval rdeče in označil zastoj. Če ni v matriki, bo LED trak obarvan zeleno in veste, da ste pripravljeni!

Srečno pot in hvala za branje. Upam, da ste našli kaj navdiha ali informacije. Če imate povratne informacije, se lahko odzovete!

Priporočena: