muy buenas, me presento: me llamo Montesinos y llevo muy poco tiempo con esto del Arduino, mis conocimientos de electrónica son medios y de programación casi nulos.
Como para mi esto por ahora solo es una manera de entretenerme y aprender, pues voy a mi ritmo, autodidacta.
Mirad, lo que pretendo es aprender un poco sobre las salidas PWM de arduino UNO y sobre la gestión de dos sensores analógicos, entonces se me ha ocurrido hacer un proyecto que decida por mí si tengo frío, estoy a gustito o tengo calor, y además también pretendía que decidiera por mí si la habitación está suficienteme a oscuras para encender una "luz piloto" o mantenerla apagada, para ello he montado el siguiente esquema:
un led RGB, conectado a las salidas 3, 5 y 6 en él deberia ver si tengo frio o no.
un led estandar conectado a la salida 11, en él debería ver si hay poca luz o no.
un termometro LM35 conectado a 5V, la entrada A0 y Ground
un fotoresistor conectado a A5, 5V(con una resitencia de 10k) y GND
también pretendia leer las indicaciones de temperatura y luz en el monitor serial.
He creado este sketch:
/* Se trata de una lámpara creada a través de un led RGB, que varirá su color en función de la temperatura de su alrededor.
así si está en un entorno frío se encenderá azul, si está en un entorno cálido su luz será verde y si está en un entorno muy caluroso, rojo,
además se la ha añadido un segundo led, monocolor, que asociado a un fotoresistor nos dirá si es de día o no, así si el led está apagado habrá
mucha luz, y si está encendido será porque las condiciones lumínicas son bajas */
int R = 3; //designamos el pin 3 para iluminar la parte roja
int V = 5; //designamos el pin 6 para iluminar la parte verde
int A = 6; //designamos el pin 5 para iluminar la parte azul
int led = 11; //led piloto, indicador del día o la noche.
int termometro = A0; //designamos la entrada del termometro en la entrada analogica A0
int fotoresistor = A5; //designamos la entrada del fotoresistor en la entrada analogica A5
float voltageluz; //se usa como float, con él podremos hacer cálculos usando el voltage dado por el fotoresistor
float voltage; //se usa como float, con él el valor voltage del termometro podrá ser tomado para cálculos
int Ro, Ve, Az, Le; //iniciamos Ro, Ve, Az y Le para hacer cálculos al final del skecht
int temperatura; //iniciamos la variable temperatura
int color; //iniciamos la variable color para referirse a la intensidad lumínica
void setup() {
Serial.begin(9600); //lo primero es empezar la comunicacion del puerto serie en 9600 baudios
pinMode(R, OUTPUT);
pinMode(V, OUTPUT); //los pines R, V, A y led decimos que son de salida, no hace falta decir que el fotoresistor y el termómetro, es
pinMode(A, OUTPUT); //entrada porque la placa lo considera ya pin de entrada analogico
pinMode(led, OUTPUT);
}
void loop() {
voltage = analogRead(termometro) * (5.0 / 1023.0); //como al principio designamos el valor voltage, del termometro aqui le damos el valor que tomará
temperatura= (voltage - 0.500) * 100.0; // con el valor voltage podemos calcular la temperatura que hace
voltageluz = analogRead(fotoresistor) * (5.0/1023)*100; //hacemos lo mismo con el valor voltageluz para la intensidad luminica
color=map(voltageluz, 0, 5000, 0, 1279); //mapeamos la salida del voltageluz para trabajar con ella, entre 0 y 1280
if(0<=temperatura && temperatura<23.09){ //si el valor temperatura está entre 0 y 23,09 (condiciones de frío) debe hacer que....
//Color entre rojo y amarillo
Ro=0;
Ve=0; //...la variables Ro y Ve se vayan a 0 y Az a 255, es decir, el led será azul
Az=255;
}
else if(23.1<=temperatura && temperatura<26.4999999999999999999){ //si el valor temperatura está entre 23,1 y 26,49 entonces....
Ro=0;
Ve=255; //las variables Ro y Az se irán a 0 y Ve a 255, luz verde
Az=0;
}
else if(26.5<=temperatura && temperatura<128.0){ //si el valor temperatura se va entre 26,5 y 128.0 (cañpr) deberían...
Ro=255;
Ve=0; //irse las variables Ve y Az a 0, quedandose Ro a 255, rojo fuego.
Az=0;
}
if(85.5<=color && color<128.0){ //además si la intensidad luminica fuera baja, entonces se debería encender el Led
Le=255;
}
else if(0<=color && color<85.4){ // y si fueran altas debería apagarse
Le=0;
}
analogWrite(R, Ro); //como los pines 3, 5 y 6 son PWM, se entiende que 255 es máxima intensidad y 0 apagado...
analogWrite(V, Ve); //y asociamos R con la variable Ro, V con la Ve y A con la Az y Le con led
analogWrite(A, Az);
analogWrite(led, Le);
Serial.println("========================================================================================");
Serial.print("voltaje:");
Serial.print(voltage);
Serial.print(" ");
Serial.print("temperatura:");
Serial.print(temperatura);
Serial.print(" ");
Serial.print("rojo:");
Serial.print(Ro);
Serial.print(" ");
Serial.print("verde:");
Serial.print(Ve);
Serial.print(" ");
Serial.print("Azul");
Serial.println(Az);
Serial.print(" condiciones de luz:");
Serial.print(color);
Serial.print(" ");
Serial.print("luz piloto:");
Serial.println(Le);
Serial.println("=======================================================================================");
delay(1000);
}
pues bien, tengo los siguientes problemas que me gustaría depurar y no sé por donde tirar:
1-no creo que tenga muy bien la información de la temperatura, creo que no es muy fiable, también me gustaría verla con al menos un decimal.
2-no siempre funciona el led que deberia indicar si es de día o de noche y cuando lo hace afecta a la lectura del temometro.
Gracias por vuestra ayuda de antemano