สารบัญ:

ตรวจรายงานจราจร (NL) พร้อมพรมเช็ดเท้า: 6 ขั้นตอน
ตรวจรายงานจราจร (NL) พร้อมพรมเช็ดเท้า: 6 ขั้นตอน

วีดีโอ: ตรวจรายงานจราจร (NL) พร้อมพรมเช็ดเท้า: 6 ขั้นตอน

วีดีโอ: ตรวจรายงานจราจร (NL) พร้อมพรมเช็ดเท้า: 6 ขั้นตอน
วีดีโอ: โชว์เน้นๆหนุ่มยศเต็มอก ที่แท้ตร.จริงฝ่าหลักสูตรโคตรหินปลื้มหนักต้องสักให้โลกรู้|ทุบโต๊ะข่าว|18/05/65 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* = "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 จะเปลี่ยนเป็นสีเขียว และคุณรู้ว่าพร้อมแล้ว!

ขอให้เดินทางโดยสวัสดิภาพและขอบคุณสำหรับการอ่าน ฉันหวังว่าคุณจะพบแรงบันดาลใจหรือข้อมูลบางอย่าง หากคุณมีข้อเสนอแนะโปรดตอบกลับ!

แนะนำ: