สารบัญ:
- ขั้นตอนที่ 1: เชื่อมต่อ NodeMCU กับ Wi-Fi
- ขั้นตอนที่ 2: ขอข้อมูลจาก HTTPS จาก ANWB.nl
- ขั้นตอนที่ 3: เปลี่ยนข้อมูลให้เป็นข้อมูลที่ใช้งานได้
- ขั้นตอนที่ 4: ติดตั้ง Trigger
- ขั้นตอนที่ 5: คำติชมการออกแบบ
- ขั้นตอนที่ 6: เรียกใช้รหัส
วีดีโอ: ตรวจรายงานจราจร (NL) พร้อมพรมเช็ดเท้า: 6 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:06
ในคำแนะนำนี้ ฉันจะอธิบายวิธีสร้างพรมเช็ดเท้าที่จะตรวจสอบรายงานการจราจรของทางหลวงดัตช์ เมื่อคุณก้าวออกไปข้างนอกด้วยพรมเช็ดเท้าและรถติดบนเส้นทางของคุณ พรมจะกลายเป็นสีแดง เมื่อไม่มีรถติด พรมจะกลายเป็นสีเขียว
ฉันจะทำงานกับ 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* = "YOUR_PASS";
อัปโหลดรหัสไปยังอุปกรณ์ของคุณและตรวจสอบว่า NodeMCU กำลังเชื่อมต่อกับอินเทอร์เน็ตหรือไม่ ตัวอย่าง HTTPSRequest ใช้ Github เป็นค่าเริ่มต้นในการรับข้อมูลจาก เมื่อ HTTPSRequest สำเร็จ คุณจะได้รับข้อมูล Github ในมอนิเตอร์แบบอนุกรม
ขั้นตอนที่ 2: ขอข้อมูลจาก HTTPS จาก ANWB.nl
ในขั้นตอนที่สองนี้ คุณเปลี่ยนแหล่งข้อมูลจากค่าเริ่มต้นเป็นแหล่งข้อมูลที่จำเป็นสำหรับโครงการนี้: ANWB.nl
ที่ด้านบนสุดของโค้ดของคุณ ให้เปลี่ยน char* host เป็น www.anwb.nl (หรือแหล่งอื่นที่คุณต้องการรับข้อมูล):
const char* host = "www.anwb.nl";!! หากคุณใช้แหล่งอื่น ขั้นตอนที่ 3 จะแตกต่างจากรหัสของฉัน ขั้นตอนที่ 3 ต้องการการเข้ารหัสเฉพาะเพื่อดึงข้อมูลที่ใช้งานได้ !
ถัดไป เปลี่ยน URL สตริงในการตั้งค่าฟังก์ชันเป็น "/feeds/getf" ซึ่งเป็นเส้นทางที่นำข้อมูลมาจาก:
URL สตริง = "/feeds/getf";!! หากคุณใช้แหล่งอื่น ให้ใช้เส้นทางไปยังแหล่งที่มาของคุณ !
เมื่อคุณอัปโหลดโค้ด คุณควรได้รับการตอบกลับพร้อมข้อมูลทั้งหมดจาก www.anwb.nl/feeds/gethf รหัสนี้ถูกบันทึกลงในสตริงที่เรียกว่าบรรทัด
ขั้นตอนที่ 3: เปลี่ยนข้อมูลให้เป็นข้อมูลที่ใช้งานได้
จนถึงขณะนี้ โค้ดจะทำงานเฉพาะเมื่อมีการเริ่มต้นหรือรีเซ็ต NodeMCU เนื่องจากโค้ดทั้งหมดอยู่ในฟังก์ชันการตั้งค่า ในการตั้งค่าทริกเกอร์ให้เรียกใช้โค้ดอย่างต่อเนื่อง คุณต้องเปลี่ยนตำแหน่งของโค้ดที่เรียกใช้คำขอ HTTPS ด้านล่างฟังก์ชันวนซ้ำ คุณเพิ่มฟังก์ชันอื่น ฉันเรียกว่าเป็นโมฆะ extractData:
ดึงข้อมูล(){
}
คัดลอกโค้ดบางส่วนจากฟังก์ชันการตั้งค่าไปยัง extractData() เริ่มต้นด้วยบรรทัดต่อไปนี้จนกระทั่งสิ้นสุดฟังก์ชันการตั้งค่า:
ถ้า (!client.connect(host, ตอนนี้โค้ดอยู่ในฟังก์ชันใหม่ของคุณแล้ว ดังนั้นให้ลบโค้ดที่คัดลอกออกจากฟังก์ชันการตั้งค่า
ถัดไป เรียกใช้ฟังก์ชัน extractData ในฟังก์ชันลูปและเพิ่มการหน่วงเวลาเพื่อให้ nodeMCU มีเวลาพัก:
วงเป็นโมฆะ (){
extractData(); ล่าช้า (30000); // สิ่งนี้จะถูกลบออกในภายหลังเมื่อเรามีเซ็นเซอร์อะนาล็อก }
เนื่องจากข้อมูลที่คุณได้รับจะถูกเก็บไว้ในสตริงและจำเป็นต้องใช้เฉพาะบางส่วนของสตริงนี้ คุณต้องเขียนลูปสองสามอัน
ขั้นแรก ตรวจสอบตำแหน่งทั้งหมดของคำว่า 'ถนน' หลังคำว่า 'ถนน' ชื่อของถนนจะตามมา (A1, A2 ฯลฯ)
ก่อนเริ่มเขียน for loops คุณต้องประกาศตัวแปรบางตัวที่คุณจะใช้:
int noOfPos = 0;
hasRunOnce บูลีน = false; int จาก = 0; int roadArray[20];
ตอนนี้ได้เวลาเขียนลูปแล้ว ฉันได้เขียน for loops ที่ด้านล่างของฟังก์ชัน extractData ฉันพยายามแบ่งออกเป็นฟังก์ชันต่างๆ แต่ใช้งานไม่ได้
สำหรับวงที่ 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 ซึ่งจะถูกเติมในลูปถัดไป:
สตริง nameOfRoadArray[20];
สำหรับวงที่ 2: ค้นหาชื่อถนนทั้งหมดที่มีการป้อนข้อมูลจาก for loop no. 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]); ที่ 2 สำหรับลูปเช่น:
สำหรับ (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 loop สุดท้าย คุณต้องประกาศบูลีนเป็นตัวแปรส่วนกลาง บูลีนที่เรียกว่า trafficJam นั้นเป็นเท็จโดยค่าเริ่มต้น และจะเปลี่ยนแปลงหากฟังก์ชัน extractData จะคืนค่าเป็น true สำหรับการรับส่งข้อมูลที่ติดขัด รหัสต่อไปนี้จะอยู่ด้านบนของไฟล์.ino:
บูลีน trafficJam = false;
สำหรับวงที่ 3: ตรวจสอบว่าถนน ในกรณีนี้ A1 อยู่ในรายการรถติดหรือไม่
for(int l=0; l < 20; l++){ if(nameOfRoadArray[l] == "A1\""){ //เปลี่ยน A1 เป็นถนนที่คุณโปรดปราน TrafficJam = true; }
หากคุณพิมพ์ trafficJam ในจอภาพแบบอนุกรม คุณจะรู้ว่า A1 มีการจราจรติดขัดหรือไม่
วางรหัสนี้ที่ด้านล่างของฟังก์ชัน extractData:
Serial.println(การจราจรติดขัด); //ดูว่ารถติดหรือเปล่า
ด้วยข้อมูลนี้ เราจะดำเนินการเพิ่มเติมเกี่ยวกับข้อเสนอแนะของระบบในขั้นตอนที่ 5
ขั้นตอนที่ 4: ติดตั้ง Trigger
เนื่องจากตอนนี้เราสามารถดึงข้อมูลจากต้นทางได้สำเร็จ จึงถึงเวลาสร้างเซ็นเซอร์ที่จะทริกเกอร์ nodeMCU เพื่อเรียกใช้ฟังก์ชัน extractData ฉันเลือกทำเซ็นเซอร์อะนาล็อกจากพรมเช็ดเท้าของฉัน คุณสามารถเปลี่ยนทริกเกอร์ได้โดยใช้เซ็นเซอร์อื่น
การสร้างเซ็นเซอร์อนาล็อก
ฉันใช้ฟอยล์อลูมิเนียม 2 ชิ้น สายจัมเปอร์สองเส้น และฟองน้ำหนึ่งเส้น
เจาะรูในฟองน้ำ ซึ่งเป็นที่ที่แผ่นอลูมิเนียมจะสัมผัสกัน กาวอลูมิเนียมฟอยล์ทั้งสองด้านของฟองน้ำ ต่อสายจัมเปอร์กับอลูมิเนียมฟอยล์ ต่อสายจัมเปอร์เข้ากับ nodeMCU ด้านหนึ่งเป็นพิน A0 และอีกด้านหนึ่งเป็นพิน V3 วางฟองน้ำไว้ใต้พรมเช็ดเท้า และคุณเพิ่งเปลี่ยนพรมเช็ดเท้าเป็นเซ็นเซอร์ สุดยอด!
รหัสสำหรับอ่านค่าจากเซ็นเซอร์เพื่อดูว่ามีใครยืนอยู่บนพรมเช็ดเท้าหรือไม่:
int sensorValue = analogRead (A0);
ถ้า (sensorValue == 1024){ extractData(); }
เมื่ออลูมิเนียมฟอยล์สัมผัสกัน (เมื่อมีคนยืนอยู่บนเสื่อ) ค่าเซ็นเซอร์คือ 1024 ซึ่งส่งผลให้ฟังก์ชัน extractData() เริ่มทำงาน และนั่นคือสิ่งที่เราต้องการให้ระบบทำ
ขั้นตอนที่ 5: คำติชมการออกแบบ
ฉันใช้แถบ LED เพื่อให้ข้อเสนอแนะแก่ผู้ใช้ เวลารถติดไฟจะเป็นสีแดง เมื่อทางดีไปก็จะเปลี่ยนเป็นสีเขียว ฉันใช้ไลบรารี่ adafruit neopixel เพื่อควบคุม LEDstrip ของฉัน
เขียนโค้ดนี้ที่ด้านบนของไฟล์เพื่อให้แน่ใจว่ามีการกำหนดแถบ LED:
#รวม
#define PIXEL_PIN D5 #define PIXEL_COUNT 10 #define PIXEL_TYPE NEO_GRB + NEO_KHZ800 Adafruit_NeoPixel พิกเซล = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);
เขียนโค้ดถัดไปในฟังก์ชันการตั้งค่า:
//neopixel
พิกเซล.begin(); พิกเซล.show();
และโค้ดต่อไปนี้ในฟังก์ชันลูป:
ถ้า (trafficJam == จริง){
สำหรับ (int i; i < PIXEL_COUNT; i++) { pixels.setPixelColor(i, 255, 0, 0); // พิกเซลสีแดง.show(); ล่าช้า(200); } } อื่น ๆ { สำหรับ (int i; i < PIXEL_COUNT; i++) { pixels.setPixelColor(i, 0, 255, 0); // พิกเซลสีเขียว.show(); ล่าช้า(200); }
ในโค้ดด้านบนมีฟังก์ชัน if/else เมื่อฟังก์ชัน extractData ส่งคืนการมีอยู่ของการจราจรติดขัด LEDstrip จะเปลี่ยนเป็นสีแดง หากไม่เป็นเช่นนั้น แถบ LED จะเปลี่ยนเป็นสีเขียว
ขั้นตอนที่ 6: เรียกใช้รหัส
หากเรารันโค้ดทั้งหมดตอนนี้ เซ็นเซอร์และไฟควรทำงาน เมื่อคุณยืนบนพรมเช็ดเท้า เซ็นเซอร์จะเชื่อมต่อและฟังก์ชัน extractData จะทำงาน เมื่ออยู่ในแถวชื่อถนน ถนนที่เรากำลังมองหาอยู่นั้น แถบ LED จะเปลี่ยนเป็นสีแดง ซึ่งเป็นสัญญาณว่ารถติด หากไม่ได้อยู่ในอาร์เรย์ แถบ LED จะเปลี่ยนเป็นสีเขียว และคุณรู้ว่าพร้อมแล้ว!
ขอให้เดินทางโดยสวัสดิภาพและขอบคุณสำหรับการอ่าน ฉันหวังว่าคุณจะพบแรงบันดาลใจหรือข้อมูลบางอย่าง หากคุณมีข้อเสนอแนะโปรดตอบกลับ!
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: 3 ขั้นตอน
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: ในคำแนะนำนี้ เราจะทำการตรวจจับใบหน้าบน Raspberry Pi 4 ด้วย Shunya O/S โดยใช้ Shunyaface Library Shunyaface เป็นห้องสมุดจดจำใบหน้า/ตรวจจับใบหน้า โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้เกิดความเร็วในการตรวจจับและจดจำได้เร็วที่สุดด้วย
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: 3 ขั้นตอน
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: ในบทช่วยสอนนี้ ฉันจะแสดงขั้นตอนสำคัญในการติดตั้งปลั๊กอิน WordPress ให้กับเว็บไซต์ของคุณ โดยทั่วไป คุณสามารถติดตั้งปลั๊กอินได้สองวิธี วิธีแรกคือผ่าน ftp หรือผ่าน cpanel แต่ฉันจะไม่แสดงมันเพราะมันสอดคล้องกับ
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): 8 ขั้นตอน
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): ตัวแปลงสัญญาณเสียงล้ำเสียง L298N Dc ตัวเมียอะแดปเตอร์จ่ายไฟพร้อมขา DC ตัวผู้ Arduino UNOBreadboardวิธีการทำงาน: ก่อนอื่น คุณอัปโหลดรหัสไปยัง Arduino Uno (เป็นไมโครคอนโทรลเลอร์ที่ติดตั้งดิจิตอล และพอร์ตแอนะล็อกเพื่อแปลงรหัส (C++)
เครื่อง Rube Goldberg 11 ขั้นตอน: 8 ขั้นตอน
เครื่อง 11 Step Rube Goldberg: โครงการนี้เป็นเครื่อง 11 Step Rube Goldberg ซึ่งออกแบบมาเพื่อสร้างงานง่ายๆ ในรูปแบบที่ซับซ้อน งานของโครงการนี้คือการจับสบู่ก้อนหนึ่ง