Índice:

Lâmpada inteligente (TCfD) - Rainbow + Music Visualizer: 7 etapas (com imagens)
Lâmpada inteligente (TCfD) - Rainbow + Music Visualizer: 7 etapas (com imagens)

Vídeo: Lâmpada inteligente (TCfD) - Rainbow + Music Visualizer: 7 etapas (com imagens)

Vídeo: Lâmpada inteligente (TCfD) - Rainbow + Music Visualizer: 7 etapas (com imagens)
Vídeo: Webinar TCFD: Gestão de Riscos e Adaptação Climática 2024, Novembro
Anonim
Image
Image
Diagrama de circuito
Diagrama de circuito

Este projeto é feito para o curso de Tecnologia para Design de Conceito na TUDelft

O produto final é uma lâmpada LED base ESP-32 e está conectada ao servidor. Para o protótipo, a lâmpada tem duas funções; um efeito arco-íris que emite um brilho suave de mudança de cor em direção ao ambiente e, em segundo lugar, um visualizador de som onde os pixels de LED “dançam” de acordo com os níveis de som. O sistema está conectado a wi-fi e o usuário pode escolher o efeito que deseja da lâmpada via WIFI.

O microchip ESP-32 barato nos fornece processadores poderosos, sensor hall embutido, sensor de temperatura, sensor de toque e também capacidade wi-fi e bluetooth. Com isso, embora apenas dois efeitos tenham sido escolhidos para este projeto, a implicação desta lâmpada “inteligente” é ilimitada. Seria usado para indicar o tempo ao usuário, ou a temperatura do ambiente, a própria lâmpada pode atuar como um gatilho de alarme ou pode dar um brilho de luz solar calmante ao lado de sua cama, simulando o nascer do sol para uma experiência agradável de despertar.

Etapa 1: Material necessário

Arduino esp32

Sensor de som

Conversor de nível lógico bidirecional de quatro vias

Neopixel led 2m 60 led / m

Fios de ligação

Cabo micro USB com adaptador

conexão de internet

Etapa 2: Diagrama de Circuito

Um diagrama de circuito foi desenhado e o circuito foi feito de acordo com as

o diagrama abaixo.

Etapa 3: Código Arduino

Aqui, primeiro o código do visualizador foi feito. Então, dois exemplos de código

; “Neoplxel RGBW starndtest”; e “simpleWebServerWifi” foi modificado e integrado no código do visualizador. Embora o código ainda tenha bugs às vezes (LEDs aleatórios acendem de vez em quando). A próxima iteração do código (assim que tivermos tempo suficiente) será atualizada.

#incluir

#ifdef _AVR_

#incluir

#fim se

const int numReadings = 5;

leituras int [numReadings];

int readIndex = 0;

total int = 0;

média interna = 0;

int micPin = 33;

# define PIN 4

# define NUM_LEDS 120

# define BRIGHTNESS 100

Tira Adafruit_NeoPixel = 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 };

#incluir

#incluir

char ssid = "sua rede"; // seu SSID de rede (nome)

char pass = "secretPassword"; // sua senha de rede

int keyIndex = 0; // o número do índice da sua chave de rede (necessário apenas para WEP)

status interno = WL_IDLE_STATUS;

Servidor WiFiServer (80);

void setup ()

{

Serial.begin (9600); // inicializa a comunicação serial

pinMode (9, SAÍDA); // define o modo de pino do LED

// verifique a presença do escudo:

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

Serial.println ("escudo WiFi não presente");

enquanto (verdadeiro); // não continue

}

String fv = WiFi.firmwareVersion ();

if (fv! = "1.1.0") {

Serial.println ("Atualize o firmware");

}

// tentativa de se conectar à rede Wifi:

enquanto (status! = WL_CONNECTED) {

Serial.print ("Tentando conectar-se à rede chamada:");

Serial.println (ssid); // imprime o nome da rede (SSID);

// Conecte-se à rede WPA / WPA2. Altere esta linha se estiver usando uma rede aberta ou WEP:

status = WiFi.begin (SSID, aprovação);

// aguarde 10 segundos pela conexão:

atraso (10000);

}

server.begin (); // inicia o servidor web na porta 80

printWifiStatus (); // você está conectado agora, então imprima o status

}

{

Serial.begin (9600);

strip.setBrightness (BRIGHTNESS);

strip.begin ();

strip.show (); // Inicializa todos os pixels para 'desligado'

pinMode (micPin, INPUT);

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

leituras [thisReading] = 0;

}

}

void rainbow (uint8_t wait) {

uint16_t i, j;

para (j = 0; j <256; j ++) {

para (i = 0; i

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

}

strip.show ();

atrasar (esperar);

}

}

void visualizer () {

total = total - leituras [índice de leitura];

leituras [readIndex] = analogRead (micPin);

total = total + leituras [índice de leitura];

readIndex = readIndex + 1;

if (readIndex> = numReadings) {

readIndex = 0;

}

média = total / numReadings;

atraso (1);

int micpixel = (média-100) / 5;

Serial.println (micpixel);

if (micpixel> 0) {

{

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

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

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

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

strip.show ();

}

}

if (micpixel <0) {

para (int j = 0; j <= 20; j ++)

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

strip.show ();

}

}

void loop () {

{

Cliente WiFiClient = server.available (); // escuta os clientes que chegam

if (cliente) {// se você conseguir um cliente, Serial.println ("novo cliente"); // imprime uma mensagem pela porta serial

String currentLine = ""; // faça uma string para conter os dados de entrada do cliente

while (client.connected ()) {// loop enquanto o cliente está conectado

if (client.available ()) {// se houver bytes para ler do cliente, char c = client.read (); // leia um byte, então

Serial.write (c); // imprima no monitor serial

if (c == '\ n') {// se o byte é um caractere de nova linha

// se a linha atual estiver em branco, você terá dois caracteres de nova linha em uma linha.

// esse é o fim da solicitação HTTP do cliente, então envie uma resposta:

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

// Os cabeçalhos HTTP sempre começam com um código de resposta (por exemplo, HTTP / 1.1 200 OK)

// e um content-type para que o cliente saiba o que está por vir, em seguida, uma linha em branco:

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

client.println ("Tipo de conteúdo: texto / html");

client.println ();

// o conteúdo da resposta HTTP segue o cabeçalho:

client.print ("Clique aqui Ativar o efeito Arco-íris");

client.print ("Clique aqui Ativar Visualizador");

// A resposta HTTP termina com outra linha em branco:

client.println ();

// sair do loop while:

pausa;

} else {// se você obteve uma nova linha, então limpe currentLine:

currentLine = "";

}

} else if (c! = '\ r') {// se você obteve qualquer outra coisa além de um caractere de retorno de carro, linha atual + = c; // adicione-o ao final da currentLine

}

// Verifique se a solicitação do cliente era "GET / H" ou "GET / L":

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

Arco-íris (10); // Efeito arco-íris ativado

}

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

Visualizar(); // O visualizador está ligado

}

}

}

// feche a conexão:

client.stop ();

Serial.println ("cliente desconectado");

}

}

void printWifiStatus () {

// imprime o SSID da rede à qual você está conectado:

Serial.print ("SSID:");

Serial.println (WiFi. SSID ());

// imprime o endereço IP do seu escudo WiFi:

IPAddress ip = WiFi.localIP ();

Serial.print ("Endereço IP:");

Serial.println (ip);

// imprime a força do sinal recebido:

rssi longo = WiFi. RSSI ();

Serial.print ("intensidade do sinal (RSSI):");

Serial.print (rssi);

Serial.println ("dBm");

// imprime onde ir em um navegador:

Serial.print ( Para ver esta página em ação, abra um navegador para

Serial.println (ip);

}

}

uint32_t Wheel (byte WheelPos) {

WheelPos = 255 - WheelPos;

if (WheelPos <85) {

return strip. Color (255 - WheelPos * 3, 0, WheelPos * 3, 0);

}

if (WheelPos <170) {

WheelPos - = 85;

return strip. Color (0, WheelPos * 3, 255 - WheelPos * 3, 0);

}

WheelPos - = 170;

return strip. Color (WheelPos * 3, 255 - WheelPos * 3, 0, 0);

}

uint8_t red (uint32_t c) {

retorno (c >> 16);

}

uint8_t verde (uint32_t c) {

retorno (c >> 8);

}

uint8_t blue (uint32_t c) {

retorno (c);

}

}

//Serial.println(micpixel);

}

Etapa 4: impressão em 3D da base da lâmpada

Impressão 3D da base da lâmpada
Impressão 3D da base da lâmpada

Um modelo 3D da base da lâmpada foi medido, desenhado e impresso com dimensões grandes o suficiente para caber todos os componentes elétricos dentro do compartimento da base.

Etapa 5: anexo conduzido

Anexo Led
Anexo Led

Os Led's foram enrolados em rolo de papelão e presos com fita dupla-face, um orifício foi feito na parte inferior para passar o fio através

Etapa 6: Caixa da lâmpada

Caixa da lâmpada
Caixa da lâmpada

Um invólucro foi feito encontrando uma garrafa transparente com largura semelhante à base da lâmpada e altura como o acessório de LED. Este foi então coberto com papel grosso para melhor difusão da luz. Como alternativa, é possível usar vidro fosco ou tubos de plástico translúcido como invólucro da lâmpada.

Etapa 7: configuração

Configurar
Configurar

Tudo foi colado e montado. E a lâmpada estava pronta para alguns testes !.

Recomendado: