Taula de continguts:

Smart Lamp (TCfD) - Visualitzador Rainbow + Music: 7 passos (amb imatges)
Smart Lamp (TCfD) - Visualitzador Rainbow + Music: 7 passos (amb imatges)

Vídeo: Smart Lamp (TCfD) - Visualitzador Rainbow + Music: 7 passos (amb imatges)

Vídeo: Smart Lamp (TCfD) - Visualitzador Rainbow + Music: 7 passos (amb imatges)
Vídeo: Unpacking and installing the Philips Hue Play Gradient Lightstrip #shorts 2024, De novembre
Anonim
Image
Image
Esquema de connexions
Esquema de connexions

Aquest projecte es realitza per al curs Tecnologia per al disseny conceptual al TUDelft

El producte final és un llum LED de base ESP-32 i està connectat al servidor. Per al prototip, la làmpada té dues funcions; un efecte arc de Sant Martí que emet un suau resplendor de color cap al seu entorn i, en segon lloc, un visualitzador de so on els píxels LED "ballen" segons els nivells sonors. El sistema està connectat a wifi i l'usuari pot triar quin efecte vol des de la làmpada mitjançant WIFI.

El microxip ESP-32 econòmic ens proporciona processadors potents, sensor de sala incorporat, sensor de temperatura, sensor tàctil i també capacitat de wifi i bluetooth. Amb això, tot i que només es van triar dos efectes per a aquest projecte, la implicació d’aquest llum “intel·ligent” és il·limitada. S’utilitzaria per indicar el temps a l’usuari o la temperatura de l’habitació, la llum mateixa pot actuar com a disparador d’alarma o pot donar un resplendor tranquil·litzant al sol al costat del llit simulant la sortida del sol per a una bona experiència de despertar.

Pas 1: Material necessari

Arduino esp32

Sensor de so

Convertidor de nivell lògic bidireccional de quatre vies

Neopixel led 2m 60 led / m

Filferros de pont

Cable micro USB amb adaptador

connexió a Internet

Pas 2: diagrama del circuit

Es va dibuixar un diagrama de circuits i es va fer el circuit en conseqüència tal com es mostra a

el diagrama següent.

Pas 3: Codi Arduino

Aquí es va crear primer el codi del visualitzador. A continuació, dos exemples de codi

; "Neoplxel RGBW starndtest"; i "simpleWebServerWifi" es va modificar i integrar dins del codi del visualitzador. Tot i que el codi encara és erroni de vegades (el led aleatori s’encén de tant en tant). S'actualitzarà la següent iteració del codi (un cop obtinguem prou temps).

#incloure

#ifdef _AVR_

#incloure

#endif

const int numLectures = 5;

lectures int [numLectures];

int readIndex = 0;

int total = 0;

int mitjana = 0;

int micPin = 33;

#defineix el PIN 4

#define NUM_LEDS 120

#define BRIGHTNESS 100

Adafruit_NeoPixel strip = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800);

byte 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 };

#incloure

#incloure

char ssid = "la vostra xarxa"; // el vostre SSID de xarxa (nom)

char pass = "contrasenya secreta"; // la vostra contrasenya de xarxa

int keyIndex = 0; // el número d'índex de la vostra clau de xarxa (només necessari per a WEP)

int status = WL_IDLE_STATUS;

Servidor WiFiServer (80);

configuració nul·la ()

{

Serial.begin (9600); // inicialitzar la comunicació en sèrie

pinMode (9, OUTPUT); // estableix el mode de pin LED

// comproveu la presència de l'escut:

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

Serial.println ("No hi ha escut WiFi");

mentre que (cert); // no continueu

}

Cadena fv = WiFi.firmwareVersion ();

if (fv! = "1.1.0") {

Serial.println ("Actualitzeu el firmware");

}

// intenteu connectar-vos a la xarxa Wifi:

while (estat! = WL_CONNECTED) {

Serial.print ("Intent de connectar-se a la xarxa anomenada:");

Serial.println (ssid); // imprimeix el nom de la xarxa (SSID);

// Connecteu-vos a la xarxa WPA / WPA2. Canvieu aquesta línia si utilitzeu una xarxa oberta o WEP:

estat = WiFi.begin (ssid, pass);

// espereu 10 segons per a la connexió:

retard (10000);

}

server.begin (); // iniciar el servidor web al port 80

printWifiStatus (); // ja esteu connectat, així que imprimiu l'estat

}

{

Serial.begin (9600);

strip.setBrightness (LLUMINOSITAT);

strip.begin ();

strip.show (); // Inicialitza tots els píxels a "off"

pinMode (micPin, INPUT);

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

lectures [thisReading] = 0;

}

}

arc de Sant Martí buit (uint8_t espera) {

uint16_t i, j;

per a (j = 0; j <256; j ++) {

per a (i = 0; i

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

}

strip.show ();

retard (esperar);

}

}

visualitzador buit () {

total = total - lectures [readIndex];

lectures [readIndex] = analogRead (micPin);

total = total + lectures [readIndex];

readIndex = readIndex + 1;

if (readIndex> = numLectures) {

readIndex = 0;

}

mitjana = total / numLectures;

retard (1);

int micpixel = (mitjana-100) / 5;

Serial.println (micpixel);

if (micpíxel> 0) {

{

for (int j = 0; j <= micpixel; j ++)

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

for (int j = micpixel; j <= NUM_LEDS; j ++)

strip.setPixelColor (j, 0, 0, 0, 0);

strip.show ();

}

}

if (micpíxel <0) {

per a (int j = 0; j <= 20; j ++)

strip.setPixelColor (j, 0, 0, 50, 0);

strip.show ();

}

}

bucle buit () {

{

Client WiFiClient = servidor.available (); // escoltar els clients entrants

if (client) {// si obteniu un client, Serial.println ("client nou"); // imprimeix un missatge al port sèrie

String currentLine = ""; // feu una cadena per contenir les dades entrants del client

while (client.connected ()) {// loop mentre el client està connectat

if (client.available ()) {// si hi ha bytes per llegir del client, char c = client.read (); // llegir un byte, doncs

Serial.write (c); // imprimeix-lo al monitor sèrie

if (c == '\ n') {// si el byte és un caràcter de línia nova

// si la línia actual està en blanc, teniu dos caràcters de línia nova seguits.

// aquest és el final de la sol·licitud HTTP del client, així que envieu una resposta:

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

// Les capçaleres HTTP sempre comencen amb un codi de resposta (per exemple, HTTP / 1.1 200 OK)

// i un tipus de contingut perquè el client sàpiga què vindrà i, a continuació, una línia en blanc:

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

client.println ("Tipus de contingut: text / html");

client.println ();

// el contingut de la resposta HTTP segueix la capçalera:

client.print ("Feu clic aquí Activa l'efecte arc de Sant Martí");

client.print ("Feu clic aquí Activa Visualizer");

// La resposta HTTP acaba amb una altra línia en blanc:

client.println ();

// sortir del bucle while:

trencar;

} else {// si teniu una nova línia, esborreu currentLine:

Línia actual = "";

}

} else if (c! = '\ r') {// si teniu alguna cosa més que un caràcter de retorn de carro, Línia actual + = c; // Afegiu-lo al final de la línia actual

}

// Comproveu si la sol·licitud del client era "GET / H" o "GET / L":

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

Arc de Sant Martí (10); // S'ha activat l'efecte arc de Sant Martí

}

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

Visualitzador (); // El visualitzador està activat

}

}

}

// tanca la connexió:

client.stop ();

Serial.println ("client desconnectat");

}

}

void printWifiStatus () {

// imprimeix el SSID de la xarxa a la qual estàs connectat:

Serial.print ("SSID:");

Serial.println (WiFi. SSID ());

// imprimeix l'adreça IP del teu escut WiFi:

Adreça IP ip = WiFi.localIP ();

Serial.print ("Adreça IP:");

Serial.println (ip);

// imprimeix la intensitat del senyal rebut:

llarg rssi = WiFi. RSSI ();

Serial.print ("intensitat del senyal (RSSI):");

Serial.print (rssi);

Serial.println ("dBm");

// imprimeix on anar en un navegador:

Serial.print ( Per veure aquesta pàgina en acció, obriu un navegador a

Serial.println (ip);

}

}

uint32_t Wheel (byte WheelPos) {

WheelPos = 255 - WheelPos;

if (WheelPos <85) {

tira de retorn. Color (255 - WheelPos * 3, 0, WheelPos * 3, 0);

}

if (WheelPos <170) {

WheelPos - = 85;

tira de retorn. Color (0, WheelPos * 3, 255 - WheelPos * 3, 0);

}

WheelPos - = 170;

tira de retorn. Color (WheelPos * 3, 255 - WheelPos * 3, 0, 0);

}

uint8_t vermell (uint32_t c) {

retorn (c >> 16);

}

uint8_t verd (uint32_t c) {

retorn (c >> 8);

}

uint8_t blau (uint32_t c) {

retorn (c);

}

}

//Serial.println(micpixel);

}

Pas 4: Impressió en 3D de la base del llum

Impressió en 3D de la base de la làmpada
Impressió en 3D de la base de la làmpada

Es va mesurar, dissenyar i imprimir un model en 3D de la base de la làmpada amb unes dimensions prou grans per adaptar-se a tots els components elèctrics dins del compartiment de la base.

Pas 5: fitxer adjunt de led

Adjunt de leds
Adjunt de leds

Els led s’enrotllaven en rotllo de cartró i s’adherien amb cinta de doble cara, es feia un forat a la part inferior per fer passar el cable

Pas 6: Tancament de la làmpada

Tancament de làmpada
Tancament de làmpada

Es va fer un recinte trobant una ampolla transparent amb una amplada similar a la base i l’alçada de la làmpada com la fixació LED. Després es va cobrir amb paper gruixut per a una millor difusió de la llum. Com a alternativa, és possible utilitzar vidre esmerilat o tubs de plàstic translúcid com a tancament de la làmpada.

Pas 7: Configuració

Configuració
Configuració

Tot estava enganxat i muntat. I el llum estava preparat per fer algunes proves !.

Recomanat: