Obsah:

Kontrola dopravných hlásení (NL) s rohožkou: 6 krokov
Kontrola dopravných hlásení (NL) s rohožkou: 6 krokov

Video: Kontrola dopravných hlásení (NL) s rohožkou: 6 krokov

Video: Kontrola dopravných hlásení (NL) s rohožkou: 6 krokov
Video: Děčín 🤷‍♂️Vše o týden dřív plus fotky a videa 🔞 https://herohero.co/blbaablbej #vtipy #vtip #fyp # 2024, Júl
Anonim
Kontrola dopravných hlásení (NL) pomocou rohožky
Kontrola dopravných hlásení (NL) pomocou rohožky

V tomto návode popíšem, ako postaviť rohožku, ktorá bude kontrolovať dopravné hlásenia holandských diaľnic. Akonáhle vystúpite von na rohožku a na vašej trase bude zápcha, podložka sa zmení na červenú. Keď nie je zápcha, podložka sa zazelená.

Budem pracovať na NodeMCU 1.0 (modul ESP0-12E). Kód pre tento projekt by mohol fungovať aj na iných zariadeniach (napr. Dosky Arduino). Tento projekt je založený na holandskom zdroji dopravných správ ANWB.

Čo potrebujeme k tomuto projektu:

- NodeMCU - prepojovacie vodiče - LED svetlo alebo pásik - analógový senzor (hliníková fólia, špongia) - pripojenie Wi -Fi - rohožka

Kroky, ktoré musíme urobiť:

1. Pripojte NodeMCu k Wi-Fi 2. Vyžiadajte si údaje prostredníctvom HTTPS od ANWB.nl 3. Premeňte údaje na použiteľné Informácie 4. Nainštalujte spúšťač 5. Navrhnite spätnú väzbu

Krok 1: Pripojte NodeMCU k Wi-Fi

Tento krok ukáže, ako vykonať úspešný test HTTPS a zistiť, či je zariadenie pripojené k internetu.

Najprv nainštalujte knižnicu ESP8266 do Arduino IDE. Otvorte príklad ESP8266>

V hornej časti kódu zadajte svoje poverenia Wi-Fi, ako je uvedené nižšie:

const char* ssid = "YOUR_SSID";

const char* heslo = "YOUR_PASS";

Nahrajte kód do svojho zariadenia a skontrolujte, či sa NodeMCU pripája k internetu. Príklad HTTPSRequest používa Github ako predvolené na získavanie informácií z. Keď je HTTPSRequest úspešný, dostanete údaje Github do sériového monitora.

Krok 2: Vyžiadajte si údaje od HTTPS od ANWB.nl

V tomto druhom kroku zmeníte zdroj údajov z predvoleného na zdroj potrebný pre tento projekt: ANWB.nl.

V hornej časti kódu zmeňte znak char* host na www.anwb.nl (alebo iný zdroj, z ktorého chcete získať údaje):

const char* host = "www.anwb.nl";!! Ak použijete iný zdroj, krok 3 sa bude líšiť od môjho kódu. Krok 3 potrebuje špecifické kódovanie na získanie použiteľných informácií!

Ďalej zmeňte adresu URL reťazca v nastavení funkcie na „/feeds/gethf“, cestu, odkiaľ sú informácie prevzaté:

Adresa URL reťazca = "/feeds/gethf";!! Ak používate iný zdroj, použite cestu k vášmu zdroju!

Keď nahráte kód, mali by ste dostať odpoveď so všetkými údajmi z www.anwb.nl/feeds/gethf. Tento kód je uložený do reťazca nazývaného riadok.

Krok 3: Premeňte údaje na použiteľné informácie

Doteraz kód bežal iba pri spustení alebo resetovaní NodeMCU, pretože všetok kód je vo funkcii nastavenia. Ak chcete nastaviť spúšťač, aby kód bežal nepretržite, musíte zmeniť pozíciu kódu, ktorý spúšťa požiadavku HTTPS. Pod funkciu slučky pridáte ďalšiu funkciu. Nazval som to neplatný výpisData:

extractData () {

}

Skopírujte časť kódu z funkcie nastavenia do extractData (). Začnite s nasledujúcim riadkom až do konca funkcie nastavenia:

if (! client.connect (hostiteľ, Kód je teraz vo vašej novej funkcii, preto skopírovaný kód odstráňte z funkcie nastavenia.

Potom zavolajte funkciu extraktData do funkcie slučky a pridajte určité oneskorenie, aby mal nodeMCU čas na odpočinok:

prázdna slučka () {

extractData (); oneskorenie (30 000); // toto bude neskôr odstránené, keď budeme mať analógový snímač}

Pretože prijaté údaje sú uložené v reťazci a sú potrebné iba časti tohto reťazca, musíte napísať niekoľko slučiek.

Najprv skontrolujte všetky polohy slova „cesta“. Za slovom „cesta“bude nasledovať názov cesty (A1, A2 atď.).

Predtým, ako začnete písať slučky for, musíte deklarovať niektoré premenné, ktoré budete používať:

int noOfPos = 0;

boolean hasRunOnce = false; int od = 0; int roadArray [20];

Teraz je čas napísať niekoľko slučiek. Do spodnej časti funkcie extractData som napísal slučky for. Skúšal som to rozdeliť na samostatné funkcie, ale nepodarilo sa mi to.

Pre slučku č. 1: nájdite polohy slova cesta v riadku reťazca:

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 = true; }

Potom pomocou polôh zhora skontrolujte, na ktorých cestách je zápcha. Pozícia názvu ciest je vždy rovnaká a začína 7 znakmi a končí 10 znakmi za slovom cesta.

Teraz definujeme názov poľaOfRoadArray, ktorý sa vyplní v ďalšej slučke for:

Názov reťazcaOfRoadArray [20];

Pre slučku č. 2: Nájdite všetky názvy ciest so zadaním od pre slučku č. 1

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

Názov poľaOfRoudArray by mal byť vyplnený všetkými signalizovanými dopravnými zápchami.

Ďalej skontrolujete, či je vaša cesta v rade ciest s dopravnou zápchou. Vytlačte názovOfRoadArray, aby ste získali údaje o cestách. Vykonajte to pridaním Serial.println (nameOfRoadArray [k]); do 2. slučky pre ako:

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

Ak je to správne, na sériovom monitore uvidíte všetky cesty so zápchou.

Pred napísaním poslednej slučky For musíte boolean deklarovať ako globálnu premennú. Boolean, nazývaný trafficJam, je v predvolenom nastavení nepravdivý a zmení sa, ak funkcia extractData vráti v prípade dopravnej zápchy hodnotu true. Nasledujúci kód sa nachádza v hornej časti súboru.ino:

boolean trafficJam = false;

Pre slučku č. 3: Skontrolujte, či je cesta, v tomto prípade A1, v zozname zápch.

for (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// zmeňte A1 na cestu podľa svojho vkusu trafficJam = true;}

Ak tlačíte trafficJam na sériový monitor, viete, či je na A1 dopravná zápcha alebo nie.

Vložte tento kód do spodnej časti funkcie extractData:

Serial.println (trafficJam); // skontrolujte, či nie je zápcha

S týmito informáciami budeme ďalej pracovať na spätnej väzbe systému v kroku 5.

Krok 4: Nainštalujte spúšť

Nainštalujte spúšť
Nainštalujte spúšť
Nainštalujte spúšť
Nainštalujte spúšť
Nainštalujte spúšť
Nainštalujte spúšť

Pretože teraz môžeme údaje úspešne získať zo zdroja, je načase zostaviť senzor, ktorý spustí nodeMCU na spustenie funkcie extractData. Rozhodol som sa vytvoriť analógový senzor z rohožky. Spúšť môžete zmeniť pomocou iného senzora.

Budovanie analógového snímača

Použil som 2 kusy hliníkovej fólie, dva prepojovacie drôty a špongiu.

Do špongie vyvŕtajte dieru, na tomto mieste dôjde k kontaktu hliníkových fólií. Na obidve strany špongie prilepte hliníkovú fóliu. Pripojte prepojovacie vodiče k hliníkovej fólii. Pripojte prepojovacie vodiče k uzluMCU. Jedna strana na pin A0 a druhá na kolík V3. Vložte špongiu pod rohožku a práve ste svoju rohožku zmenili na senzor. Úžasné!

Kód na čítanie hodnoty zo senzora, aby sa zistilo, či niekto stojí na rohožke:

int sensorValue = analogRead (A0);

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

Keď hliníková fólia nadväzuje kontakt (keď niekto stojí na podložke), hodnota sensorValue je 1024. Výsledkom je spustenie funkcie extractData (). A presne to chceme, aby systém robil.

Krok 5: Spätná väzba k návrhu

Na poskytnutie spätnej väzby používateľovi som použil pásik LED. Keď dôjde k zápche, svetlo bude mať červenú farbu. Keď je cesta dobrá, prejde na zelenú. Na ovládanie svojho LED pásu som použil knižnicu adafruit neopixel.

Napíšte tento kód do hornej časti súboru, aby ste sa uistili, že je definovaný pás LED:

#zahrnúť

#define PIXEL_PIN D5 #define PIXEL_COUNT 10 #define PIXEL_TYPE NEO_GRB + NEO_KHZ800 Adafruit_NeoPixel pixely = Adafruit_NeoPixel (PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);

Napíšte nasledujúci kód do funkcie nastavenia:

// neopixel

pixely.begin (); pixely.show ();

A nasledujúci kód vo funkcii slučky:

if (trafficJam == true) {

pre (int i; i <PIXEL_COUNT; i ++) {pixely.setPixelColor (i, 255, 0, 0); // červené pixely.show (); oneskorenie (200); }} else {for (int i; i <PIXEL_COUNT; i ++) {pixely.setPixelColor (i, 0, 255, 0); // zelené pixely.show (); oneskorenie (200); }

Vo vyššie uvedenom kóde je funkcia if/else. Keď funkcia ExtraData vráti prítomnosť dopravnej zápchy, LED pásik sa zmení na červený. Ak nie, LED pásik sa zazelená.

Krok 6: Spustite kód

Ak teraz spustíme kompletný kód, senzor a svetlo by mali fungovať. Keď sa postavíte na rohožku, senzor sa pripojí a spustí sa funkcia ExtraData. Keď je v rade názvov ciest hľadaná cesta, LED pásik sa zmení na červený, čo signalizuje dopravnú zápchu. Ak nie je v poli, LED pásik sa zazelená a vy budete vedieť, že môžete ísť!

Šťastnú cestu a ďakujem za prečítanie. Dúfam, že ste našli inšpiráciu alebo informácie. Ak máte nejakú spätnú väzbu, neváhajte odpovedať!

Odporúča: