สารบัญ:

หลอดไฟ LED อัจฉริยะที่ควบคุมด้วยสมาร์ทโฟน Bluetooth: 7 ขั้นตอน
หลอดไฟ LED อัจฉริยะที่ควบคุมด้วยสมาร์ทโฟน Bluetooth: 7 ขั้นตอน

วีดีโอ: หลอดไฟ LED อัจฉริยะที่ควบคุมด้วยสมาร์ทโฟน Bluetooth: 7 ขั้นตอน

วีดีโอ: หลอดไฟ LED อัจฉริยะที่ควบคุมด้วยสมาร์ทโฟน Bluetooth: 7 ขั้นตอน
วีดีโอ: รีวิวหลอดไฟอัจฉริยะ เปลี่ยนสีได้ RGB สั่งงานผ่านมือถือ!!! | SINLEGOO 2024, พฤศจิกายน
Anonim
Image
Image
หลอดไฟ LED อัจฉริยะที่ควบคุมด้วยสมาร์ทโฟน Bluetooth
หลอดไฟ LED อัจฉริยะที่ควบคุมด้วยสมาร์ทโฟน Bluetooth

ฉันใฝ่ฝันที่จะควบคุมอุปกรณ์ให้แสงสว่างอยู่เสมอ จากนั้นมีคนทำโคมไฟ 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 มิติ
รูปร่าง 3 มิติ
รูปร่าง 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: เพลิดเพลินไปกับโคมไฟอารมณ์ของคุณ !

เพลิดเพลินไปกับโคมไฟอารมณ์ของคุณ!!
เพลิดเพลินไปกับโคมไฟอารมณ์ของคุณ!!
เพลิดเพลินไปกับโคมไฟอารมณ์ของคุณ!!
เพลิดเพลินไปกับโคมไฟอารมณ์ของคุณ!!
เพลิดเพลินไปกับโคมไฟอารมณ์ของคุณ!!
เพลิดเพลินไปกับโคมไฟอารมณ์ของคุณ!!

ฉันหวังว่าคุณจะชอบคำแนะนำนี้ มันเป็นโครงการที่ท้าทายมากสำหรับฉัน ให้ข้อเสนอแนะสำหรับการปรับปรุงในอนาคต

ขอบคุณสำหรับการอ่านและสุขสันต์วันคริสต์มาส!

แนะนำ: