Përmbajtje:

Kontrolli i Raportit të Trafikut (NL) Me Shtratin e Portës: 6 Hapa
Kontrolli i Raportit të Trafikut (NL) Me Shtratin e Portës: 6 Hapa

Video: Kontrolli i Raportit të Trafikut (NL) Me Shtratin e Portës: 6 Hapa

Video: Kontrolli i Raportit të Trafikut (NL) Me Shtratin e Portës: 6 Hapa
Video: Explore the Beauty of Capri, Italy Walking Tour - 4K 60fps - with Captions 2024, Korrik
Anonim
Kontrolli i Raportit të Trafikut (NL) Me Shtratin e Portës
Kontrolli i Raportit të Trafikut (NL) Me Shtratin e Portës

Në këtë udhëzues do të përshkruaj se si të ndërtoni një shtrat derë që do të kontrollojë raportet e trafikut të autostradave holandeze. Pasi të dilni jashtë në shtratin tuaj dhe të ketë një bllokim trafiku në rrugën tuaj, dyshekja do të kthehet në një ngjyrë të kuqe. Kur nuk ka bllokim trafiku, dyshekja do të bëhet e gjelbër.

Unë do të punoj në një NodeMCU 1.0 (Moduli ESP0-12E). Kodi për këtë projekt mund të funksionojë edhe në pajisje të tjera (p.sh. bordet Arduino). Ky projekt bazohet në një burim holandez për raportet e trafikut, ANWB.

Ajo që na nevojitet për këtë projekt:

- NodeMCU - Tela kërcyes - LEDlight ose shirit - Sensor analog (fletë aluminiuim, sfungjer) - lidhje Wi -Fi - shtrat portash

Hapat që duhet të ndërmarrim:

1. Lidhni NodeMCu me Wi-Fi 2. Kërkoni të dhëna nëpërmjet HTTPS nga ANWB.nl 3. Ktheni të dhënat në informacion të përdorshëm 4. Instaloni këmbëzën 5. Dizajnoni reagime

Hapi 1: Lidhni NodeMCU me Wi-Fi

Ky hap do të tregojë se si të bëni një HTTPS Kërkesë të suksesshme për të parë nëse pajisja është e lidhur me internetin.

Së pari, instaloni bibliotekën ESP8266 në Arduino IDE. Hapeni nga shembujt ESP8266>

Plotësoni kredencialet tuaja Wi-Fi në krye të kodit tuaj, siç tregohet më poshtë:

const char* ssid = "YOUR_SSID";

const char* fjalëkalim = "YOUR_PASS";

Ngarko kodin në pajisjen tuaj dhe kontrolloni nëse NodeMCU po lidhet me internetin. Shembulli HTTPSRequest përdor Github si parazgjedhjen e tij për të marrë informacion. Kur HTTPSRequest pati sukses, ju merrni të dhënat e Github në monitorin serik.

Hapi 2: Kërkoni të dhëna nga HTTPS nga ANWB.nl

Në këtë hap të dytë, ju ndryshoni burimin e të dhënave nga parazgjedhja në burimin e nevojshëm për këtë projekt: ANWB.nl.

Në krye të kodit tuaj, ndërroni char* host në www.anwb.nl (ose një burim tjetër nga i cili dëshironi të merrni të dhënat tuaja):

const char* host = "www.anwb.nl";!! Nëse përdorni një burim tjetër, hapi 3 do të jetë i ndryshëm nga kodi im. Hapi 3 ka nevojë për kodim specifik për të marrë informacion të përdorshëm!

Tjetra, ndryshoni url -në e vargut në konfigurimin e funksionit në "/feeds/gethf", rruga nga e cila merret informacioni:

Url string = "/feeds/gethf";!! Nëse përdorni një burim tjetër, përdorni rrugën drejt burimit tuaj!

Kur ngarkoni kodin duhet të merrni një përgjigje me të gjitha të dhënat nga www.anwb.nl/feeds/gethf. Ky kod ruhet në një varg të quajtur line.

Hapi 3: Ktheni të dhënat në informacion të përdorshëm

Deri tani, kodi funksiononte vetëm kur NodeMCU ishte nisur ose rivendosur, sepse i gjithë kodi është në funksionin e konfigurimit. Për të vendosur shkas për të ekzekutuar vazhdimisht kodin, duhet të ndryshoni pozicionin e kodit që drejton kërkesën HTTPS. Nën funksionin e lakut, shtoni një funksion tjetër. Unë e kam quajtur atë void extractData:

extractData () {

}

Kopjoni një pjesë të kodit nga funksioni i konfigurimit në extractData (). Filloni me rreshtin e mëposhtëm deri në fund të funksionit të konfigurimit:

nëse (! client.connect (host, Kodi tani është në funksionin tuaj të ri, kështu që hiqni kodin e kopjuar nga funksioni i konfigurimit.

Tjetra, thirrni funksionin extractData në funksionin e lakut dhe shtoni një vonesë për t'i dhënë nodeMCU kohë për të pushuar:

lak void () {

extractData (); vonesë (30000); // kjo do të hiqet më vonë kur të kemi një sensor analog}

Meqenëse të dhënat që merrni merrni ruhen në një varg dhe nevojiten vetëm pjesë të këtij vargu, duhet të shkruani disa sythe.

Së pari, kontrolloni të gjitha pozicionet e fjalës "rrugë". Pas fjalës 'rrugë', emri i rrugës do të pasojë (A1, A2, etj.).

Para se të filloni të shkruani sythe for, ju duhet të deklaroni disa ndryshore që do të përdorni:

int noOfPos = 0;

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

Tani është koha për të shkruar disa sythe. Unë kam shkruar sythe për në fund të funksionit extractData. Unë u përpoqa ta ndaj atë në funksione të veçanta, por nuk arrita ta bëj atë të funksionojë.

Për lakun nr. 1: gjeni pozicionet e fjalës rrugë në rreshtin e vargut:

për (int i = 0; i <line.length (); i ++) {int pos = line.indexOf ("rruga \": ", nga); roadArray [noOfPos] = pos; noOfPos+= 1; nga = pos + 1; if (hasRunOnce == true && pos == line.indexOf ("rruga \": ")) {i = line.length (); } hasRunOnce = e vërtetë; }

Tjetra, kontrolloni se cilat rrugë kanë një bllokim trafiku, duke përdorur pozicionet e lakut for nga lart. Pozicioni i emrit të rrugëve është gjithmonë i njëjtë dhe fillon 7 karaktere dhe përfundon 10 karaktere pas fjalës rrugë.

Tani ne përcaktojmë emrin e grupitOfRoadArray, i cili do të plotësohet në lakin tjetër:

Emri i vargutOfRoadArray [20];

Për lakun nr. 2: Gjeni të gjithë emrat e rrugëve me hyrjen nga për lakun nr. 1

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

Emri i grupitOfRoudArray duhet të mbushet me të gjitha bllokimet e trafikut të sinjalizuar.

Tjetra, ju do të kontrolloni nëse rruga juaj është në grupin e rrugëve me një bllokim trafiku. Shtypni emrinOfRoadArray për të marrë rrugët në të dhëna. Bëni këtë duke shtuar Serial.println (nameOfRoadArray [k]); në të dytin për lak si:

për (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 (emriOfRoadArray [k]); }

Nëse është e drejtë, do të shihni të gjitha rrugët me një bllokim trafiku në monitorin Serial.

Para se të shkruani lakin e fundit For, ju duhet të deklaroni një boolean si një ndryshore globale. Boolean, i quajtur trafficJam është parazgjedhje false dhe do të ndryshojë nëse funksioni extractData do të kthehet i vërtetë për një bllokim trafiku. Kodi i mëposhtëm shkon mbi skedarin.ino:

boolean trafficJam = false;

Për lakun nr. 3: Kontrolloni nëse rruga, në këtë rast A1, është në listën e bllokimeve të trafikut.

për (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// ndrysho A1 në rrugën e favorit tënd trafikJam = true;}

Nëse printoni trafficJam në monitorin serik, ju e dini nëse ka një bllokim trafiku në A1 apo jo.

Vendoseni këtë kod në fund të funksionit extractData:

Serial.println (trafficJam); // shikoni nëse ka një bllokim trafiku

Me këtë informacion ne do të punojmë më tej në reagimet e sistemit në hapin 5.

Hapi 4: Instaloni Trigger

Instaloni Trigger
Instaloni Trigger
Instaloni Trigger
Instaloni Trigger
Instaloni Trigger
Instaloni Trigger

Meqenëse tani mund t'i marrim të dhënat me sukses nga burimi, është koha për të ndërtuar një sensor që do të shkaktojë nodeMCU për të ekzekutuar funksionin extractData. Zgjodha të bëja një sensor analog nga shtrati im. Ju mund të ndryshoni këmbëzën duke përdorur një sensor tjetër.

Ndërtimi i sensorit analog

Kam përdorur 2 copa letër alumini, dy tela bluzë dhe një sfungjer.

Shponi një vrimë në sfungjer, ky është vendi ku fletët e aluminit do të kontaktojnë. Ngjitni letër alumini në të dy anët e sfungjerit. Lidhni telat e bluzës me fletën e aluminit. Lidhni telat e kërcyesit me nyjenMCU. Njëra anë në A0-pin dhe tjetra në një V3-pin. Vendoseni sfungjerin nën shtratin tuaj dhe ju sapo e keni ndryshuar shtratin tuaj në një sensor. Mbresëlënës!

Kodi për të lexuar vlerën nga sensori për të parë nëse dikush qëndron në shtratin e derës:

int sensorVlera = analogRead (A0);

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

Kur fleta e aluminit po kontakton (kur dikush qëndron në dyshek), vlera e sensorit është 1024. Kjo rezulton në funksionin e shkarkimit të të dhënave (). Dhe kjo është pikërisht ajo që ne duam të bëjë sistemi.

Hapi 5: Reagimi i Dizajnit

Kam përdorur një shirit LED për t'i dhënë reagime përdoruesit. Kur ka një bllokim trafiku, drita do të ketë ngjyrë të kuqe. Kur rruga është e mirë për të shkuar, ajo do të bëhet e gjelbër. Kam përdorur bibliotekën neopixel adafruit për të kontrolluar shiritin tim LED.

Shkruani këtë kod në krye të skedarit tuaj për t'u siguruar që LEDstrip është përcaktuar:

#përfshi

#përcaktoni PIXEL_PIN D5 #përcaktoni PIXEL_COUNT 10 #përcaktoni PIXEL_TYPE NEO_GRB + NEO_KHZ800 pixel Adafruit_NeoPixel = Adafruit_NeoPixel (PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);

Shkruani kodin tjetër në funksionin e konfigurimit:

// neopixel

piksele.filloj (); piksele.shfaq ();

Dhe kodi i mëposhtëm në funksionin e lakut:

nëse (trafficJam == vërtetë) {

për (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 255, 0, 0); // pikselë të kuq.shfaq (); vonesë (200); }} else {për (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 0, 255, 0); // pixel jeshil.shfaq (); vonesë (200); }

Në kodin e mësipërm ekziston një funksion if/else. Kur funksioni extractData kthen praninë e një bllokimi trafiku, shiriti LED do të kthehet i kuq. Nëse jo, shiriti LED do të bëhet i gjelbër.

Hapi 6: Drejtoni Kodin

Nëse ekzekutojmë kodin e plotë tani, sensori dhe drita duhet të funksionojnë. Kur qëndroni në shtratin e derës, sensori do të lidhet dhe funksioni extractData do të funksionojë. Kur në grupin e emrave të rrugëve, rruga që ne po kërkojmë është e pranishme, shiriti LED do të bëhet i kuq, duke sinjalizuar një bllokim trafiku. Nëse nuk është në grup, LEDstrip do të bëhet i gjelbër dhe ju e dini që jeni gati për të shkuar!

Keni një udhëtim të sigurt dhe faleminderit për leximin. Shpresoj se keni gjetur ndonjë frymëzim ose informacion. Nëse keni marrë disa reagime, mos ngurroni të përgjigjeni!

Recommended: