Tartalomjegyzék:

Forgalmi jelentés ellenőrzése (NL) lábtörlővel: 6 lépés
Forgalmi jelentés ellenőrzése (NL) lábtörlővel: 6 lépés

Videó: Forgalmi jelentés ellenőrzése (NL) lábtörlővel: 6 lépés

Videó: Forgalmi jelentés ellenőrzése (NL) lábtörlővel: 6 lépés
Videó: Euro 150TE Flexy FW szoftverfrissítés, alapértelmezett beállítások esetén 2024, November
Anonim
Közlekedési jelentések ellenőrzése (NL) Ajtómatraccal
Közlekedési jelentések ellenőrzése (NL) Ajtómatraccal

Ebben az utasításban leírom, hogyan kell építeni egy lábtörlőt, amely ellenőrzi a holland autópályák forgalmi jelentéseit. Amint kilép a lábtörlőre, és forgalmi dugó van az útvonalon, a szőnyeg piros színű lesz. Ha nincs forgalmi dugó, a szőnyeg zöldre vált.

Dolgozni fogok egy NodeMCU 1.0-n (ESP0-12E modul). A projekt kódja más eszközökön is működhet (pl. Arduino táblák). Ez a projekt a forgalmi jelentések holland forrásán, az ANWB -n alapul.

Amire szükségünk van ehhez a projekthez:

- NodeMCU - Jumper vezetékek - LED lámpa vagy szalag - Analóg érzékelő (alumínium fólia, szivacs) - Wi -Fi kapcsolat - Lábtörlő

Lépések, amelyeket meg kell tennünk:

1. Csatlakoztassa a NodeMCu-t a Wi-Fi-hez. 2. Kérjen adatokat HTTPS-en keresztül az ANWB.nl-től. 3. Fordítsa az adatokat használható információkká.

Lépés: Csatlakoztassa a NodeMCU-t a Wi-Fi-hez

Ez a lépés megmutatja, hogyan lehet sikeres HTTPSRequest -t végezni annak megállapítására, hogy az eszköz csatlakozik -e az internethez.

Először telepítse az ESP8266 könyvtárat az Arduino IDE programba. Nyissa meg az ESP8266> HTTPSRequest példákból.

Töltse ki a Wi-Fi hitelesítő adatait a kód tetején, az alábbiak szerint:

const char* ssid = "A SAJTOD";

const char* password = "YOUR_PASS";

Töltse fel a kódot a készülékére, és ellenőrizze, hogy a NodeMCU csatlakozik -e az internethez. A HTTPSRequest példa a Githubot használja alapértelmezettként az információk lekéréséhez. Ha a HTTPSRequest sikeres volt, akkor a Github adatokat kapja a soros monitoron.

2. lépés: Adatok kérése a HTTPS -től az ANWB.nl -től

Ebben a második lépésben módosítja az adatforrást az alapértelmezettről a projekthez szükséges forrásra: ANWB.nl.

A kód tetején állítsa a char* hostot a www.anwb.nl (vagy más forrásból, ahonnan szeretné lekérni az adatokat) értékre:

const char* host = "www.anwb.nl";!! Ha más forrást használ, a 3. lépés eltér a kódomtól. A 3. lépés speciális kódolást igényel a használható információk lekéréséhez!

Ezután módosítsa a karakterlánc url -jét a függvénybeállításban "/feeds/gethf" -re, az elérési útra:

Karakterlánc url = "/feeds/gethf";!! Ha másik forrást használ, használja a forrás elérési útját!

Amikor feltölti a kódot, választ kell kapnia a www.anwb.nl/feeds/gethf összes adatával. Ezt a kódot egy sornak nevezett karakterláncba menti.

3. lépés: Az adatok felhasználható információkká alakítása

Eddig a kód csak a NodeMCU indításakor vagy visszaállításakor futott, mert az összes kód a beállítási funkcióban van. Annak beállításához, hogy a trigger folyamatosan futtassa a kódot, módosítania kell a HTTPS kérést futtató kód helyzetét. A hurokfüggvény alatt egy másik függvényt ad hozzá. Elneveztem void extractData:

extractData () {

}

Másolja a kód egy részét a beállítási funkcióból az extractData () fájlba. Kezdje a következő sorral a beállítási funkció végéig:

if (! client.connect (gazdagép, A kód most az új funkcióban van, ezért távolítsa el a másolt kódot a beállítási funkcióból.

Ezt követően hívja meg a hurokfüggvényben az extractData függvényt, és adjon hozzá némi késleltetést, hogy időt adjon a nodeMCU -nak a pihenésre:

void loop () {

extractData (); késleltetés (30000); // ezt később eltávolítjuk, ha van analóg érzékelőnk}

Mivel a kapott adatokat egy karakterlánc tárolja, és ennek a karakterláncnak csak bizonyos részei szükségesek, néhányat írnia kell a hurkokhoz.

Először ellenőrizze az „út” szó összes pozícióját. Az „út” szó után az út neve következik (A1, A2 stb.).

Mielőtt elkezdené írni a ciklusokhoz, deklarálnia kell néhány változót, amelyeket használni fog:

int noOfPos = 0;

logikai hasRunOnce = hamis; int = = 0; int roadArray [20];

Most itt az ideje, hogy néhány cikket írjunk. A for ciklusokat az ExtractData függvény aljába írtam. Próbáltam külön funkciókra osztani, de nem tudtam működésbe hozni.

Az 1. ciklushoz: keresse meg az út szó pozícióit a karakterlánc sorában:

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

Ezután ellenőrizze, hogy milyen utakon van forgalmi dugó, a for hurok pozícióinak használatával felülről. Az utak nevének pozíciója mindig ugyanaz, és az út szó után 7 karakterrel és 10 karakterrel kezdődik.

Most definiáljuk az OfRoadArray tömb nevét, amelyet a következő ciklusban kell kitölteni:

Karakterlánc neveOfRoadArray [20];

2. hurok: Keresse meg az utak összes nevét a (z) ciklus bemenetével. 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); }

Az OFRoudArray tömb nevét ki kell tölteni az összes jelzett forgalmi dugóval.

Ezt követően ellenőrizni fogja, hogy az útja forgalmi dugóval rendelkező utakon van -e. Nyomtassa ki az nameOfRoadArray nevet, hogy az utak bekerüljenek az adatokba. Ehhez adja hozzá a Serial.println (nameOfRoadArray [k]); a másodikba a ciklushoz, például:

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

Ha helyes, akkor a Serial monitoron minden forgalmi dugóval rendelkező utat látni fog.

Az utolsó For ciklus írása előtt deklarálnia kell egy booleant globális változóként. A trafficJam nevű logikai érték alapértelmezésben hamis, és megváltozik, ha az extractData függvény igaz értéket ad vissza egy forgalmi dugó esetén. A következő kód kerül az.ino fájl tetejére:

logikai forgalomJam = false;

A 3. számú hurok esetében: Ellenőrizze, hogy az út, jelen esetben A1, szerepel -e a forgalmi dugók listájában.

for (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ")) {// változtassa meg az A1 -t az Ön által kedvelt útra forgalomJam = true;}

Ha a trafficJam -et nyomtatja a soros monitoron, akkor tudja, hogy van -e forgalmi dugó az A1 -en.

Tegye ezt a kódot az extractData függvény aljára:

Serial.println (trafficJam); // nézd meg, van -e forgalmi dugó

Ezen információk birtokában tovább fogunk dolgozni a rendszer visszacsatolásán az 5. lépésben.

4. lépés: Telepítse a triggert

Telepítse a Triggert
Telepítse a Triggert
Telepítse a Triggert
Telepítse a Triggert
Telepítse a Triggert
Telepítse a Triggert

Mivel most már sikeresen lekérhetjük az adatokat a forrásból, itt az ideje, hogy felépítsünk egy érzékelőt, amely elindítja a nodeMCU -t az extractData függvény futtatására. Úgy döntöttem, hogy analóg érzékelőt készítek a lábtörlőmből. Egy másik érzékelő használatával megváltoztathatja a ravaszt.

Az analóg érzékelő építése

2 db alumínium fóliát használtam, két jumper vezetéket és egy szivacsot.

Fúrjon lyukat a szivacsba, ez az a hely, ahol az alumínium fóliák érintkeznek. Ragasszon alufóliát a szivacs mindkét oldalára. Csatlakoztassa a jumper vezetékeket az alumínium fóliához. Csatlakoztassa az áthidaló vezetékeket a csomóponthoz MCU. Az egyik oldalt az A0-ás, a másikat a V3-as érintkezőhöz. Tegye a szivacsot a lábtörlő alá, és most kicserélte a lábtörlőt érzékelővé. Fantasztikus!

A kód, amely kiolvassa az értéket az érzékelőből, hogy lássa, áll -e valaki a lábtörlőn:

int sensorValue = analogRead (A0);

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

Amikor az alumínium fólia érintkezik (ha valaki a szőnyegen áll), a sensorValue értéke 1024. Ennek eredményeként a extractData () függvény kigyullad. És pontosan ezt akarjuk a rendszertől.

5. lépés: Visszajelzés tervezése

LED szalagot használtam, hogy visszajelzést adjak a felhasználónak. Forgalmi dugó esetén a lámpa piros színű lesz. Ha jó az út, akkor zöldre vált. Az adafruit neopixel könyvtárat használtam a LEDstrip vezérléséhez.

Írja be ezt a kódot a fájl tetejére, hogy megbizonyosodjon arról, hogy a LED szalag definiálva van -e:

#befoglalni

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

Írja be a következő kódot a beállítási funkcióba:

// neopixel

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

És a következő kód a hurokfüggvényben:

if (trafficJam == igaz) {

for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 255, 0, 0); // piros pixelek.show (); késleltetés (200); }} else {for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 0, 255, 0); // zöld pixelek.show (); késleltetés (200); }

A fenti kódban van egy if/else függvény. Amikor a extractData függvény forgalmi dugót jelenít meg, a LED -csík pirosra vált. Ha nem, a LED szalag zöldre vált.

6. lépés: Futtassa a kódot

Ha most a teljes kódot futtatjuk, az érzékelőnek és a lámpának működnie kell. Amikor a lábtörlőn áll, az érzékelő csatlakozik, és az extractData funkció fut. Amikor az útnevek tömbjében megtalálható az általunk keresett út, a LED szalag pirosra vált, jelezve a forgalmi dugót. Ha nem szerepel a tömbben, a LED szalag zöldre vált, és tudja, hogy készen áll!

Biztonságos utat, és köszönöm, hogy elolvastad. Remélem talált valami inspirációt vagy információt. Ha visszajelzést kaptál, válaszolj bátran!

Ajánlott: