Introduction: Harry Potter's Mood-Lamp

La lampara de Harry Potter cumple una función muy interesante, ya que cada vez que se prende la lampara esta genera una función manual y una función automática. La función manual es muy interesante, ya que con esa función se puede regular el color que tú quieras poner, ya sea rojo, rosado, amarillo, azul, etc. Pero eso no es todo, cuando uno cambia a un modo automático, el color de la lampara comienza a cambiar dependiendo de que tanta humedad halla y a qué temperatura este uno. Luego de eso, puedes volver a reiniciar el ciclo a través de un botón.

Step 1: Funcionamiento De La Lámpara

Step 2: Circuito Armado Y Sus Materiales

- Arduino UNO

- 3 Potenciómetros 20K

- Sensor DHT11

- Tira de LEDs RGB NeoPixel

- Protoboard

- Jumpers para protoboard

- Pulsador eléctrico

- Resistencia de 100 Ohm

- Jarrón de cristal

Step 3: Diagrama Esquemático Del Circuito Electrónico

Step 4: Técnicas Para La Construcción De La Lámpara

El construir una lampara de ese tipo, no es tan difícil como aparenta. Aquí te presento unas técnicas que te pueden ser útil para elaborar tu propia lámpara:

  • Asegúrate de obtener los materiales puestos en "Step 2".
  • Es necesario que tengas un "Arduino UNO", al igual que la aplicación para poder hacer que la programación funcione.
  • Crea el circuito físico el cual te muestro en "Step 2".
  • Luego de tener todo armado copia la programación el cual te mostraré en el ultimo paso.
  • Por último, usa tu creatividad y consigue algo que tengas en tu casa para poder hacer la mejor lámpara de tu vida y no te olvides en decorarla.

Step 5: Diagrama Del Código

Step 6: Código De La Lámpara

//librería de NeoPixels

#include

#define PIN 3

#define NUMPIXELS 64

//librería de DHT11

#include "DHT.h"

#define DHTPIN 2

#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

int i=0;

const int buttonPin = 4;
const int ledPin = 13;

//int modo = 0;

const int poten1 = A0;

const int poten2 = A1;

const int poten3 = A2;

float val_pot1;

float val_pot2;

float val_pot3;

float rojo;

float verde;

float azul;

int contador = 0;

//int ledState = HIGH;

int buttonState;

int lastButtonState = LOW;

unsigned long lastDebounceTime = 0;

unsigned long debounceDelay = 25;

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() { pinMode(buttonPin, INPUT);

Serial.println(F("DHT11 test!"));

dht.begin();

pixels.begin();

Serial.begin(9600); }

void loop() {

int reading = digitalRead(buttonPin);

if (reading != lastButtonState) { lastDebounceTime = millis(); }

if ((millis() - lastDebounceTime) > debounceDelay) { if (reading != buttonState) { buttonState = reading;

if (buttonState == HIGH) { //ledState = !ledState; //modo = !modo; //pixels.clear();

if (contador < 2){ contador = contador + 1;

Serial.println(contador);

} else{ contador = 0;

Serial.print(contador); }

}

}

}

if (contador == 1) {

modoManual();

} else if (contador == 2) {

modoAutomatico();

} else{

pixels.clear();

}

lastButtonState = reading;

}

void modoManual() {

val_pot1 = analogRead(poten1);

rojo = val_pot1 * 255.0/1023;

val_pot2 = analogRead(poten2);

verde = val_pot2 * 255.0/1023;

val_pot3 = analogRead(poten3);

azul = val_pot3 * 255.0/1023;

for (int i = 0; i < 64; i++) {

pixels.setPixelColor(i, pixels.Color(rojo, verde, azul));

pixels.show(); } }

void modoAutomatico() {

// Wait a few seconds between measurements. delay(1000);

// Reading temperature or humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) float h = dht.readHumidity(); // Read temperature as Celsius (the default) float t = dht.readTemperature(); // Check if any reads failed and exit early (to try again).

if (isnan(h) || isnan(t)) {

Serial.println(F("Failed to read from DHT sensor!"));

return;

}

if (t > 30){

for (int i=0; i < NUMPIXELS; i++) {

pixels.setPixelColor(i,pixels.Color(233, 63, 29));

pixels.show();

}

}

if (t < 30 && t > 28) {

for (int i=0; i < NUMPIXELS; i++) {

pixels.setPixelColor(i, pixels.Color(240, 131, 21));

pixels.show(); } }

if (t < 28 && t > 26){

for (int i=0; i < NUMPIXELS; i++) {

pixels.setPixelColor(i, pixels.Color(189, 255, 54));

pixels.show();

}

}

if (t < 26 && t > 24){

for (int i=0; i < NUMPIXELS; i++) {

pixels.setPixelColor(i, pixels.Color(64, 228, 151));

pixels.show();

}

}

if (t < 24){

for (int i=0; i < NUMPIXELS; i++) {

pixels.setPixelColor(i, pixels.Color(189, 255, 54));

pixels.show();

}

}

Serial.print(F("Humidity: "));

Serial.print(h);

Serial.print(F("% Temperature: "));

Serial.print(t);

Serial.println(F("°C "));

}