In questo articolo andiamo a vedere il sensore digitale di temperatura Dallas Temperature, noto anche come KY-001, in quanto lo ritroviamo all’interno di un KIT sensori costituito da 37 unità che potete acquistare a questo link.

Specifiche

Il sensore KY-001 è costituito da un chip single-bus DS18B20, alloggiato in un circuito stampato con un LED e una resistenza. Il modulo presenta 3 PIN: uno è il segnale (S), gli altri due il GND e il VCC, tramite cui possiamo fornire sia i 3,3V o i 5V, usando indifferentemente sia Arduino che le ESP8266. Il sensore è notevolmente preciso e il range di azione va dai -55°C ai 125°C con una tolleranza di circa 0,5°C.



Collegamento

Il  sensore KY-001 è davvero semplice da collegare. Utilizziamo la piedinatura per collegare al PIN digitale 2 di Arduino il PIN S, il PIN – al GND e il PIN + ai 5V. Basta seguire lo schema riportato sotto.

Codice

Per programmare il sensore KY-001 è necessario scaricare le librerie DallasTemperature e OneWire. Lo sketch che vediamo oggi è il codice di esempio presente all’interno della libreria DallasTemperature, intitolato Simple. Questo sketch inizia includendo le librerie citate, indicando che il sensore è collegato al PIN 2 e avviando l’istanza OneWire per poi passarla al sensore. Anticipiamo che è stato aggiunto un delay di 1000 millisecondi per rilevare i dati ogni secondo.

#include <OneWire.h&gt>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&amp;oneWire);

All’interno del VOID SETUP avviamo il monitor seriale e il sensore

void setup(void)
{
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library Demo");
  sensors.begin();
}

Infine, nel VOID LOOP effettuiamo la richiesta per rilevare la temperatura e stampiamo a monitor seriale il risultato ogni secondo

void loop(void)
{ 
  
  Serial.print("Requesting temperatures...");
  sensors.requestTemperatures();
  Serial.println("DONE");

  Serial.print("Temperature for Device 1 is: ");
  Serial.print(sensors.getTempCByIndex(0));
  delay(1000);
}

La dicitura Index(0) indica che se ci sono più circuiti integrati sullo stesso bus, 0 indica il primo integrato.