جدول المحتويات:
- الخطوة 1: المواد المطلوبة
- الخطوة 2: مخطط الدائرة
- الخطوة 3: كود اردوينو
- الخطوة 4: طباعة ثلاثية الأبعاد لقاعدة المصباح
- الخطوة 5: مرفق الصمام
- الخطوة 6: حاوية المصباح
- الخطوة 7: الإعداد
فيديو: المصباح الذكي (TCfD) - قوس قزح + مصور الموسيقى: 7 خطوات (بالصور)
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:41
تم تنفيذ هذا المشروع لدورة "تكنولوجيا تصميم المفاهيم" في TUDelft
المنتج النهائي عبارة عن مصباح LED أساسي ESP-32 ومتصل بالخادم. بالنسبة للنموذج الأولي ، فإن المصباح له وظيفتان ؛ تأثير قوس قزح الذي ينبعث توهجًا مهدئًا يتحول للألوان تجاه محيطه وثانيًا متخيل الصوت حيث "ترقص" وحدات البكسل LED وفقًا لمستويات الصوت. النظام متصل بشبكة wifi ويمكن للمستخدم اختيار التأثير الذي يريده من المصباح عبر WIFI.
توفر لنا الرقاقة الدقيقة ESP-32 رخيصة معالجات قوية ، ومستشعر القاعة يحمل في ثناياه عوامل ، ومستشعر درجة الحرارة ، ومستشعر اللمس وأيضًا قدرة wifi والبلوتوث. مع هذا ، في حين تم اختيار تأثيرين فقط لهذا المشروع ، فإن الآثار المترتبة على هذا المصباح "الذكي" لا حدود لها. يمكن استخدامه للإشارة إلى الطقس للمستخدم ، أو درجة حرارة الغرفة ، ويمكن للمصباح نفسه أن يعمل كمحرك إنذار أو يمكن أن يعطي توهجًا هادئًا لأشعة الشمس بجوار سريرك ليحاكي شروق الشمس لتجربة إيقاظ لطيفة.
الخطوة 1: المواد المطلوبة
اردوينو esp32
مستشعر الصوت
محول المستوى المنطقي ثنائي الاتجاه رباعي الاتجاه
نيوبكسل ليد 2 م 60 ليد / م
أسلاك العبور
كابل Micro USB مع محول
اتصال بالإنترنت
الخطوة 2: مخطط الدائرة
تم رسم مخطط الدائرة وتم عمل الدائرة وفقًا لذلك على النحو الوارد في
الرسم البياني أدناه.
الخطوة 3: كود اردوينو
هنا ، تم إنشاء رمز متخيل أولاً. ثم ، مثالين على الكود
؛ "neoplxel RGBW starndtest" ؛ و "simpleWebServerWifi" تم تعديله وإدماجه في كود المتخيل. على الرغم من أن الرمز لا يزال عربات التي تجرها الدواب في بعض الأحيان (يضيء مصباح LED عشوائيًا من وقت لآخر). سيتم تحديث التكرار التالي للرمز (بمجرد حصولنا على الوقت الكافي).
#يشمل
#ifdef _AVR_
#يشمل
#إنهاء إذا
const int numReadings = 5 ؛
قراءات int [numReadings] ؛
int readIndex = 0 ؛
مجموع int = 0 ؛
متوسط كثافة العمليات = 0 ؛
int micPin = 33 ؛
# تعريف رقم التعريف الشخصي 4
# تعريف NUM_LEDS 120
# تحديد السطوع 100
شريط Adafruit_NeoPixel = Adafruit_NeoPixel (NUM_LEDS ، PIN ، NEO_GRBW + NEO_KHZ800) ؛
بايت neopix_gamma = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25, 25, 26, 27, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36, 37, 38, 39, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50, 51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68, 69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83, 85, 86, 87, 89, 90, 92, 93, 95, 96, 98, 99, 101, 102, 104, 105, 107, 109, 110, 112, 114, 115, 117, 119, 120, 122, 124, 126, 127, 129, 131, 133, 135, 137, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 167, 169, 171, 173, 175, 177, 180, 182, 184, 186, 189, 191, 193, 196, 198, 200, 203, 205, 208, 210, 213, 215, 218, 220, 223, 225, 228, 231, 233, 236, 239, 241, 244, 247, 249, 252, 255 };
#يشمل
#يشمل
char ssid = "شبكتك" ؛ // شبكتك SSID (الاسم)
char pass = "secretPassword" ؛ // كلمة مرور شبكتك
مفتاح int keyIndex = 0 ؛ // رقم فهرس مفتاح الشبكة (مطلوب فقط لـ WEP)
حالة int = WL_IDLE_STATUS ؛
خادم WiFiServer (80) ؛
الإعداد باطل()
{
Serial.begin (9600) ؛ // تهيئة الاتصال التسلسلي
pinMode (9 ، الإخراج) ؛ // اضبط وضع دبوس LED
// تحقق من وجود الدرع:
إذا (WiFi.status () == WL_NO_SHIELD) {
Serial.println ("درع WiFi غير موجود") ؛
احيانا صحيح)؛ // لا تستمر
}
String fv = WiFi.firmwareVersion () ،
إذا (fv! = "1.1.0") {
Serial.println ("الرجاء ترقية البرنامج الثابت") ؛
}
// محاولة الاتصال بشبكة Wifi:
بينما (الحالة! = WL_CONNECTED) {
Serial.print ("محاولة الاتصال بشبكة باسم:")؛
Serial.println (ssid) ؛ // طباعة اسم الشبكة (SSID) ؛
// الاتصال بشبكة WPA / WPA2. غيّر هذا الخط إذا كنت تستخدم شبكة مفتوحة أو شبكة WEP:
status = WiFi.begin (ssid، pass) ؛
// انتظر 10 ثوانٍ للاتصال:
تأخير (10000) ؛
}
server.begin () ، // بدء خادم الويب على المنفذ 80
printWifiStatus () ، // أنت متصل الآن ، لذا اطبع الحالة
}
{
Serial.begin (9600) ؛
strip.setBrightness (سطوع) ؛
strip.begin () ،
عرض الشريط()؛ // تهيئة جميع وحدات البكسل على "إيقاف"
pinMode (micPin ، الإدخال) ؛
لـ (int thisReading = 0؛ thisReading <numReadings؛ thisReading ++) {
قراءات [thisReading] = 0 ؛
}
}
قوس قزح باطل (uint8_t انتظر) {
uint16_t أنا ، ي ؛
لـ (j = 0 ؛ j <256 ؛ j ++) {
لـ (أنا = 0 ؛ أنا
strip.setPixelColor (i ، Wheel ((i + j) & 255)) ؛
}
عرض الشريط()؛
تأخير (انتظر) ؛
}
}
متخيل باطل () {
total = total - القراءات [readIndex] ؛
القراءات [readIndex] = analogRead (micPin) ؛
المجموع = مجموع + القراءات [فهرس القراءة] ؛
readIndex = readIndex + 1 ؛
إذا (readIndex> = numReadings) {
readIndex = 0 ؛
}
المتوسط = المجموع / numReadings ؛
تأخير (1) ؛
عدد وحدات البكسل = (متوسط 100) / 5 ؛
Serial.println (ميكروفون) ؛
إذا (micpixel> 0) {
{
لـ (int j = 0 ؛ j <= micpixel ؛ j ++)
strip.setPixelColor (j، (micpixel * 2)، 0، (90-micpixel)، 0) ؛
لـ (int j = micpixel ؛ j <= NUM_LEDS ؛ j ++)
strip.setPixelColor (j ، 0 ، 0 ، 0 ، 0) ؛
عرض الشريط()؛
}
}
إذا كان (micpixel <0) {
لـ (int j = 0 ؛ j <= 20 ؛ j ++)
strip.setPixelColor (j ، 0 ، 0 ، 50 ، 0) ؛
عرض الشريط()؛
}
}
حلقة فارغة() {
{
عميل WiFiClient = server.available () ؛ // استمع للعملاء القادمين
if (client) {// إذا حصلت على عميل ،
Serial.println ("عميل جديد") ؛ // طباعة رسالة من المنفذ التسلسلي
String currentLine = ""؛ // عمل سلسلة لحفظ البيانات الواردة من العميل
while (client.connected ()) {// حلقة أثناء اتصال العميل
if (client.available ()) {// إذا كان هناك بايت للقراءة من العميل ،
char c = client.read () ؛ // قراءة بايت ، ثم
Serial.write (ج) ؛ // اطبعها على الشاشة التسلسلية
if (c == '\ n') {// إذا كان البايت حرف سطر جديد
// إذا كان السطر الحالي فارغًا ، فستحصل على حرفين سطرين جديدين على التوالي.
// هذه هي نهاية طلب HTTP للعميل ، لذا أرسل ردًا:
إذا (currentLine.length () == 0) {
// تبدأ رؤوس HTTP دائمًا برمز استجابة (مثل HTTP / 1.1 200 OK)
// ونوع المحتوى حتى يعرف العميل ما هو قادم ، ثم سطر فارغ:
client.println ("HTTP / 1.1 200 OK") ؛
client.println ("نوع المحتوى: نص / html") ؛
client.println () ،
// يتبع محتوى استجابة HTTP الرأس:
client.print ("انقر هنا تشغيل تأثير قوس قزح") ؛
client.print ("انقر هنا Turn on Visualizer") ؛
// تنتهي استجابة HTTP بسطر فارغ آخر:
client.println () ،
// الخروج من حلقة while:
استراحة؛
} else {// إذا حصلت على سطر جديد ، فامسح currentLine:
currentLine = "" ؛
}
} else if (c! = '\ r') {// إذا كان لديك أي شيء آخر عدا حرف إرجاع ،
الخط الحالي + = ج ؛ // إضافته إلى نهاية السطر الحالي
}
// تحقق لمعرفة ما إذا كان طلب العميل "GET / H" أو "GET / L":
إذا (currentLine.endsWith ("GET / R")) {
قوس قزح (10) ؛ // تم تشغيل تأثير قوس قزح
}
إذا (currentLine.endsWith ("GET / V")) {
متخيل () ؛ // متخيل قيد التشغيل
}
}
}
// أغلق الاتصال:
client.stop () ؛
Serial.println ("العميل غير متصل") ؛
}
}
printWifiStatus () باطلة {
// طباعة SSID للشبكة التي تتصل بها:
Serial.print ("SSID:") ؛
Serial.println (WiFi. SSID ()) ؛
// طباعة عنوان IP الخاص بدرع WiFi:
IPAddress ip = WiFi.localIP () ؛
Serial.print ("عنوان IP:") ؛
Serial.println (ip) ؛
// طباعة قوة الإشارة المستلمة:
long rssi = WiFi. RSSI () ؛
Serial.print ("قوة الإشارة (RSSI):") ؛
Serial.print (rssi) ؛
Serial.println ("ديسيبل") ؛
// طباعة إلى أين تذهب في المتصفح:
Serial.print ("لمشاهدة هذه الصفحة أثناء العمل ، افتح مستعرضًا لـ https://") ؛
Serial.println (ip) ؛
}
}
uint32_t Wheel (بايت WheelPos) {
WheelPos = 255 - WheelPos ؛
إذا (WheelPos <85) {
شريط العودة اللون (255 - WheelPos * 3 ، 0 ، WheelPos * 3 ، 0) ؛
}
إذا (WheelPos <170) {
WheelPos - = 85 ؛
شريط العودة اللون (0 ، WheelPos * 3 ، 255 - WheelPos * 3 ، 0) ؛
}
WheelPos - = 170 ؛
شريط العودة اللون (WheelPos * 3 ، 255 - WheelPos * 3 ، 0 ، 0) ؛
}
uint8_t أحمر (uint32_t c) {
العودة (ج >> 16) ؛
}
uint8_t أخضر (uint32_t c) {
العودة (ج >> 8) ؛
}
uint8_t blue (uint32_t c) {
العودة (ج) ؛
}
}
//Serial.println(micpixel) ؛
}
الخطوة 4: طباعة ثلاثية الأبعاد لقاعدة المصباح
تم قياس وتصميم وطباعة نموذج ثلاثي الأبعاد لقاعدة المصباح بأبعاد كبيرة بما يكفي لتناسب جميع المكونات الكهربائية داخل حجرة القاعدة.
الخطوة 5: مرفق الصمام
تم لف ليد في لفة من الورق المقوى وربطها بشريط مزدوج الجوانب ، وتم حفر ثقب في الجزء السفلي لتمرير السلك من خلاله
الخطوة 6: حاوية المصباح
تم إنشاء العلبة من خلال العثور على زجاجة شفافة بعرض مماثل لقاعدة المصباح وارتفاعه مثل ملحق LED. ثم تمت تغطيتها بورق سميك لتحسين انتشار الضوء. بدلاً من ذلك ، من الممكن استخدام الزجاج المصنفر أو الأنابيب البلاستيكية الشفافة كحاوية للمصباح.
الخطوة 7: الإعداد
تم لصق كل شيء معًا وتجميعه. وكان المصباح جاهزا لبعض الاختبارات !.
موصى به:
مصور صوت قلم الليزر: 3 خطوات (بالصور)
مصور صوت قلم الليزر: في هذا الدليل سوف تكتشف كيفية إنشاء مصور الصوت الخاص بك باستخدام موارد بسيطة. السماح لك بمشاهدة تمثيل مرئي للصوت أو الموسيقى أو أي شيء يمكنك توصيله بمكبر الصوت! يرجى ملاحظة - هذا الدليل يستخدم قلم ليزر يمكنه
لوحة Translightion (مصور الموسيقى القابل للتحكم): 5 خطوات
لوحة Translightion (مصور الموسيقى القابل للتحكم): ترجمة الموسيقى إلى عرض ضوئي مبهر باستخدام مشروع وحدة التحكم في الضوء القابل للتخصيص. رائع للدي جي والحفلات وعروض 1: 1! العرض التوضيحي المحدث أدناه
مصور الموسيقى مع الأردوينو: 5 خطوات
مصور الموسيقى مع Arduino: مصور الموسيقى التفاعلي المكونات LM338T x5 مقياس الجهد x2 (1 كيلو و 10 كيلو) 1N4006 الصمام الثنائي x5 المكثف x2 (1 فائق التوهج و 10 فائق التوهج) المقاومات x3 (416 و 10 كيلو و 1 كيلو) مقسم مساعد
مكبر صوت بلوتوث مع مصور الموسيقى: 10 خطوات (مع صور)
مكبر صوت Bluetooth مع مصور الموسيقى: في هذا الدليل ، سأوضح لك كيف أقوم ببناء مكبر صوت Bluetooth الذي يحتوي على متخيل موسيقى في الأعلى. يبدو رائعًا حقًا ويجعل لحظة الاستماع إلى أغنيتك أكثر روعة. يمكنك أن تقرر ما إذا كنت تريد تشغيل المتخيل أم لا
مصور الموسيقى (راسم الذبذبات): 4 خطوات (بالصور)
مصور الموسيقى (راسم الذبذبات): يوفر هذا المصور الموسيقي طريقة ممتازة لإضافة المزيد من العمق إلى تجربة الموسيقى الخاصة بك ، ومن السهل جدًا تكوينه. قد يكون مفيدًا أيضًا باعتباره راسم ذبذبات فعلي لبعض التطبيقات ، كل ما هو مطلوب هو: - crt قديم (تقريبًا كل b & am