جدول المحتويات:
فيديو: إشارة مرور تفاعلية ذكية: 5 خطوات (مع صور)
2025 مؤلف: John Day | [email protected]. آخر تعديل: 2025-01-13 06:56
هل أنت مستعد لبناء أفضل إشارات المرور وأكثرها تفاعلية في العالم؟ حسن! في هذا البرنامج التعليمي ، سنشرح كيف يمكنك بناء واحد بنفسك باستخدام Arduino.
المكونات المطلوبة: - Arduino (..duh) - LM317 Mosfet- شرائط RGB LED التناظرية 2 × 60 سم (12 فولت) - أنبوب PVC (1 م × 125 مم) - الكابلات (أحمر وأسود) - ألواح معدنية لأغطية الضوء- أكريل للضوء -أيقونات (تحقق من flaticon.com لرموز.svg) - طلاء Spraycan بالأبيض والأسود. - شريط كهربائي - جميع مكونات اللحام المطلوبة - العرض مع الدرع المطلوب (غير مستخدم في البرنامج التعليمي)
الخطوة 1: الخطوة 1: اصنع قبعات الضوء
التصميم متروك لك حقًا. لقد صنعنا غطاءًا مقاس 15 × 15 سم لإمساك الأضواء. لقد قطعنا الألواح المعدنية إلى الحجم الصحيح واستخدمنا أداة ثني معدنية (لا ، ليس من Avatar) لثني الأغطية في الأشكال الصحيحة. تم صنع الألواح الخلفية من مكون مختلف.
الخطوة 2: الخطوة 2: تجهيز القطب PVC
قطع فتحتين في القطب PVC لتناسب أغطية الضوء. ثم استخدم بخاخ طلاء أسود لرسم كل شيء باللون الأسود. إذا كنت ترغب في ذلك ، يمكنك إضافة خطوط بيضاء أسفل العمود (شائع في هولندا).
الخطوة 3: الخطوة 3: تجميع شرائط RGB LED وسفع ألواح الأكريليك بالرمل
بعد ذلك ، ستحتاج إلى تجميع شرائط RGB LED داخل غطاء الضوء. قم بتثبيتها بإحكام حول الغطاء ، وضعها بالقرب من المقدمة قدر الإمكان.
بعد ذلك ، ستحتاج إلى رمال الرمز المحدد على لوحة الأكريليك. احصل على بعض الشريط اللاصق وقم بتغطية طبق الأكريليك بالكامل. ثم قص الشكل / الشكل الذي تريده. بعد ذلك ، يمكنك تفجير الصفيحة بالرمل للحصول على تأثير يشبه الزجاج المصنفر.
الخطوة 4: الخطوة 4: قم بتوصيل شرائط RGB LED بـ Arduino
الآن يأتي الجزء الصعب: توصيل شرائط RGB LED بأردوينو. عندما تقوم بتوصيل المسامير ، تأكد من وضع 12 فولت على 12 فولت من الشريط الخاص بك. بين كل لون ، أحمر أو أخضر ، تحتاج إلى وضع موسفيت. قم بتوصيل بيانات شريط LED بالدبوس الأوسط من mosfet ، والدبوس الأيسر بـ Arduino. يجب أن يعود الدبوس الأيمن إلى أرض Arduino.
الخطوة 5: الخطوة 5: اكتب كود Arduino
يتم التحكم في كود Arduino عن طريق البلوتوث ، لأننا لم نستخدم شاشة داخلية. لذلك يتم التحكم في الكود عبر رسائل البلوتوث في وظيفة الحلقة ().
#define r 6 # حدد g 11 # تضمين
SoftwareSerial mySerial (10 ، 11) ؛ // RX ، TX
#define angryLength 4
# تعريف السقوط الطول 3 # تعريف السعادة الطول 4 # تعريف الهاتف الطول 13 # تعريف الحديث الطول 5 # تحديد المشي الطول 4 # تحديد المشي الطول 4 # الموجة التعريفية الطول 6
زر منطقي
كثافة العمليات الحالية الباحث السابق ميليس.
الرسوم المتحركة int1Delay.
الرسوم المتحركة int2Delay. الرسوم المتحركة int3Delay. الرسوم المتحركة Int4Delay.
الرسوم المتحركة المنطقية 1 تم = خطأ ؛
الرسوم المتحركة المنطقية 2Done = خطأ ؛ bool animation3Done = خطأ ؛ bool animation4Done = خطأ ؛ الرسوم المتحركة المنطقية 5 تم = خطأ ؛
كتلة منطقية ضوء = خطأ ؛
ضوء منطقي أحمر = صحيح ؛
الحالي int currentAnimationDelay ؛
الإعداد باطل() {
// ضع رمز الإعداد الخاص بك هنا ، للتشغيل مرة واحدة: pinMode (r، OUTPUT)؛ pinMode (g ، الإخراج) ؛
Serial.begin (9600) ؛
mySerial.begin (38400) ، Serial.setTimeout (25) ، buttonPressed = خطأ ؛ تيار ميليس = 0 ؛ السابق ميليس = 0 ؛
الرسوم المتحركة 1 تأخير = المشي الطول * 1000 ؛
anim2Delay = wavingLength * 1000 ؛ Animation3Delay = happyLength * 1000 ؛ Animation4Delay = WalkingOutLength * 1000 ؛
// currentAnimationDelay = animation1Delay * 1000 ؛
lightRed = صحيح ؛ }
حلقة فارغة() {
// تأخير (20) ؛
// ضع الكود الرئيسي هنا ، للتشغيل بشكل متكرر: long currentMillis = millis ()؛ إذا (buttonPressed == true) {if (animation1Done == false) {if (currentMillis - previousMillis> animation1Delay) {Serial.println ("0")؛ PreviousMillis = CurrentMillis ؛ الرسوم المتحركة 1 تم = صحيح ؛ }} else if (animation2Done == false and animation1Done == true) {if (currentMillis - previousMillis> animation2Delay) {Serial.println ("1")؛ PreviousMillis = CurrentMillis ؛ anim2Done = صحيح ؛ }} else if (animation3Done == false and animation2Done == true) {if (currentMillis - previousMillis> animation3Delay) {Serial.println ("2")؛ //Serial.println("sound:green ") ؛ PreviousMillis = CurrentMillis ؛ Animation3Done = صحيح ؛ lightRed = خطأ ؛ }} else if (animation4Done == false and animation3Done == true) {if (currentMillis - previousMillis> animation4Delay) {previousMillis = currentMillis؛ Animation4Done = صحيح ؛ Serial.println ("FLSH") ؛ }}}
إذا (Serial.available ()) {
String str = Serial.readString () ، إذا (str == "CMD: BUTTON_PRESSED") {
الرسوم المتحركة 1 تم = خطأ ؛
anim2Done = خطأ ؛ Animation3Done = خطأ ؛ Animation4Done = خطأ ؛ الرسوم المتحركة 5 تم = خطأ ؛
الرسوم المتحركة 1 تأخير = المشي الطول * 1000 ؛
anim2Delay = wavingLength * 1000 ؛ Animation3Delay = happyLength * 1000 ؛ Animation4Delay = WalkingOutLength * 1000 ؛
// currentAnimationDelay = animation1Delay * 1000 ؛
lightRed = صحيح ؛ Serial.println ("3") ؛ buttonPressed = صحيح ؛ PreviousMillis = CurrentMillis ؛ }
إذا (str == "RED") {
blockLight = خطأ ؛ lightRed = صحيح ؛ }
إذا (str == "أخضر") {
blockLight = خطأ ؛ lightRed = خطأ ؛ }
إذا (str == "LIGHT: GREEN: OFF") {
blockLight = صحيح ؛ analogWrite (ز ، 255) ؛ } if (str == "LIGHT: GREEN: ON") {blockLight = true؛ analogWrite (ز ، 0) ؛ } //Serial.println(str) ؛ }
إذا (blockLight == خطأ) {
إذا (lightRed == صحيح) {
analogWrite (ص ، 0) ؛ analogWrite (ز ، 255) ؛ } if (lightRed == false) {analogWrite (r، 255) ؛ analogWrite (ز ، 0) ؛ }}}