Talaan ng mga Nilalaman:

Suriin ang Ulat ng Trapiko (NL) Sa Doormat: 6 na Hakbang
Suriin ang Ulat ng Trapiko (NL) Sa Doormat: 6 na Hakbang

Video: Suriin ang Ulat ng Trapiko (NL) Sa Doormat: 6 na Hakbang

Video: Suriin ang Ulat ng Trapiko (NL) Sa Doormat: 6 na Hakbang
Video: Top 5 Freight Container Ships na Sumadsad 2024, Nobyembre
Anonim
Traffic Check Check (NL) Sa Doormat
Traffic Check Check (NL) Sa Doormat

Sa itinuturo na ito ay ilalarawan ko kung paano bumuo ng isang doormat na susuriin ang mga ulat sa trapiko ng mga Dutch highway. Sa sandaling lumabas ka sa labas ng iyong doormat at mayroong isang siksikan sa trapiko sa iyong ruta, ang banig ay magiging isang pulang kulay. Kapag walang traffic jam, magiging berde ang banig.

Nagtatrabaho ako sa isang NodeMCU 1.0 (ESP0-12E Module). Ang code para sa proyektong ito ay maaaring gumana sa iba pang mga aparato pati na rin (hal. Arduino boards). Ang proyektong ito ay batay sa isang mapagkukunang Dutch para sa mga ulat sa trapiko, ang ANWB.

Ano ang kailangan namin para sa proyektong ito:

- NodeMCU - Mga wire ng Jumper - LEDlight o strip - Sensor ng analog (Aluminiuim foil, Sponge) - Koneksyon sa Wi-Fi - Doormat

Mga hakbang na kailangan nating gawin:

1. Ikonekta ang NodeMCu sa Wi-Fi 2. Humiling ng data sa pamamagitan ng HTTPS mula sa ANWB.nl 3. Gawing magagamit na impormasyon ang data 4. I-install ang gatilyo 5. Disenyo ng feedback

Hakbang 1: Ikonekta ang NodeMCU sa Wi-Fi

Ipapakita ng hakbang na ito kung paano gumawa ng isang matagumpay na HTTPSRequest upang makita kung ang aparato ay nakakonekta sa internet.

Una, i-install ang library ng ESP8266 sa Arduino IDE. Buksan mula sa mga halimbawa ng ESP8266>

Punan ang iyong mga kredensyal sa Wi-Fi sa tuktok ng iyong code, tulad ng ipinakita sa ibaba:

const char * ssid = "IYONG_SSID";

const char * password = "IYONG_PASS";

I-upload ang code sa iyong aparato at suriin kung ang NodeMCU ay kumokonekta sa internet. Ang halimbawa ng HTTPSRequest ay gumagamit ng Github bilang default nito upang makakuha ng impormasyon mula sa. Kapag nagtagumpay ang HTTPSRequest, natatanggap mo ang data ng Github sa serial monitor.

Hakbang 2: Humiling ng Data Mula sa HTTPS Mula sa ANWB.nl

Sa pangalawang hakbang na ito, binago mo ang mapagkukunan ng data mula sa default sa pinagmulang kinakailangan para sa proyektong ito: ANWB.nl.

Sa tuktok ng iyong code, baguhin ang char * host sa www.anwb.nl (o ibang mapagkukunan na nais mong makuha ang iyong data):

const char * host = "www.anwb.nl";!! Kung gagamit ka ng ibang mapagkukunan, ang hakbang 3 ay magiging iba sa aking code. Ang Hakbang 3 ay nangangailangan ng tiyak na pag-coding upang makuha ang magagamit na impormasyon!

Susunod, palitan ang url ng string sa pag-setup ng pagpapaandar sa "/ feeds / gethf", ang landas kung saan nakuha ang impormasyon mula sa:

String url = "/ feeds / gethf";!! Kung gumagamit ka ng ibang mapagkukunan gamitin ang path sa iyong mapagkukunan!

Kapag na-upload mo ang code dapat kang makakuha ng isang tugon sa lahat ng data mula sa www.anwb.nl/feeds/gethf. Ang code na ito ay nai-save sa isang string na tinatawag na linya.

Hakbang 3: Gawing Impormasyon ang Magagamit na Impormasyon

Hanggang ngayon, tumakbo lamang ang code nang ang NodeMCU ay nasimulan o na-reset, dahil ang lahat ng code ay nasa pag-andar ng pag-setup. Upang maitakda ang gatilyo upang patakbuhin nang konti ang code, kailangan mong baguhin ang posisyon ng code na nagpapatakbo ng kahilingan sa HTTPS. Sa ibaba ng pag-andar ng loop, nagdagdag ka ng isa pang pagpapaandar. Tinawag ko itong walang bisa na extractData:

extractData () {

}

Kopyahin ang bahagi ng code mula sa pag-andar ng pag-setup sa extractData (). Magsimula sa sumusunod na linya hanggang sa katapusan ng pag-andar ng pag-setup:

kung (! client.connect (host, Ang code ay nasa iyong bagong pag-andar, kaya alisin ang nakopya na code mula sa pag-andar ng pag-setup.

Susunod, tawagan ang function ng extractData sa pagpapaandar ng loop at magdagdag ng ilang pagkaantala upang mabigyan ang oras ng nodeMCU upang makapagpahinga:

void loop () {

i-extract ang Data (); pagkaantala (30000); // aalisin ito sa paglaon kapag mayroon kaming isang analog sensor}

Dahil ang natanggap mong data ay nakaimbak sa isang string at mga bahagi lamang ng string na ito ang kinakailangan, kailangan mong magsulat ng isang pares para sa mga loop.

Una, suriin ang lahat ng mga posisyon ng salitang 'kalsada'. Matapos ang salitang 'kalsada', susundan ang pangalan ng kalsada (A1, A2, atbp.).

Bago simulang isulat ang para sa mga loop, kailangan mong ideklara ang ilang mga variable na gagamitin mo:

int noOfPos = 0;

boolean hasRunOnce = false; int mula sa = 0; int roadArray [20];

Ngayon ay oras na upang magsulat ng ilang mga loop. Sinulat ko ang para sa mga loop sa ilalim ng paggana ng extractData. Sinubukan kong hatiin ito sa magkakahiwalay na mga pag-andar, ngunit hindi ko ito magawang gumana.

Para sa loop No. 1: hanapin ang mga posisyon ng salitang kalsada sa linya ng string:

para sa (int i = 0; i <line.length (); i ++) {int pos = line.indexOf ("road \": ", from); roadArray [noOfPos] = pos; noOfPos + = 1; from = pos + 1; kung (hasRunOnce == true && pos == line.indexOf ("road \": ")) {i = line.length (); } hasRunOnce = totoo; }

Susunod, suriin kung anong mga kalsada ang mayroong isang jam ng trapiko, sa pamamagitan ng paggamit ng mga posisyon ng para sa loop mula sa itaas. Ang posisyon ng pangalan ng mga kalsada ay laging pareho at nagsisimula ng 7 mga character at nagtatapos ng 10 mga character pagkatapos ng salitang kalsada.

Ngayon tinukoy namin ang pangalan ng arrayOfRoadArray, na pupunan sa susunod para sa loop:

Pangalan ng stringOfRoadArray [20];

Para sa loop No. 2: Hanapin ang lahat ng mga pangalan ng mga kalsada na may input mula sa para sa loop no. 1

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

Ang pangalan na array naOfRoudArray ay dapat mapunan ng lahat ng mga jam ng trapiko na sinenyasan.

Susunod, susuriin mo kung ang iyong kalsada ay nasa hanay ng mga kalsada na may isang jam ng trapiko. I-print ang pangalangOfRoadArray upang makuha ang mga kalsada sa data. Gawin ito sa pamamagitan ng pagdaragdag ng Serial.println (nameOfRoadArray [k]); sa ika-2 para sa loop tulad ng:

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

Kung tama makikita mo ang lahat ng mga kalsada na may isang siksikan sa trapiko sa Serial monitor.

Bago isulat ang huling Para sa loop, kailangan mong ideklara ang isang boolean bilang isang pandaigdigang variable. Ang boolean, na tinatawag na trafficJam ay default na mali at magbabago kung ang function na extractData ay babalik totoo para sa isang traffic jam. Ang sumusunod na code ay napupunta sa tuktok ng.ino file:

boolean trafficJam = false;

Para sa loop No. 3: Suriin kung ang kalsada, sa kasong ito A1, ay nasa listahan ng mga jam ng trapiko.

para sa (int l = 0; l <20; l ++) {kung (nameOfRoadArray [l] == "A1 \" ") {// palitan ang A1 sa kalsada ng iyong hinahangad na trafficJam = true;}

Kung nai-print mo ang trafficJam sa serial monitor, malalaman mo kung mayroong isang siksikan sa trapiko sa A1 o hindi.

Ilagay ang code na ito sa ilalim ng function ng extractData:

Serial.println (trafficJam); // tingnan kung mayroong isang siksikan sa trapiko

Sa impormasyong ito magsusumikap pa kami sa feedback ng system sa hakbang 5.

Hakbang 4: I-install ang Trigger

I-install ang Trigger
I-install ang Trigger
I-install ang Trigger
I-install ang Trigger
I-install ang Trigger
I-install ang Trigger

Dahil maaari na nating makuha ang data nang matagumpay mula sa pinagmulan, oras na upang bumuo ng isang sensor na magpapalitaw sa nodeMCU upang patakbuhin ang function naDetData. Pinili kong gumawa ng isang analog sensor mula sa aking doormat. Maaari mong baguhin ang gatilyo sa pamamagitan ng paggamit ng isa pang sensor.

Pagbuo ng analog sensor

Gumamit ako ng 2 pirasong aluminyo foil, dalawang jumper wires at isang espongha.

Mag-drill ng isang butas sa espongha, ito ang lugar kung saan makikipag-ugnay ang mga foil ng aluminyo. Pandikit ang aluminyo palara sa magkabilang panig ng espongha. Ikonekta ang mga jumper wires sa aluminyo foil. Ikonekta ang mga jumper wires sa nodeMCU. Ang isang gilid sa A0-pin at ang iba pa sa isang V3-pin. Ilagay ang espongha sa ilalim ng iyong doormat at pinalitan mo lang ang iyong doormat sa isang sensor. Galing!

Ang code na basahin ang halaga mula sa sensor upang makita kung ang isang tao ay nakatayo sa doormat:

int sensorValue = analogRead (A0);

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

Kapag ang aluminyo foil ay nakikipag-ugnay (kapag ang isang tao ay nakatayo sa banig), ang sensorValue ay 1024. Nagreresulta ito sa pagpapaandar na extractData () na pagpapaputok. At iyon mismo ang nais naming gawin ng system.

Hakbang 5: Disenyo ng Feedback

Gumamit ako ng isang LEDstrip upang magbigay ng puna sa gumagamit. Kapag mayroong isang siksikan sa trapiko, ang ilaw ay kulay pula. Kapag ang daan ay mabuting puntahan, magiging berde ito. Ginamit ko ang adafruit neopixel library upang makontrol ang aking LEDstrip.

Isulat ang code na ito sa tuktok ng iyong file upang matiyak na ang LEDstrip ay tinukoy:

# isama

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

Isulat ang susunod na code sa pag-andar ng pag-setup:

// neopixel

pix.begin (); pix.show ();

At ang sumusunod na code sa pagpapaandar ng loop:

kung (trafficJam == totoo) {

para sa (int i; i <PIXEL_COUNT; i ++) {pix.setPixelColor (i, 255, 0, 0); // red pix.show (); pagkaantala (200); }} iba pa {para sa (int i; i <PIXEL_COUNT; i ++) {pix.setPixelColor (i, 0, 255, 0); // green pixel.show (); pagkaantala (200); }

Sa code sa itaas ay may isang function na if / else. Kapag naibalik ng function na extractData ang pagkakaroon ng isang jam ng trapiko ang LEDstrip ay magiging pula. Kung hindi, ang LEDstrip ay magiging berde.

Hakbang 6: Patakbuhin ang Code

Kung tatakbo namin ang kumpletong code ngayon, dapat gumana ang sensor at ilaw. Kapag tumayo ka sa doormat, makikonekta ang sensor at tatakbo ang pagpapaandar ng extractData. Kapag nasa hanay ng mga pangalan ng kalsada, naroroon ang kalsada na aming hinahanap, ang LEDstrip ay magiging pula, na hudyat ng isang jam ng trapiko. Kung wala ito sa array, ang LEDstrip ay magiging berde at alam mong mahusay kang pumunta!

Magkaroon ng isang ligtas na paglalakbay at salamat sa pagbabasa. Inaasahan kong nakakita ka ng ilang inspirasyon o impormasyon. Kung nakakuha ka ng ilang puna, huwag mag-atubiling tumugon!

Inirerekumendang: