Obsah:

Kontrola hlášení provozu (NL) s rohožkou: 6 kroků
Kontrola hlášení provozu (NL) s rohožkou: 6 kroků

Video: Kontrola hlášení provozu (NL) s rohožkou: 6 kroků

Video: Kontrola hlášení provozu (NL) s rohožkou: 6 kroků
Video: Práce u bezpečnostní kontroly na letišti 2024, Prosinec
Anonim
Kontrola hlášení provozu (NL) pomocí rohožky
Kontrola hlášení provozu (NL) pomocí rohožky

V tomto pokynu popíšu, jak postavit rohožku, která bude kontrolovat dopravní hlášení nizozemských dálnic. Jakmile vystoupíte na rohožku a na vaší trase bude dopravní zácpa, podložka se změní na červenou. Pokud nedojde k dopravní zácpě, podložka zezelená.

Budu pracovat na NodeMCU 1.0 (modul ESP0-12E). Kód pro tento projekt by mohl fungovat i na jiných zařízeních (např. Desky Arduino). Tento projekt vychází z nizozemského zdroje dopravních zpráv ANWB.

Co pro tento projekt potřebujeme:

- NodeMCU - propojovací vodiče - LED světlo nebo pásek - analogový senzor (hliníková fólie, houba) - připojení Wi -Fi - rohožka

Kroky, které musíme udělat:

1. Připojte NodeMCu k Wi-Fi 2. Vyžádejte si data přes HTTPS z ANWB.nl 3. Proměňte data v použitelné Informace 4. Nainstalujte spoušť 5. Navrhněte zpětnou vazbu

Krok 1: Připojte NodeMCU k Wi-Fi

Tento krok ukáže, jak úspěšně provést HTTPSRequest, abyste zjistili, zda je zařízení připojeno k internetu.

Nejprve nainstalujte knihovnu ESP8266 do Arduino IDE. Otevřete z příkladů ESP8266>

Vyplňte přihlašovací údaje k Wi-Fi v horní části kódu, jak je uvedeno níže:

const char* ssid = "YOUR_SSID";

const char* heslo = "YOUR_PASS";

Nahrajte kód do svého zařízení a zkontrolujte, zda se NodeMCU připojuje k internetu. Příklad HTTPSRequest používá jako výchozí pro získávání informací Github. Když je HTTPSRequest úspěšný, obdržíte data Github na sériovém monitoru.

Krok 2: Vyžádejte si data od HTTPS od ANWB.nl

V tomto druhém kroku změníte zdroj dat z výchozího na zdroj potřebný pro tento projekt: ANWB.nl.

V horní části kódu změňte char* host na www.anwb.nl (nebo jiný zdroj, ze kterého chcete získat data):

const char* host = "www.anwb.nl";!! Pokud použijete jiný zdroj, krok 3 se bude lišit od mého kódu. Krok 3 vyžaduje specifické kódování k získání použitelných informací!

Dále změňte adresu URL řetězce v nastavení funkce na "/feeds/gethf", cestu, odkud jsou informace převzaty:

Řetězec url = "/feeds/gethf";!! Pokud používáte jiný zdroj, použijte cestu ke svému zdroji!

Když nahrajete kód, měli byste dostat odpověď se všemi údaji z www.anwb.nl/feeds/gethf. Tento kód je uložen do řetězce s názvem line.

Krok 3: Proměňte data v použitelné informace

Až dosud kód běžel pouze při spuštění nebo resetování NodeMCU, protože veškerý kód je ve funkci nastavení. Chcete -li nastavit spouštěč pro nepřetržité spouštění kódu, musíte změnit pozici kódu, který spouští požadavek HTTPS. Pod funkci smyčky přidáte další funkci. Nazval jsem to neplatný výpisData:

extractData () {

}

Zkopírujte část kódu z funkce nastavení do extractData (). Začněte následujícím řádkem až do konce funkce nastavení:

if (! client.connect (host, Kód je nyní ve vaší nové funkci, takže zkopírujte kód z funkce nastavení.

Dále zavolejte funkci extractData ve funkci smyčky a přidejte nějaké zpoždění, aby měl nodeMCU čas na odpočinek:

prázdná smyčka () {

extractData (); zpoždění (30 000); // toto bude později odstraněno, až budeme mít analogový senzor}

Vzhledem k tomu, že přijímaná data jsou uložena v řetězci a jsou potřeba pouze části tohoto řetězce, musíte napsat několik smyček pro.

Nejprve zkontrolujte všechny polohy slova „silnice“. Za slovem „silnice“bude následovat název silnice (A1, A2 atd.).

Než začnete psát smyčky for, musíte deklarovat některé proměnné, které budete používat:

int noOfPos = 0;

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

Nyní je čas napsat několik smyček. Ve spodní části funkce extractData jsem napsal smyčky for. Zkoušel jsem to rozdělit na samostatné funkce, ale nepodařilo se mi to.

Pro smyčku č. 1: najděte pozice slova silnice v řetězci:

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

Dále zkontrolujte, jaké silnice mají dopravní zácpu, pomocí poloh smyčky for shora. Pozice názvu silnic je vždy stejná a začíná 7 znaky a končí 10 znaky za slovem silnice.

Nyní definujeme název poleOfRoadArray, který bude vyplněn v další smyčce for:

Název řetězceOfRoadArray [20];

Pro smyčku č. 2: Najděte všechny názvy silnic zadáním od pro smyčku č. 1

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

Název poleOfRoudArray by měl být vyplněn všemi signalizovanými zácpami.

Dále zkontrolujete, zda je vaše silnice v řadě silnic se zácpou. Vytiskněte nameOfRoadArray, abyste získali silnice v datech. To provedete přidáním Serial.println (nameOfRoadArray [k]); do 2. smyčky pro jako:

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

Pokud je to správné, uvidíte na sériovém monitoru všechny silnice s dopravní zácpou.

Před napsáním poslední smyčky For musíte deklarovat boolean jako globální proměnnou. Boolean, nazvaný trafficJam, je ve výchozím nastavení false a změní se, pokud funkce extractData vrátí true pro dopravní zácpu. Následující kód přejde na začátek souboru.ino:

boolean trafficJam = false;

Pro smyčku č. 3: Zkontrolujte, zda je silnice, v tomto případě A1, v seznamu dopravních zácp.

for (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// změňte A1 na silnici ve svůj prospěch trafficJam = true;}

Pokud tisknete trafficJam na sériovém monitoru, víte, zda je na A1 dopravní zácpa nebo ne.

Vložte tento kód do dolní části funkce extractData:

Serial.println (trafficJam); // podívejte se, jestli není dopravní zácpa

S těmito informacemi budeme dále pracovat na zpětné vazbě systému v kroku 5.

Krok 4: Nainstalujte spoušť

Nainstalujte spoušť
Nainstalujte spoušť
Nainstalujte spoušť
Nainstalujte spoušť
Nainstalujte spoušť
Nainstalujte spoušť

Protože nyní můžeme data úspěšně načíst ze zdroje, je na čase postavit senzor, který spustí nodeMCU ke spuštění funkce extractData. Rozhodl jsem se vyrobit analogový senzor z rohožky. Spoušť můžete změnit pomocí jiného senzoru.

Budování analogového senzoru

Použil jsem 2 kusy hliníkové fólie, dva propojovací vodiče a houbu.

Do houbičky vyvrtejte otvor, to je místo, kde dojde ke kontaktu hliníkových fólií. Na obě strany houby přilepte hliníkovou fólii. Připojte propojovací vodiče k hliníkové fólii. Připojte propojovací vodiče k nodeMCU. Jedna strana na pin A0 a druhá na pin V3. Vložte houbu pod rohožku a právě jste změnili rohožku na senzor. Skvělý!

Kód pro čtení hodnoty ze senzoru, aby se zjistilo, zda někdo stojí na rohožce:

int sensorValue = analogRead (A0);

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

Když hliníková fólie naváže kontakt (když někdo stojí na podložce), hodnota sensorValue je 1024. Výsledkem je spuštění funkce extractData (). A přesně to chceme, aby systém dělal.

Krok 5: Zpětná vazba k návrhu

Použil jsem LEDstrip k poskytnutí zpětné vazby uživateli. Pokud dojde k dopravní zácpě, kontrolka bude mít červenou barvu. Když je dobré jít, zezelená. K ovládání LEDstripu jsem použil knihovnu adafruit neopixel.

Napište tento kód do horní části souboru, abyste se ujistili, že je LEDstrip definován:

#zahrnout

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

Napište další kód do funkce nastavení:

// neopixel

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

A následující kód ve funkci smyčky:

if (trafficJam == true) {

pro (int i; i <PIXEL_COUNT; i ++) {pixely.setPixelColor (i, 255, 0, 0); // červené pixely.show (); zpoždění (200); }} else {for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 0, 255, 0); // zelené pixely.show (); zpoždění (200); }

V kódu výše je funkce if/else. Když funkce extractData vrátí přítomnost dopravní zácpy, pruh LED zčervená. Pokud ne, LED pás se změní na zelenou.

Krok 6: Spusťte kód

Pokud nyní spustíme kompletní kód, senzor a světlo by měly fungovat. Když se postavíte na rohožku, senzor se připojí a spustí se funkce extrahovat data. Když je v řadě názvů silnic hledaná silnice, LEDstrip se rozsvítí červeně, což signalizuje dopravní zácpu. Pokud není v poli, LEDstrip se rozsvítí zeleně a vy víte, že je dobré jít!

Šťastnou cestu a děkuji za přečtení. Doufám, že jste našli inspiraci nebo informace. Pokud máte nějakou zpětnou vazbu, neváhejte odpovědět!

Doporučuje: