Moin moin,
als Anfänger musste ich natürlich gleich einen digitalen Temp.-Sensor anschliessen.
Hier habe ich mich dann doch ein bisschen übernommen, ein analoger hätte sicherlich schneller funktioniert
Jedenfalls, die Beispiel-sketche waren mir alle zu mächtig, ich muss kein CRC ausgeben, keine HEX-Werte und ich
brauche auch nicht die Suche nach weiteren DS-Sensoren.
Jetzt bekomme ich immerhin ausgelesene Werte auf die serielle Schnittstelle
Aber die kommen ja nicht in Grad Celsius oder Fahrenheit da raus. Muss man die jetzt einfach nur durch einen festen Wert teilen?
Sie liegen so um 50 bei Zimmertemperatur.
Immerhin ist es mir dann auch noch gelungen die eingebaute LED bei über/unterschreiten eines festen Wertes zu schalten freu
Projekt heißt übrigens: Wir basteln und eine Bierkühltruhe aus einer Bier-Gefrier-Truhe :-)))
(Später mit LCD-Display, mit Soll- und Ist-Wert-Anzeige sowie 2 Tastern um die Vorgabe zu verändern....
Sehr geehrter Herr Anfänger zur weiteren Hilfe über diesem Forum ist dringlich anzuraten den Verwendeten Code in seinem Post per Codetags anzufügen, da sonst eine Hilfestellung sich als schwierig erweist.
Mit freundlichem Gruß
Dani
// Schalten der integrierten LED bei fest
// eingestellter TEMP (zb. 52)
// (Ausgabe des DS18S20)
// NICHT Grad Celsius
// 26.9.13
int led = 13; #include <OneWire.h>
OneWire ds(2); // on digital pin 2
void setup(void) {Serial.begin(9600);}
void loop(void) {
pinMode(led, OUTPUT);
float temperature = getTemp();
Serial.println(temperature);
if (temperature > 52) {digitalWrite(led, HIGH);}
else {digitalWrite(led, LOW);}
delay(100); //just here to slow down the output so it is easier to read
}
float getTemp(){
//returns the temperature from one DS18S20 in DEG Celsius
byte data[12];
byte addr[8];
if ( !ds.search(addr)) {
//no more sensors on chain, reset search
ds.reset_search();
return -1000;
}
if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.println();
return -1000;
}
ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end
PS: Hier scheint mir auch noch eine if-Abfrage drin zu stecken welche weitere Sensoren sucht. Ist
mir aber leider (so auf die Schnelle) nicht gelungen diese zu löschen.
Zu erst einmal, halte dich mit dem Titel etwas zurück. Desweiteren den Sketch immer innerhalb eines [code] [/code] Containers senden (* weglassen)
/*
TWTemp Version 1.0 vom 14.06.2013
8038 bytes
Thomas Wenzlaff http://www.wenzlaff.de
Temperature Sensor DS18B20 an Digitalen Port Pin 2 wie folgt verbunden
Links=Masse,
Mitte=Data,
Rechts=+5V,
3300 to 4700 Ohm Widerstand von +5V nach Data.
Es wird erst die Adresse des 1-Wire-Device ausgegeben und dann wird die Temperaturmessung gestartet.
*/
/* Benötigte Bibliotheken importieren */
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2 /* Digitalport Pin 2 definieren */
OneWire ourWire(ONE_WIRE_BUS); /* Ini oneWire instance */
DallasTemperature sensors(&ourWire);/* Dallas Temperature Library für Nutzung der oneWire Library vorbereiten */
void setup()
{
delay(1000);
Serial.begin(9600);
Serial.println("Temperatur Messprogramm");
Serial.println("TWTemp 1.0 vom 14.06.2013");
Serial.println("http://www.wenzlaff.de");
delay(1000);
sensors.begin();/* Inizialisieren der Dallas Temperature library */
adresseAusgeben(); /* Adresse der Devices ausgeben */
Serial.print("Starte Temperatur abfragen ...");
}
void loop()
{
Serial.println();
sensors.requestTemperatures(); // Temp abfragen
Serial.print(sensors.getTempCByIndex(0) );
Serial.print(" Grad Celsius");
}
void adresseAusgeben(void) {
byte i;
byte present = 0;
byte data[12];
byte addr[8];
Serial.print("Suche 1-Wire-Devices...\n\r");// "\n\r" is NewLine
while(ourWire.search(addr)) {
Serial.print("\n\r\n\r1-Wire-Device gefunden mit Adresse:\n\r");
for( i = 0; i < 8; i++) {
Serial.print("0x");
if (addr[i] < 16) {
Serial.print('0');
}
Serial.print(addr[i], HEX);
if (i < 7) {
Serial.print(", ");
}
}
if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.print("CRC is not valid!\n\r");
return;
}
}
Serial.println();
ourWire.reset_search();
return;
}
Teste den mal. Du kannst dann die die Seriellen Ausgaben auskommentieren. Bis du als Ausgabe nur noch dieses erhältst
Serial.print(sensors.getTempCByIndex(0) );
Serial.print(" Grad Celsius");
.
Nach weiteren Adresse würde ich immer Suchen lassen. Was ist, wenn der Sketch verloren geht, dein Projekt soweit läuft, jedoch nur der Sensor defekt ist?