Home Made Mood Lamp
Una Mood Lamp es una lámpara a las cual le puedes personalizar el color de la luz. A continuación se muestra como puedes hacer una con un Kit de principiantes de Arduino y materiales caseros.
Materiales
- 3 Potenciómetros de 10 kΩ
- 4 resistencias de 210Ω
- 1 botón
- 1 sensor DHT11
- 1 Switch SDSP
- 1 LED RGB
- 1 Protoboard
- Arduino 1
- 27 Jumpers macho-macho
- Plancha de duroport
- Silicón
- Objeto que sirva de bombilla
- Cautín (opcional)
- Estaño (opcional)
Construcción
Pasos:
-1 Cortar una caja con la plancha de duroport, doblarla y pegarla tridimensionalmente.
-2 Cortar los agujeros para los 3 potenciómetros, el botón, la LED RGB, el sensor DHT11, el cable de energía y el interrumptor.
-3 Hacer una base alrededor de la LED RGB.
-4 Pegar la bombilla.
Diagrama Esquemático
Aquí se presenta la unión física de todos los componentes:
Diagrama De Flujo
Este diagrama de flujo muestra la lógica y el sentido del funcionamiento del proyecto.
Esta lámpara tiene dos modos de funcionamiento. De la forma
manual puedes escoger el color que tú quieras manipulando las luces de color rojo, verde y azul con tres potenciómetros, y con un botón puedes cambiar al modo automático, el cual mide la temperatura y humedad del habiente y emite luz con un color acorde a esta información.
Código
El diagrama de flujo tracido a código es el siguiente:
// Librería de sensor DHT11 en pin 10
#include "DHT.h"
#define DHTPIN 10 #define DHTTYPE DHT11 // DHT 11 DHT dht(DHTPIN, DHTTYPE);
// definir pins #define BLUE 3 #define GREEN 5 #define RED 6
// definit variables const int buttonPin = 8; int buttonState = 0; int lastButtonState = 0; int count = 1;
// Función de inicialización void setup() { Serial.begin(9600); Serial.println(F("DHT11 TEST")); dht.begin();
pinMode(RED, OUTPUT); pinMode(GREEN, OUTPUT); pinMode(BLUE, OUTPUT);
pinMode(buttonPin, INPUT);
}
// Programación del estado del botón void loop() { buttonState = digitalRead(buttonPin); if (buttonState ==HIGH && lastButtonState ==LOW){ if (count == 0){ M(); count = 1; } else { A(); count = 0; } } //Mantener activo un modo a la vez lastButtonState = buttonState; if (count== 0){ M(); } else{ A(); } }
// Programación del modo manual void M(){ int B = analogRead(A3); int R = analogRead(A5); int G = analogRead(A0);
// Asignar un potenciómetro a cada color del RGB analogWrite(BLUE, B); analogWrite(RED, R); analogWrite(GREEN, G);
}
// Programación del modo automático void A(){ // Toma de temperatura y humedad delay(500); float h = dht.readHumidity(); float t = dht.readTemperature();
//Mapear la información de temperatura a humedad int HPMW = map(h, 0, 1024, 0, 255); int TPMW = map(t, 0, 1024, 0, 255);
// Variable única con la información anterior int y = (HPMW + TPMW);
// Conidción para cambiar de color if (y <29){ analogWrite(RED, 18); analogWrite(BLUE, 73); analogWrite(GREEN, 4); }else { analogWrite(RED, 191); analogWrite(BLUE, 8); analogWrite(GREEN, 106); }
// Manejo de error en la toma de humedad y temperatura if (isnan(h) || isnan(t)) { Serial.println(F("Error en la lectura del sensor")); return;
// Mostrar la información del sensor en el monitor serial Serial.print(F("Humedad: ")); Serial.print(h); Serial.print(F("% Temperatura: ")); Serial.print(t); Serial.print(F("°C ")); Serial.println(y);
}
}
También se puede descargar aquí: