Mundarija:

Trafik hisobotini tekshirish (NL) eshik tagida: 6 qadam
Trafik hisobotini tekshirish (NL) eshik tagida: 6 qadam

Video: Trafik hisobotini tekshirish (NL) eshik tagida: 6 qadam

Video: Trafik hisobotini tekshirish (NL) eshik tagida: 6 qadam
Video: Accounting for retail 2024, Noyabr
Anonim
Trafik hisobotini tekshirish (NL) eshik tagida
Trafik hisobotini tekshirish (NL) eshik tagida

Bu yo'riqnomada men Gollandiya avtomagistrallarining yo'l harakati hisobotlarini tekshiradigan eshik tagini qanday yasashni tasvirlab beraman. Eshik tagiga chiqib, marshrutingizda tirbandlik paydo bo'lganda, to'shak qizil rangga aylanadi. Tiqilinch bo'lmasa, taglik yashil rangga aylanadi.

Men NodeMCU 1.0 (ESP0-12E moduli) ustida ishlayman. Ushbu loyihaning kodi boshqa qurilmalarda ham ishlashi mumkin (masalan, Arduino platalari). Ushbu loyiha ANWB trafik hisobotlari uchun Gollandiyalik manbaga asoslangan.

Ushbu loyiha uchun bizga kerak bo'lgan narsalar:

- NodeMCU - Jumper simlari - LED yorug'lik yoki tasma - Analog sensor (alyuminiy folga, shimgich) - Wi -Fi ulanishi - Eshik tagligi

Biz olishimiz kerak bo'lgan qadamlar:

1. NodeMCu-ni Wi-Fi-ga ulang 2. ANWB.nl-dan HTTPS orqali ma'lumotlarni so'rang 3. Ma'lumotni foydalanishga yaroqli ma'lumotga aylantiring 4. Triggerni o'rnating 5. Fikr-mulohazalarni loyihalash.

1-qadam: NodeMCU-ni Wi-Fi-ga ulang

Bu qadam, qurilma Internetga ulanganligini tekshirish uchun muvaffaqiyatli HTTPSRequest qanday bajarilishini ko'rsatadi.

Birinchidan, ESP8266 kutubxonasini Arduino IDE -ga o'rnating. ESP8266> HTTPSRequest misollaridan oching.

Kodning yuqori qismida Wi-Fi hisob ma'lumotlarini quyida ko'rsatilgan tarzda to'ldiring:

const char* ssid = "YOUR_SSID";

const char* parol = "YOUR_PASS";

Kodni qurilmangizga yuklang va NodeMCU Internetga ulanganligini tekshiring. HTTPSRequest misoli ma'lumot olish uchun standart sifatida Github -dan foydalanadi. HTTPSRequest muvaffaqiyatli bo'lganda, siz ketma -ket monitorda Github ma'lumotlarini olasiz.

2 -qadam: HTTPS -dan ANWB.nl -dan ma'lumotlarni so'rash

Ushbu ikkinchi bosqichda siz ma'lumotlar manbasini standartdan ushbu loyiha uchun zarur bo'lgan manbaga o'zgartirasiz: ANWB.nl.

Kodingizning yuqori qismida char* hostini www.anwb.nl (yoki ma'lumotlaringizni olishni istagan boshqa manbaga) o'zgartiring:

const char* host = "www.anwb.nl";!! Agar siz boshqa manbadan foydalansangiz, 3 -qadam mening kodimdan farq qiladi. 3 -qadam, mavjud ma'lumotlarni olish uchun maxsus kodlashni talab qiladi!

Keyin, funktsiya sozlamalarida satr urlini "/feeds/gethf" ga o'zgartiring, bu ma'lumot qaerdan olinadi:

String url = "/feeds/gethf";!! Agar siz boshqa manbadan foydalansangiz, manba yo'lini ishlating!

Kodni yuklaganingizda, www.anwb.nl/feeds/gethf saytidagi barcha ma'lumotlar bilan javob olishingiz kerak. Bu kod satr deb nomlangan satrda saqlanadi.

3 -qadam: Ma'lumotni mavjud ma'lumotlarga aylantiring

Hozirgacha kod faqat NodeMCU ishga tushirilganda yoki qayta o'rnatilganda ishlaydi, chunki hamma kod sozlash funktsiyasida. Triggerni kodni uzluksiz ishlashiga sozlash uchun siz HTTPS so'rovini bajaradigan kod o'rnini o'zgartirishingiz kerak. Loop funktsiyasi ostida siz boshqa funktsiyani qo'shasiz. Men uni "extractData" deb nomladim:

extractData () {

}

Kodning bir qismini sozlash funktsiyasidan extractData () ga nusxalash. O'rnatish funktsiyasi tugaguncha quyidagi satrdan boshlang:

if (! client.connect (host, Kod endi sizning yangi funktsiyangizda, shuning uchun nusxa ko'chirilgan kodni sozlash funktsiyasidan olib tashlang.

Keyin, loop funktsiyasida extractData funktsiyasini chaqiring va nodeMCUga dam olish uchun vaqt berish uchun biroz kechiktiring:

void loop () {

extractData (); kechikish (30000); // keyinchalik analog sensori bo'lsa, bu o'chiriladi}

Qabul qilingan ma'lumotlar mag'lubiyatda saqlangani uchun va bu satrning faqat qismlari kerak bo'lgani uchun, siz looplar uchun bir nechta yozishingiz kerak bo'ladi.

Birinchidan, "yo'l" so'zining barcha pozitsiyalarini tekshiring. "Yo'l" so'zidan keyin yo'l nomi keladi (A1, A2 va boshqalar).

For looplarini yozishni boshlashdan oldin, siz foydalanmoqchi bo'lgan ba'zi o'zgaruvchilarni e'lon qilishingiz kerak:

int noOfPos = 0;

boolean hasRunOnce = noto'g'ri; int = 0 dan; int roadArray [20];

Endi bir nechta ko'chadan yozish vaqti keldi. ExtractData funktsiyasining pastki qismidagi for looplarini yozdim. Men uni alohida funktsiyalarga ajratishga harakat qildim, lekin uni ishga sola olmadim.

No1 tsikl uchun: satr satrida yo'l so'zining o'rnini toping:

for (int i = 0; i <line.length (); i ++) {int pos = line.indexOf ("road \": ", from); roadArray [noOfPos] = pos; noOfPos+= 1; from = pos + 1; agar (hasRunOnce == rost && pos == line.indexOf ("yo'l \": ")) {i = chiziq.length (); } hasRunOnce = rost; }

Keyin, yuqoridan for for loopining pozitsiyalaridan foydalanib, qaysi yo'llarda tirbandlik borligini tekshiring. Yo'llar nomining pozitsiyasi har doim bir xil bo'ladi va yo'l belgisidan keyin 7 belgidan boshlanadi va 10 belgidan tugaydi.

Endi biz loopOFRoadArray qatorini belgilaymiz, u keyingi uchun loop uchun to'ldiriladi:

String nameOfRoadArray [20];

No 2 tsikl uchun: yo'llarning barcha nomlarini for loopdan kirgan holda toping. 1

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

OfRoudArray qatori barcha tirbandlik signallari bilan to'ldirilishi kerak.

Keyin, sizning yo'lingiz tiqilib qolgan yo'llar qatorida ekanligini tekshirasiz. Ma'lumotlardagi yo'llarni olish uchunOfRoadArray nomini chop eting. Buni Serial.println (nameOfRoadArray [k]) qo'shib bajaring; Loop uchun 2 -chi o'rinda:

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

To'g'ri bo'lsa, Serial monitorida tirbandlik bo'lgan barcha yo'llarni ko'rasiz.

Oxirgi For loopini yozishdan oldin siz booleanni global o'zgaruvchi deb e'lon qilishingiz kerak. TrafficJam deb nomlangan boolean sukut bo'yicha yolg'ondir va agar extractData funktsiyasi tirbandlik uchun rost bo'lsa, o'zgaradi. Quyidagi kod.ino faylining tepasida joylashgan:

boolean trafficJam = noto'g'ri;

3 -sonli halqa uchun: Yo'l, bu holda A1, tirbandliklar ro'yxatida ekanligini tekshiring.

for (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// A1 ni o'zingiz xohlagan yo'lga o'zgartiring trafficJam = rost;}

Agar ketma -ket monitorda TrafficJam -ni chop qilsangiz, A1da tirbandlik bor yoki yo'qligini bilasiz.

Ushbu kodni extractData funktsiyasining pastki qismiga qo'ying:

Serial.println (trafficJam); // tirbandlik borligini ko'ring

Ushbu ma'lumot bilan biz 5 -bosqichda tizimning fikr -mulohazalari ustida ishlashni davom ettirmoqchimiz.

4 -qadam: Triggerni o'rnating

Trigger -ni o'rnating
Trigger -ni o'rnating
Trigger -ni o'rnating
Trigger -ni o'rnating
Trigger -ni o'rnating
Trigger -ni o'rnating

Ma'lumotni manbadan muvaffaqiyatli olishimiz mumkin bo'lganligi sababli, nodeMCUni extractData funktsiyasini ishga tushiradigan sensorni yaratish vaqti keldi. Men eshik tagidan analog sensor yasashni tanladim. Triggerni boshqa sensor yordamida o'zgartirish mumkin.

Analog sensorni yaratish

Men 2 dona alyumin folga, ikkita o'tish simlari va shimgichni ishlatardim.

Shimgichni teshik qiling, bu joy alyumin folga bilan aloqa qiladi. Shimgichning ikki tomoniga alyumin folga yopishtiring. Alyuminiy folga ulanish simlarini ulang. O'tish simlarini nodeMCU ga ulang. Bir tomoni A0-pinli, ikkinchisi V3-pinli. Shimgichni eshik tagiga qo'ying, shunda siz eshik tagini sensorga o'zgartirdingiz. Ajoyib!

Eshik tagida kimdir turganini bilish uchun sensordan qiymatni o'qish kodi:

int sensorValue = analogRead (A0);

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

Alyuminiy folga aloqa qilganda (kimdir to'shakda turganida), sensorValue 1024. Buning natijasida extractData () funktsiyasi ishga tushadi. Va biz aynan shu tizimni xohlaymiz.

5 -qadam: Dizayn bo'yicha teskari aloqa

Men foydalanuvchiga fikr bildirish uchun LED chizig'idan foydalandim. Agar tirbandlik bo'lsa, chiroq qizil rangga aylanadi. Yo'l yaxshi bo'lganda, u yashil rangga aylanadi. Men LED chizig'imni boshqarish uchun adafruit neopixel kutubxonasidan foydalandim.

LED tasmasi aniqlanganligiga ishonch hosil qilish uchun ushbu kodni faylingizning yuqori qismiga yozing:

#qo'shing

#aniqlang PIXEL_PIN D5 #aniqlang PIXEL_COUNT 10 #ta'rif PIXEL_TYPE NEO_GRB + NEO_KHZ800 Adafruit_NeoPixel piksel = Adafruit_NeoPixel (PIXEL_COUNT, PIXEL_PIN, PIXEL_TYP)

O'rnatish funktsiyasida keyingi kodni yozing:

// yangi piksel

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

Va loop funktsiyasida quyidagi kod:

agar (trafficJam == rost) {

uchun (int i; i <PIXEL_COUNT; i ++) {piksel.setPixelColor (i, 255, 0, 0); // qizil piksellar.show (); kechikish (200); }} boshqa {uchun (int i; i <PIXEL_COUNT; i ++) {piksel.setPixelColor (i, 0, 255, 0); // yashil piksellar.show (); kechikish (200); }

Yuqoridagi kodda if/else funktsiyasi mavjud. ExtractData funktsiyasi tirbandlikni qaytarganda, LED chizig'i qizil rangga aylanadi. Aks holda, LED chizig'i yashil rangga aylanadi.

6 -qadam: Kodni ishga tushiring

Agar biz hozir to'liq kodni ishga tushirsak, sensor va yorug'lik ishlashi kerak. Eshik tagida turganingizda, sensor ulanadi va extractData funktsiyasi ishlaydi. Yo'l nomlari qatorida biz qidirayotgan yo'l mavjud bo'lsa, LED chizig'i qizil rangga aylanadi va bu tirbandlikni bildiradi. Agar u qatorda bo'lmasa, LED chizig'i yashil rangga aylanadi va siz borishingizni bilasiz!

Safaringiz xavfsiz bo'lsin va o'qiganingiz uchun tashakkur. Umid qilamanki, siz ilhom yoki ma'lumot topdingiz. Agar sizda ba'zi fikr -mulohazalar bo'lsa, javob berishdan qo'rqmang!

Tavsiya: