Mundarija:
- 1-qadam: NodeMCU-ni Wi-Fi-ga ulang
- 2 -qadam: HTTPS -dan ANWB.nl -dan ma'lumotlarni so'rash
- 3 -qadam: Ma'lumotni mavjud ma'lumotlarga aylantiring
- 4 -qadam: Triggerni o'rnating
- 5 -qadam: Dizayn bo'yicha teskari aloqa
- 6 -qadam: Kodni ishga tushiring
Video: Trafik hisobotini tekshirish (NL) eshik tagida: 6 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:26
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
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:
Maxsus eshik tagligi, eshik qo'ng'irog'i: 6 qadam
Maxsus eshik tagligi eshikni qo'ng'irog'i. Salom! Mening ismim Jastin, men o'rta maktabda kichikman va bu ko'rsatma sizga kimdir eshik to'shagini bosganda qanday qo'ng'iroq qilish kerakligini ko'rsatib beradi va siz xohlagan ohang yoki qo'shiq bo'lishi mumkin! Eshik tagligi eshikni qo'zg'atgani uchun
AvoRipe - avakado pishganligini tekshirish: 8 qadam (rasmlar bilan)
AvoRipe - Sizning avakado pishganligini tekshirish: Bu hamma bilan sodir bo'lgan, siz avakado sotib olasiz, u hali pishmagan. Oradan bir necha kun o'tadi va pishib yetganda siz bu haqda unutgansiz … va bir necha kun ichida yomon bo'lib ketishi mumkin! Baxtingiz uchun biz avokashingizni tekshiradigan AvoRipe qurilmasini yaratdik va qurdik
IFTTT yordamida simli eshik qo'ng'irog'ini aqlli eshik qo'ng'irog'iga aylantiring: 8 qadam
IFTTT yordamida simli eshik qo'ng'irog'ini aqlli eshik qo'ng'irog'iga aylantiring: WiFi eshik qo'ng'irog'i sizning mavjud simli eshik qo'ng'irog'ingizni aqlli eshik qo'ng'irog'iga aylantiradi. https://www.fireflyelectronix.com/product/wifidoor
Uy yordamchisi yordamida simli eshik qo'ng'irog'ini aqlli eshik qo'ng'irog'iga aylantiring: 6 qadam
Uy yordamchisi yordamida simli eshik qo'ng'irog'ini aqlli eshik qo'ng'irog'iga aylantiring: mavjud simli eshik qo'ng'irog'ini aqlli eshik qo'ng'irog'iga aylantiring. Kimdir sizning qo'ng'irog'ingizga qo'ng'iroq qilganda, fotosurat yoki video ogohlantirishni olish uchun telefoningizga yoki oldingi old kamerangiz bilan bog'laning
Eshik va eshik monitoriga ulangan avtomatik chiroqlar: 5 qadam
Eshik va eshik monitoriga ulangan avtomatik chiroqlar: zulmatda boshqaruv panelini topish juda qiyin bo'lib tuyuladi, lekin bu loyiha bu muammoni hal qilishda haqiqatan ham yordam beradi. Buning echimini bilish uchun quyidagi amallarni bajaring