Go Down

Topic: DS18B20 problem (Read 836 times) previous topic - next topic

medina

Jun 04, 2012, 10:01 pm Last Edit: Jun 05, 2012, 08:49 am by medina Reason: 1
buenas comañeros despues e tener el proyecto casi terminado me encuentro con que la sonda DS18B20 me da una temperatura -127 cuando esta conectada la sonda .trabajo con la version 0023 con sus respectivas librerias ,onwire y dallastemperature.
que creeis que esta pasamdome?
Quote

#include <OneWire.h>
#include <LiquidCrystal.h>
#include <DallasTemperature.h>
#include <Wire.h>   //
#define DS1307_I2C_ADDRESS 0x68
LiquidCrystal lcd(26, 27, 45, 47, 49, 51);
#define ONE_WIRE_BUS 41//temperatura, pin de entrada
OneWire oneWire(ONE_WIRE_BUS);//temperatura
DallasTemperature sensores(&oneWire);
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
int PinVentilador =29;//rele 1-ventilador  disipador
int PinCentilador =30;//rele 2-ventilador  disipador
int PinCalentador = 34;
int EstadoCentil=0;
int EstadoVentil=0;
int EstadoCalent=0;
int Retraso=5000;
}
void setup()
{ pinMode(PinCentilador, OUTPUT);
 pinMode(PinVentilador, OUTPUT);
pinMode(PinCalentador, OUTPUT);
}
void loop() {  
getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); //Obtenemos la hora
sensores.requestTemperatures();
Temperatura(minute, hour);
lcd.noBlink();
if (minute < 2)  Retraso=1000;
else if (hour < 5) Retraso=10000;
else Retraso=10000;
}

void Temperatura(int minutos, int horas)
{
 float T1;
 float T2;
 float T3;
 sensores.requestTemperatures();
 T1=sensores.getTempCByIndex(0)+1;
 T2=sensores.getTempCByIndex(1)+1;
 T3=sensores.getTempCByIndex(2)+1;  
 lcd.clear();
 lcd.setCursor(0,0);
 lcd.print("TEMPERATURA");
  lcd.print("   ");
 if (hour < 10) lcd.print("0");
 lcd.print(hour, DEC);
 lcd.print(":");  
 if (minute < 10) lcd.print("0");
 lcd.print(minute, DEC);
 
 lcd.setCursor(0, 1);
 lcd.print("TACEN-T1:");
 lcd.print(T1);
 lcd.print((char)223);
 lcd.setCursor(0, 2);
 lcd.print("TACEN-T2:");
 lcd.print(T2);
 lcd.print((char)223);
 lcd.setCursor(0, 3);
 lcd.print("WATER-T3:");
 lcd.print(T3);
 lcd.print((char)223);
 if (T2 < 25) EstadoCalent=1;
 if (T2 > 26) EstadoCalent=0;
 if (T1 < 25) EstadoVentil=0;
 if (T1 > 30) EstadoVentil=1;  
 if (T3 < 25) EstadoCentil=0;
 if (T3 > 30) EstadoCentil=1;
 
 lcd.setCursor(16, 3);
   if(EstadoCalent==1 ){
   digitalWrite(PinCalentador, LOW);
   lcd.write(6);
 }
 else
 {
   digitalWrite(PinCalentador, HIGH);
   lcd.write(6);
 }
 lcd.setCursor(16, 1);
 if(EstadoVentil==1 )//decimos al rele el encendido y apagado//
 {
   digitalWrite(PinVentilador, LOW);
   lcd.write(6);lcd.write(5);lcd.write(5);
 }
 else
 {
   digitalWrite(PinVentilador, HIGH);
   lcd.write(6);
 }
 lcd.setCursor(16, 2);
  if(EstadoCentil==1 )//decimos al rele el encendido y apagado//
 {
   digitalWrite(PinCentilador, LOW);
   lcd.write(6);lcd.write(5);lcd.write(5);
 }
 else
 {
   digitalWrite(PinCentilador, HIGH);
    lcd.write(6);
   
 }
 delay(Retraso);
}



ademas compañeros  al abrir el serial monitor despues de copilar el sketch "simple" me dice :

temperature for the device 1 ( index 0) is: -127.00
requesting temperature .......done

jorgepl

El resultado que te está devolviendo no es una temperatura. La librería OneWire te está diciendo que no encuentra el sensor (#define DEVICE_DISCONNECTED -127). ¿Has puesto la resistencia de pull-up en la línea?

Prueba primero con un solo sensor y el ejemplo simple de la librería, y cuando te funcione, pasa a tu código. Por cierto, envías dos veces el comando sensores.requestTemperatures(), una en el loop() y otra en la función Temperatura().

Revisa el montaje y si quieres que te echemos una mano, pon un esquema de las conexiones y/o alguna foto.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy