Съдържание:

Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 стъпки (със снимки)
Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 стъпки (със снимки)

Видео: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 стъпки (със снимки)

Видео: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 стъпки (със снимки)
Видео: LG Life’s Good Award : Conference - Full | LG 2024, Ноември
Anonim
Image
Image
Електрическа схема
Електрическа схема

Този проект е направен за курса Технология за концептуален дизайн в TUDelft

Крайният продукт е базова LED лампа ESP-32 и е свързан със сървъра. За прототипа лампата има две функции; ефект на дъга, който излъчва успокояващ цветен променлив блясък към заобикалящата го среда и на второ място визуализатор на звука, където LED пикселите „танцуват“според нивата на звука. Системата е свързана с wifi и потребителят може да избере какъв ефект иска от лампата чрез WIFI.

Евтиният микрочип ESP-32 ни предоставя мощни процесори, вграден сензор за зала, температурен сензор, сензор за докосване, а също и wifi и bluetooth. С това, макар че за този проект бяха избрани само два ефекта, значението на тази „интелигентна“лампа е неограничено. Той би бил използван за посочване на времето на потребителя или температурата на помещението, самата лампа може да действа като алармен спусък или може да даде успокояващ слънчев блясък до леглото си, симулиращ изгрев за приятно събуждане.

Стъпка 1: Необходим материал

Arduino esp32

Звуков сензор

Четирипосочен двупосочен конвертор на логическо ниво

Neopixel led 2m 60 led/m

Кабелни проводници

Микро USB кабел с адаптер

интернет връзка

Стъпка 2: Електрическа схема

Начертана е електрическа схема и съответно е направена схема, както е дадено в

диаграмата по -долу.

Стъпка 3: Arduino код

Тук първо беше направен код за визуализация. След това два примерни кода

; „Neoplxel RGBW starndtest“; и „simpleWebServerWifi“беше променен и интегриран в кода на визуализатора. Въпреки че кодът понякога все още има бъгове (произволен светодиод светва от време на време). Следващата итерация на кода (след като получим достатъчно време) ще бъде актуализирана.

#включва

#ifdef _AVR_

#включва

#endif

const int numReadings = 5;

int показания [numReadings];

int readIndex = 0;

int общо = 0;

int средно = 0;

int micPin = 33;

#дефинирайте ПИН 4

#дефинирайте NUM_LEDS 120

#дефинирайте ЯРКОСТ 100

Adafruit_NeoPixel strip = 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 status = WL_IDLE_STATUS;

WiFiServer сървър (80);

void setup ()

{

Serial.begin (9600); // инициализира серийна комуникация

pinMode (9, OUTPUT); // задаваме режим на LED извод

// проверете за наличието на щита:

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

Serial.println ("WiFi щит липсва");

while (вярно); // не продължавай

}

Низ 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;

}

}

void rainbow (uint8_t wait) {

uint16_t i, j;

за (j = 0; j <256; j ++) {

за (i = 0; i

strip.setPixelColor (i, Wheel ((i+j) & 255));

}

strip.show ();

забавяне (изчакване);

}

}

void визуализатор () {

общо = общо - показания [readIndex];

показания [readIndex] = analogRead (micPin);

общо = общо + показания [readIndex];

readIndex = readIndex + 1;

if (readIndex> = numReadings) {

readIndex = 0;

}

средно = общо / бройЧетения;

забавяне (1);

int микропиксел = (средно-100)/5;

Serial.println (micpixel);

if (micpixel> 0) {

{

за (int j = 0; j <= микропиксел; j ++)

strip.setPixelColor (j, (micpixel*2), 0, (90-micpixel), 0);

за (int j = микропиксел; 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 ();

}

}

void loop () {

{

WiFiClient клиент = server.available (); // слушаме за входящи клиенти

if (client) {// ако получите клиент, Serial.println ("нов клиент"); // отпечатва съобщение от серийния порт

Низ currentLine = ""; // създаваме низ за съхраняване на входящи данни от клиента

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 ("Тип съдържание: текст/html");

client.println ();

// съдържанието на HTTP отговора следва заглавката:

client.print ("Щракнете тук Включете ефекта на дъгата");

client.print ("Щракнете тук Включете визуализатора");

// HTTP отговорът завършва с друг празен ред:

client.println ();

// излиза от цикъла while:

прекъсване;

} else {// ако имате нов ред, изчистете currentLine:

currentLine = "";

}

} else if (c! = '\ r') {// ако имате нещо друго освен символ за връщане на каретка, currentLine += c; // добавяме го в края на текущата линия

}

// Проверете дали клиентската заявка е „GET /H“или „GET /L“:

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

Дъга (10); // Ефектът на дъгата е включен

}

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

Визуализатор (); // Визуализаторът е включен

}

}

}

// затваряме връзката:

client.stop ();

Serial.println ("клиентът не е свързан");

}

}

void printWifiStatus () {

// отпечатате SSID на мрежата, към която сте свързани:

Serial.print ("SSID:");

Serial.println (WiFi. SSID ());

// отпечатате IP адреса на вашия WiFi щит:

IP Адрес ip = WiFi.localIP ();

Serial.print ("IP адрес:");

Serial.println (ip);

// отпечатва силата на получения сигнал:

дълго rssi = WiFi. RSSI ();

Serial.print ("сила на сигнала (RSSI):");

Serial.print (rssi);

Serial.println ("dBm");

// отпечатайте къде да отидете в браузър:

Serial.print ( За да видите тази страница в действие, отворете браузър на

Serial.println (ip);

}

}

uint32_t Wheel (байт WheelPos) {

WheelPos = 255 - WheelPos;

if (WheelPos <85) {

обратна лента. Цвет (255 - WheelPos * 3, 0, WheelPos * 3, 0);

}

if (WheelPos <170) {

WheelPos -= 85;

обратна лента. Color (0, WheelPos * 3, 255 - WheelPos * 3, 0);

}

WheelPos -= 170;

обратна лента. Цвет (WheelPos * 3, 255 - WheelPos * 3, 0, 0);

}

uint8_t червено (uint32_t c) {

return (c >> 16);

}

uint8_t зелено (uint32_t c) {

return (c >> 8);

}

uint8_t синьо (uint32_t c) {

връщане (в);

}

}

//Serial.println(micpixel);

}

Стъпка 4: 3D отпечатване на основата на лампата

3D отпечатване на основата на лампата
3D отпечатване на основата на лампата

3D модел на основата на лампата беше измерен, проектиран и отпечатан с достатъчно големи размери, за да се поберат всички електрически компоненти в базовото отделение.

Стъпка 5: Светодиоден прикачен файл

Led прикачен файл
Led прикачен файл

Светодиодите бяха навити в картонена ролка и прикрепени с помощта на двустранна лента, в долната част е пробит отвор за преминаване на телта

Стъпка 6: Корпус на лампата

Корпус на лампата
Корпус на лампата

Направено е заграждение чрез намиране на прозрачна бутилка с подобна ширина като основата на лампата и височина като LED приставката. След това тя беше покрита с дебела хартия за по -добро разсейване на светлината. Като алтернатива е възможно да се използват матово стъкло или полупрозрачни пластмасови тръби като корпус на лампата.

Стъпка 7: Настройка

Настройвам
Настройвам

Всичко беше залепено и сглобено. И лампата беше готова за някои тестове !.

Препоръчано: