جدول المحتويات:

مصباح LED ذكي يتم التحكم فيه عن طريق الهاتف الذكي عبر البلوتوث: 7 خطوات
مصباح LED ذكي يتم التحكم فيه عن طريق الهاتف الذكي عبر البلوتوث: 7 خطوات

فيديو: مصباح LED ذكي يتم التحكم فيه عن طريق الهاتف الذكي عبر البلوتوث: 7 خطوات

فيديو: مصباح LED ذكي يتم التحكم فيه عن طريق الهاتف الذكي عبر البلوتوث: 7 خطوات
فيديو: لمبة ليد ذكية تتحكم فيها من الجوال وتدعم امازون اليكسا ومساعد جوجل 2024, يوليو
Anonim
Image
Image
مصباح LED ذكي يتم التحكم فيه عن طريق الهاتف الذكي عبر البلوتوث
مصباح LED ذكي يتم التحكم فيه عن طريق الهاتف الذكي عبر البلوتوث

أحلم دائمًا بالتحكم في أجهزة الإضاءة الخاصة بي. ثم قام شخص ما بعمل مصباح LED ملون مذهل. لقد عثرت مؤخرًا على مصباح LED بواسطة جوزيف كاشا على Youtube. مستوحاة من ذلك ، قررت إضافة العديد من الوظائف مع الحفاظ على التصميم المعاصر.

تتمثل الخطة في جعل المصباح أكثر سهولة في الاستخدام من خلال إضافة وحدة Bluetooth وشريط WS2812B RGB LED القابل للتوجيه. جعل هذا من الممكن التحكم في لون الإضاءة فقط باستخدام تطبيق الهاتف الذكي.

الخطوة 1: اجمع المواد

اجمع المواد
اجمع المواد
اجمع المواد
اجمع المواد

أدوات:

• محطة لحام

• مسخن منفاخ مسدس

• آلة الحفر

• منشار دائري

• بانوراما

• كماشة قطع الأسلاك

• كماشة الأنف الضيق

المواد:

• لوح أكريليك شفاف

• خشب السرو الياباني (أو يمكنك استخدام أي خشب طالما أنه ثابت وقوي بدرجة كافية)

• مسامير

• عمود أو عصا من الفولاذ المقاوم للصدأ

• الأسلاك (أستخدم السلك الأحمر والأسود)

• لحام القصدير

مكونات الإلكترونيات:

• اردوينو نانو

• وحدة Bluetooth HC-05 (قررت استخدام هذا لأنه أسهل في البرمجة من وحدة Wifi ESP8266)

• WS2812B شريط إضاءة RGB LED قابل للتحكم

• LM2596 وحدة التنحي

• مقبس طاقة برميل تيار مستمر

الخطوة 2: بناء هيكل المصباح

بناء هيكل المصباح
بناء هيكل المصباح
بناء هيكل المصباح
بناء هيكل المصباح

في هذه الخطوة ، لدي طريقتان لبناء هيكل المصباح - طريقة النجارة وطريقة الطباعة ثلاثية الأبعاد. أستخدم الطريقة الأولى. إذا كنت تفضل القيام بذلك باستخدام طابعة ثلاثية الأبعاد ، فلا تتردد في التخطي إلى الخطوة 2 للطراز الذي قمت بتصميمه.

بالنسبة للجزء العلوي من المصباح ، أقوم بتسخين وثني لوح الأكريليك بزاوية 90 درجة كما هو موضح أعلاه. أستغرق وقتًا طويلاً لثنيها إلى زاوية واتجاه مثاليين.

بعد ذلك ، للجزء السفلي من المصباح. لسوء الحظ … في اليوم الذي أعمل فيه على الجزء السفلي من المصباح ، نسيت تمامًا التقاط صورة للبناء! أدركت أنه عندما انتهيت من هذا المشروع. لكنني سأبذل قصارى جهدي لتزويدك بقياس الجزء السفلي من المصباح.

في الأساس ، تحتاج فقط إلى قطع أربع كتل من الخشب بقياس 13 × 6 × 2 سم (طول × ارتفاع × عرض). بعد ذلك ، تحتاج إلى قطع يشبه الدرج عند حافة الخشب. سوف تظهر الصورة أعلاه.

الخطوة 3: الأشكال ثلاثية الأبعاد

الأشكال ثلاثية الأبعاد
الأشكال ثلاثية الأبعاد
الأشكال ثلاثية الأبعاد
الأشكال ثلاثية الأبعاد

بالنسبة لأي شخص لديه طابعة ثلاثية الأبعاد خاصة به ، فأنت في الخطوة الصحيحة. هذا جعل هذا المصباح سهل الاستخدام.

لأكون صادقًا ، كانت هذه أصعب خطوة قمت بها. هذا هو أول شيء فعلته مباشرة بعد تثبيت البرنامج!

أستخدم Sketchup Pro لتصميم هيكل المصباح. لسوء الحظ ، لست ماهرًا بما يكفي لتصميم مكوناتها الداخلية. رابط النموذج ثلاثي الأبعاد الخاص بي موجود في الملف أدناه.

الخطوة 4: مخطط المكونات

مخطط المكونات
مخطط المكونات

أستخدم فريتزينج لبناء مخططات المكونات. التخطيطي في الواقع سهل للغاية.

الخطوة 5: الكود

الرمز
الرمز

لترميز مصباح الحالة المزاجية هذا ، استخدمت بعض المكتبات من Arduino IDE. سيتم سرد المكتبات في الخطوة 7.

للحصول على الكود ، يجب أن يكون لديك برنامج Arduino نفسه. سأقدم الرابط للتنزيل هنا.

أيضا ، سوف يظهر الرسم أو الكود أدناه؟

لقد قدمت أيضًا ملف الكود في Github.com في حالة ما إذا كان الرمز أدناه طويلاً جدًا بحيث لا يمكن نسخه هنا ؛)

# تضمين # تضمين # تضمين #ifdef _AVR_ # تضمين #endif

SoftwareSerial BT (10 ، 11) ؛

#define LED_PIN 7 #define NUM_LEDS 60 #define BRIGHTNESS 200 #define SPEED 10 #define IMMEDIATELY 0 #define RAINBOW_SPEED 50 CRGB LEDs [NUM_LEDS] ؛

شريط Adafruit_NeoPixel = Adafruit_NeoPixel (NUM_LEDS ، LED_PIN ، NEO_GRB + NEO_KHZ800) ؛

bool offOld = منخفض ؛

منطقية WhiteOld = منخفضة ؛ منطقي RedOld = منخفض ؛ منطقي GreenOld = منخفض ؛ منطقي BlueOld = منخفض ؛ منطقي TopazOld = منخفض ؛ منطقي LilacOld = منخفض ؛ منطقية RainbowOld = منخفضة ؛ منطقي rgbOld = منخفض ؛ نوع int showType = 0 ؛

الإعداد باطل() {

FastLED.addLeds (المصابيح ، NUM_LEDS) ، //////////

BT.begin (9600) ؛

BT.println ("متصل بـ Arduino") ؛

strip.setBrightness (سطوع) ؛

strip.begin () ،

عرض الشريط()؛

}

شار أ ؛

حلقة فارغة() {

لـ (int i = 0 ؛ i <= 59 ؛ i ++) {المصابيح = CRGB (255 ، 255 ، 255) ؛ FastLED.show () ، } منطقي = منخفض ؛ منطقي أبيض = منخفض ؛ منطقي أزرق = منخفض ؛ منطقي أحمر = منخفض ؛ منطقي أخضر = منخفض ؛ منطقي توباز = منخفض ؛ منطقي ليلك = منخفض ؛ قوس قزح منطقي = منخفض ؛ منطقي rgb = منخفض ؛ نهاية منطقية إذا (BT.available ()) {a = (char) BT.read () ؛

إذا (أ == 'س')

{إيقاف = عالية ؛ BT.println ("إيقاف تشغيل مصابيح LED..") ؛

}آخر{

إيقاف = منخفض ؛ } // ================================================ ==============================================

إذا (أ == 'ث')

{أبيض = مرتفع ؛ BT.println ("TURNING LEDs WHITE") ؛

}آخر{

أبيض = منخفض ؛ } // ================================================ =============================================

إذا (أ == 'ب')

{أزرق = مرتفع ؛ BT.println ("التغيير إلى الأزرق") ؛ } آخر {أزرق = منخفض ؛ }

// ===========================================================================================

إذا (أ == 'ص')

{أحمر = مرتفع ؛ BT.println ("التغيير إلى الأحمر") ؛ } آخر {أحمر = منخفض ؛ }

// ===========================================================================================

إذا (أ == 'ز')

{أخضر = مرتفع ؛ BT.println ("التغيير إلى الأخضر") ؛ } آخر {أخضر = منخفض ؛ }

// ===========================================================================================

إذا (a == 't')

{توباز = مرتفع ؛ BT.println ("التغيير إلى توباز") ؛ } آخر {توباز = منخفض ؛ }

// ===========================================================================================

إذا (أ == 'ل')

{ليلك = عالي ؛ BT.println ("التغيير إلى أرجواني") ؛ } آخر {Lilac = LOW؛ }

// ===========================================================================================

إذا (أ == 'أ')

{قوس قزح = مرتفع ؛ BT.println ("قوس قزح الرسوم المتحركة") ؛ } آخر {قوس قزح = منخفض ؛ } // ================================================ =============================================

إذا (أ == 'م')

{rgb = عالية ؛ BT.println ("مزيج الألوان") ؛ } آخر {rgb = LOW؛ }} if (off == LOW && offOld == HIGH) {delay (20)؛ إذا (إيقاف == منخفض) {showType = 0 ؛ // إيقاف الرسوم المتحركة اكتب 0 startShow (showType) ؛ }}

// ===========================================================================================

إذا (أبيض == LOW && WhiteOld == مرتفع) {

تأخير (20) ؛ إذا (أبيض == منخفض) {showType = 1 ؛ // الرسوم المتحركة البيضاء النوع 1 startShow (showType) ؛ }}

// ================================================== ============================================= إذا (أحمر == منخفض && RedOld == HIGH) {delay (20) ؛ إذا (أحمر == منخفض) {showType = 2 ؛ // الرسوم المتحركة الحمراء النوع 2 startShow (showType) ؛ }}

// ===========================================================================================

إذا (الأخضر == LOW && GreenOld == مرتفع) {

تأخير (20) ؛ إذا (أخضر == منخفض) {showType = 3 ؛ // الرسوم المتحركة الخضراء النوع 3 startShow (showType) ؛ }} // =============================================== ===============================================

إذا (أزرق == LOW && BlueOld == مرتفع) {

تأخير (20) ؛ إذا (أزرق == منخفض) {showType = 4 ؛ // الرسوم المتحركة الزرقاء النوع 4 startShow (showType) ؛ }}

// ===========================================================================================

إذا (توباز == LOW && TopazOld == HIGH) {

تأخير (20) ؛ إذا (توباز == منخفض) {showType = 5 ؛ // Topaz animation Type 5 startShow (showType) ؛ }}

// ===========================================================================================

إذا (Lilac == LOW && LilacOld == HIGH) {

تأخير (20) ؛ إذا (Lilac == LOW) {showType = 6 ؛ // Topaz animation Type 6 startShow (showType) ؛ }} // =============================================== ===============================================

إذا (قوس قزح == LOW && RainbowOld == HIGH) {

تأخير (20) ؛

إذا (قوس قزح == منخفض) {

نوع العرض = 8 ؛ // قوس قزح للرسوم المتحركة من النوع 8 startShow (showType) ؛ }}

// ===========================================================================================

إذا (rgb == LOW && rgbOld == HIGH) {

تأخير (20) ؛

إذا (rgb == LOW) {

نوع العرض = 7 ؛ // مزيج من نوع الرسوم المتحركة 7 rgb = مرتفع ؛

startShow (showType) ؛

} }

WhiteOld = أبيض ؛

RedOld = أحمر ؛ BlueOld = أزرق ؛ GreenOld = أخضر ، توباز أولد = توباز ، LilacOld = ليلك ؛ offOld = إيقاف ؛ RainbowOld = قوس قزح ؛ rgbOld = rgb ؛

}

بدء باطل (int i) {

التبديل (ط) {

الحالة 0: مسح اللون (شريط اللون (0 ، 0 ، 0) ، السرعة) ؛ // قبالة أسود

استراحة؛

الحالة 1: strip.setBrightness (255) ؛ // يغير السطوع إلى MAX

مسح اللون (شريط ، لون (255 ، 255 ، 255) ، فورًا) ؛ // الشريط الأبيض. setBrightness (السطوع) ؛ // إعادة تعيين السطوع إلى القيمة الافتراضية لكسر ؛

الحالة 2: مسح اللون (شريط اللون (255 ، 0 ، 0) ، السرعة) ؛ // أحمر

استراحة؛

الحالة 3: مسح اللون (شريط اللون (0 ، 255 ، 0) ، السرعة) ؛ // لون أخضر

استراحة؛

الحالة 4: مسح اللون (شريط اللون (0 ، 0 ، 255) ، السرعة) ؛ // أزرق

استراحة؛

الحالة 5: مسح الألوان (شريط اللون (0 ، 250 ، 255) ، السرعة) ؛ // توباز

استراحة؛

العلبة 6: مسح الألوان (لون الشريط (221 ، 130 ، 255) ، السرعة) ؛ // ليلك

استراحة؛ الحالة 7: مسح الألوان (شريط اللون (255 ، 0 ، 0) ، السرعة) ؛ // اللون الأحمر مسح (لون الشريط (0 ، 255 ، 0) ، السرعة) ؛ // اللون الأخضر مسح (لون الشريط (0 ، 0 ، 255) ، السرعة) ؛ // Blue theatreChase (شريط اللون (0 ، 0 ، 127) ، السرعة) ؛ // Blue theatreChase (شريط اللون (127 ، 0 ، 0) ، السرعة) ؛ // Red theatreChase (شريط اللون (0 ، 127 ، 0) ، السرعة) ؛ // فاصل أخضر ؛

الحالة 8: دورة قوس قزح (25) ؛

استراحة؛ }} void colorWipe (uint32_t c، uint8_t wait) {for (uint16_t i = 0؛ i

دورة قوس قزح باطلة (uint8_t انتظر) {

uint16_t أنا ، ي ؛

لـ (j = 0 ؛ j <256 * 10 ؛ j ++) {// 5 دورات من كل الألوان على العجلة لـ (i = 0 ؛ i <strip.numPixels () ؛ i ++) {strip.setPixelColor (i ، Wheel ((((i * 256 / strip.numPixels ()) + j) & 255)) ؛ } عرض الشريط()؛ تأخير (انتظر) ؛ }}

void theatreChase (uint32_t c، uint8_t wait) {

لـ (int j = 0؛ j <10؛ j ++) {// do 10 cycles of chasing for (int q = 0؛ q <3؛ q ++) {for (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) {return strip. Color (255 - WheelPos * 3 ، 0 ، WheelPos * 3) ؛ } إذا (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 أو متجر تطبيقات Apple.

هذه هي خطوات التحكم في المصباح عبر هاتفك الذكي:

1. قم بتشغيل البلوتوث في هاتفك الذكي.

2. افتح التطبيق "Bluetooth Terminal HC-05".

3. يجب أن تشاهد الآن الأجهزة المقترنة على الشاشة. اختر "HC-05".

4. الآن يمكنك رؤية شاشة سوداء تظهر في هاتفك الذكي تشير إلى "متصل بـ Arduino".

5. هذا هو الجزء الممتع ، إذا قمت بكتابة "b" في مربع النص ، سيتحول المصباح إلى اللون الأزرق. فيما يلي قائمة بالأمر الذي يمكنك كتابته للمصباح:

- w للأبيض

- ب للأزرق

- g للأخضر

- r للاحمر

- ر للتوباز

- ل أرجواني

- أ للرسوم المتحركة قوس قزح

- يا للإيقاف

مرح ، أليس كذلك؟

6. أخيرًا وليس آخرًا ، يمكنك أيضًا تخصيص الزر الموجود أسفل الشاشة للنص الذي تريده كما هو موضح في الصورة أعلاه.

الخطوة 7: استمتع بمصباح مزاجك

استمتع بمصباح مزاجك !!
استمتع بمصباح مزاجك !!
استمتع بمصباح مزاجك !!
استمتع بمصباح مزاجك !!
استمتع بمصباح مزاجك !!
استمتع بمصباح مزاجك !!

آمل أن تعجبك هذه التعليمات. لقد كان مشروعًا صعبًا للغاية بالنسبة لي ، لكنني تمكنت من إكماله تمامًا كصبي يبلغ من العمر 14 عامًا. هل تعطيني بعض التعليقات من أجل التحسينات المستقبلية.

شكرا للقراءة وعيد ميلاد سعيد!

موصى به: