Turinys:

Eismo ataskaitų tikrinimas (NL) su durų kilimėliu: 6 žingsniai
Eismo ataskaitų tikrinimas (NL) su durų kilimėliu: 6 žingsniai

Video: Eismo ataskaitų tikrinimas (NL) su durų kilimėliu: 6 žingsniai

Video: Eismo ataskaitų tikrinimas (NL) su durų kilimėliu: 6 žingsniai
Video: "Tesla Motors" Modelis S: AKUMULIATORIUS GEDIMAS !!! TESLARATI.com 2024, Lapkritis
Anonim
Eismo ataskaitų tikrinimas (NL) su durų kilimėliu
Eismo ataskaitų tikrinimas (NL) su durų kilimėliu

Šioje instrukcijoje aprašysiu, kaip sukurti durų kilimėlį, kuris patikrins Olandijos greitkelių eismo ataskaitas. Kai išeisite lauke ant savo durų kilimėlio ir jūsų kelyje bus kamštis, kilimėlis įgaus raudoną spalvą. Kai nėra kamščio, kilimėlis taps žalias.

Aš dirbsiu su „NodeMCU 1.0“(ESP0-12E modulis). Šio projekto kodas gali veikti ir kituose įrenginiuose (pvz., „Arduino“plokštėse). Šis projektas pagrįstas Olandijos eismo ataskaitų šaltiniu ANWB.

Ko mums reikia šiam projektui:

- „NodeMCU“- jungiamieji laidai - LED lemputė arba juostelė - analoginis jutiklis (aliuminio folija, kempinė) - „Wi -Fi“ryšys - durų kilimėlis

Veiksmai, kurių turime imtis:

1. Prijunkite „NodeMCu“prie „Wi-Fi“.

1 veiksmas: prijunkite „NodeMCU“prie „Wi-Fi“

Šis žingsnis parodys, kaip sėkmingai atlikti „HTTPSRequest“ir sužinoti, ar įrenginys prijungtas prie interneto.

Pirmiausia įdiekite ESP8266 biblioteką „Arduino IDE“. Atidarykite pavyzdžius ESP8266>

Kodo viršuje užpildykite „Wi-Fi“prisijungimo duomenis, kaip parodyta žemiau:

const char* ssid = "YOUR_SSID";

const char* password = "YOUR_PASS";

Įkelkite kodą į savo įrenginį ir patikrinkite, ar „NodeMCU“prisijungia prie interneto. „HTTPSRequest“pavyzdys naudoja „Github“kaip numatytąjį, kad gautų informaciją. Kai „HTTPSRequest“pavyko, serijiniame monitoriuje gaunate „Github“duomenis.

2 veiksmas: paprašykite duomenų iš HTTPS iš ANWB.nl

Atlikdami šį antrąjį veiksmą, pakeiskite duomenų šaltinį iš numatytojo į šaltinį, reikalingą šiam projektui: ANWB.nl.

Kodo viršuje pakeiskite char* host į www.anwb.nl (arba kitą šaltinį, iš kurio norite gauti duomenis):

const char* host = "www.anwb.nl";!! Jei naudojate kitą šaltinį, 3 veiksmas skirsis nuo mano kodo. 3 veiksmui reikia specifinio kodavimo, kad būtų galima gauti naudingą informaciją!

Tada pakeiskite eilutės URL funkcijos sąrankoje į „/feeds/gethf“- kelią, iš kurio paimta informacija:

Eilutės URL = "/feeds/gethf";!! Jei naudojate kitą šaltinį, naudokite kelią į šaltinį!

Įkeldami kodą turėtumėte gauti atsakymą su visais duomenimis iš www.anwb.nl/feeds/gethf. Šis kodas išsaugomas eilutėje, pavadintoje eilute.

3 žingsnis: paverskite duomenis tinkama informacija

Iki šiol kodas buvo paleistas tik tada, kai „NodeMCU“buvo paleistas arba iš naujo nustatytas, nes visas kodas yra sąrankos funkcijoje. Norėdami nustatyti aktyviklį nuolatiniam kodo paleidimui, turite pakeisti kodo, kuris vykdo HTTPS užklausą, vietą. Po ciklo funkcija pridedate kitą funkciją. Pavadinau jį negaliojančiu ekstraktu

extractData () {

}

Nukopijuokite kodo dalį iš sąrankos funkcijos į ExtractData (). Pradėkite nuo šios eilutės iki sąrankos funkcijos pabaigos:

