Mood Lamp Project 1
Una lámpara de ambiente se utiliza para ayudar a crear un ambiente específico dentro de la habitación como medio para hacer el espacio más atractivo y acogedor de alguna manera.
Supplies
Materiales utilizados para construir la lámpara:
3 potenciómetros de 5k Ohms
1 anillo 24 led neopixel WS2812B
1 push button de 4 pines
1 sensor de temperatura LM35
1 fotoresistencia LDR (GL55)
1 arduino UNO R3
1 protoboard
Cables
Codigo
//-------------------------------------Declaración de
variables globales-------------------------------------
int const ldrpin = A5; //Este es el pin para la fotoresistencia
const int tempSensor = A4; //Este es el pin para el sensor de temperatura
int ldrval = 0; //Este es el valor de la resistencia que pone la fotoresistencia
int cont; //Contador para cambiar de modo automático a modo manual
//--------------------------------------Adafruit_NeoPixel--------------------------------------------------------------------------------------------------
//En esta parte del código se incluye la librería de los NeoPixels.
#include
//Se define el pin en el que van a estar conectados.
#define PIN 3
//Se define el número de neopixeles del anillo.
#define NUMPIXELS 24
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
//---------------------------------------------------------------------------------------------------------------------------------------------------------
void setup()
{
pixels.begin(); //Se inician los neopixles
pinMode(4, INPUT_PULLUP); //Se establece el pin 4 como un input con pullup digital
Serial.begin(9600); // Se inicia el serial a una velocidad de 9600 bits/seg
}
void loop(){
ldrval = analogRead(ldrpin); //El valor de la fotoresistencia es igyal a la señal recibida del pin análogo 5
ldrval = map(ldrval, 0,1023,0,400); // Se mapea el valor de la foto resistencia a un numero entre 0 y 400
int val = analogRead(tempSensor); // Se lee el valor del sensor de temperatura conectado al pin análogo 4
float voltaje = (val/1023.0)*5; //Se calcula el valor del voltaje de la señal del sensor de temperatura
float tempCelsius = (voltaje-0.5)*100; // El voltaje se convierte en grados celsius
double redColor = analogRead(0)/4.02; //Se asigna la cantidad de color rojo para el modo manual diviendo entre 40.2 para que el valor este entre 0 y 255
double greenColor = analogRead(1)/4.02; //Se asigna la cantidad de color verde para el modo manual diviendo entre 40.2 para que el valor este entre 0 y 255
double blueColor = analogRead(2)/4.02; //Se asigna la cantidad de color azul para el modo manual diviendo entre 40.2 para que el valor este entre 0 y 255
//Estos valores se comentariaron porque solo feuron para pruebas pero imprimen en el serial el valor de la fotoresistencia, la temperatura y el contador;
//Serial.println(ldrval);
//Serial.print(tempCelsius);
//Serial.print(cont);
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//Esto es lo que determina si se activa el modo manual o automatico
//Si el boton se presiona, entonces se le suma 1 al contador
int suma = digitalRead(4);
if (suma == HIGH) {
}
else
{
cont +=1;
delay(500);
}
//Si el contador es par se activa el modo automatico
if (cont%2==0){
for (int i=0; i < NUMPIXELS; i++)
{
if(ldrval>=200)//Si la lectura de la fotoresistencia es mayor o igual a 200
{
//Se compara si la temperatura es mayor que 25, 20 o cualquier otro valor y dependiendo del reultado se asigna un color
if (tempCelsius >= 25)
{
pixels.setPixelColor(i, pixels.Color(255, 0, 0));
pixels.show();
}
else if (tempCelsius >=20)
{
pixels.setPixelColor(i, pixels.Color(255, 255, 0));
pixels.show();
}
else
{
pixels.setPixelColor(i, pixels.Color(255, 255, 255));
pixels.show();
}
}
else if(ldrval >= 100)//Si la lectura de la fotoresistencia es mayor o igual a 100
{
//Se compara si la temperatura es mayor que 25, 20 o cualquier otro valor y dependiendo del reultado se asigna un color
if (tempCelsius >= 25)
{
pixels.setPixelColor(i, pixels.Color(0, 255, 0));
pixels.show();
}
else if (tempCelsius >=20)
{
pixels.setPixelColor(i, pixels.Color(0, 255, 255));
pixels.show();
}
else
{
pixels.setPixelColor(i, pixels.Color(0, 0, 255));
pixels.show();
}
}
else //Si la lectura de la fotoresistencia es cualquier otro valor
{
//Se compara si la temperatura es mayor que 25, 20 o cualquier otro valor y dependiendo del reultado se asigna un color
if (tempCelsius >= 25)
{
pixels.setPixelColor(i, pixels.Color(71, 0, 255));
pixels.show();
}
else if (tempCelsius >=20)
{
pixels.setPixelColor(i, pixels.Color(203, 90, 255));
pixels.show();
}
else
{
pixels.setPixelColor(i, pixels.Color(200, 90, 40));
pixels.show();
}
}
delay(100);
}
}
else //Si el contador es impar se activa el modo manual
{
for (int i=0; i < NUMPIXELS; i++)
{
//Se asigna a los neopixles el color de los sensores analogos 0, 1 y 2 como red, green y blue.
pixels.setPixelColor(i, pixels.Color(redColor, greenColor, blueColor));
pixels.show();
delay(100);
}
}
}
Colocación De Potenciómetros En Protoboard
Empezaremos colocando los 3 potenciómetros en el protoboard
Conectarle un cable en la pata izquierda que vaya a tierra
Conectarle un cable en la pata central para
Conectarle un cable en la pata derecha que vaya a 5V
*Hacer esto con los 3 potenciómetros
Conectar Fotocelda
Colocar la fotocelda en el protoboard y agregarle una resistencia en la pata derecha y en la misma linea poner un cable que vaya directo a la placa R3 en el punto A0
En la otra pata conectarle un cable que vaya a 5V
Colocar Sensor De Temperatura
En la pata derecha colocarle un cable que vaya a 5V
En la pata central colocarle un cable que vaya directo a la placa R3 al apartado A1
En la pata izquierda colocarle un cable que vaya directo a tierra
Conectar El Neopixel
Localizar el apartado de IN en el neopixel y conectarlo con un cable directamente al apartado A4 ubicado en la placa R3
Localizar el apartado de 5V y conectarlo con un cable directamente al protoboard en el apartado de corriente.
Localizar el apartado de ground y conectarlo directamente al apartado de tierra en el protoboard.
Conectar El Boton
Conectar un cable que vaya del apartado 5 de la placa R3 a uno de los extremos del botón
Conectar un cable que vaya del botón a 5V en el protoboard
Conectar Corriente Y Tierra
Conectar un cable en el apartado de tierra en la placa R3 que vaya directamente a la linea de tierra en el protoboard.
Conectar un cable en el apartado de 5V ubicado en la placa R3 que vaya directamente a la linea de energía del protoboard.