Orodha ya maudhui:

Ripoti ya Trafiki Angalia (NL) Pamoja na Doormat: Hatua 6
Ripoti ya Trafiki Angalia (NL) Pamoja na Doormat: Hatua 6

Video: Ripoti ya Trafiki Angalia (NL) Pamoja na Doormat: Hatua 6

Video: Ripoti ya Trafiki Angalia (NL) Pamoja na Doormat: Hatua 6
Video: Давайте поиграем в симулятор сборки ПК (занятие 3) 2024, Novemba
Anonim
Ripoti ya Trafiki Angalia (NL) Na Doormat
Ripoti ya Trafiki Angalia (NL) Na Doormat

Katika maelezo haya nitaelezea jinsi ya kujenga mlango ambao utakagua ripoti za trafiki za barabara kuu za Uholanzi. Mara tu unapotoka nje kwenye mlango wako wa mlango na kuna msongamano wa trafiki kwenye njia yako, mkeka utageuka kuwa rangi nyekundu. Wakati hakuna msongamano wa magari, mkeka utageuka kuwa kijani.

Nitafanya kazi kwenye NodeMCU 1.0 (Moduli ya ESP0-12E). Nambari ya mradi huu inaweza kufanya kazi kwenye vifaa vingine pia (kwa mfano bodi za Arduino). Mradi huu unategemea chanzo cha Uholanzi cha ripoti za trafiki, ANWB.

Tunachohitaji kwa mradi huu:

- NodeMCU - waya za Jumper - Mwangaza wa LED au ukanda - sensa ya Analog (Aluminiuim foil, Sponge) - Uunganisho wa Wi-Fi - Doormat

Hatua tunazopaswa kuchukua:

1. Unganisha NodeMCu kwa Wi-Fi 2. Omba data kupitia HTTPS kutoka ANWB.nl 3. Badilisha data iwe Habari inayoweza kutumika 4. Sakinisha kichocheo 5. Maoni ya muundo

Hatua ya 1: Unganisha NodeMCU na Wi-Fi

Hatua hii itaonyesha jinsi ya kufanya HTTPSRequest iliyofanikiwa ili kuona ikiwa kifaa kimeunganishwa kwenye wavuti.

Kwanza, weka maktaba ya ESP8266 katika Arduino IDE. Fungua kutoka kwa mifano ESP8266>

Jaza hati zako za Wi-Fi juu ya nambari yako, kama inavyoonyeshwa hapa chini:

const char * ssid = "YAKO_SSID";

const char * password = "YOUR_PASS";

Pakia nambari kwenye kifaa chako na angalia ikiwa NodeMCU inaunganisha kwenye mtandao. Mfano wa HTTPSRequest hutumia Github kama chaguo-msingi kupata habari kutoka. Wakati HTTPSRequest ilifanikiwa, unapokea data ya Github kwenye mfuatiliaji wa serial.

Hatua ya 2: Omba Takwimu Kutoka kwa HTTPS Kutoka ANWB.nl

Katika hatua hii ya pili, unabadilisha chanzo cha data kutoka chaguomsingi kwenda chanzo kinachohitajika kwa mradi huu: ANWB.nl.

Juu ya nambari yako, badilisha mwenyeji wa char * kuwa www.anwb.nl (au chanzo kingine ungependa kupata data yako kutoka):

const char * mwenyeji = "www.anwb.nl";!! Ikiwa unatumia chanzo kingine, hatua ya 3 itakuwa tofauti na nambari yangu. Hatua ya 3 inahitaji usimbuaji maalum ili kupata habari inayoweza kutumika!

Ifuatayo, badilisha url ya kamba katika usanidi wa kazi kuwa "/ feeds / gethf", njia ambayo habari imechukuliwa kutoka:

Kamba url = "/ feeds / gethf";!! Ikiwa unatumia chanzo kingine tumia njia ya chanzo chako!

Unapopakia nambari hiyo unapaswa kupata majibu na data zote kutoka www.anwb.nl/feeds/gethf. Nambari hii imehifadhiwa kwenye kamba inayoitwa laini.

Hatua ya 3: Badili data kuwa Habari inayoweza kutumika

Hadi sasa, nambari hiyo iliendesha tu wakati NodeMCU ilianzishwa au kuwekwa upya, kwa sababu nambari yote iko katika kazi ya usanidi. Ili kuweka kichocheo cha kuendesha nambari kila wakati, lazima ubadilishe msimamo wa nambari inayoendesha ombi la HTTPS. Chini ya kazi ya kitanzi, unaongeza kazi nyingine. Nimeiita batiliData:

dondooData () {

}

Nakili sehemu ya nambari kutoka kwa kazi ya usanidi kwenye dondooData (). Anza na mstari ufuatao hadi mwisho wa kazi ya usanidi:

ikiwa (! mteja.connect (mwenyeji, Nambari iko katika kazi yako mpya, kwa hivyo ondoa nambari iliyonakiliwa kutoka kwa kazi ya usanidi.

Ifuatayo, piga kazi ya dondooData katika kazi ya kitanzi na uongeze kuchelewesha ili kutoa nodeMCU muda wa kupumzika:

kitanzi batili () {

dondooData (); kuchelewesha (30000); // hii itaondolewa baadaye wakati tunayo sensa ya analogi}

Kwa kuwa data unayopokea imehifadhiwa kwenye kamba na sehemu tu za kamba hii zinahitajika, lazima uandike vitanzi kadhaa.

Kwanza, angalia nafasi zote za neno 'barabara'. Baada ya neno 'barabara', jina la barabara litafuata (A1, A2, n.k.).

Kabla ya kuanza kuandika matanzi, lazima utangaze anuwai ambazo utatumia:

int noOfPos = 0;

boolean hasRunOnce = uwongo; int kutoka = 0; int roadArray [20];

Sasa ni wakati wa kuandika vitanzi. Nimeandika kwa matanzi chini ya kazi ya ExtractData. Nilijaribu kuigawanya katika kazi tofauti, lakini sikuweza kuifanya ifanye kazi.

Kwa kitanzi namba 1: pata nafasi za neno barabara kwenye laini ya kamba:

kwa (int i = 0; i <line.length (); i ++) {int pos = line.indexOf ("barabara \": ", kutoka); roadArray [noOfPos] = pos; noOfPos + = 1; from = pos + 1; ikiwa (hasRunOnce == kweli && pos == line.indexOf ("barabara \": ")) {i = line.length (); } hasRunOnce = kweli; }

Ifuatayo, angalia ni barabara gani zina msongamano wa trafiki, kwa kutumia nafasi za kitanzi kutoka juu. Msimamo wa jina la barabara huwa sawa kila wakati na huanza herufi 7 na kumaliza herufi 10 baada ya neno barabara.

Sasa tunafafanua jina la safuOfRoadArray, ambalo litajazwa kwa kitanzi kifuatacho:

Kamba jinaOfRoadArray [20];

Kwa kitanzi namba 2: Tafuta majina yote ya barabara na pembejeo kutoka kwa kitanzi no. 1

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

Jina la safu yaOfRoudArray inapaswa kujazwa na foleni zote za trafiki zilizoonyeshwa.

Ifuatayo, utaangalia ikiwa barabara yako iko katika safu ya barabara na msongamano wa trafiki. Chapisha jinaOfRoadArray kupata barabara kwenye data. Fanya hivi kwa kuongeza Serial.println (nameOfRoadArray [k]); ndani ya 2 kwa kitanzi kama:

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

Ikiwa ni sawa utaona barabara zote zilizo na msongamano wa trafiki kwenye mfuatiliaji wa serial.

Kabla ya kuandika kitanzi cha mwisho cha mwisho, lazima utangaze boolean kama utofauti wa ulimwengu. Boolean, inayoitwa trafikiJam kwa uwongo ni ya uwongo na itabadilika ikiwa dondoo ya kazi itarudi kweli kwa msongamano wa trafiki. Nambari ifuatayo inaendelea juu ya faili ya.ino:

trafiki ya booleanJam = uwongo;

Kwa kitanzi namba 3: Angalia ikiwa barabara, katika kesi hii A1, iko katika orodha ya foleni za trafiki.

kwa (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// badilisha A1 kuwa barabara ya upendeleo wako trafikiJam = kweli;}

Ikiwa unachapisha trafikiJam kwenye mfuatiliaji wa serial, unajua ikiwa kuna msongamano wa trafiki kwenye A1 au la.

Weka nambari hii chini ya kazi ya dondooData:

Serial.println (trafikiJam); // angalia ikiwa kuna msongamano wa trafiki

Kwa habari hii tutafanya kazi zaidi juu ya maoni ya mfumo katika hatua ya 5.

Hatua ya 4: Sakinisha Trigger

Sakinisha Kuchochea
Sakinisha Kuchochea
Sakinisha Kuchochea
Sakinisha Kuchochea
Sakinisha Kuchochea
Sakinisha Kuchochea

Kwa kuwa sasa tunaweza kupata data vizuri kutoka kwa chanzo, ni wakati wa kujenga sensa ambayo itasababisha nodeMCU kuendesha dondoo la kazi. Nilichagua kutengeneza sensa ya analog nje ya mlango wangu. Unaweza kubadilisha kichocheo kwa kutumia sensa nyingine.

Kujenga sensorer ya analog

Nilitumia vipande 2 vya karatasi ya aluminium, waya mbili za kuruka na sifongo.

Piga shimo kwenye sifongo, hapa ndio mahali ambapo foil za alumini zitawasiliana. Gundi karatasi ya alumini pande zote mbili za sifongo. Unganisha waya za jumper kwenye foil ya aluminium. Unganisha waya za kuruka kwenye nodeMCU. Upande mmoja kwa pini ya A0 na nyingine kwa pini ya V3. Weka sifongo chini ya mlango wako na umebadilisha mlango wako kuwa sensa. Ajabu!

Nambari ya kusoma thamani kutoka kwa sensa ili kuona ikiwa mtu amesimama kwenye mlango wa mlango:

sensor ya ndaniValue = AnalogRead (A0);

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

Wakati karatasi ya alumini inapowasiliana (wakati mtu amesimama kwenye mkeka), sensorValue ni 1024. Hii inasababisha kazi ya dondooData () kupiga kazi. Na hiyo ndio tunataka mfumo ufanye.

Hatua ya 5: Maoni ya Kubuni

Nilitumia LEDstrip kutoa maoni kwa mtumiaji. Wakati kuna msongamano wa magari, taa hiyo itakuwa na rangi nyekundu. Wakati barabara ni nzuri kwenda, itageuka kijani. Nilitumia maktaba ya neopixel ya adafruit kudhibiti LED yangu.

Andika nambari hii juu ya faili yako ili kuhakikisha kuwa LED inaelezewa:

# pamoja

#fafanua PIXEL_PIN D5 #fasili PIXEL_COUNT 10 #fafanua PIXEL_TYPE NEO_GRB + NEO_KHZ800 Adafruit_NeoPixel pixels = Adafruit_NeoPixel (PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);

Andika nambari inayofuata katika kazi ya usanidi:

// neopikseli

saizi. anza (); saizi. onyesha ();

Na nambari ifuatayo katika kazi ya kitanzi:

ikiwa (trafikiJam == kweli) {

kwa (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 255, 0, 0); // saizi nyekundu. onyesha (); kuchelewesha (200); }} mwingine {for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 0, 255, 0); // saizi za kijani. onyesha (); kuchelewesha (200); }

Katika nambari hapo juu kuna kazi ya if / else. Wakati kazi dondooData inarudi uwepo wa msongamano wa trafiki LEDstrip itageuka kuwa nyekundu. Ikiwa sivyo, taa ya LED itageuka kuwa kijani.

Hatua ya 6: Endesha Msimbo

Ikiwa tunaendesha nambari kamili sasa, sensa na taa inapaswa kufanya kazi. Unaposimama kwenye mlango wa mlango, sensor itaunganisha na kazi ya ExtractData itaendesha. Wakati katika safu ya majina ya barabara, barabara tunayotafuta iko, LEDstrip itageuka kuwa nyekundu, ikiashiria msongamano wa trafiki. Ikiwa haiko katika safu, LEDstrip itageuka kuwa kijani na unajua uko vizuri kwenda!

Kuwa na safari salama na asante kwa kusoma. Natumaini umepata msukumo au habari. Ikiwa umepata maoni, jisikie huru kujibu!

Ilipendekeza: