Para la conexión de un sensor con dos cables de la línea de datos y la toma de tierra; la alimentación de un elemento, en este caso se llama "паразитным"/fantasma (Parasite power mode) y se realiza por la línea de datos debido a la acumulación de energía en un condensador durante el alto nivel de tensión (este esquema de conexión no se recomienda a temperaturas superiores a los +100, debido a la rápida descarga del condensador).
El esquema de conexión es muy simple y en realidad es de el sensor de sí mismo y de la resistencia de 4.7 kω:
Ejemplo sketch:
#include <OneWire.h>
OneWire ds (10); // on pin 10
void setup (void) {
Serial.begin (9600);
}
void loop (void) {
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
if (! ds.search (addr)) {
ds.reset_search ();
delay (250);
return;
}
ds.reset ();
ds.select (addr);
ds.escribir (0x44,1); // inicio de la conversión, con el parásito de la electricidad en el final
delay (1000); // tal vez 750ms es suficiente, tal vez no
// podemos hacer una ds.- power (aquí), pero el reset tomar el cuidado de él.
presente = ds.reset ();
ds.select (addr);
ds.escribir (0xBE); // Lee el bloc de notas
for (i = 0; i < 9; i++) { // tenemos 9 bytes
datos[i] = ds.leer ();
}
// convertir los datos reales de temperatura
unsigned int raw = (datos[1] << 8) | datos[0];
si (type_s) {
raw = raw << 3; // 9 bits de resolución predeterminada
if (datos[7] == 0x10) {
// contador de permanecer da una resolución de 12 bits
raw = (raw & 0xFFF0) + 12 — datos[6];
}
} else {
byte cfg = (datos[4] y 0 x 60);
si (cfg == 0x00) raw = raw << 3; // 9 bits de resolución, 93.75 ms
else if (cfg == 0x20) raw = raw << 2; // de 10 bits de res, 187.5 ms
else if (cfg == 0x40) raw = raw << 1; // 11 bits res, 375 ms
// por defecto es de 12 bits de resolución, 750 ms tiempo de conversión
}
celsius = (float)bruto / 16.0;
fahrenheit = celsius * 1.8 + 32.0;
Serial.print (" Temperatura =");
Serial.de impresión (celsius);
Serial.print (" C");
Serial.de impresión (fahrenheit);
Serial.println (" F");
}
Para que funcione necesita de la biblioteca OneWireTempSensor.h y OneWire.h, que se puede encontrar fácilmente en internet (o a una descarga a continuación). En este ejemplo, el valor de la temperatura se muestra en el puerto serie y la puede ver usando el Serial Monitor integrado en el Arduino IDE.