สารบัญ:

สัญญาณไฟจราจรอัจฉริยะ: 5 ขั้นตอน (พร้อมรูปภาพ)
สัญญาณไฟจราจรอัจฉริยะ: 5 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: สัญญาณไฟจราจรอัจฉริยะ: 5 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: สัญญาณไฟจราจรอัจฉริยะ: 5 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: ระบบสัญญาณไฟจราจรอัจฉริยะ 2024, พฤศจิกายน
Anonim
สัญญาณไฟจราจรอัจฉริยะ
สัญญาณไฟจราจรอัจฉริยะ

พร้อมที่จะสร้างสัญญาณไฟจราจรที่ดีที่สุดและโต้ตอบได้มากที่สุดในโลกแล้วหรือยัง ดี! ในบทช่วยสอนนี้ เราจะอธิบายวิธีสร้างด้วยตัวเองโดยใช้ Arduino

ส่วนประกอบที่จำเป็น:- Arduino (..duh)- LM317 Mosfet- 2x 60cm Analog RGB LED Strips (12V)- ท่อพีวีซี (1 ม. x 125 มม.)- สายเคเบิล (สีแดงและสีดำ)- แผ่นโลหะสำหรับฝาครอบไฟ- Acryl สำหรับแสง -icons (ตรวจสอบ flaticon.com สำหรับไอคอน.svg)- Spraycan ขาวดำ- เทปไฟฟ้า- ส่วนประกอบการบัดกรีที่จำเป็นทั้งหมด- แสดงพร้อมเกราะที่จำเป็น (ไม่ได้ใช้ในบทช่วยสอน)

ขั้นตอนที่ 1: ขั้นตอนที่ 1: สร้าง Light-caps

ขั้นตอนที่ 1: สร้าง Light-caps
ขั้นตอนที่ 1: สร้าง Light-caps

การออกแบบขึ้นอยู่กับคุณจริงๆ เราได้ทำฝาขนาด 15x15 ซม. สำหรับเก็บไฟ เราได้ตัดแผ่นโลหะให้มีขนาดที่ถูกต้องและใช้เครื่องดัดโลหะ (ไม่ใช่จากอวาตาร์) ในการดัดฝาครอบให้เป็นรูปทรงที่เหมาะสม แผ่นรองด้านหลังทำจากส่วนประกอบที่แตกต่างกัน

ขั้นตอนที่ 2: ขั้นตอนที่ 2: เตรียมเสา PVC

ขั้นตอนที่ 2: เตรียมเสา PVC
ขั้นตอนที่ 2: เตรียมเสา PVC

ตัด 2 รูในเสา PVC เพื่อให้พอดีกับตัวครอบไฟ จากนั้นใช้กระป๋องสเปรย์สีดำทาสีดำทั้งหมด หากต้องการ คุณสามารถเพิ่มแถบสีขาวที่ด้านล่างของเสา (พบได้ทั่วไปในเนเธอร์แลนด์)

ขั้นตอนที่ 3: ขั้นตอนที่ 3: การประกอบแถบ LED RGB และการพ่นทรายบนแผ่นอะคริลิก

ขั้นตอนที่ 3: การประกอบแถบ LED RGB และการพ่นทรายบนแผ่นอะคริลิก
ขั้นตอนที่ 3: การประกอบแถบ LED RGB และการพ่นทรายบนแผ่นอะคริลิก
ขั้นตอนที่ 3: การประกอบแถบ LED RGB และการพ่นทรายบนแผ่นอะคริลิก
ขั้นตอนที่ 3: การประกอบแถบ LED RGB และการพ่นทรายบนแผ่นอะคริลิก

ถัดไป คุณจะต้องประกอบแถบไฟ LED RGB ภายในฝาครอบไฟ สวมหมวกให้แน่น และวางไว้ใกล้กับด้านหน้ามากที่สุด

ถัดไป คุณจะต้องพ่นทรายตามสัญลักษณ์ที่เลือกไว้บนแผ่นอะคริลิก หาเทปกาวมาปิดทั้งแผ่นอะครีลิค จากนั้นตัดรูปร่าง/รูปทรงที่ต้องการออก หลังจากนี้คุณสามารถพ่นทรายบนจานเพื่อให้ได้เอฟเฟกต์เหมือนกระจกฝ้า

ขั้นตอนที่ 4: ขั้นตอนที่ 4: เชื่อมต่อแถบ LED RGB กับ Arduino

ขั้นตอนที่ 4: เชื่อมต่อแถบ LED RGB กับ Arduino
ขั้นตอนที่ 4: เชื่อมต่อแถบ LED RGB กับ Arduino

ตอนนี้มาถึงส่วนที่ยุ่งยาก: การเชื่อมต่อ RGB LED Strips กับ Arduino เมื่อคุณเชื่อมต่อหมุดตรวจสอบให้แน่ใจว่าคุณได้ใส่ 12v บน 12v ของแถบของคุณ ระหว่างแต่ละสี สีแดงหรือสีเขียว จำเป็นต้องใส่มอสเฟต เชื่อมต่อข้อมูลของแถบไฟ LED กับพินตรงกลางของมอสเฟต และพินด้านซ้ายกับ Arduino ของคุณ พินที่ถูกต้องจะต้องกลับไปที่กราวด์ของ Arduino

ขั้นตอนที่ 5: ขั้นตอนที่ 5: เขียนรหัส Arduino

ขั้นตอนที่ 5: เขียนรหัส Arduino
ขั้นตอนที่ 5: เขียนรหัส Arduino

รหัส Arduino นี้ควบคุมโดยบลูทูธ เพราะเราไม่ได้ใช้จอแสดงผลภายใน ดังนั้นโค้ดจะถูกควบคุมผ่านข้อความบลูทูธในฟังก์ชัน loop()

#define r 6#define g 11 #รวม

ซอฟต์แวร์Serial mySerial(10, 11); // RX, TX

#กำหนดความยาวโกรธ4

#กำหนดตกยาว 3 #กำหนดความสุขยาว 4 #กำหนดความยาวโทรศัพท์ 13 #กำหนดความยาวพูด 5 #กำหนดเดินยาว 4 #กำหนดเดินออกความยาว 4 #กำหนดโบกยาว 6

ปุ่มบูลกด;

int ปัจจุบันมิลลิวินาที; int ก่อนหน้ามิลลิวินาที;

int แอนิเมชั่น1ล่าช้า;

int แอนิเมชั่น2ล่าช้า; int แอนิเมชั่น3Delay; int แอนิเมชั่น4ดีเลย์;

บูลแอนิเมชั่น1เสร็จสิ้น = เท็จ;

บูลแอนิเมชั่น2Done = เท็จ; บูลแอนิเมชั่น3Done = false; บูลแอนิเมชั่น4Done = false; บูลแอนิเมชั่น5เสร็จสิ้น = เท็จ;

บูล blockLight = เท็จ;

บูล lightRed = true;

int currentAnimationDelay;

การตั้งค่าเป็นโมฆะ () {

// ใส่รหัสการตั้งค่าของคุณที่นี่ เพื่อเรียกใช้ครั้งเดียว: pinMode(r, OUTPUT); pinMode(g, เอาต์พุต);

Serial.begin(9600);

mySerial.begin(38400); Serial.setTimeout (25); buttonPressed = เท็จ; มิลลิวินาทีปัจจุบัน = 0; มิลลิวินาทีก่อนหน้า = 0;

animation1Delay = เดินความยาว * 1,000;

animation2Delay = โบกความยาว * 1,000; animation3Delay = happyLength * 1,000; animation4Delay = walkingOutLength * 1,000;

//currentAnimationDelay = animation1Delay * 1,000;

lightRed = จริง; }

วงเป็นโมฆะ () {

// ล่าช้า (20);

// ใส่รหัสหลักของคุณที่นี่ เพื่อเรียกใช้ซ้ำ ๆ: unsigned long currentMillis = millis(); if (buttonPressed == true) { if (animation1Done == false) { if (currentMillis - PreviousMillis > animation1Delay) { Serial.println ("0"); มิลลิวินาทีก่อนหน้า = ปัจจุบันมิลลิวินาที; แอนิเมชั่น1เสร็จสิ้น = จริง; } } else if(animation2Done == false และ animation1Done == true) { if(currentMillis - PreviousMillis > animation2Delay) { Serial.println ("1"); มิลลิวินาทีก่อนหน้า = ปัจจุบันมิลลิวินาที; animation2Done = จริง; } } else if(animation3Done == false และ animation2Done == true) { if(currentMillis - PreviousMillis > animation3Delay) { Serial.println ("2"); //Serial.println("เสียง:เขียว"); มิลลิวินาทีก่อนหน้า = ปัจจุบันมิลลิวินาที; animation3Done = จริง; lightRed = เท็จ; } } else if(animation4Done == false และ animation3Done == true) { if(currentMillis - PreviousMillis > animation4Delay) { PreviousMillis = currentMillis; animation4Done = จริง; Serial.println ("FLSH"); } } }

ถ้า (Serial.available ()) {

สตริง str = Serial.readString (); if(str == "CMD:BUTTON_PRESSED") {

แอนิเมชั่น1เสร็จสิ้น = เท็จ;

animation2Done = เท็จ; animation3Done = เท็จ; animation4Done = เท็จ; แอนิเมชั่น5เสร็จสิ้น = เท็จ;

animation1Delay = เดินความยาว * 1,000;

animation2Delay = โบกความยาว * 1,000; animation3Delay = happyLength * 1,000; animation4Delay = walkingOutLength * 1,000;

//currentAnimationDelay = animation1Delay * 1,000;

lightRed = จริง; Serial.println("3"); buttonPressed = จริง; มิลลิวินาทีก่อนหน้า = ปัจจุบันมิลลิวินาที; }

ถ้า (str == "สีแดง") {

blockLight = เท็จ; lightRed = จริง; }

ถ้า (str == "สีเขียว") {

blockLight = เท็จ; lightRed = เท็จ; }

if(str == "LIGHT:GREEN:OFF") {

blockLight = จริง; analogWrite (g, 255); } if(str == "LIGHT:GREEN:ON") { blockLight = true; analogWrite(g, 0); } //Serial.println(str); }

ถ้า (blockLight == เท็จ) {

if(lightRed == true) {

analogWrite(r, 0); analogWrite (g, 255); } ถ้า (lightRed == false) { analogWrite (r, 255); analogWrite(g, 0); } } }

แนะนำ: