Sisukord:

Liiklusaruande kontroll (NL) uksematiga: 6 sammu
Liiklusaruande kontroll (NL) uksematiga: 6 sammu

Video: Liiklusaruande kontroll (NL) uksematiga: 6 sammu

Video: Liiklusaruande kontroll (NL) uksematiga: 6 sammu
Video: Accounting for retail 2024, Juuli
Anonim
Liiklusaruande kontroll (NL) koos uksematiga
Liiklusaruande kontroll (NL) koos uksematiga

Selles juhendis kirjeldan, kuidas ehitada uksematt, mis kontrollib Hollandi maanteede liiklusaruandeid. Kui astute oma uksematil õue ja teie marsruudil on ummik, muutub matt punaseks. Kui ummikuid pole, muutub matt roheliseks.

Töötan NodeMCU 1.0 (ESP0-12E moodul) kallal. Selle projekti kood võib töötada ka teistes seadmetes (nt Arduino tahvlid). See projekt põhineb Hollandi liiklusaruannete allikal ANWB.

Mida me selle projekti jaoks vajame:

- NodeMCU - hüppaja juhtmed - LED -valgus või riba - analoogandur (alumiiniumfoolium, käsn) - Wi -Fi -ühendus - uksematt

Sammud, mida peame tegema:

1. Ühendage NodeMCu WiFi-ga. 2. Andmete taotlemine HTTPS-i kaudu saidilt ANWB.nl 3. Muutke andmed kasutatavaks teabeks 4. Installige päästik 5. Disaini tagasiside

Samm: ühendage NodeMCU WiFi-ga

See samm näitab, kuidas teha edukas HTTPSRequest, et näha, kas seade on Internetiga ühendatud.

Esmalt installige ESP8266 raamatukogu Arduino IDE -sse. Avage näidetest ESP8266>

Sisestage oma koodi ülaosas oma WiFi-mandaadid, nagu allpool näidatud.

const char* ssid = "YOUR_SSID";

const char* parool = "YOUR_PASS";

Laadige kood oma seadmesse üles ja kontrollige, kas NodeMCU loob Interneti -ühenduse. HTTPSRequest näites kasutatakse teabe hankimiseks vaikimisi Githubi. Kui HTTPSRequest õnnestus, saate Githubi andmed jadamonitoris.

2. toiming: taotlege HTTPS -lt andmeid saidilt ANWB.nl

Selles teises etapis muudate andmeallika vaikevalikust selle projekti jaoks vajalikuks allikaks: ANWB.nl.

Muutke koodi ülaosas char* host aadressiks www.anwb.nl (või muust allikast, kust soovite oma andmeid hankida):

const char* host = "www.anwb.nl";!! Kui kasutate mõnda muud allikat, erineb 3. samm minu koodist. 3. samm vajab kasutatava teabe hankimiseks spetsiifilist kodeerimist!

Seejärel muutke funktsiooni häälestuse stringi URL -iks "/feeds/gethf", tee, kust teave võetakse:

Stringi URL = "/feeds/gethf";!! Kui kasutate mõnda muud allikat, kasutage oma allika teed!

Koodi üleslaadimisel peaksite saama vastuse kõigi andmetega saidilt www.anwb.nl/feeds/gethf. See kood salvestatakse stringiks, mida nimetatakse reaks.

Samm: muutke andmed kasutatavaks teabeks

Siiani töötas kood ainult siis, kui NodeMCU käivitati või lähtestati, sest kogu kood on seadistusfunktsioonis. Päästiku seadistamiseks koodi pidevaks käitamiseks peate muutma HTTPS -i päringut käivitava koodi asukohta. Tsükli funktsiooni alla lisate veel ühe funktsiooni. Ma nimetasin seda tühiseks väljavõtteks Andmed:

extractData () {

}

Kopeerige osa koodi häälestusfunktsioonist väljaandesse extractData (). Alustage järgmise reaga kuni seadistusfunktsiooni lõpuni:

if (! client.connect (host, Kood on nüüd uues funktsioonis, nii et eemaldage kopeeritud kood häälestusfunktsioonist.

Seejärel kutsuge silmusefunktsioonis funktsioon extractData ja lisage viivitus, et anda nodeMCU -le aeg puhata:

void loop () {

extractData (); viivitus (30000); // see eemaldatakse hiljem, kui meil on analoogandur}

Kuna saadud andmed salvestatakse stringina ja vaja on ainult selle stringi osi, peate silmuste jaoks kirjutama paar.

Kõigepealt kontrollige sõna „tee” kõiki positsioone. Pärast sõna 'tee' järgneb tee nimi (A1, A2 jne).

Enne silmuste jaoks kirjutamise alustamist peate deklareerima mõned muutujad, mida kavatsete kasutada:

int noOfPos = 0;

boolean hasRunOnce = vale; int alates = 0; int roadArray [20];

Nüüd on aeg kirjutada mõned silmused. Olen kirjutanud silmuste jaoks funktsiooni ExtractData põhja. Üritasin seda eraldi funktsioonideks jagada, kuid ei saanud seda tööle.

Silmus nr 1: otsige sõna tee positsioonid stringirealt:

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 = tõsi; }

Järgmisena kontrollige, millistel teedel on ummik, kasutades ülevalt for -silmuse positsioone. Teede nime asukoht on alati sama ja algab 7 märki ja lõpeb 10 märki pärast sõna tee.

Nüüd määratleme massiivi nimeOfRoadArray, mis täidetakse järgmiseks tsükli jaoks:

String nameOfRoadArray [20];

Silmus nr 2: otsige üles kõik teede nimed, mille sisend on silmusele nr. 1

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

Massiivi nimiOfRoudArray tuleb täita kõigi märgistatud liiklusummikutega.

Järgmisena kontrollite, kas teie tee on ummikutega. Printige nimiOfRoadArray, et saada teede andmed. Tehke seda, lisades Serial.println (nameOfRoadArray [k]); teisele ringile, näiteks:

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

Kui see on õige, näete jadamonitoris kõiki ummikuga teid.

Enne viimase For -tsükli kirjutamist peate deklareerima loogika globaalse muutujana. Boolean, mida nimetatakse trafficJamiks, on vaikimisi vale ja muutub, kui funktsioon extractData tagastab liiklusummiku korral tõese.. Ino -faili peale läheb järgmine kood:

loogiline liiklusJam = vale;

Silmus nr 3: kontrollige, kas tee, antud juhul A1, on ummikute loendis.

jaoks (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ")) {// muuda A1 oma eelistatud teele trafficJam = true;}

Kui prindite seeriamonitoris trafficJami, teate, kas A1 -l on ummik või mitte.

Pange see kood funktsiooni ExtractData allossa:

Serial.println (trafficJam); // vaata, kas seal on ummik

Selle teabe abil jätkame süsteemi tagasiside kallal 5. sammus.

Samm: paigaldage päästik

Installige päästik
Installige päästik
Installige päästik
Installige päästik
Installige päästik
Installige päästik

Kuna nüüd saame andmed allikast edukalt alla laadida, on aeg ehitada andur, mis käivitab sõlme MCU funktsiooni extractData käivitamiseks. Valisin oma uksematist analooganduri valmistamise. Päästikut saate muuta teise anduri abil.

Analooganduri ehitamine

Kasutasin 2 tükki alumiiniumfooliumi, kahte hüppaja traati ja käsna.

Puurige käsnale auk, see on koht, kus alumiiniumfooliumid kokku puutuvad. Liimige käsna mõlemale küljele alumiiniumfoolium. Ühendage hüppaja juhtmed alumiiniumfooliumiga. Ühendage hüppaja juhtmed sõlmega MCU. Üks külg A0-kontakti ja teine V3-kontakti poole. Pange käsn oma uksematti alla ja olete just vahetanud oma uksematti anduriks. Vinge!

Kood andurilt väärtuse lugemiseks, et näha, kas keegi seisab uksematil:

int sensorValue = analogRead (A0);

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

Kui alumiiniumfoolium puutub kokku (kui keegi seisab matil), on sensorValue 1024. Selle tulemusel käivitub funktsioon extractData (). Ja just seda me tahame, et süsteem teeks.

5. samm: kujunduse tagasiside

Kasutajale tagasiside andmiseks kasutasin LED -riba. Kui on ummik, muutub tuli punaseks. Kui tee on hea minna, muutub see roheliseks. Kasutasin oma LED -riba juhtimiseks adafruit neopixeliteeki.

Kirjutage see kood faili ülaossa veendumaks, et LED -riba on määratletud.

#kaasake

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

Kirjutage häälestusfunktsiooni järgmine kood:

// neopiksel

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

Ja silmusfunktsioonis järgmine kood:

if (trafficJam == true) {

jaoks (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 255, 0, 0); // punased pikslid.show (); viivitus (200); }} else {for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 0, 255, 0); // rohelised pikslid.show (); viivitus (200); }

Ülaltoodud koodis on funktsioon if/else. Kui funktsioon extractData tagastab liiklusummiku olemasolu, muutub LED -riba punaseks. Kui ei, siis muutub LED -riba roheliseks.

Samm: käivitage kood

Kui käivitame nüüd täieliku koodi, peaksid andur ja valgus töötama. Kui seisate uksematil, ühendub andur ja funktsioon extractData töötab. Kui teede nimede massiivis on otsitav tee olemas, muutub LED -riba punaseks, andes märku liiklusummikust. Kui seda pole massiivis, muutub LED -riba roheliseks ja teate, et olete valmis minema!

Turvalist reisi ja tänan teid lugemise eest. Loodan, et leidsite inspiratsiooni või teavet. Kui olete tagasisidet saanud, vastake julgelt!

Soovitan: