Агуулгын хүснэгт:

Замын хөдөлгөөний тайланг шалгах (NL) хаалганы дэвсгэртэй: 6 алхам
Замын хөдөлгөөний тайланг шалгах (NL) хаалганы дэвсгэртэй: 6 алхам

Видео: Замын хөдөлгөөний тайланг шалгах (NL) хаалганы дэвсгэртэй: 6 алхам

Видео: Замын хөдөлгөөний тайланг шалгах (NL) хаалганы дэвсгэртэй: 6 алхам
Видео: Über die Seidenstraße Richtung Mongolei bis zum Baikalsee | Teil 3 | Zwei Brüder – Zwei 2V Boxer 2024, Долдугаар сарын
Anonim
Замын хөдөлгөөний тайланг шалгах (NL) хаалганы дэвсгэртэй
Замын хөдөлгөөний тайланг шалгах (NL) хаалганы дэвсгэртэй

Энэхүү зааварчилгааны хэсэгт би Голландын хурдны замын замын хөдөлгөөний мэдээг шалгах үүдний даавуу хэрхэн бүтээх талаар тайлбарлах болно. Хаалганыхаа дэвсгэр дээр гадаа гараад замд чинь түгжрэл үүсэхэд дэвсгэр нь улаан болж хувирна. Замын түгжрэл байхгүй үед дэвсгэр ногоон болж хувирна.

Би NodeMCU 1.0 (ESP0-12E модуль) дээр ажиллах болно. Энэ төслийн код нь бусад төхөөрөмж дээр ажиллах боломжтой (жишээлбэл Arduino самбар). Энэхүү төсөл нь ANWB -ийн замын хөдөлгөөний талаархи Голландын эх сурвалжид үндэслэсэн болно.

Энэ төсөлд бидэнд хэрэгтэй зүйл:

- NodeMCU - Jumper утас - LED гэрэл эсвэл тууз - Аналог мэдрэгч (хөнгөн цагаан тугалган цаас, хөвөн) - Wi -Fi холболт - Doormat

Бидний хийх ёстой алхамууд:

1. NodeMCu-г Wi-Fi-д холбох 2. ANWB.nl-с HTTPS-ээр өгөгдөл хүсэх 3. Өгөгдлийг ашиглах боломжтой болгох

Алхам 1: NodeMCU-ийг Wi-Fi-д холбоно уу

Энэ алхам нь төхөөрөмж интернетэд холбогдсон эсэхийг шалгахын тулд амжилттай HTTPSR хүсэлт хэрхэн хийхийг харуулах болно.

Эхлээд ESP8266 номын санг Arduino IDE -д суулгана уу. ESP8266> HTTPSRequest жишээнээс нээнэ үү.

Доор үзүүлсэн шиг кодынхоо дээд хэсэгт Wi-Fi итгэмжлэлээ бөглөнө үү.

const char* ssid = "YOUR_SSID";

const char* password = "YOUR_PASS";

Кодыг төхөөрөмждөө оруулаад NodeMCU интернетэд холбогдсон эсэхийг шалгана уу. HTTPSRequest жишээ нь мэдээлэл авахын тулд Github -ийг анхдагч байдлаар ашигладаг. HTTPSRequest амжилттай болсны дараа та Github өгөгдлийг цуваа дэлгэц дээр хүлээн авна.

Алхам 2: HTTPS -аас ANWB.nl -аас өгөгдөл хүсэх

Энэ хоёр дахь алхамд та өгөгдлийн эх сурвалжийг анхдагч төслөөс энэ төсөлд шаардлагатай эх сурвалж болгон өөрчилж болно: ANWB.nl.

Кодынхоо дээд хэсэгт char* хостыг www.anwb.nl (эсвэл өгөгдлөө авахыг хүссэн өөр эх сурвалж) болгож өөрчилнө үү.

const char* хост = "www.anwb.nl";!! Хэрэв та өөр эх сурвалж ашиглавал 3 -р алхам нь миний кодоос өөр байх болно. 3 -р алхам нь ашиглах боломжтой мэдээллийг авахын тулд тусгай кодчилол шаарддаг!

Дараа нь функцын тохиргооны мөрийн url -ийг "/feed/gethf" болгож өөрчилнө үү.

String url = "/feeds/gethf";!! Хэрэв та өөр эх сурвалж ашиглаж байгаа бол эх сурвалж руугаа хүрэх замыг ашиглаарай!

Та кодыг байршуулахдаа www.anwb.nl/feeds/gethf хаягаас авсан бүх өгөгдлийг агуулсан хариу авах ёстой. Энэ кодыг мөр гэж нэрлэдэг мөрөнд хадгална.

Алхам 3: Өгөгдлийг ашиглах боломжтой мэдээлэл болгох

Одоогийн байдлаар код нь NodeMCU -ийг эхлүүлэх эсвэл дахин тохируулах үед л ажилладаг байсан, учир нь бүх код нь тохиргооны функцэд байдаг. Кодыг тасралтгүй ажиллуулах гохыг тохируулахын тулд та HTTPS хүсэлтийг ажиллуулдаг кодын байрлалыг өөрчлөх ёстой. Давталтын функцын доор та өөр функц нэмнэ. Би үүнийг хүчингүй extractData гэж нэрлэсэн.

extractData () {

}

Тохируулах функцээс кодын хэсгийг extractData () руу хуулж ав. Тохируулах функцийг дуустал дараах мөрийг эхлүүлнэ үү.

if (! client.connect (host, Код одоо таны шинэ функцэд байгаа тул тохируулсан функцээс хуулсан кодыг устгаарай.

Дараа нь давталтын функц дахь extractData функцийг дуудаж, nodeMCU -д амрах хугацааг өгөхийн тулд бага зэрэг хойшлуулна уу.

void loop () {

extractData (); саатал (30000); // дараа нь аналог мэдрэгчтэй бол үүнийг устгах болно}

Хүлээн авсан өгөгдөл нь мөрөнд хадгалагддаг бөгөөд зөвхөн энэ мөрийн хэсэг шаардлагатай байдаг тул та гогцоонд зориулж хэд хэдэн хос бичих ёстой.

Нэгдүгээрт, "зам" гэдэг үгийн бүх байрлалыг шалгана уу. "Зам" гэдэг үгийн дараа замын нэрийг дагах болно (A1, A2 гэх мэт).

For гогцоо бичиж эхлэхээсээ өмнө та ашиглах гэж буй зарим хувьсагчаа зарлах ёстой.

int noOfPos = 0;

boolean hasRunOnce = худал; int = 0 -ээс; int roadArray [20];

Одоо хэдэн гогцоо бичих цаг болжээ. Би extractData функцын ёроолд for loops гэж бичсэн. Би үүнийг тусдаа функц болгон хуваахыг оролдсон боловч үүнийг ажиллуулж чадсангүй.

1 -р давталтын хувьд: мөрийн мөр дэх зам гэдэг үгийн байрлалыг олоорой.

for (int i = 0; i <line.length (); i ++) {int pos = line.indexOf ("road \": ", from); roadArray [noOfPos] = pos; noOfPos+= 1; from = pos + 1; if (hasRunOnce == true && pos == line.indexOf ("road \": ")) {i = line.length (); } hasRunOnce = үнэн; }

Дараа нь дээрээс нь for гогцооны байрлалыг ашиглан ямар замд түгжрэл үүсч байгааг шалгаарай. Замын нэрсийн байрлал үргэлж ижил байдаг бөгөөд зам гэсэн үгийн дараа 7 тэмдэгтээс эхэлж 10 тэмдэгтээр төгсдөг.

Одоо бид nameOfRoadArray массивыг тодорхойлж байгаа бөгөөд үүнийг дараагийн давталтад бөглөх болно.

String nameOfRoadArray [20];

2 -р давталтын хувьд: for no loop -аас оруулсан замын бүх нэрийг олоорой. 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); }

OFRoudArray массивыг бүх түгжрэлийн дохиогоор дүүргэх ёстой.

Дараа нь, таны зам түгжрэл ихтэй замд байгаа эсэхийг шалгах гэж байна. Замыг өгөгдөлд оруулахын тулдOfRoadArray нэрийг хэвлэ. Үүнийг Serial.println (nameOfRoadArray [k]) нэмж оруулна уу; давталтын хувьд 2 -р байранд орно:

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

Хэрэв зөв бол та түгжрэл бүхий бүх замыг цуваа дэлгэц дээр харах болно.

Сүүлийн For гогцоог бичихээс өмнө логикийг дэлхийн хувьсагч гэж зарлах ёстой. TrafficJam гэж нэрлэгддэг логик утга нь анхдагчаар худал бөгөөд хэрэв түгжигдэхийн тулд extractData функц үнэн болж буцаагдах юм бол өөрчлөгдөх болно. Дараах код нь.ino файлын дээд талд байна.

boolean trafficJam = худал;

3 -р давталтын хувьд: Энэ тохиолдолд A1 зам нь замын түгжрэлийн жагсаалтад байгаа эсэхийг шалгаарай.

for (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// A1 -ийг өөрийн хүссэн зам болгон өөрчилнө үү trafficJam = үнэн;}

Хэрэв та цуваа дэлгэц дээр trafficJam -ийг хэвлэвэл A1 дээр түгжрэл байгаа эсэхийг мэдэх боломжтой.

Энэ кодыг extractData функцын доод хэсэгт оруулна уу.

Serial.println (trafficJam); // замын түгжрэл байгаа эсэхийг үзээрэй

Энэхүү мэдээллийн тусламжтайгаар бид 5 -р алхам дахь системийн санал хүсэлтийн талаар цаашид ажиллах болно.

Алхам 4: Trigger -ийг суулгана уу

Trigger -ийг суулгана уу
Trigger -ийг суулгана уу
Trigger -ийг суулгана уу
Trigger -ийг суулгана уу
Trigger -ийг суулгана уу
Trigger -ийг суулгана уу

Бид одоо өгөгдлийг эх сурвалжаас амжилттай авах боломжтой болсон тул nodeMCU -ийг extractData функцийг ажиллуулах мэдрэгчийг бүтээх цаг болжээ. Би хаалганы дэвсгэрээс аналог мэдрэгч хийхээр шийдсэн. Та өөр мэдрэгч ашиглан гохыг өөрчилж болно.

Аналог мэдрэгчийг бий болгох

Би 2 ширхэг хөнгөн цагаан тугалган цаас, хоёр холбогч утас, хөвөн ашигласан.

Хөвөн нүх өрөмдөхөд хөнгөн цагаан тугалган цаас холбоо барих газар юм. Хөнгөн цагаан тугалган цаасыг хөвөнгийн хоёр талд наа. Хөнгөн цагаан тугалган цаас руу холбогч утсыг холбоно уу. Холбогч утсыг nodeMCU руу холбоно уу. Нэг тал нь A0 зүү, нөгөө тал нь V3 зүү. Хөвөн даавуугаа даавуун дэвсгэрийнхээ доор тавь, та дөнгөж сольж байна. Гайхалтай!

Мэдрэгчээс утгыг унших код нь хэн нэгэн хаалганы дэвсгэр дээр зогсож байгаа эсэхийг харах болно.

int sensorValue = analogRead (A0);

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

Хөнгөн цагаан тугалган цаас холбоо барих үед (хэн нэгэн дэвсгэр дээр зогсож байх үед), sensorValue нь 1024. Үүний үр дүнд extractData () функцийг ажиллуулах болно. Тэгээд яг энэ системийг бид хийхийг хүсч байна.

Алхам 5: Дизайн санал хүсэлт

Би LED зурвас ашиглан хэрэглэгчдэд санал хүсэлтээ өгсөн. Замын түгжрэл үүсэхэд гэрэл улаан өнгөтэй болно. Зам сайн явахад ногоон өнгөтэй болно. Би LED зурвасыг хянахын тулд adafruit неопикселийн номын санг ашигласан.

LED зурвас тодорхойлогдсон эсэхийг шалгахын тулд энэ кодыг файлынхаа дээд хэсэгт бичнэ үү.

#оруулах

#PIXEL_PIN D5 тодорхойлох #PIXEL_COUNT 10 #тодорхойлох PIXEL_TYPE NEO_GRB + NEO_KHZ800 Adafruit_NeoPixel пиксел = Adafruit_NeoPixel (PIXEL_COUNT, PIXEL_PIN, PIXEL_TYP;

Дараах кодыг тохируулах функцэд бичнэ үү.

// неопиксел

пиксел.begin (); пиксел.шоу ();

Мөн давталтын функцэд дараах код байна:

if (trafficJam == үнэн) {

for (int i; i <PIXEL_COUNT; i ++) {piksel.setPixelColor (i, 255, 0, 0); // улаан пиксел.show (); саатал (200); }} өөр {for (int i; i <PIXEL_COUNT; i ++) {piksel.setPixelColor (i, 0, 255, 0); // ногоон пикселүүд.show (); саатал (200); }

Дээрх кодонд if/else функц байдаг. ExtractData функц нь түгжрэл байгаа эсэхийг буцаахад LED зурвас улаан болж хувирна. Үгүй бол LED зурвас ногоон болж хувирна.

Алхам 6: Кодыг ажиллуулна уу

Хэрэв бид одоо бүрэн кодыг ажиллуулж байвал мэдрэгч, гэрэл ажиллах ёстой. Та хаалганы дэвсгэр дээр зогсоход мэдрэгч холбогдох бөгөөд extractData функц ажиллах болно. Замын нэрсийн жагсаалтад бидний хайж буй зам байгаа үед LED зурвас улаан болж, замын түгжрэлийг илтгэнэ. Хэрэв энэ нь массивт байхгүй бол LED зурвас ногоон болж, та явахдаа сайн гэдгээ мэдэж байна!

Аюулгүй аялаарай, уншсан танд баярлалаа. Та ямар нэгэн урам зориг эсвэл мэдээлэл олж авсан гэж найдаж байна. Хэрэв танд санал хүсэлт байгаа бол хариулахаас бүү эргэлзээрэй!

Зөвлөмж болгож буй: