สารบัญ:
- ขั้นตอนที่ 1: รวบรวมวัสดุ
- ขั้นตอนที่ 2: การสร้างโครงสร้างของโคมไฟ
- ขั้นตอนที่ 3: รูปร่าง 3 มิติ
- ขั้นตอนที่ 4: แผนผังของส่วนประกอบ
- ขั้นตอนที่ 5: รหัส
- ขั้นตอนที่ 6: การควบคุมหลอดไฟ
- ขั้นตอนที่ 7: เพลิดเพลินไปกับโคมไฟอารมณ์ของคุณ !
วีดีโอ: หลอดไฟ LED อัจฉริยะที่ควบคุมด้วยสมาร์ทโฟน Bluetooth: 7 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:03
ฉันใฝ่ฝันที่จะควบคุมอุปกรณ์ให้แสงสว่างอยู่เสมอ จากนั้นมีคนทำโคมไฟ LED สีสันสดใสอย่างไม่น่าเชื่อ ฉันเพิ่งเจอหลอดไฟ LED โดย Joseph Casha บน Youtube เมื่อได้รับแรงบันดาลใจจากสิ่งนี้ ฉันจึงตัดสินใจเพิ่มฟังก์ชันหลายอย่างโดยที่ยังคงการออกแบบร่วมสมัยไว้
แผนคือการทำให้หลอดไฟเป็นมิตรกับผู้ใช้มากขึ้นโดยการเพิ่มโมดูล Bluetooth และแถบ LED WS2812B RGB ที่แอดเดรสได้ ทำให้สามารถควบคุมสีของแสงได้โดยใช้แอพสมาร์ทโฟน
ขั้นตอนที่ 1: รวบรวมวัสดุ
เครื่องมือ:
• สถานีบัดกรี
• ปืนเป่าลมร้อน
• เครื่องเจาะ
• เลื่อยวงเดือน
• จิ๊กซอว์
• คีมตัดลวด
• คีมปากแหลม
วัสดุ:
• แผ่นอะครีลิคโปร่งแสง
• ไม้ไซเปรสญี่ปุ่น (หรือใช้ไม้อะไรก็ได้ตราบเท่าที่มีความมั่นคงและแข็งแรงเพียงพอ)
• สกรู
• เสาสแตนเลส หรือ สติ๊ก
• สายไฟ (ผมใช้สายสีแดงและสีดำ)
• บัดกรีดีบุก
ส่วนประกอบอิเล็กทรอนิกส์:
• Arduino นาโน
• โมดูล Bluetooth HC-05 (ฉันตัดสินใจใช้สิ่งนี้เนื่องจากเขียนโค้ดได้ง่ายกว่าโมดูล Wifi ESP8266)
• WS2812B แอดเดรส RGB LED Strip
• โมดูลสเต็ปดาวน์ LM2596
• แจ็ค DC Barrel Power
ขั้นตอนที่ 2: การสร้างโครงสร้างของโคมไฟ
ในขั้นตอนนี้ ฉันมีสองวิธีในการสร้างโครงสร้างของวิธีการโคมไฟ- งานไม้ และวิธีการพิมพ์ 3 มิติ ฉันใช้วิธีแรก หากคุณต้องการสร้างโดยใช้เครื่องพิมพ์ 3D โปรดข้ามไปยังขั้นตอนที่ 2 สำหรับรุ่นที่ฉันออกแบบ
สำหรับส่วนบนของโคมไฟ ฉันให้ความร้อนและงอแผ่นอะคริลิกเป็นมุม 90° ดังที่แสดงไว้ด้านบน ฉันใช้เวลานานพอสมควรในการดัดมันให้เป็นมุมและทิศทางที่สมบูรณ์แบบ
ต่อไปสำหรับส่วนล่างของโคมไฟ น่าเสียดาย… วันที่ฉันทำงานส่วนล่างของโคมไฟ ฉันลืมถ่ายรูปการก่อสร้างไปโดยสิ้นเชิง! ฉันตระหนักว่าเมื่อฉันทำโครงการนี้เสร็จ แต่ฉันจะพยายามอย่างดีที่สุดเพื่อให้คุณได้การวัดส่วนล่างของหลอดไฟ
โดยพื้นฐานแล้ว คุณเพียงแค่ตัดไม้สี่ท่อนที่มีขนาด 13x6x2 ซม. (ยาวxสูงxสูง) ถัดไปคุณต้องตัดขอบไม้เหมือนบันได รูปภาพจะแสดงด้านบน
ขั้นตอนที่ 3: รูปร่าง 3 มิติ
สำหรับใครก็ตามที่มีเครื่องพิมพ์ 3 มิติเป็นของตัวเอง คุณมาถูกทางแล้ว ทำให้หลอดไฟนี้ใช้งานง่าย
พูดตามตรง นี่เป็นขั้นตอนที่ยากที่สุดที่ฉันทำ นี่เป็นสิ่งแรกที่ฉันทำทันทีหลังจากติดตั้งซอฟต์แวร์!
ฉันใช้ Sketchup Pro เพื่อออกแบบโครงสร้างของโคมไฟ ขออภัย ฉันไม่ชำนาญพอที่จะออกแบบส่วนประกอบภายในของมัน ลิงก์ไปยังโมเดล 3 มิติของฉันอยู่ในไฟล์ด้านล่าง
ขั้นตอนที่ 4: แผนผังของส่วนประกอบ
ฉันใช้ Fritzing เพื่อสร้างแผนผังของส่วนประกอบ แผนผังนั้นค่อนข้างง่าย
ขั้นตอนที่ 5: รหัส
สำหรับการเข้ารหัสของโคมไฟอารมณ์นี้ ฉันใช้บางไลบรารีจาก Arduino IDE ไลบรารีจะแสดงรายการในขั้นตอนที่ 7
สำหรับโค้ด คุณต้องมีซอฟต์แวร์ Arduino เอง ฉันจะให้ลิงค์สำหรับดาวน์โหลดที่นี่
นอกจากนี้ แบบร่างหรือโค้ดจะแสดงด้านล่าง ?
ฉันยังให้ไฟล์สำหรับรหัสใน Github.com ในกรณีที่รหัสด้านล่างยาวเกินไปที่จะคัดลอกที่นี่;)
#รวม #รวม #รวม #ifdef _AVR_ #รวม #endif
ซอฟต์แวร์Serial BT(10, 11);
#define LED_PIN 7 #define NUM_LEDS 60 #define BRIGHTNESS 200 #define SPEED 10 #define ทันที 0 #define RAINBOW_SPEED 50 ไฟ LED CRGB[NUM_LEDS];
แถบ Adafruit_NeoPixel = Adafruit_NeoPixel (NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
บูลออกเก่า = ต่ำ;
บูล WhiteOld = ต่ำ; บูล RedOld = ต่ำ; บูล GreenOld = ต่ำ; บูล BlueOld = ต่ำ; บูล TopazOld = ต่ำ; บูล LilacOld = ต่ำ; บูล RainbowOld = ต่ำ; bool rgbOld = ต่ำ; int showType = 0;
การตั้งค่าเป็นโมฆะ () {
FastLED.addLeds (ไฟ LED, NUM_LEDS); //////////
BT.begin(9600);
BT.println("เชื่อมต่อกับ Arduino");
แถบ.setBrightness(ความสว่าง);
แถบ.begin();
แถบ.show();
}
ถ่าน;
วงเป็นโมฆะ () {
สำหรับ (int i = 0; i <= 59; i++) { leds = CRGB (255, 255, 255); FastLED.show(); } บูลออฟ = ต่ำ; บูล ขาว = ต่ำ; บูลสีน้ำเงิน = ต่ำ; บูลแดง = ต่ำ; บูลกรีน = ต่ำ; บุษราคัม = ต่ำ; bool Lilac = ต่ำ; บูลเรนโบว์ = ต่ำ; บูล rgb = ต่ำ; ปลายบูล; if (BT.available()) { a= (ถ่าน) BT.read();
ถ้า(a=='o')
{ ปิด = สูง; BT.println("กำลังปิดไฟ LED..");
}อื่น{
ปิด = ต่ำ; } // ============================================== ===========================================
ถ้า(a=='w')
{ สีขาว = สูง; BT.println("ไฟ LED เปลี่ยนเป็นสีขาว");
}อื่น{
สีขาว = ต่ำ; } // ============================================== ============================================
ถ้า(a=='b')
{ สีน้ำเงิน = สูง; BT.println("เปลี่ยนเป็นสีน้ำเงิน"); }อื่น{ สีน้ำเงิน = ต่ำ; }
// ===========================================================================================
ถ้า(a=='r')
{ สีแดง = สูง; BT.println("กำลังเปลี่ยนเป็นสีแดง"); }อื่น{ สีแดง = ต่ำ; }
// ===========================================================================================
ถ้า(a=='g')
{ สีเขียว = สูง; BT.println("กำลังเปลี่ยนเป็นสีเขียว"); }อื่น{ สีเขียว = ต่ำ; }
// ===========================================================================================
ถ้า(a=='t')
{ บุษราคัม = สูง; BT.println("กำลังเปลี่ยนเป็นบุษราคัม"); }อื่น{บุษราคัม = ต่ำ; }
// ===========================================================================================
ถ้า(a=='l')
{ ม่วง = สูง; BT.println("กำลังเปลี่ยนเป็นสีม่วง"); }อื่น{ ม่วง = ต่ำ; }
// ===========================================================================================
ถ้า(a=='a')
{ สายรุ้ง = สูง; BT.println("แอนิเมชั่นสายรุ้ง"); }อื่น{ สายรุ้ง = ต่ำ; } // ============================================== ===========================================
ถ้า(a=='m')
{ rgb = สูง; BT.println("ผสมสี"); }อื่น{ rgb = ต่ำ; } } if (off == LOW && offOld == HIGH) { ล่าช้า (20); ถ้า (ปิด == ต่ำ) { showType = 0; // ปิดแอนิเมชั่นประเภท 0 startShow(showType); } }
// ===========================================================================================
ถ้า (ขาว == ต่ำ && ขาวเก่า == สูง) {
ล่าช้า (20); ถ้า (สีขาว == ต่ำ) { showType = 1; // แอนิเมชั่นสีขาวประเภท 1 startShow(showType); } }
// =============================================== ========================================== ถ้า (สีแดง == ต่ำ && RedOld == สูง) { ล่าช้า (20); ถ้า (สีแดง == ต่ำ) { showType = 2; // ภาพเคลื่อนไหวสีแดงประเภท 2 startShow(showType); } }
// ===========================================================================================
ถ้า (สีเขียว == ต่ำ && GreenOld == สูง) {
ล่าช้า (20); ถ้า (สีเขียว == ต่ำ) { showType = 3; // แอนิเมชั่นสีเขียวประเภท 3 startShow(showType); } } // ============================================== ============================================
ถ้า (สีน้ำเงิน == ต่ำ && BlueOld == สูง) {
ล่าช้า (20); ถ้า (สีน้ำเงิน == ต่ำ) { showType = 4; // แอนิเมชั่นสีน้ำเงินประเภท 4 startShow(showType); } }
// ===========================================================================================
ถ้า (บุษราคัม == ต่ำ && บุษราคัมเก่า == สูง) {
ล่าช้า (20); ถ้า (บุษราคัม == ต่ำ) { showType = 5; // แอนิเมชั่น Topaz ประเภท 5 startShow(showType); } }
// ===========================================================================================
ถ้า (Lilac == ต่ำ && LilacOld == สูง) {
ล่าช้า (20); ถ้า (Lilac == ต่ำ) { showType = 6; // แอนิเมชั่น Topaz ประเภท 6 startShow(showType); } } // ============================================== ============================================
ถ้า (เรนโบว์ == ต่ำ && RainbowOld == สูง) {
ล่าช้า (20);
ถ้า (รุ้ง == ต่ำ) {
showType = 8; // แอนิเมชั่นสายรุ้ง Type 8 startShow(showType); } }
// ===========================================================================================
ถ้า (rgb == ต่ำ && rgbOld == สูง) {
ล่าช้า (20);
ถ้า (rgb == ต่ำ) {
showType = 7; // ผสมแอนิเมชั่น Type 7 rgb = HIGH;
startShow(showType);
} }
WhiteOld = ขาว;
RedOld = สีแดง; BlueOld = สีน้ำเงิน; GreenOld = สีเขียว; TopazOld = บุษราคัม; LilacOld = ม่วง; ปิดเก่า = ปิด; RainbowOld = สายรุ้ง; rgbOld = rgb;
}
เป็นโมฆะ startShow (int i) {
สวิตช์ (ผม){
กรณีที่ 0: colorWipe(strip. Color(0, 0, 0), SPEED); // สีดำ/ปิด
หยุดพัก;
กรณีที่ 1: strip.setBrightness(255); // เปลี่ยนความสว่างเป็น MAX
colorWipe(แถบสี (255, 255, 255), ทันที); // แถบสีขาว.setBrightness(BRIGHTNESS); // รีเซ็ตความสว่างเป็นค่าเริ่มต้น ตัวแบ่ง;
กรณีที่ 2: colorWipe(strip. Color(255, 0, 0), SPEED); // สีแดง
หยุดพัก;
กรณีที่ 3: colorWipe(strip. Color(0, 255, 0), SPEED); // เขียว
หยุดพัก;
กรณีที่ 4: colorWipe(strip. Color(0, 0, 255), SPEED); // สีฟ้า
หยุดพัก;
กรณีที่ 5: colorWipe(strip. Color(0, 250, 255), SPEED); //บุษราคัม
หยุดพัก;
กรณีที่ 6: colorWipe(strip. Color(221, 130, 255), SPEED); // ม่วง
หยุดพัก; กรณีที่ 7: colorWipe(strip. Color(255, 0, 0), SPEED); // สีแดง colorWipe(strip. Color(0, 255, 0), SPEED); // สีเขียว colorWipe(strip. Color(0, 0, 255), SPEED); // โรงละครสีน้ำเงิน Chase(strip. Color(0, 0, 127), SPEED); // โรงละครสีน้ำเงิน Chase(strip. Color(127, 0, 0), SPEED); // โรงละครสีแดง Chase(แถบสี(0, 127, 0), ความเร็ว); // กรีนเบรค;
กรณีที่ 8: rainbowCycle(25);
หยุดพัก; } } เป็นโมฆะ colorWipe (uint32_t c, uint8_t รอ) { สำหรับ (uint16_t i=0; i
เป็นโมฆะ rainbowCycle (uint8_t รอ) {
uint16_t ผม, เจ;
for(j=0; j<256*10; j++) { // 5 รอบของสีทั้งหมดบนวงล้อ for (i=0; i< strip.numPixels(); i++) { strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255)); } strip.show(); ล่าช้า(รอ); } }
เป็นโมฆะ theatreChase (uint32_t c, uint8_t รอ) {
for (int j=0; j<10; j++) {// ไล่ตาม 10 รอบ (int q=0; q <3; q++) { สำหรับ (int i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, c); // เปิดทุก ๆ พิกเซลที่สามบน } strip.show();
ล่าช้า(รอ);
สำหรับ (int i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, 0); //ปิดทุกๆ พิกเซลที่สาม } } } }
uint32_t Wheel (ไบต์ WheelPos) {
WheelPos = 255 - WheelPos; ถ้า (WheelPos <85) { แถบส่งคืน. สี (255 - WheelPos * 3, 0, WheelPos * 3); } if (WheelPos <170) { WheelPos -= 85; แถบส่งคืน.สี(0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos -= 170; แถบส่งคืน.สี(WheelPos * 3, 255 - WheelPos * 3, 0); }
ขั้นตอนที่ 6: การควบคุมหลอดไฟ
สีของหลอดไฟสามารถควบคุมได้โดยใช้สมาร์ทโฟนของคุณ
ขั้นแรก คุณต้องติดตั้งแอปชื่อ 'Bluetooth Terminal HC-05' จาก Google Play Store หรือ Apple App Store
นี่คือขั้นตอนในการควบคุมหลอดไฟผ่านสมาร์ทโฟนของคุณเอง:
1. เปิดบลูทูธในสมาร์ทโฟนของคุณ
2. เปิดแอปที่ชื่อว่า 'Bluetooth Terminal HC-05'
3. ตอนนี้คุณควรเห็นอุปกรณ์ที่จับคู่บนหน้าจอ เลือก 'HC-05'
4. ตอนนี้คุณสามารถเห็นหน้าจอสีดำปรากฏขึ้นในสมาร์ทโฟนของคุณซึ่งจะระบุว่า 'เชื่อมต่อกับ Arduino แล้ว'
5. นี่คือส่วนที่สนุก หากคุณพิมพ์ 'b' ในกล่องข้อความ หลอดไฟจะเปลี่ยนเป็นสีน้ำเงิน นี่คือรายการคำสั่งที่คุณสามารถพิมพ์สำหรับหลอดไฟได้:
- w สำหรับสีขาว
- b สำหรับสีน้ำเงิน
- g สำหรับสีเขียว
- r สำหรับสีแดง
- t สำหรับบุษราคัม
- l สำหรับม่วง
- สำหรับแอนิเมชั่นสายรุ้ง
- o สำหรับปิด
สนุกใช่มั้ย?
6. สุดท้ายแต่ไม่ท้ายสุด คุณยังสามารถปรับแต่งปุ่มด้านล่างหน้าจอให้เป็นข้อความที่คุณต้องการได้ตามที่แสดงในภาพด้านบน
ขั้นตอนที่ 7: เพลิดเพลินไปกับโคมไฟอารมณ์ของคุณ !
ฉันหวังว่าคุณจะชอบคำแนะนำนี้ มันเป็นโครงการที่ท้าทายมากสำหรับฉัน ให้ข้อเสนอแนะสำหรับการปรับปรุงในอนาคต
ขอบคุณสำหรับการอ่านและสุขสันต์วันคริสต์มาส!
แนะนำ:
หลอดไฟ LED DIY WiFi RGB: 6 ขั้นตอน (พร้อมรูปภาพ)
หลอดไฟ LED DIY WiFi RGB: ในโครงการนี้ ฉันจะแสดงให้คุณเห็นว่าฉันสร้างแหล่งกระแสคงที่สามช่องสัญญาณและรวมเข้ากับ ESP8266µC และ LED พลังงานสูง RGB 10W เพื่อสร้างหลอดไฟที่ควบคุมด้วย WiFi ได้อย่างไร ระหว่างทาง ผมจะสาธิตวิธีการเ
หลอดไฟ LED DJI Flamewheel: 5 ขั้นตอน
DJI Flamewheel LED Lamp: โปรเจ็กต์นี้เป็นงานสำหรับไฟปลายปีกสำหรับ DJI Flamewheel ใช้วัสดุ: PCB's 1 pcs LED 13 pcs (3mm TH) Resistor (แพ็คเกจ 0603) 13 pcs คุณสามารถใช้สิ่งต่อไปนี้สำหรับ
หลอดไฟ LED Marshmallow: 8 ขั้นตอน (พร้อมรูปภาพ)
หลอดไฟ LED Marshmallow: สวัสดี ฉันชื่อ Nishant Chandna และฉันอายุ 15 ปี เราทุกคนรู้เกี่ยวกับสถานการณ์ปัจจุบัน โรงเรียนทั้งหมดถูกปิดเราไม่สามารถออกไปได้…. แทนที่จะเสียเวลาฉันคิดว่าจะทำให้คำแนะนำนี้ เนื่องจากเป็นการท้าทายความเร็ว ฉันจึงนึกถึงแม่
12V Mini Joule Thief Inverter - กำลังไฟ 220V AC หลอดไฟ LED พร้อมแบตเตอรี่ 12V: 5 ขั้นตอน
12V Mini Joule Thief Inverter - กำลังไฟ 220V AC หลอดไฟ LED พร้อมแบตเตอรี่ 12V: สวัสดี นี่เป็นคำแนะนำแรกของฉัน ในคำแนะนำนี้ ฉันจะแบ่งปันวิธีที่ฉันทำอินเวอร์เตอร์ง่ายๆ เพื่อจ่ายไฟให้กับหลอดไฟ LED 12 W วงจรนี้แปลงไฟ DC 12 V จากแบตเตอรี่เป็น 220 V AC ที่ความถี่สูงเพราะใช้หัวขโมยจูลเป็นหัวใจของค
ดึงไฟ LED ออก: หลอดไฟ LED ที่เติมด้วยแก้ว: 7 ขั้นตอน (พร้อมรูปภาพ)
นำ LED ออก: หลอดไฟ LED ที่เติมด้วยแก้ว: ฉันสร้างหลอดไฟ LED ที่เต็มไปด้วยแก้วที่ยอดเยี่ยมนี้ได้อย่างไร โครงการนี้เกี่ยวข้องกับการจัดการกระจกแตก ฉันไม่รับผิดชอบต่อวิธีที่คุณใช้ข้อมูลนี้ ฉันขอแนะนำอย่างยิ่งให้คุณอย่าพยายามทำโครงการนี้ หากคุณทำ ฉันไม่รับผิดชอบต่อสิ่งใดๆ