Sisällysluettelo:

Liikenneraporttien tarkistus (NL) kynnysmatolla: 6 vaihetta
Liikenneraporttien tarkistus (NL) kynnysmatolla: 6 vaihetta

Video: Liikenneraporttien tarkistus (NL) kynnysmatolla: 6 vaihetta

Video: Liikenneraporttien tarkistus (NL) kynnysmatolla: 6 vaihetta
Video: FARMVLOG #161 voedselveiligheid, stikstof, Schiphol 2024, Heinäkuu
Anonim
Liikenneraporttien tarkistus (NL) kynnysmatolla
Liikenneraporttien tarkistus (NL) kynnysmatolla

Tässä ohjeessa kuvailen kuinka rakentaa kynnysmatto, joka tarkistaa Hollannin moottoriteiden liikenneilmoitukset. Kun astut ulos kotiovellesi ja reitilläsi on ruuhkaa, matto muuttuu punaiseksi. Jos ruuhkaa ei ole, matto muuttuu vihreäksi.

Työskentelen NodeMCU 1.0: n (ESP0-12E-moduuli) parissa. Tämän projektin koodi voi toimia myös muilla laitteilla (esim. Arduino -levyt). Tämä projekti perustuu hollantilaiseen liikenneraporttien lähteeseen, ANWB: hen.

Mitä tarvitsemme tähän projektiin:

- NodeMCU - Hyppyjohdot - LED -valo tai nauha - Analoginen anturi (alumiinikalvo, sieni) - Wi -Fi -yhteys - Ovimatto

Vaiheet, jotka meidän on otettava:

1. Yhdistä NodeMCu Wi-Fi-verkkoon 2. Pyydä tietoja HTTPS: n kautta ANWB.nl: ltä 3. Muuta tiedot käyttökelpoisiksi tiedoiksi 4. Asenna liipaisin 5. Suunnittelupalaute

Vaihe 1: Yhdistä NodeMCU Wi-Fi-verkkoon

Tämä vaihe näyttää, kuinka onnistunut HTTPSRequest -pyyntö selvittää, onko laite yhteydessä Internetiin.

Asenna ensin ESP8266 -kirjasto Arduino IDE: hen. Avaa esimerkeistä ESP8266>

Kirjoita Wi-Fi-kirjautumistietosi koodin yläosaan alla olevan kuvan mukaisesti:

const char* ssid = "YOUR_SSID";

const char* password = "YOUR_PASS";

Lataa koodi laitteellesi ja tarkista, muodostaako NodeMCU yhteyden Internetiin. HTTPSRequest -esimerkki käyttää Githubia oletuksena saadakseen tietoja. Kun HTTPSRequest onnistui, saat Github -tiedot sarjamonitoriin.

Vaihe 2: Pyydä tietoja HTTPS: ltä ANWB.nl: ltä

Tässä toisessa vaiheessa muutat tietolähteen oletusarvoisesta tämän projektin lähteeksi: ANWB.nl.

Vaihda koodin yläosassa char* isäntä osoitteeseen www.anwb.nl (tai muu lähde, josta haluat saada tietosi):

const char* isäntä = "www.anwb.nl";!! Jos käytät toista lähdettä, vaihe 3 eroaa koodistani. Vaihe 3 tarvitsee erityistä koodausta käyttökelpoisten tietojen hakemiseksi!

Muuta seuraavaksi funktion asetusten merkkijonon URL -osoitteeksi "/feeds/gethf", polku, josta tiedot on otettu:

Merkkijono url = "/feeds/gethf";!! Jos käytät toista lähdettä, käytä polkua lähteeseesi!

Kun lähetät koodin, saat vastauksen ja kaikki tiedot osoitteesta www.anwb.nl/feeds/gethf. Tämä koodi tallennetaan merkkijonoksi, jota kutsutaan riviksi.

Vaihe 3: Muuta tiedot käyttökelpoisiksi tiedoiksi

Tähän asti koodi toimi vain, kun NodeMCU käynnistettiin tai nollattiin, koska kaikki koodit ovat asennustoiminnossa. Jos haluat asettaa liipaisimen suorittamaan koodin jatkuvasti, sinun on muutettava HTTPS -pyyntöä suorittavan koodin sijaintia. Lisää silmukkafunktion alle toinen toiminto. Olen kutsunut sitä void otteeksi

extractData () {

}

Kopioi osa koodista asennustoiminnosta otteeseen (). Aloita seuraavalla rivillä asennustoiminnon loppuun asti:

if (! client.connect (isäntä, Koodi on nyt uudessa toiminnossasi, joten poista kopioitu koodi asennustoiminnosta.

Kutsu seuraavaksi silmukatoiminnon extractData -funktio ja lisää viivettä, jotta nodeMCU: lle annetaan lepoaika:

void loop () {

oteTiedot (); viive (30000); // tämä poistetaan myöhemmin, kun meillä on analoginen anturi}

Koska vastaanottamasi tiedot tallennetaan merkkijonoon ja tarvitaan vain osia tästä merkkijonosta, sinun on kirjoitettava pari silmukkaa.

Tarkista ensin sanan "road" kaikki sijainnit. Tie -sanan jälkeen seuraa tien nimi (A1, A2 jne.).

Ennen kuin aloitat silmukoiden kirjoittamisen, sinun on ilmoitettava joitain muuttujia, joita aiot käyttää:

int noOfPos = 0;

boolean hasRunOnce = epätosi; int alkaen = 0; int roadArray [20];

Nyt on aika kirjoittaa silmukoita. Olen kirjoittanut for -silmukoille extractData -funktion alareunaan. Yritin jakaa sen erillisiin toimintoihin, mutta en saanut sitä toimimaan.

Silmukka nro 1: etsi sanan tie sijainnit merkkijonoriviltä:

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

Tarkista seuraavaksi, millä teillä on ruuhka, käyttämällä for -silmukan asentoa ylhäältä. Teiden nimen sijainti on aina sama ja alkaa 7 merkkiä ja päättyy 10 merkkiä sanan tie jälkeen.

Määritämme nyt taulukon nimenOfRoadArray, joka täytetään seuraavassa silmukassa:

Merkkijonon nimiOfRoadArray [20];

Silmukka nro 2: Etsi kaikki niiden teiden nimet, joissa on silmukan nro. 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); }

Ryhmän nimiOfRoudArray tulee täyttää kaikki ilmoitetut liikenneruuhkat.

Seuraavaksi aiot tarkistaa, onko tiesi liikenneruuhkan sisältävien teiden joukossa. Tulosta nimiOfRoadArray saadaksesi tiet tietollesi. Tee tämä lisäämällä Serial.println (nameOfRoadArray [k]); toiseen silmukkaan, kuten:

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

Jos se on oikein, näet kaikki tiet, joissa on ruuhkaa, sarjamittarissa.

Ennen kuin kirjoitat viimeisen For -silmukan, sinun on ilmoitettava boolean globaalimuuttujana. Boolean, nimeltään trafficJam, on oletuksena epätosi ja muuttuu, jos toiminto extractData palauttaa true ruuhkalle. Seuraava koodi tulee.ino -tiedoston päälle:

boolean trafficJam = epätosi;

Silmukka nro 3: Tarkista, onko tie, tässä tapauksessa A1, liikenneruuhkien luettelossa.

for (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ")) {// muuta A1 tieksi, joka suosii liikennettäJam = true;}

Jos tulostat liikenneruuhkan sarjamonitoriin, tiedät, onko A1: ssä liikenneruuhka vai ei.

Laita tämä koodi extractData -toiminnon alareunaan:

Sarja.println (trafficJam); // katso onko ruuhkaa

Näiden tietojen avulla aiomme jatkaa järjestelmän palautteen käsittelyä vaiheessa 5.

Vaihe 4: Asenna liipaisin

Asenna liipaisin
Asenna liipaisin
Asenna liipaisin
Asenna liipaisin
Asenna liipaisin
Asenna liipaisin

Koska voimme nyt hakea tiedot onnistuneesti lähteestä, on aika rakentaa anturi, joka käynnistää nodeMCU: n suorittamaan funktion extractData. Päätin tehdä analogisen anturin kynnysmatostani. Voit vaihtaa liipaisimen käyttämällä toista anturia.

Analogisen anturin rakentaminen

Käytin 2 kpl alumiinifoliota, kaksi hyppyjohtoa ja sientä.

Poraa sieneen reikä, tämä on paikka, jossa alumiinifolio koskettaa. Liimaa alumiinifolio sienen molemmille puolille. Liitä hyppyjohdot alumiinifolioon. Kytke hyppyjohtimet solmuun MCU. Toinen puoli A0-nastaiseen ja toinen V3-nastaiseen. Laita sieni kynnysmaton alle ja olet juuri vaihtanut ovimaton anturiksi. Mahtava!

Koodi arvon lukemiseksi anturista nähdäkseen, seisoiko joku ovimatolla:

int sensorValue = analoginenLue (A0);

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

Kun alumiinifolio koskettaa (kun joku seisoo matolla), sensorValue on 1024. Tästä seuraa, että toiminto extractData () syttyy. Ja juuri sitä haluamme järjestelmän tekevän.

Vaihe 5: Suunnittelun palaute

Käytin LED -nauhaa antaakseni palautetta käyttäjälle. Liikenneruuhkan sattuessa valo muuttuu punaiseksi. Kun tie on hyvä mennä, se muuttuu vihreäksi. Käytin adafruit neopixel -kirjastoa LED -nauhan hallintaan.

Kirjoita tämä koodi tiedoston yläosaan varmistaaksesi, että LED -nauha on määritetty:

#sisältää

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

Kirjoita seuraava koodi asetustoimintoon:

// neopikseli

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

Ja seuraava koodi silmukkafunktiossa:

jos (trafficJam == true) {

for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 255, 0, 0); // punaiset pikselit.show (); viive (200); }} else {for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 0, 255, 0); // vihreät pikselit.show (); viive (200); }

Yllä olevassa koodissa on if/else -funktio. Kun toiminto extractData palauttaa liikenneruuhkan, LED -nauha muuttuu punaiseksi. Jos ei, LED -nauha muuttuu vihreäksi.

Vaihe 6: Suorita koodi

Jos suoritamme koko koodin nyt, anturin ja valon pitäisi toimia. Kun seisot ovimatolla, anturi muodostaa yhteyden ja extractData -toiminto käynnistyy. Kun etsimäsi tie on läsnä tien nimiryhmässä, LED -nauha muuttuu punaiseksi merkiksi liikenneruuhkasta. Jos se ei ole taulukossa, LED -nauha muuttuu vihreäksi ja tiedät, että olet valmis lähtemään!

Turvallista matkaa ja kiitos lukemisesta. Toivottavasti löysit inspiraatiota tai tietoa. Jos saat palautetta, vastaa rohkeasti!

Suositeltava: