Mündəricat:

Trafik Hesabatı Yoxlaması (NL) Qapı ilə: 6 addım
Trafik Hesabatı Yoxlaması (NL) Qapı ilə: 6 addım

Video: Trafik Hesabatı Yoxlaması (NL) Qapı ilə: 6 addım

Video: Trafik Hesabatı Yoxlaması (NL) Qapı ilə: 6 addım
Video: Daxili audit yoxlamaları 2024, Noyabr
Anonim
Trafik Hesabatı Yoxlaması (NL) Qapı ilə
Trafik Hesabatı Yoxlaması (NL) Qapı ilə

Bu təlimatda Hollandiya karayollarının trafik hesabatlarını yoxlayacaq bir qapının necə qurulacağını təsvir edəcəyəm. Çarpayıda çölə çıxdığınızda və marşrutunuzda tıxac yarandıqda, mat qırmızı rəngə çevriləcək. Tıxac olmadıqda mat yaşıllaşacaq.

NodeMCU 1.0 (ESP0-12E Modulu) üzərində işləyəcəyəm. Bu layihənin kodu digər cihazlarda da işləyə bilər (məsələn, Arduino lövhələri). Bu layihə, ANWB trafik hesabatları üçün Hollandiyalı bir mənbəyə əsaslanır.

Bu layihə üçün bizə lazım olanlar:

- NodeMCU - Jumper telləri - LED işığı və ya şeridi - Analog sensor (Alüminium folqa, Süngər) - Wi -Fi bağlantısı - Paspas

Etməli olduğumuz addımlar:

1. NodeMCu-nu Wi-Fi-a qoşun 2. ANWB.nl-dən HTTPS vasitəsilə məlumat istəyin 3. Verilənləri yararlı məlumatlara çevirin 4. Tətiyi quraşdırın 5. Dizayn rəyi

Addım 1: NodeMCU-nu Wi-Fi-ya qoşun

Bu addım, cihazın İnternetə bağlı olub olmadığını yoxlamaq üçün uğurlu bir HTTPSR istəyinin necə ediləcəyini göstərəcək.

Əvvəlcə ESP8266 kitabxanasını Arduino IDE -də quraşdırın. ESP8266> HTTPSRequest nümunələrindən açın.

Kodunuzun yuxarı hissəsində, aşağıda göstərildiyi kimi Wi-Fi etimadnamənizi doldurun:

const char* ssid = "YOUR_SSID";

const char* parol = "YOUR_PASS";

Kodu cihazınıza yükləyin və NodeMCU -nun internetə qoşulduğunu yoxlayın. HTTPSRequest nümunəsi, məlumat almaq üçün standart olaraq Github istifadə edir. HTTPSRequest uğur qazandıqda, serial monitorda Github məlumatlarını alırsınız.

Addım 2: ANWB.nl -dən HTTPS -dən Məlumat İstəyin

Bu ikinci addımda, məlumat mənbəyini bu layihə üçün lazım olan mənbəyə dəyişirsiniz: ANWB.nl.

Kodunuzun yuxarısında char* hostunu www.anwb.nl olaraq dəyişdirin (və ya məlumatlarınızı almaq istədiyiniz başqa bir mənbədən):

const char* host = "www.anwb.nl";!! Başqa bir qaynaqdan istifadə etsəniz, 3 -cü addım kodumdan fərqli olacaq. Adım 3, istifadə edilə bilən məlumatları əldə etmək üçün xüsusi kodlaşdırmaya ehtiyac duyur!

Daha sonra, funksiya quruluşundakı simli url -i məlumatın alındığı yol "/feeds/gethf" olaraq dəyişdirin:

String url = "/feeds/gethf";!! Başqa bir mənbədən istifadə edirsinizsə, mənbəyinizə gedən yolu istifadə edin!

Kodu yüklədiyiniz zaman www.anwb.nl/feeds/gethf saytından bütün məlumatlarla cavab almalısınız. Bu kod line adlı bir sətirdə saxlanılır.

Addım 3: Məlumatı İstifadə Edilən Məlumata çevirin

İndiyə qədər kod yalnız NodeMCU işə salındıqda və ya sıfırlandıqda işləyirdi, çünki bütün kodlar quraşdırma funksiyasındadır. Tətiyi kodu davamlı olaraq işə salmaq üçün HTTPS sorğusunu işlədən kodun yerini dəyişdirməlisiniz. Döngü funksiyasının altına başqa bir funksiya əlavə edirsiniz. Mən bunu boş bir çıxarış dedata dedim:

extractData () {

}

Kodun bir hissəsini quraşdırma funksiyasından extractData () -ya kopyalayın. Quraşdırma funksiyasının sonuna qədər aşağıdakı sətirdən başlayın:

əgər (! client.connect (host, Kod artıq yeni funksiyanızdadır, buna görə kopyalanan kodu quraşdırma funksiyasından çıxarın.

Sonra loop funksiyasında extractData funksiyasını çağırın və nodeMCU -ya istirahət etmək üçün bir az gecikmə əlavə edin:

boşluq döngəsi () {

çıxarışData (); gecikmə (30000); // bu, daha sonra analoq sensoru olduqda silinəcəkdir}

Aldığınız məlumatlar bir sətirdə saxlanıldığından və bu sətrin yalnız hissələrinə ehtiyac duyulduğundan, döngələr üçün bir neçə yazmalısınız.

Əvvəlcə 'yol' sözünün bütün mövqelərini yoxlayın. "Yol" sözündən sonra yolun adı gələcək (A1, A2 və s.).

For loops yazmağa başlamazdan əvvəl istifadə edəcəyiniz bəzi dəyişənləri elan etməlisiniz:

int noOfPos = 0;

boolean hasRunOnce = yalan; int = 0 -dan; int roadArray [20];

İndi bəzi döngələr yazmağın vaxtı gəldi. ExtractData funksiyasının altına for loops yazmışam. Ayrı -ayrı funksiyalara bölmək istədim, amma işə yaramadı.

1 nömrəli döngə üçün: yol sözünün sətir xəttindəki mövqelərini tapın:

for (int i = 0; i <line.length (); i ++) {int pos = line.indexOf ("road \": ", from); roadArray [noOfPos] = pos; noOfPos+= 1; from = pos + 1; əgər (hasRunOnce == true && pos == line.indexOf ("yol \": ")) {i = line.length (); } hasRunOnce = doğru; }

Sonra yuxarıdakı for loop mövqelərindən istifadə edərək hansı yolların tıxacda olduğunu yoxlayın. Yolların adının mövqeyi həmişə eynidir və yol sözündən sonra 7 simvoldan başlayaraq 10 işarə ilə bitir.

İndi növbəti loop üçün doldurulacaq nameOfRoadArray dizisini təyin edirik:

String nameOfRoadArray [20];

2 nömrəli döngə üçün: no loopundan daxil olan yolların bütün adlarını tapın. 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); }

Dizinin adıOfRoudArray siqnal olan bütün tıxaclarla doldurulmalıdır.

Bundan sonra, yolunuzun tıxac olan yollar silsiləsində olub olmadığını yoxlayacaqsınız. Yolları məlumatlarda əldə etmək üçün adınıOfRoadArray yazdırın. Bunu Serial.println (nameOfRoadArray [k]) əlavə edərək edin; kimi döngə üçün 2 -ci:

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

Düzdürsə, tıxac olan bütün yolları Serial monitorunda görəcəksiniz.

Son For döngüsünü yazmadan əvvəl, booleanı qlobal dəyişən kimi elan etməlisiniz. TrafficJam adlanan boolean default olaraq yanlışdır və extractData funksiyası tıxac üçün doğruya dönərsə dəyişəcək. Aşağıdakı kod.ino faylının üstünə gedir:

boolean trafficJam = yanlış;

3 nömrəli döngə üçün: Bu vəziyyətdə A1 yolunun tıxaclar siyahısında olub olmadığını yoxlayın.

for (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// A1 -i sizin xeyrinizə olan yola dəyişdirin trafficJam = doğru;}

TrafficJam -ı serial monitorda çap etsəniz, A1 -də tıxac olub -olmadığını bilirsiniz.

Bu kodu extractData funksiyasının altına qoyun:

Serial.println (trafficJam); // tıxacın olub olmadığını yoxlayın

Bu məlumatla sistemin 5 -ci addımdakı rəyləri üzərində daha çox çalışacağıq.

Addım 4: Tətiyi quraşdırın

Tətiyi quraşdırın
Tətiyi quraşdırın
Tətiyi quraşdırın
Tətiyi quraşdırın
Tətiyi quraşdırın
Tətiyi quraşdırın

İndi məlumatları mənbədən uğurla əldə edə bildiyimiz üçün nodeMCU extractData funksiyasını işə salacaq bir sensor qurmağın vaxtı gəldi. Qapıdan analoq sensoru düzəltməyi seçdim. Başqa bir sensordan istifadə edərək tətiyi dəyişə bilərsiniz.

Analog sensorun qurulması

2 ədəd alüminium folqa, iki tullanan tel və bir süngərdən istifadə etdim.

Süngərdə bir çuxur qazın, alüminium folqaların təmas quracağı yer budur. Süngərin hər iki tərəfinə alüminium folqa yapışdırın. Alüminium folqa tellərini bağlayın. Atlama tellərini nodeMCU -ya qoşun. Bir tərəfi A0 pininə, digər tərəfi V3 pininə. Süngəri paspasın altına qoyun və pasportunuzu bir sensora dəyişmisiniz. Əla!

Sensordan dəyər oxumaq üçün kod, kiminsə qapı dayağında dayandığını görmək üçün:

int sensorValue = analogRead (A0);

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

Alüminium folqa təmasda olduqda (kimsə döşəkdə dayandıqda), sensorValue 1024 -dir. Bunun nəticəsində extractData () funksiyası işə düşür. Və sistemin tam olaraq bunu etməsini istəyirik.

Addım 5: Dizayn Əlaqəsi

İstifadəçiyə geribildirim vermək üçün bir LED şeridi istifadə etdim. Tıxac olduqda işıq qırmızı rəngdə olacaq. Yol yaxşı gedəndə yaşıllaşacaq. LED şeridimi idarə etmək üçün adafruit neopixel kitabxanasından istifadə etdim.

LED şeridinin təyin olunduğundan əmin olmaq üçün bu kodu faylınızın üstünə yazın:

#daxil edin

#dexine PIXEL_PIN D5 #dexine PIXEL_COUNT 10 #dexinePIXEL_TYPE NEO_GRB + NEO_KHZ800 Adafruit_NeoPixel piksel = Adafruit_NeoPixel (PIXEL_COUNT, PIXEL_PIN, PIXEL_TYP;

Quraşdırma funksiyasında növbəti kodu yazın:

// neopiksel

piksel.begin (); piksel.show ();

Və loop funksiyasında aşağıdakı kod:

if (trafficJam == doğru) {

for (int i; i <PIXEL_COUNT; i ++) {piksel.setPixelColor (i, 255, 0, 0); // qırmızı piksel.show (); gecikmə (200); }} başqa {üçün (int i; i <PIXEL_COUNT; i ++) {piksel.setPixelColor (i, 0, 255, 0); // yaşıl piksellər.show (); gecikmə (200); }

Yuxarıdakı kodda if/else funksiyası var. ExtractData funksiyası tıxacın mövcudluğunu qaytardıqda LED şeridi qırmızıya çevriləcək. Əks təqdirdə, LED şeridi yaşıl rəngə çevriləcək.

Addım 6: Kodu işə salın

İndi tam kodu işləsək, sensor və işıq işləməlidir. Qapının üstündə dayandığınız zaman sensor qoşulacaq və extractData funksiyası işləyəcək. Yol adları aralığında axtardığımız yol mövcud olduqda, LED zolağı qırmızıya çevrilərək tıxac siqnalı verir. Dizidə deyilsə, LED şeridi yaşıl rəngə çevriləcək və getmək üçün yaxşı olduğunuzu bilirsiniz!

Təhlükəsiz bir səyahət edin və oxuduğunuz üçün təşəkkürlər. Ümid edirəm bir az ilham və ya məlumat tapdınız. Bəzi fikirləriniz varsa, cavab verməkdən çekinmeyin!

Tövsiyə: