eMag

vineri, 7 ianuarie 2011

Arduino 1wire si DS18B20

   Asa cum spuneam in postul anterior, ne vom ocupa de o retea de senzori de temperatura Dallas DS18B20.
   Care este avantajul utilizarii acestui tip de senzori ?
- Utilizeaza numai doi conectori pentru alimentare si DATA.
- Adresabila in retea pe baza unui identificator.
- Precalibrati
- range -55 +125 °C
- acuratete  ±0.5 °C

   De ce sa facem o retea de senzori de temperatura ? nu ajunge unul ?

   Pentru unele aplicatii este posibil sa fie suficient un singur senzor, in anumite situatii mai multi sunt mai buni... :)
   Daca dorim sa urmarim temperatura de afara, temperadura din casa si temperatura din camera unde avem cazanul centralei termice....
   Daca avem 2 rack-uri cu echipamente trebuie sa le monitorizam ....

   Va spuneam ca daca vrem alimentare parizita nu trebuie sa lasam in aer, mai jos variantele corecte pentru conectare.

 Conectarea in mod nonparazit
 Conectarea parazita a unui singur DS18B20
 Retea cu alimentare parazita

  Asadar folosind un singur pin digital al Arduino putem conecta mai multi senzori!!!
  Personal utilizez libraria OneWire si Dallas Temperature Control Library dar exista mai multe implementari al protocolului.
Un exemplu de cod:
#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into pin 2 on the Arduino
#define ONE_WIRE_BUS 2

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

void setup(void)
{
  // start serial port
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library Demo");

  // 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.print(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
  
}


Daca punem doi senzori trebuie sa adaugam

Serial.print(sensors.getTempCByIndex(1)) si trebuiesc facute toate modificarile pentru "print"-ul textului preambul....

"Temperature for Device 2 is: " .... bla.... bla.


Cam asta este, faceti cateva experimente.

Puteti face o sumedenie de proiecte .... in posturile urmatoare am sa va spun ce am facut eu cu Arduino + 2xDS18B20 + un adaptor RS232-TTL + o camera de supraveghere MOBOTIX M10 + un server linux (cam multe dar proiectul a iesit bine)

Niciun comentariu:

Trimiteți un comentariu