if (! client.connect (priegloba, Kodas dabar yra jūsų naujoje funkcijoje, todėl pašalinkite nukopijuotą kodą iš sąrankos funkcijos.

Tada iškvieskite funkciją „extractData“ciklo funkcijoje ir pridėkite šiek tiek vėlavimo, kad „nodeMCU“suteiktų laiko pailsėti:

void loop () {

extractData (); vėlavimas (30000); // tai bus pašalinta vėliau, kai turėsime analoginį jutiklį}

Kadangi gauti duomenys saugomi eilutėje ir reikia tik šios eilutės dalių, turite parašyti porą kilpų.

Pirmiausia patikrinkite visas žodžio „kelias“pozicijas. Po žodžio „kelias“bus kelio pavadinimas (A1, A2 ir kt.).

Prieš pradėdami rašyti kilpas, turite deklaruoti kai kuriuos kintamuosius, kuriuos ketinate naudoti:

int noOfPos = 0;

loginis hasRunOnce = false; int nuo = 0; int roadArray [20];

Dabar atėjo laikas parašyti keletą kilpų. Funkcijos „extractData“apačioje parašiau kilpas. Bandžiau jį suskirstyti į atskiras funkcijas, bet nepavyko.

1 kilpa: suraskite žodžio kelias pozicijas eilutės eilutėje:

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

Tada patikrinkite, kuriuose keliuose yra spūstis, naudodami for kilpa iš viršaus. Kelių pavadinimo padėtis visada yra ta pati ir prasideda 7 simboliais ir baigiasi 10 simbolių po žodžio kelias.

Dabar mes apibrėžiame masyvo pavadinimąOfRoadArray, kuris bus užpildytas toliau ciklui:

Stygos pavadinimasOfRoadArray [20];

2 kilpa: Raskite visus kelių pavadinimus su įvestimi iš kilpos Nr. 1

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

Masyvo pavadinimasOfRoudArray turi būti užpildytas visais praneštais eismo kamščiais.

Toliau jūs tikrinsite, ar jūsų kelias yra kelių, kuriuose yra kamštis, masyvas. Išspausdinkite „nameOfRoadArray“pavadinimą, kad gautumėte keliuose duomenis. Padarykite tai pridėdami Serial.println (nameOfRoadArray [k]); į 2 ciklą, kaip:

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

Jei tai teisinga, serijiniame monitoriuje matysite visus kelius su spūstimi.

Prieš rašydami paskutinį „For“ciklą, turite deklaruoti loginį reikšmę kaip visuotinį kintamąjį. Būklė, vadinama „trafficJam“, pagal nutylėjimą yra klaidinga ir pasikeis, jei funkcija „extractData“grąžins „true“eismui. Šis kodas yra.ino failo viršuje:

loginis srautasJam = false;

3 kilpa: patikrinkite, ar kelias, šiuo atveju A1, yra kamščių sąraše.

(int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ")) {// pakeisti A1 į jūsų naudai skirtą kelią trafficJam = true;}

Jei serijiniame monitoriuje spausdinate „trafficJam“, žinote, ar A1 yra kamštis, ar ne.

Įdėkite šį kodą funkcijos „extractData“apačioje:

Serial.println (trafficJam); // pažiūrėkite, ar nėra kamščio

Turėdami šią informaciją, mes toliau dirbsime prie sistemos atsiliepimų atlikdami 5 veiksmą.

4 žingsnis: įdiekite trigerį

Įdiekite trigerį
Įdiekite trigerį
Įdiekite trigerį
Įdiekite trigerį
Įdiekite trigerį
Įdiekite trigerį

Kadangi dabar galime sėkmingai gauti duomenis iš šaltinio, atėjo laikas sukurti jutiklį, kuris suaktyvins „nodeMCU“paleisti funkciją „extractData“. Aš nusprendžiau padaryti analoginį jutiklį iš savo kilimėlio. Galite pakeisti gaiduką naudodami kitą jutiklį.

Analoginio jutiklio kūrimas

Aš naudojau 2 gabalus aliuminio folijos, du trumpiklius ir kempinę.

Išgręžkite skylę kempinėje, tai yra vieta, kur liečiasi aliuminio folija. Klijuokite aliuminio foliją iš abiejų kempinės pusių. Prijunkite trumpiklius prie aliuminio folijos. Prijunkite jungiamuosius laidus prie mazgoMCU. Viena pusė prie A0 kaiščio, kita-prie V3 kaiščio. Padėkite kempinę po savo kilimėliu ir ką tik pakeitėte savo kilimėlį į jutiklį. Nuostabu!

Kodas nuskaityti vertę iš jutiklio, kad pamatytumėte, ar kas nors stovi ant durų kilimėlio:

int sensorValue = analogRead (A0);

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

Kai aliuminio folija liečiasi (kai kas nors stovi ant kilimėlio), sensorValue yra 1024. Dėl to funkcija „extractData ()“įsijungia. Ir būtent tai mes norime, kad sistema padarytų.

5 žingsnis: dizaino grįžtamasis ryšys

Naudodamas LED juostelę, norėjau pateikti atsiliepimą vartotojui. Kai susidaro kamštis, lemputė bus raudona. Kai kelias bus geras, jis taps žalias. LED juostelės valdymui naudojau adafruit neopikselių biblioteką.

Įrašykite šį kodą failo viršuje, kad įsitikintumėte, jog LED juostelė yra apibrėžta:

#įtraukti

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

Įrašykite kitą kodą sąrankos funkcijoje:

// neopikselis

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

Ir šis kodas ciklo funkcijoje:

if (trafficJam == true) {

(int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 255, 0, 0); // raudoni pikseliai.show (); vėlavimas (200); }} else {for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 0, 255, 0); // žalieji pikseliai.show (); vėlavimas (200); }

Aukščiau esančiame kode yra funkcija „if/else“. Kai funkcija „extractData“grąžina spūstį, LED juostelė pasidarys raudona. Jei ne, LED juostelė taps žalia.

6 veiksmas: paleiskite kodą

Jei dabar paleisime visą kodą, jutiklis ir lemputė turėtų veikti. Kai stovėsite ant durų kilimėlio, jutiklis prisijungs ir veiks „extractData“funkcija. Kai kelių pavadinimų masyve yra mūsų ieškomas kelias, šviesos diodų juostelė pasidarys raudona, rodydama spūstį. Jei to nėra masyve, LED juostelė taps žalia ir žinosite, kad jums tinka!

Saugios kelionės ir ačiū, kad skaitote. Tikiuosi, kad radote įkvėpimo ar informacijos. Jei turite atsiliepimų, nedvejodami atsakykite!

Rekomenduojamas: