miércoles, 1 de junio de 2011

El color de la temperatura

Con un Led RGB, Arduino, 3 resistencia de 1 K , 1 de 4K7 y por ultimo un sensor ds18b20, se puede hacer un simple termómetro gráfico. Buscando por internet siempre encontraba termómetros graficos con sensores analógicos pero con este ds18b20 ninguno, asi que imaginando y teniendo la base del analógico saque este código:

#include <OneWire.h>
#include <DallasTemperature.h>

// Definimos el pin 8 de arduino para el sensor de temperatura ds18b20
#define ONE_WIRE_BUS 8



// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);


DallasTemperature sensors(&oneWire);
int redPin = 9; //El pin 9 de arduino para la patilla del color rojo del led rgb
int bluePin = 11; //El pin 11 para color azul
int greenPin = 10; //El pin 10 para color Verde
int valor,i,j;

void setup(void)
{
  // start serial port
  Serial.begin(9600);
  // Start up the library
  sensors.begin();
  pinMode(redPin,OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
}

void loop(void)
{
  sensors.requestTemperatures(); // Enviamos el comando para obtener la temperatura
  valor = sensors.getTempCByIndex(0);
  Serial.println(sensors.getTempCByIndex(0)); // Imprimimos el valor de la temperatura para guiarnos un poco
  if (valor < 18){
    analogWrite(bluePin,64);
    delay(3000);
    j=255;
    for(i=64;i<=255;i++){
      j--;
      delay(50);
      analogWrite(redPin,0);
      analogWrite(greenPin,0);
      analogWrite(bluePin,i);
    }
  }
  else if ((valor >= 18) && (valor < 23)){
    analogWrite(bluePin,64);
    delay (3000);
    j=255;
    for (i=64; i<=255; i++){
      j--;
      delay(50);
      analogWrite(redPin,0);
      analogWrite(greenPin,i);
      analogWrite(bluePin,64);
    }
  }
  else if ((valor >= 23) && (valor < 28)){
    analogWrite (greenPin,64);
    delay (3000);
    j=255;
    for (i=64; i<=255; i++){
      j--;
      delay(50);
      analogWrite(redPin,i);
      analogWrite(greenPin,64);
      analogWrite(bluePin, 0);
    }
  }
  else if (valor >= 28){
    analogWrite (redPin, 64);
    delay (3000);
    j=255;
    for (i=64; i<=255; i++){
      j--;
      delay(50);
      analogWrite(redPin,64);
      analogWrite(greenPin,0);
      analogWrite(bluePin, 0);
    }
  }
     
}
El codigo se puede mejorar y mucho pero solo queria saber si se podia hacer y aqui esta, subo unas fotitos para verlo como lo monte.

No hay comentarios:

Publicar un comentario