Aventuras y Desventuras de un hobbyist

Aventuras y Desventuras de un hobbyist....

Multiple DS18B20 parasitic mode.

En un post anterior he realizado un termómetro con un Sensor de Temperatura DS18B20 de Dallas.

Esta vez estoy usando 3 sensores de temperatura y así probar el parasitic mode con posibilidad de aplicar  esto en una vivienda unifamiliar para monitorizar la temperatura en diferentes estancias / zonas de la casa.
El cable necesario seria uno de únicamente un par de hilos, uno con GND para el pin 3 del DS18B20 y otro para la transmisión de datos en el pin 2. Planeo realizar pruebas futuras sobre la eficacia del sensor en función de la longitud del cable.
Aquí tenéis un par de imágenes del setup:



 
El código que he usado es el siguiente:




#include "onewire.h"

#include "dallastemperature.h"

#include "liquidcrystal.h" //Libreria para el LCD


// Data wire is plugged into pin 8 on the Arduino

#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);


// Pass our oneWire reference to Dallas Temperature.

DallasTemperature sensors(&oneWire);
//Iniciamos la libreria del LCD con los respectivos pines

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


void setup(void)

{

  
      //Setup de las lineas y columnas.

      lcd.begin(16, 2);


  Serial.begin(9600);


  // Start up the library

  sensors.begin();

}



void loop(void)

{

  // call sensors.requestTemperatures() to issue a global temperature

  // request to all devices on the bus

  Serial.print("Requesting temperatures...");

  sensors.requestTemperatures(); // Send the command to get temperatures

  Serial.println("DONE");

 

  Serial.print("Temperature for Device 1 is: ");

  Serial.println(sensors.getTempCByIndex(0)); // Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire
float val1 =  sensors.getTempCByIndex(0) ; // Almacenar la temperatura

 Serial.print("Temperature for Device 2 is: ");    

  Serial.println(sensors.getTempCByIndex(1)); // Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire
float val2 =  sensors.getTempCByIndex(1) ; // Almacenar la temperatura

 Serial.print("Temperature for Device 3 is: ");

  Serial.println(sensors.getTempCByIndex(2)); // Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire
float val3 =  sensors.getTempCByIndex(2) ; // Almacenar la temperatura


    
lcd.setCursor(1, 0);
lcd.print("T1");
lcd.setCursor(0, 1);
lcd.print(val1);
lcd.setCursor(4, 1);
lcd.print("  ");

lcd.setCursor(7, 0);
lcd.print("T2");
lcd.setCursor(6, 1);
lcd.print(val2);do
lcd.setCursor(10, 1);
lcd.print("  ");

lcd.setCursor(13, 0);
lcd.print("T3");
lcd.setCursor(12, 1);
lcd.print(val3);

}

4 comentarios:

  1. disculpa mi ignorancia, ¿las librerias que usas (onewire.h y dallastemperature.h) solo se pueden utilizar para la tarjeta arduino? esque no comprendo esta parte

    // Data wire is plugged into pin 2 on the Arduino

    #define ONE_WIRE_BUS 8


    ¿¿¿porque el numero 8???

    ResponderEliminar
  2. Anónimo

    Gracias por la pregunta ya he corregido el código, pues el comentario:

    // Data wire is plugged into pin 2 on the Arduino

    Estaba mal y lo he puesto correctamente:

    // Data wire is plugged into pin 8 on the Arduino


    Porque en el pin 8? puedes ponerlo donde quieras siempre y cuando no interfiera con otros componentes conectados al Arduino, en mi caso yo tengo los pines (12, 11, 5, 4, 3, 2) conectados al LCD. Por eso escogí el 8 también podía haber escogido el 1,6, 7 o 13 que quedan libres.

    Espero que quede aclarado.

    Un saludo

    yOPERO.

    ResponderEliminar
  3. Hola,

    Estoy intentando verificar el código y de momento me da este error:

    'OneWire' does not name a type

    Por favor, podrías mirartelo, es que yo soy bastante neófito y me pierdo.

    Gracias de antemano y un saludo,

    Juanjo.crespo@gmail.com

    ResponderEliminar
  4. Da más errores:

    DallasTemperature sensors(&oneWire);, diciendo lo mismo que el caso anterior.

    No lo he compilado del todo, pero supongo que dará más errores de ese tipo.

    No se qué está mal o si yo lo estoy haciendo bien.

    Saludos

    juanjo.crespo@gmail.com

    ResponderEliminar