Búsqueda personalizada

24 febrero 2007

Arduino, Termómetro Gráfico

Mas proyectos en: http://eduardomarin.es/node/2

Tras estar viendo algún que otro montaje sobre DIY Ambient Orb, y pensar alguna cosilla que no estuviera hecha, tan sólo se me ha ocurrido relacionar los cambios de temperatura con los cambios de color con, al igual que en el proyecto mencionado, los cambios de color de un LED rgb (Bueno, estuve pensando en hacer una especie de "copia" del sistema "Ambilight" que tiene montado philips en alguno de sus modelos. Cuando tenga más tiempo, me pondré con ello)


Material necesario:

  1. Placa Arduino.
  2. LED rgb, (o tres leds rojo, verde, azul).
  3. 4 resistencias de 330 ohm.
  4. Una resistencia NTC.

Esquema del circuito:



El funcionamiento del circuito es el siguiente. Distinguiremos entre tres posibles márgenes de temperatura. Frío, ideal y caliente. Según entremos en uno u otro margen, activaremos o desactivaremos uno u otro color haciendo gradiente de forma incremental para darle un efecto más llamativo.
El código para arduino, que podría depurarse más, pero en este momento no tenía ganas de ponerme... :-P, es el siguiente:

int LDR = 5;
int redPin   = 11;   // Red LED,   connected to digital pin 9
int greenPin = 10;  // Green LED, connected to digital pin 10
int bluePin  = 9;  // Blue LED,  connected to digital pin 11
int valor, estado,i,j;
void setup() {
pinMode(redPin,   OUTPUT);   // sets the pins as output
pinMode(greenPin, OUTPUT);   
pinMode(bluePin,  OUTPUT);
analogWrite(redPin,   255);   // set them all to mid brightness
analogWrite(greenPin, 0);   // set them all to mid brightness
analogWrite(bluePin,  255);   // set them all to mid brightness
estado =2; 
}

void loop () {
while(true){
valor = analogRead(LDR);

if((valor < 766)&&(estado==2)){
j=255;
for(i=0;i<=255;i++){
j--;
delay(50);        
analogWrite(greenPin, i);
analogWrite(redPin,j);
analogWrite(bluePin,255);
}
estado=1;
}


if((valor < 766)&&(estado==1)){
analogWrite(greenPin, 255);
analogWrite(redPin,0);
analogWrite(bluePin,255);
estado = 1;
}

if((valor > 780)&&(estado==2)){
j=255;
for(i=0;i<=255;i++){
j--;
delay(50);
analogWrite(greenPin, i);
analogWrite(bluePin,j);
analogWrite(redPin,255); 
}
estado = 3;
}


if((valor >780)&&(estado==3)){
analogWrite(greenPin, 255);
analogWrite(redPin,255);
analogWrite(bluePin,0);
estado = 3;
}

if((valor>=766)&&(valor<=780)&&(estado==3)){
j=255;
for(i=0;i<=255;i++){
j--;
delay(50);
analogWrite(bluePin, i);
analogWrite(greenPin,j);
analogWrite(redPin,255);          
}
estado = 2;
}


if((valor>=766)&&(valor<=780)&&(estado==1)){
j=255;
for(i=0;i<=255;i++){
j--;
delay(50);             
analogWrite(redPin, i);
analogWrite(greenPin,j);
analogWrite(bluePin,255);
}
estado = 2;
}


if((valor>=766)&&(valor<=780)&&(estado==2)){
analogWrite(greenPin, 0);
analogWrite(bluePin,255);
analogWrite(redPin,255);
estado = 2;
}

}
}

Podéis ver aquí alguna foto sobre cómo lo tengo montado (para pasar el rato XD): Y aquí podéis ver un video de la transición de colores:
Blogalaxia Tags:

2 comentarios:

Anónimo dijo...

hola amigo, soy brasileño...
muy rico eso q tu haceste...
me gustaria saber como pueso escreber la temperatura en un archivo.txt ... y depois ler eso archivo...
gracias

Anónimo dijo...

Tu mamá no está disponible .i.