MOODLAMP
Resumen
primer proyecto de la clase consiste en construir una “lámpara de sentimientos”, mejor conocido como «lámparas de humor». Una lampara de sentimientos cambia de colores para representar distintos estados o sentimientos, pueden representar prácticamente cualquier color. El funcionamiento de este tipo de lámparas en particular depende de las condiciones ambientales en la que se encuentra la lámpara, así como la interacción del usuario con la lámpara a través de medios físicos como, por ejemplo, interruptores, botones y potenciómetros.
Materiales Utilizados Para Construir La Lampara.
- Jumpers.
- Led RGB.
- Sensor de temperatura y humedad DHT11.
- 3 potenciómetros.
- 1 protoboard.
- Arduino UNO.
- 2 resistencias de valor 330 kΩ
- 2 botones.
Diagrama Esquemático
Construcción De La Lampara.
Se utiliza la base de una caja preexistente para elaborar la lámpara. Un estilo diferente el cual se quería dar al proyecto.
Diagrama De Flujo
Código.
#include "DHT.h"
#define DHTPIN 2 #define DHTTYPE DHT11
DHT DHT (DHTPIN, DHTTYPE);
int rojo = 9; int azul = 10; int verde = 11; int r = 0; int v = 0; int a = 0;
const int redControl = A0; const int greenControl = A1; const int blueControl = A2; int ledRojo = 9; // Declara Pin LED Rojo int ledVerde = 10; // Declara Pin LED Verde int ledAzul = 11; // Pin Declara LED Azul
int pinPot0 = A0; // Declara Pin Potenciometro Rojo int pinPot1 = A1; // Declara Pin Potenciometro Verde int pinPot2 = A2; // Declara Pin Potenciometro Azul
int valorsensor0 = 0; // Valores analogicos de la salida del potenciometro int valorsensor1 = 0; // || || || || int valorsensor2 = 0; // || || || ||
flotador divisionR; flotador divisionV; flotador divisionA;
int buttonPin = 12; int buttonState; int lastButtonState; int count;
configuración vacía () {pinMode (ledRojo, SALIDA); // El LED Rojo como una salida pinMode (ledVerde, OUTPUT); // El LED Verde como una salida pinMode (ledAzul, OUTPUT); // El LED Azul como una salida Serial.begin (9600); Serial.begin (9600); dht.begin ();
}
bucle vacío () {buttonState = digitalRead (buttonPin); if (buttonState == HIGH && lastButtonState == LOW) {if (count == 0) {manual (); cuenta = 1; } else {automatico (); cuenta = 0; }}
lastButtonState = buttonState; si (cuenta == 0) {manual (); } else {automatico (); }} void manual () {// Llamada a la función Color que recibe // 1er posicion: Intensidad Rojo // 2da posición: Intensidad Verde // 3ra posición: Intensidad Azul
float Constante = (float) 255 / 1023; //Divide el máximo valor de color entre el máximo valor del potenciómetro
valorsensor0 = analogRead(pinPot0); valorsensor1 = analogRead(pinPot1); valorsensor2 = analogRead(pinPot2);
divisionR = Constante * valorsensor0; divisionV = Constante * valorsensor1; divisionA = Constante * valorsensor2;
color(divisionR,divisionV,divisionA); // Carga un valor para (ROJO,VERDE,AZUL) //segun el valor de tres potenciómetros.
}
//------------------------------------ //Funcion color //---------------------------------- void color(int rojo, int verde, int azul){
//ROJO. Le resta al total (255) el valor obtenido de los potenciometros analogWrite(ledRojo, 255-rojo);
//VERDE. Le resta al total (255) el valor obtenido de los potenciometros analogWrite(ledVerde, 255-verde);
//AZUL. Le resta al total (255) el valor obtenido de los potenciometros analogWrite(ledAzul, 255-azul); }
void automatico(){ delay(2000); int h = dht.readHumidity(); int t = dht.readTemperature(); int n; int m;
if (isnan(h) || isnan(t)) { Serial.println("No se pudo leer desde el sensor DHT11!"); return; } int hic = dht.computeHeatIndex(t, h, false);
n = t/10; m = t - n*10;
Serial.println(t); control(t); }
void control(int t) { int r2,v2,a2; if(t<=5) { r2 = 150; v2 = 150; a2 = 150; } else if(t>35) { r2 = 255; v2 = 0; a2 = 0; } else if(t>5 && t<=10) { r2 = t*10+100; v2 = t*15; a2 = t*15+100; } else if(t>33 && t<=35) { r2 = (t-33)*10+200; v2 = 50-(t-33)*10; a2 = 0; } else if(t>33 && t<=29) { r2 = 250-10*(t-29); v2 = 150-20*(t-29); a2 = 0; } else if(t>28 && t<=24) { r2 = 50*(t-24); v2 = 250-20*(t-24); a2 = 0; } else if(t>15 && t<=20) { if(t == 16) { r2 = 150; v2 = 0; a2 = 200; } else if(t == 17) { r2 = 250; v2 = 0; a2 = 200; } else if(t == 18) { r2 = 0; v2 = 0; a2 = 250; } else if(t == 19) { r2 = 50; v2 = 250; a2 = 50; } else { r2 = 0; v2 = 250; a2 = 0; } } else if(t>10 && t<=15) { r2 = 200-20*(t-10); v2 = 150-30*(t-10); a2 = 250; } else { r2 = 0; v2 = 0; a2 = 0; }
if(r==r2 && v==v2 && a==a2) Serial.println("La temperatura no a cambiado"); else color(r2,v2,a2); }
void c(int r2,int v2,int a2) { int i; int nega[3]; int mayor=0; int temp[3]; int men1; int men2;
temp[0] = r2-r; temp[1] = v2-v; temp[2] = a2-a;
for(i=0;i<3;i++) { if(temp[i] < 0) { temp[i] = -1*temp[i]; nega[i] = 1; } else nega[i] = 0; }
for(i=0;i<3;i++) if(mayor
for(i=0;i
if(mayor == temp[0]) { men1 = mayor/temp[1]; men2 = mayor/temp[2]; if(i%men1 == 0 && v!=v2) if(nega[1] == 0) v++; else v--; if(i%men2 == 0 && a!=a2) if(nega[2] == 0) a++; else a--;
si (nega [0] == 0) r ++; más r--; } más si (mayor == temp [1]) {men1 = mayor / temp [0]; men2 = mayor / temp [2]; if (i% men1 == 0 && r! = r2) if (nega [0] == 0) r ++; más r--; if (i% men2 == 0 && a! = a2) if (nega [2] == 0) a ++; más a--;
si (nega [1] == 0) v ++; más v--; } else {men1 = mayor / temp [0]; men2 = mayor / temp [1]; if (i% men1 == 0 && r! = r2) if (nega [0] == 0) r ++; más r--; if (i% men2 == 0 && v! = v2) if (nega [1] == 0) v ++; más v--;
si (nega [2] == 0) a ++; más a--; }
retraso (15); }}