תוכן עניינים:

בדיקת דוח תנועה (NL) עם שטיח לדלת: 6 שלבים
בדיקת דוח תנועה (NL) עם שטיח לדלת: 6 שלבים

וִידֵאוֹ: בדיקת דוח תנועה (NL) עם שטיח לדלת: 6 שלבים

וִידֵאוֹ: בדיקת דוח תנועה (NL) עם שטיח לדלת: 6 שלבים
וִידֵאוֹ: החיים שלי, תוניסיה שלי - ספר שמע שלם בצרפתית 2024, יולי
Anonim
בדיקת דוח תנועה (NL) עם מחצלת דלתות
בדיקת דוח תנועה (NL) עם מחצלת דלתות

במדריך זה אתאר כיצד בונים שטיח שיבדוק דיווחי תנועה של כבישים מהירים בהולנד. ברגע שאתה יוצא החוצה על מחצלת הדלת שלך ויש פקק במסלול שלך, המחצלת תהפוך לצבע אדום. כשאין פקק, המחצלת תהפוך לירוקה.

אני אעבוד על NodeMCU 1.0 (מודול ESP0-12E). הקוד לפרויקט זה יכול לעבוד גם במכשירים אחרים (למשל לוחות Arduino). פרויקט זה מבוסס על מקור הולנדי לדוחות תנועה, ANWB.

מה אנחנו צריכים לפרויקט הזה:

- NodeMCU - חוטי מגשר - נורת LED או רצועה - חיישן אנלוגי (רדיד אלומיניום, ספוג) - חיבור Wi -Fi - שטיח לדלת

צעדים שעלינו לנקוט:

1. חבר את NodeMCu ל- Wi-Fi 2. בקש נתונים באמצעות HTTPS מאת ANWB.nl 3. הפוך נתונים למידע שמיש 4. התקן את ההדק 5. עיצוב משוב

שלב 1: חבר את NodeMCU ל- Wi-Fi

שלב זה יראה כיצד לבצע HTTPSRequest מוצלח כדי לראות אם המכשיר מחובר לאינטרנט.

ראשית, התקן את ספריית ESP8266 ב- Arduino IDE. פתח מדוגמאות ESP8266>

מלא את פרטי הכניסה שלך ל- 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* host = "www.anwb.nl";!! אם אתה משתמש במקור אחר, שלב 3 יהיה שונה מהקוד שלי. שלב 3 זקוק לקידוד ספציפי כדי לאחזר מידע שמיש!

לאחר מכן, שנה את כתובת האתר של המחרוזת בהגדרת הפונקציה ל "/feeds/gethf", הנתיב שממנו המידע נלקח:

URL url = "/feeds/gethf";!! אם אתה משתמש במקור אחר השתמש בנתיב למקור שלך!

כאשר אתה מעלה את הקוד אתה אמור לקבל תגובה עם כל הנתונים מאת www.anwb.nl/feeds/gethf. קוד זה נשמר במחרוזת הנקראת line.

שלב 3: הפוך נתונים למידע שמיש

עד כה, הקוד פעל רק כאשר הופעל או איפס את NodeMCU, מכיוון שכל הקוד נמצא בפונקציית ההתקנה. כדי להגדיר את הטריגר להפעלת הקוד ברציפות, עליך לשנות את מיקום הקוד המפעיל את בקשת HTTPS. מתחת לפונקציית הלולאה, אתה מוסיף פונקציה נוספת. קראתי לזה void extractData:

extractData () {

}

העתק חלק מהקוד מפונקציית ההתקנה אל extractData (). התחל בשורה הבאה עד לסיום פונקציית ההגדרה:

אם (! client.connect (מארח, הקוד נמצא כעת בפונקציה החדשה שלך, לכן הסר את הקוד שהועתק מפונקציית ההתקנה.

לאחר מכן, התקשר לפונקציית extractData בפונקציית הלולאה והוסף עיכוב כלשהו על מנת לתת ל- nodeMCU זמן לנוח:

לולאת חלל () {

extractData (); עיכוב (30000); // זה יוסר מאוחר יותר כאשר יהיה לנו חיישן אנלוגי}

מכיוון שהנתונים שאתה מקבל מאוחסנים במחרוזת ונדרשים רק חלקים מהמחרוזת הזו, עליך לכתוב כמה לולאות.

ראשית, בדוק את כל המיקומים של המילה 'כביש'. אחרי המילה 'כביש' יופיע שם הכביש (A1, A2 וכו ').

לפני שתתחיל לכתוב את לולאות ה- for, עליך להצהיר על כמה משתנים שאתה עומד להשתמש בהם:

int noOfPos = 0;

hasRunOnce בוליאני = false; int מ = 0; int roadArray [20];

עכשיו הגיע הזמן לכתוב כמה לולאות. כתבתי את הלולאות for בתחתית הפונקציה extractData. ניסיתי לחלק אותו לפונקציות נפרדות, אך לא הצלחתי לגרום לזה לעבוד.

ללולאה מס '1: מצא את מיקומי המילה כביש בשורת המחרוזת:

for (int i = 0; i <line.length (); i ++) {int pos = line.indexOf ("כביש \": ", מ); roadArray [noOfPos] = pos; noOfPos+= 1; מ = pos + 1; אם (hasRunOnce == true && pos == line.indexOf ("כביש \": ")) {i = line.length (); } hasRunOnce = true; }

לאחר מכן, בדוק באילו כבישים יש פקק על ידי שימוש במיקומי לולאת ה- for מלמעלה. מיקום שם הכבישים תמיד זהה ומתחילים 7 תווים ומסתיימים 10 תווים אחרי המילה כביש.

כעת אנו מגדירים את שם המערךOfRoadArray, אשר ימולא בלולאה הבאה:

שם המחרוזתOfRoadArray [20];

ללולאה מס '2: מצא את כל שמות הכבישים עם הקלט מלופ מס'. 1

עבור (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 בכל הפקקים המסומנים.

לאחר מכן, אתה הולך לבדוק אם הכביש שלך נמצא במערך הכבישים עם פקק. הדפס את nameOfRoadArray כדי לקבל את הכבישים בנתונים. בצע זאת על ידי הוספת Serial.println (nameOfRoadArray [k]); לתוך הלולאה השנייה כמו:

עבור (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:

trafficjam boolean = false;

ללולאה מס '3: בדוק אם הכביש, במקרה זה A1, נמצא ברשימת הפקקים.

עבור (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// שנה את A1 לכביש העדיף עליך trafficJam = true;}

אם אתה מדפיס trafficJam במסך הטורי, אתה יודע אם יש פקק על A1 או לא.

שים את הקוד הזה בתחתית הפונקציה extractData:

Serial.println (trafficJam); // לבדוק אם יש פקק

עם מידע זה אנו הולכים לעבוד הלאה על המשוב של המערכת בשלב 5.

שלב 4: התקן את ההדק

התקן את ההדק
התקן את ההדק
התקן את ההדק
התקן את ההדק
התקן את ההדק
התקן את ההדק

מכיוון שאנו יכולים כעת לאחזר את הנתונים בהצלחה מהמקור, הגיע הזמן לבנות חיישן שיפעיל את הצומת MCU להפעלת הפונקציה extractData. בחרתי ליצור חיישן אנלוגי מחצלת הדלת שלי. תוכל לשנות את ההדק באמצעות חיישן אחר.

בניית החיישן האנלוגי

השתמשתי ב -2 חתיכות של רדיד אלומיניום, שני חוטי מגשר וספוג.

לקדוח חור בספוג, זה המקום שבו רדיד האלומיניום ייצור מגע. הדביקו רדיד אלומיניום משני צידי הספוג. חבר את חוטי המגשר לרדיד האלומיניום. חבר את חוטי המגשר לצומת ה- MCU. צד אחד לסיכה A0 והשני לסיכה V3. שים את הספוג מתחת לשטיפת הדלת שלך והרגע שינית את מחצלת הדלת שלך לחיישן. מדהים!

הקוד לקריאת ערך מהחיישן כדי לראות אם מישהו עומד על השטיח:

int sensorValue = analogRead (A0);

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

כאשר רדיד האלומיניום יוצר מגע (כאשר מישהו עומד על המזרן), sensorValue הוא 1024. התוצאה היא ירי פונקציה extractData (). וזה בדיוק מה שאנחנו רוצים שהמערכת תעשה.

שלב 5: משוב עיצובי

השתמשתי ב- LEDstrip כדי לתת משוב למשתמש. כאשר יש פקק, האור יצבע אדום. כשהכביש טוב ללכת הוא יהפוך לירוק. השתמשתי בספריית neopixel adafruit כדי לשלוט ברצועת ה- LED שלי.

כתוב את הקוד הזה בראש הקובץ כדי לוודא ש- LEDstrip מוגדר:

#לִכלוֹל

#הגדר PIXEL_PIN D5 #הגדר PIXEL_COUNT 10 #הגדר PIXEL_TYPE NEO_GRB + NEO_KHZ800 Adafruit_NeoPixel פיקסלים = Adafruit_NeoPixel (PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);

כתוב את הקוד הבא בפונקציית ההתקנה:

// ניאופיקסל

פיקסלים.התחל (); pixels.show ();

והקוד הבא בפונקציית הלולאה:

אם (trafficJam == true) {

עבור (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 255, 0, 0); // פיקסלים אדומים. הצג (); עיכוב (200); }} else {for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 0, 255, 0); // פיקסלים ירוקים. הצג (); עיכוב (200); }

בקוד למעלה יש פונקציה אם/אחרת. כאשר הפונקציה extractData מחזירה את נוכחות פקק תנועה ה- LED יהפוך לאדום. אם לא, פס ה- LED יהפוך לירוק.

שלב 6: הפעל את הקוד

אם נפעיל את הקוד המלא כעת, החיישן והאור אמורים לפעול. כאשר אתה עומד על שטיח הדלת, החיישן יתחבר ופונקציית extractData תפעל. כאשר במערך שמות הדרכים, הכביש אותו אנו מחפשים קיים, פס ה- LED יהפוך לאדום, ויסמן פקק תנועה. אם זה לא במערך, ה- LEDstrip יהפוך לירוק ואתה יודע שאתה טוב ללכת!

נסיעה בטוחה ותודה על הקריאה. אני מקווה שמצאת קצת השראה או מידע. אם קיבלת קצת משוב, אל תהסס להגיב!

מוּמלָץ: