فهرست مطالب:

لامپ هوشمند (TCfD) - Rainbow + Music Visualizer: 7 مرحله (همراه با تصاویر)
لامپ هوشمند (TCfD) - Rainbow + Music Visualizer: 7 مرحله (همراه با تصاویر)

تصویری: لامپ هوشمند (TCfD) - Rainbow + Music Visualizer: 7 مرحله (همراه با تصاویر)

تصویری: لامپ هوشمند (TCfD) - Rainbow + Music Visualizer: 7 مرحله (همراه با تصاویر)
تصویری: لامپ هوشمند 2024, جولای
Anonim
Image
Image
مدار
مدار

این پروژه برای دوره فناوری برای طراحی مفهوم در TUDelft انجام می شود

محصول نهایی یک لامپ LED پایه ESP-32 است و به سرور متصل است. برای نمونه اولیه ، لامپ دارای دو عملکرد است. جلوه ای رنگین کمان که درخشندگی آرامش بخش را به محیط اطراف منتقل می کند و در مرحله دوم تجسم کننده صدا است که پیکسل های LED با توجه به سطح صدا "می رقصند". سیستم به وای فای متصل است و کاربر می تواند از طریق WIFI انتخاب کند که از لامپ چه جلوه ای می خواهد.

میکروچیپ ارزان ESP-32 پردازنده های قدرتمند ، سنسور داخلی داخلی ، سنسور دما ، سنسور لمسی و همچنین وای فای و بلوتوث را در اختیار ما قرار می دهد. با این وجود ، در حالی که فقط دو جلوه برای این پروژه انتخاب شد ، مفهوم این لامپ "هوشمند" نامحدود است. برای نشان دادن آب و هوا به کاربر یا دمای اتاق ، چراغ می تواند به عنوان یک زنگ هشدار عمل کند یا می تواند تابش نور خورشید را در کنار تخت شما برای شبیه سازی طلوع آفتاب برای یک تجربه خوب بیداری ایجاد کند.

مرحله 1: مواد مورد نیاز

آردوینو esp32

سنسور صدا

مبدل سطح منطق چهار جهته دو طرفه

رهبری Neopixel 2m 60 led/m

سیم های بلوز

کابل میکرو USB با آداپتور

اتصال اینترنت

مرحله 2: نمودار مدار

یک نمودار مدار رسم شد و مدار مطابق شکل زیر ساخته شد

نمودار زیر

مرحله 3: کد آردوینو

در اینجا ، ابتدا کد تجسم کننده ساخته شد. سپس ، دو کد نمونه

؛ "neoplxel RGBW starndtest"؛ و “simpleWebServerWifi” اصلاح شد و در کد تجسم کننده ادغام شد. اگرچه گاهی اوقات کد هنوز اشکال دارد (چراغ رهبری تصادفی هر از گاهی روشن می شود). تکرار بعدی کد (هنگامی که زمان کافی به دست آوردیم) به روز می شود.

#عبارتند از

#ifdef _AVR_

#عبارتند از

#اندیف

const int numReadings = 5؛

int خواندن [numReadings] ؛

int readIndex = 0؛

int کل = 0؛

int متوسط = 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 = "yourNetwork"؛ // SSID شبکه شما (نام)

char pass = "secretPassword"؛ // رمز شبکه شما

int keyIndex = 0؛ // شماره فهرست کلید شبکه شما (فقط برای WEP لازم است)

وضعیت int = WL_IDLE_STATUS؛

سرور WiFiServer (80) ؛

void setup ()

{

Serial.begin (9600)؛ // برقراری ارتباط سریالی

pinMode (9 ، OUTPUT) ؛ // حالت پین LED را تنظیم کنید

// وجود سپر را بررسی کنید:

if (WiFi.status () == WL_NO_SHIELD) {

Serial.println ("سپر WiFi موجود نیست") ؛

در حالی که (درست) ؛ // ادامه نده

}

رشته fv = WiFi.firmwareVersion ()؛

if (fv! = "1.1.0") {

Serial.println ("لطفاً سیستم عامل را ارتقا دهید") ؛

}

// تلاش برای اتصال به شبکه Wifi:

while (وضعیت! = 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 (BRIGHTNESS) ؛

strip.begin ()؛

strip.show ()؛ // مقداردهی اولیه همه پیکسل ها به حالت "خاموش"

pinMode (micPin ، INPUT) ؛

for (int thisReading = 0؛ thisReading <numReadings؛ thisReading ++) {

خواندن [thisReading] = 0 ؛

}

}

رنگین کمان خالی (uint8_t صبر کنید) {

uint16_t i، j؛

برای (j = 0 ؛ j <256 ؛ j ++) {

برای (i = 0 ؛ i

strip.setPixelColor (i ، Wheel ((i+j) & 255)) ؛

}

strip.show ()؛

تأخیر (صبر) ؛

}

}

void visualizer () {

مجموع = مجموع - خواندن [readIndex] ؛

خواندن [readIndex] = analogRead (micPin) ؛

مجموع = مجموع + خوانش [readIndex] ؛

readIndex = readIndex + 1 ؛

if (readIndex> = numReadings) {

readIndex = 0 ؛

}

متوسط = مجموع / numReadings؛

تأخیر (1) ؛

int micpixel = (متوسط 100)/5 ؛

Serial.println (میکرو پیکسل) ؛

if (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)؛

strip.show ()؛

}

}

if (micpixel <0) {

برای (int j = 0 ؛ j <= 20 ؛ j ++)

strip.setPixelColor (j، 0، 0، 50، 0)؛

strip.show ()؛

}

}

حلقه خالی () {

{

مشتری WiFiClient = server.available ()؛ // به مشتریان ورودی گوش دهید

if (client) {// اگر مشتری دریافت کردید ،

Serial.println ("مشتری جدید") ؛ // پیام را از پورت سریال چاپ کنید

string currentLine = ""؛ // ایجاد یک String برای نگهداری داده های دریافتی از سرویس گیرنده

while (client.connected ()) {// حلقه در حالی که مشتری متصل است

if (client.available ()) {// اگر بایت هایی برای خواندن از مشتری وجود دارد ،

char c = client.read ()؛ // پس یک بایت بخوانید

Serial.write (c)؛ // آن را از مانیتور سریال چاپ کنید

if (c == '\ n') {// اگر بایت یک کاراکتر جدید خط باشد

// اگر خط فعلی خالی است ، دو کاراکتر خط جدید در یک ردیف دارید.

// این پایان درخواست مشتری HTTP است ، بنابراین یک پاسخ ارسال کنید:

if (currentLine.length () == 0) {

// سرصفحه های HTTP همیشه با یک کد پاسخ شروع می شوند (به عنوان مثال HTTP/1.1 200 OK)

// و نوع محتوا تا مشتری بداند چه اتفاقی می افتد ، سپس یک خط خالی:

client.println ("HTTP/1.1 200 OK") ؛

client.println ("نوع محتوا: text/html")؛

client.println ()؛

// محتوای پاسخ HTTP از سرصفحه زیر پیروی می کند:

client.print ("اینجا را کلیک کنید روشن کردن اثر رنگین کمان") ؛

client.print ("اینجا را کلیک کنید روشن کردن ویژوالایزر")؛

// پاسخ HTTP با یک خط خالی دیگر به پایان می رسد:

client.println ()؛

// از حلقه while خارج شوید:

زنگ تفريح؛

} else {// اگر خط جدیدی دارید ، CurrentLine را پاک کنید:

currentLine = ""؛

}

} else if (c! = '\ r') {// اگر به جز کاراکتر بازگشت کالسکه چیز دیگری دارید ،

currentLine += c؛ // آن را به انتهای currentLine اضافه کنید

}

// بررسی کنید که آیا درخواست مشتری "GET /H" یا "GET /L" بوده است:

if (currentLine.endsWith ("GET /R")) {

رنگین کمان (10) ؛ // جلوه رنگین کمان روشن شد

}

if (currentLine.endsWith ("GET /V")) {

Visualizer ()؛ // Visualizer روشن است

}

}

}

// بستن اتصال:

client.stop ()؛

Serial.println ("اتصال مشتری قطع شده است")؛

}

}

void 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 ("dBm") ؛

// چاپ کنید که در مرورگر کجا بروید:

Serial.print ("برای مشاهده این صفحه در عمل ، مرورگری را به آدرس https:// باز کنید") ؛

Serial.println (ip)؛

}

}

uint32_t Wheel (byte WheelPos) {

WheelPos = 255 - WheelPos ؛

if (WheelPos <85) {

نوار بازگشت. رنگ (255 - WheelPos * 3 ، 0 ، WheelPos * 3 ، 0) ؛

}

if (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) {

بازگشت (c >> 16) ؛

}

uint8_t سبز (uint32_t c) {

بازگشت (c >> 8) ؛

}

uint8_t آبی (uint32_t c) {

بازگشت (ج) ؛

}

}

//Serial.println(micpixel) ؛

}

مرحله 4: چاپ سه بعدی پایه لامپ

چاپ سه بعدی پایه لامپ
چاپ سه بعدی پایه لامپ

یک مدل سه بعدی از پایه لامپ اندازه گیری ، طراحی و چاپ شد با ابعادی به اندازه کافی بزرگ که بتواند همه اجزای الکتریکی داخل محفظه پایه را در خود جای دهد.

مرحله 5: پیوست Led

پیوست رهبری
پیوست رهبری

Led's در رول مقوایی پیچیده شد و با استفاده از نوار دو طرفه متصل شد ، سوراخی در قسمت زیرین برای عبور سیم از طریق آن ایجاد شد

مرحله 6: محفظه لامپ

محفظه لامپ
محفظه لامپ

یک محفظه با پیدا کردن یک بطری شفاف با عرض مشابه پایه چراغ و ارتفاع پیوست LED ساخته شد. سپس برای پخش بهتر نور با کاغذ ضخیم پوشانده شد. از طرف دیگر ، ممکن است از شیشه مات یا لوله های پلاستیکی شفاف به عنوان محفظه لامپ استفاده کنید.

مرحله 7: راه اندازی

برپایی
برپایی

همه چیز به هم چسبیده و جمع شد. و لامپ برای آزمایش آماده بود !.

توصیه شده: