جدول المحتويات:
- الخطوة 1: قم بتوصيل NodeMCU بشبكة Wi-Fi
- الخطوة 2: طلب البيانات من HTTPS من ANWB.nl
- الخطوة 3: تحويل البيانات إلى معلومات قابلة للاستخدام
- الخطوة 4: قم بتثبيت المشغل
- الخطوة 5: ملاحظات التصميم
- الخطوة 6: قم بتشغيل الكود
فيديو: فحص تقرير حركة المرور (NL) مع ممسحة: 6 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:40
سأصف في هذا الدليل كيفية بناء ممسحة تتحقق من تقارير حركة المرور على الطرق السريعة الهولندية. بمجرد خروجك من ممسحة الأرجل الخاصة بك وكان هناك ازدحام مروري على طريقك ، ستتحول السجادة إلى اللون الأحمر. عندما لا يكون هناك ازدحام مروري ، ستتحول السجادة إلى اللون الأخضر.
سأعمل على 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
ستوضح هذه الخطوة كيفية إجراء طلب HTTPS ناجح لمعرفة ما إذا كان الجهاز متصلاً بالإنترنت.
أولاً ، قم بتثبيت مكتبة ESP8266 في Arduino IDE. افتح من الأمثلة ESP8266>
املأ بيانات اعتماد Wi-Fi أعلى الرمز الخاص بك ، كما هو موضح أدناه:
const char * ssid = "YOUR_SSID" ؛
const char * password = "YOUR_PASS" ؛
قم بتحميل الرمز على جهازك وتحقق مما إذا كان NodeMCU متصل بالإنترنت. يستخدم مثال HTTPSRequest جيثب كافتراضي للحصول على معلومات منه. عند نجاح طلب HTTPS ، تتلقى بيانات Github في الشاشة التسلسلية.
الخطوة 2: طلب البيانات من HTTPS من ANWB.nl
في هذه الخطوة الثانية ، تقوم بتغيير مصدر البيانات من الافتراضي إلى المصدر المطلوب لهذا المشروع: ANWB.nl.
في الجزء العلوي من التعليمات البرمجية ، قم بتغيير مضيف char * إلى www.anwb.nl (أو مصدر آخر ترغب في الحصول على بياناتك منه):
const char * host = "www.anwb.nl" ؛!! إذا كنت تستخدم مصدرًا آخر ، فستكون الخطوة 3 مختلفة عن الكود الخاص بي. تحتاج الخطوة 3 إلى ترميز محدد لاسترداد المعلومات القابلة للاستخدام!
بعد ذلك ، قم بتغيير عنوان url الخاص بالسلسلة في إعداد الوظيفة إلى "/ feeds / gethf" ، المسار الذي يتم أخذ المعلومات منه:
سلسلة url = "/ feeds / gethf" ؛!! إذا كنت تستخدم مصدرًا آخر ، فاستخدم المسار إلى مصدرك!
عند تحميل الكود يجب أن تحصل على رد بجميع البيانات من www.anwb.nl/feeds/gethf. يتم حفظ هذا الرمز في سلسلة تسمى سطر.
الخطوة 3: تحويل البيانات إلى معلومات قابلة للاستخدام
حتى الآن ، تم تشغيل الكود فقط عند بدء تشغيل NodeMCU أو إعادة تعيينه ، لأن كل الكود موجود في وظيفة الإعداد. لتعيين المشغل لتشغيل الكود باستمرار ، يجب عليك تغيير موضع الكود الذي يقوم بتشغيل طلب HTTPS. تحت وظيفة الحلقة ، يمكنك إضافة وظيفة أخرى. لقد أطلقت عليه اسم استخراج باطل:
استخراج البيانات(){
}
انسخ جزءًا من الكود من وظيفة الإعداد إلى extractData (). ابدأ بالسطر التالي حتى نهاية وظيفة الإعداد:
إذا (! client.connect (مضيف ،
أصبح الرمز الآن في وظيفتك الجديدة ، لذا قم بإزالة الرمز المنسوخ من وظيفة الإعداد.
بعد ذلك ، اتصل بوظيفة extractData في وظيفة الحلقة وأضف بعض التأخير لمنح nodeMCU وقتًا للراحة:
حلقة فارغة(){
استخراج البيانات()؛ تأخير (30000) ؛ // ستتم إزالة هذا لاحقًا عندما يكون لدينا مستشعر تناظري}
نظرًا لأن البيانات التي تتلقاها مخزنة في سلسلة ولا يلزم سوى أجزاء من هذه السلسلة ، يجب عليك كتابة بضع حلقات for.
أولاً ، تحقق من جميع مواضع كلمة "طريق". بعد كلمة "طريق" ، سيتبع اسم الطريق (A1 ، A2 ، إلخ).
قبل البدء في كتابة حلقات for ، عليك التصريح ببعض المتغيرات التي ستستخدمها:
عدد int noOfPos = 0 ؛
قيمة منطقية hasRunOnce = خطأ ؛ كثافة العمليات من = 0 ؛ int roadArray [20] ؛
حان الوقت الآن لكتابة بعض الحلقات. لقد كتبت حلقات for في الجزء السفلي من وظيفة extractData. حاولت تقسيمه إلى وظائف منفصلة ، لكنني لم أتمكن من تشغيله.
الحلقة رقم 1: ابحث عن مواضع كلمة road في سطر السلسلة:
لـ (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 أحرف بعد كلمة الطريق.
الآن نحدد اسم المصفوفةOfRoadArray ، والذي سيتم ملؤه في حلقة for التالية:
اسم السلسلةOfRoadArray [20] ،
حلقة For رقم 2: ابحث عن جميع أسماء الطرق مع الإدخال من حلقة for 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]) ؛ في الحلقة الثانية مثل:
لـ (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 = false؛
للحلقة رقم 3: تحقق مما إذا كان الطريق ، في هذه الحالة A1 ، مدرجًا في قائمة الاختناقات المرورية.
لـ (int l = 0؛ l <20؛ l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// قم بتغيير A1 إلى طريق trafficJam المفضل لديك = true؛}
إذا قمت بطباعة trafficJam في الشاشة التسلسلية ، فأنت تعلم ما إذا كان هناك ازدحام مروري على A1 أم لا.
ضع هذا الرمز في أسفل وظيفة extractData:
Serial.println (trafficJam) ؛ // معرفة ما إذا كان هناك ازدحام مروري
باستخدام هذه المعلومات ، سنعمل بشكل أكبر على تعليقات النظام في الخطوة 5.
الخطوة 4: قم بتثبيت المشغل
نظرًا لأنه يمكننا الآن استرداد البيانات بنجاح من المصدر ، فقد حان الوقت لبناء جهاز استشعار يقوم بتشغيل nodeMCU لتشغيل وظيفة extractData. اخترت صنع جهاز استشعار تناظري من ممسحة الأرجل. يمكنك تغيير الزناد باستخدام مستشعر آخر.
بناء جهاز الاستشعار التناظري
لقد استخدمت قطعتين من رقائق الألومنيوم وسلكين توصيل وإسفنجة.
اصنع ثقبًا في الإسفنجة ، هذا هو المكان الذي ستتلامس فيه رقائق الألومنيوم. رقائق الألومنيوم الغراء على جانبي الإسفنج. قم بتوصيل أسلاك العبور بورق الألمنيوم. قم بتوصيل أسلاك العبور إلى nodeMCU. جانب واحد إلى A0-pin والآخر إلى V3-pin. ضع الإسفنجة أسفل ممسحة الباب وقمت للتو بتغيير ممسحة ممسحة الأسنان إلى جهاز استشعار. مذهل!
الكود المطلوب لقراءة القيمة من المستشعر لمعرفة ما إذا كان هناك شخص ما يقف على الممسحة:
int sensorValue = analogRead (A0) ؛
إذا (sensorValue == 1024) {extractData () ؛ }
عندما يتصل ورق الألمنيوم (عندما يقف شخص ما على السجادة) ، تكون قيمة المستشعر 1024. ينتج عن هذا إطلاق وظيفة extractData (). وهذا بالضبط ما نريد أن يفعله النظام.
الخطوة 5: ملاحظات التصميم
لقد استخدمت شريط LED لإعطاء ملاحظات للمستخدم. عندما يكون هناك ازدحام مروري ، سوف يتلون الضوء باللون الأحمر. عندما يكون الطريق على ما يرام ، سيتحول إلى اللون الأخضر. لقد استخدمت مكتبة adafruit neopixel للتحكم في شريط LED الخاص بي.
اكتب هذا الرمز في الجزء العلوي من الملف الخاص بك للتأكد من تعريف شريط LED:
#يشمل
#define PIXEL_PIN D5 #define PIXEL_COUNT 10 #define PIXEL_TYPE NEO_GRB + NEO_KHZ800 Adafruit_NeoPixel pixels = Adafruit_NeoPixel (PIXEL_COUNT، PIXEL_PIN، PIXEL_TYPE) ؛
اكتب الكود التالي في وظيفة الإعداد:
// neopixel
pixels.begin () ، pixels.show () ،
و الكود التالي في وظيفة الحلقة:
إذا (trafficJam == صحيح) {
لـ (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) ؛ }
في الكود أعلاه توجد وظيفة if / else. عندما تقوم دالة extractData بإرجاع وجود ازدحام مروري ، سيتحول شريط LEDstrip إلى اللون الأحمر. إذا لم يكن كذلك ، فسوف يتحول شريط LEDstrip إلى اللون الأخضر.
الخطوة 6: قم بتشغيل الكود
إذا قمنا بتشغيل الكود الكامل الآن ، يجب أن يعمل المستشعر والضوء. عندما تقف على ممسحة الأرجل ، سيتصل المستشعر وستعمل وظيفة extractData. عندما يكون الطريق الذي نبحث عنه موجودًا في مجموعة أسماء الطرق ، سيتحول شريط LED إلى اللون الأحمر ، مما يشير إلى ازدحام مروري. إذا لم يكن موجودًا في المصفوفة ، فسوف يتحول شريط LEDstrip إلى اللون الأخضر وأنت تعلم أنك على ما يرام!
أتمنى لك رحلة آمنة وشكرا على القراءة. أتمنى أن تجد بعض الإلهام أو المعلومات. إذا تلقيت بعض التعليقات ، فلا تتردد في الرد!
موصى به:
الأمن السيبراني المادي لمواقف السيارات الذكية والتحكم في حركة المرور: 6 خطوات
الأمن السيبراني المادي لمواقف السيارات الذكية والتحكم في حركة المرور: ينمو الإنترنت بمليارات الأجهزة بما في ذلك السيارات وأجهزة الاستشعار وأجهزة الكمبيوتر والخوادم والثلاجات والأجهزة المحمولة وغير ذلك الكثير بوتيرة غير مسبوقة. يقدم هذا مخاطر ونقاط ضعف متعددة في البنية التحتية والعملية و
جهاز التحكم الآلي في حركة المرور: 20 خطوة
جهاز التحكم الآلي في حركة المرور: تحذير: قبل البدء في عملية البناء ، تأكد من ارتداء معدات الوقاية الشخصية المناسبة واتباع لوائح السلامة الصادرة عن OSHA. ارتدِ معدات السلامة مثل النظارات الواقية وسدادات الأذن والقفازات المضادة للصدمات. الأجزاء المطلوبة: 1 & quot؛ × 1 ومثل ؛ أنبوب مربع - 5
حلال حركة المرور: 7 خطوات
Traffic Solver: يقوم Traffic Solver بأتمتة التحكم في حركة المرور داخل حارة واحدة في منطقة الإنشاء. لكي يعمل هذا النظام مع عدم وجود حوادث بينهما ، يجب أن تكون هناك وحدتان ، واحدة على كل جانب. ستحتوي كلتا الوحدتين على محرك وجهاز حمل دوار
روبوت التحكم في حركة المرور من الورق المقوى: 8 خطوات
روبوت Cardboard Traffic Control: سأشارك في مسابقة الورق المقوى. إذا كنت تحب التعليمات الخاصة بي ، فالرجاء التصويت لها! بعد دراسة هذه التعليمات ، سوف تتعلم كيفية تصميم واستخدام Cruizmo Cis. Cruizmo Cis هو روبوت ذكي يتحكم في حركة المرور. يتحكم في كلتا السيارتين
حركة المرور الذكية: 9 خطوات
المرور الذكي: الملخص Smart Traffic هو حل إنترنت الأشياء يعتمد على وحدة تحكم مزودة بمستشعر إشارة بلوتوث يغير توقيت إشارات المرور بعد تحديد الإشارة المنبعثة من مركبة ذات أولوية (عسكرية أو رجال إطفاء أو سيارة إسعاف) ، مما يسمح