Arduino DS18B20 1Wire

25 De abril, 2011 por Fábio Souza | Publicado bajo Arduino, Blog, Electrónica.

La idea surgió como un medio para verificar que la temperatura de la habitación fue correcta antes de un termómetro de mercurio.

Organizan un 20 LCD alfanumérica×4 caracteres, un FAX dañado , pero por suerte el LCD estaba bien y había algunas muestras de sensores de temperatura 1Wire. El objetivo, por tanto, sería mostrar información de temperatura de LCD.

Este fue el resultado obtenido, mediante las bibliotecas de Arduino :

Bibliotecas de LCD y 1Wire pueden obtenerse aquí:

Fuente de LiquidCrystal

Una biblioteca de alambre
Y este es el código fuente:




/*
Thermometer Ds18B20 and LCD

*/

#include
#include

#define DS18S20_ID 0x10
#define DS18B20_ID 0x28
float temp;
LiquidCrystal lcd(11, 12, 5, 4, 3, 2);

OneWire ds(10);

boolean getTemperature(){
byte i;
byte present = 0;
byte data[12];
byte addr[8];

//find a device
if (!ds.search(addr)) {
ds.reset_search();
return false;
}
if (OneWire::crc8( addr, 7) != addr[7]) {
return false;
}
if (addr[0] != DS18S20_ID && addr[0] != DS18B20_ID) {
return false;
}
ds.reset();
ds.select(addr);
// Start conversion
ds.write(0x44, 0); //No parasite mode, Feed it
// Wait some time...
// delay(850);
present = ds.reset();
ds.select(addr);
// Issue Read scratchpad command
ds.write(0xBE);
// Receive 9 bytes
for ( i = 0; i < 9; i++) {
data[i] = ds.read();
}
// Calculate temperature value
temp = ( (data[1] << 8 ) + data[0] )*0.0625;
return true;

}

void setup(void){

lcd.begin(20, 4);

Serial.begin(9600);

}

void loop(void)
{

if(getTemperature()==1)
{
lcd.setCursor(0, 0);
lcd.print("Temp: ");

lcd.print(temp, 2);

Serial.print("Temp: " );
Serial.println(temp, 2);

}



delay(500);
}

Etiquetas: ,