viernes, 21 de noviembre de 2014

Arduino: Temperatura con DS18B20

Como medir la temperatura mediante este sensor de 1 Wire.

Información sobre el integrado.

Para mas información sobre integrado lo podemos ver en el siguiente enlace: http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf



El patillaje es el mostrado en siguiente imagen.



El montaje con el arduino seria el siguiente:




Libreria necesarias:

Se necesita la librería OneWire, 
Que debe estar en el siguiente directorio:
  • MAC: (directorio personal)/Documents/Arduino/libraries
  • Win: Mis documentos/Arduino/libraries
  • LINUX: (directorio personal)/Documents/Arduino/libraries

Esta disponible en: http://playground.arduino.cc/Learning/OneWire

Programa:

Un pequeño programa para leer la temperatura.
#include <OneWire.h>

int DS18S20_Pin = 2; //DS18S20 Señal digital en digital 2

//Temperatura chip i/o
OneWire ds(DS18S20_Pin);

void setup(void) {
 Serial.begin(9600);
}

void loop(void) {
 float temperatura = getTemp();
 Serial.println(temperatura);
 delay(100);

}


float getTemp(){
 //Da la temperatura esta ª

 byte data[12];
 byte addr[8];

 if ( !ds.search(addr)) {
 
   ds.reset_search();
   return -1000;
 }

 if ( OneWire::crc8( addr, 7) != addr[7]) {
   Serial.println("CRC no es valido!");
   return -1000;
 }

 if ( addr[0] != 0x10 && addr[0] != 0x28) {
   Serial.print("No se ha reconocido el dispositivo");
   return -1000;
 }

 ds.reset();
 ds.select(addr);
 ds.write(0x44,1); // comienza la converesion

 byte present = ds.reset();
 ds.select(addr);
 ds.write(0xBE);


 for (int i = 0; i < 9; i++) {
  data[i] = ds.read();
 }

 ds.reset_search();

 byte MSB = data[1];
 byte LSB = data[0];

 float tempRead = ((MSB << 8) | LSB);
 float TemperatureSum = tempRead / 16;

 return TemperatureSum;

}

No hay comentarios:

Publicar un comentario