jueves, 24 de abril de 2014

Utilización del sensor de temperatura I2C (ds1621) con arduino y bajo PPOTEUS 8.1

Buenas:

Os dejo un videotutorial en el que muestro como usar la librería DS1621 para dicho sensor i2c sin tener que acudir a los comandos hardware del dispositivo. Esto nos ahorra código en pantalla y evita tener que conocer exaustivamente el hardware del sensor.

Podemo utilizar la misma técnica para otras librerías externas a PROTEUS pero que sí estén disponibles para ARDUINO.



Un saludo.
Germán Tojeiro
rastman powered by Suse linux

3 comentarios:

  1. Hola, se agradece el video, dejo una breve sinopsis de los pasos a seguir para su instalación y configuración:

    1) Descargar Librería:
    https://github.com/martinhansdk/DS1621-temperature-probe-library-for-Arduino

    2) Descripción de su instalacion en Proteus:
    A partir del minuto 7.00 del video aprox hasta el minuto 9.00 aprox.

    3) Ejemplo de la utilizacion de esta librería y otras observaciones del funcionamiento del sensor DS1621:
    El resto del video.

    ResponderEliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  3. Como comentario aparte menciono que se puede representar temperaturas negativas con los comandos I2C simplemente agregando un sentencia de control de flujo if al programa evaluando las temperaturas como se explica a continuación.

    En el programa de huborarduino el Arduino solicita la temperatura con la siguiente orden:

    Wire.requestFrom(direccion, 1); //El DS1621 envía un byte.

    Este byte se almacena luego en una variable de tipo int:
    tempC = Wire.read();

    Un byte es una variable que toma los valores de 0 a 255.

    Los valores de temperatura mayores que cero se representan con los numeros de 0 hasta 128 (que corresponde con la máxima temperatura positiva que mide el emulador del sensor DS1621);
    Las temperaturas inferiores a cero, se representan con el resto de los valores, desde el 129 hasta el 255 (que corresponde al -1 °C).

    Por lo tanto, teniendo en cuenta que el sensor envía un byte que se puede representar con un numero decimal, podemos agregar un condicional que evalue si el numero es mayor a 128 o no para saber si esta informando sobre una temperatura positiva o no.

    En caso de que se trate de una temperatura negativa, obtendremos el valor de la misma restando al numero informado por el sensor (supongamos 129) la cantidad 256.

    A continuación dejo el codigo del programa de huborarduino modificado para representar temperaturas negativas (es todo igual salvo que agrego un if-else para evaluar si la temp es positiva o negativa)

    #include
    int tempC=0;
    int tempF=0;
    int direccion=0x48;
    void setup()
    { // put your setup code here, to run once:
    Serial.begin(9600); // inicializa puerto serie del Arduino
    Wire.begin(); // inicializa puerto i2c del Arduino como maestro
    Wire.beginTransmission(direccion); // envia la señal de start al DS1621
    Wire.write(0xAC); //comando Escribir Configuracion en el dispositivo DS1621
    Wire.write(0x02); // comando Realizar Conversion Continua en el dispositivo DS1621
    Wire.beginTransmission(direccion); // envia la señal de inicio reiterado (restart) al DS1621
    Wire.write(0xEE); // comando Iniciar la Conversion Continua en el dispostivo DS1621
    Wire.endTransmission(); //envia la señal de stop al DS1621
    }

    void loop()
    { // put your main code here, to run repeatedly:
    delay(1000);
    Wire.beginTransmission(direccion);
    Wire.write(0xAA); // Comando leer Temperatura
    Wire.endTransmission();
    Wire.requestFrom(direccion, 1); // El DS1621 envía un byte
    tempC = Wire.read(); // El byte se almacena en una varible tipo int
    if(tempC <= 128) // Evalua si el numero informado por el sensor es inferior o igual a 128
    {
    tempF = tempC * 9 / 5 + 32;
    Serial.print("Temperatura: ");
    Serial.print(tempC);
    Serial.print(" C/");
    Serial.print(tempF);
    Serial.print(" F");
    }
    else //Si la temperatura es superior a 128 corresponde a una temperatura negativa
    {
    tempC -= 256; // Restamos 256 para obtener la temperatura negativa correspondiente al numero informado por el sensor
    tempF = tempC * 9 / 5 + 32;
    Serial.print("Temperatura: ");
    Serial.print(tempC);
    Serial.print(" C/");
    Serial.print(tempF);
    Serial.print(" F");
    }
    Serial.println();
    }

    ResponderEliminar