Ich habe mich zwischendurch mal ein wenig mehr mit den Temperatur Sensoren beschäftigt. Als kleine Erweiterung zum ersten Script habe ich die Abfrage so umgeschrieben, dass mehrere Sensoren abgefragt werden und die Genauigkeit gesetzt wird. Hauptsächlich habe ich das gemacht um im nächsten Schritt die Daten an MQTT zu übergeben.
Der Aufbau ist ähnlich. Es werden dabei die Sensoren hintereinander an den OneWire Bus (Orange – Mitte) angeschlossen angeschlossen. Spannung und Erde sind an den äußeren Beinen. Die Ausgabe der Arduino Konsole mit drei Sensoren sieht dabei wie folgt aus:
Man sieht dabei auch das die Sensoren eine Ungenauigkeit haben.
#include <OneWire.h> // http://www.arduino.cc/playground/Learning/OneWire #include <DallasTemperature.h> // http://milesburton.com/index.php?title=Dallas_Temperature_Control_Library #define ONE_WIRE_BUS 7 #define TEMPERATURE_PRECISION 12 OneWire oneWire(ONE_WIRE_BUS); // Einrichten des OneWire Bus um die Daten der Temperaturfühler abzurufen DallasTemperature sensors(&oneWire); // Bindung der Sensoren an den OneWire Bus DeviceAddress tempDeviceAddress; // Verzeichniss zum Speichern von Sensor Adressen int numberOfDevices; // Anzahl der gefundenen Sensoren void setup(void) { Serial.begin(9600); Serial.println("Abfrage mehrerer Dallas Temperatur Sensoren"); Serial.println("-------------------------------------------"); // Suche der Sensoren Serial.println("Suche Temperatur Sensoren..."); sensors.begin(); numberOfDevices = sensors.getDeviceCount(); Serial.print("Habe "); Serial.print(numberOfDevices, DEC); Serial.println(" Sensoren gefunden."); // Setzen der Genauigkeit for(int i=0 ;i<numberOfDevices; i++) { if(sensors.getAddress(tempDeviceAddress, i)) { sensors.setResolution(tempDeviceAddress, TEMPERATURE_PRECISION); Serial.print("Sensor "); Serial.print(i); Serial.print(" hat eine genauigkeit von "); Serial.println(sensors.getResolution(tempDeviceAddress), DEC); } } Serial.println(""); } void loop(void) { // Aufruf der Funktion sensors.requestTemperatures() // Dadurch werden alle werte abgefragt. Serial.print("Abfrage der Temperatur... "); sensors.requestTemperatures(); Serial.println("DONE"); // Ausgabe der Daten für jeden Sensor for(int i=0 ;i<numberOfDevices; i++) { float tempC = sensors.getTempCByIndex(i); Serial.print("Sensor "); Serial.print(i, DEC); Serial.print(" hat grad Celsius: "); Serial.println(tempC); } delay(1000); }
Hallo,
ich habe die gleichen Sensoren an einem AVR-NET-IO von Pollin getestet.
Dort zeigen sie alle die gleiche Temperatur.
Frage ich sie vom Arduino ab (über FHEM und Configurable Firmata) haben die drei eine Differenz von fast 1 Grad. Ein Kollege sagte etwas von einem Korrekturwert, den man von jedem 1820 auslesen muss und dann damit die Werte korrigieren.
Leider habe ich dazu noch nichts näheres gefunden. Habe auch noch recht wenig Ahnung von Arduions und noch weniger von der Programmierung.