Het is simpel maar ik ziet het niet
10 berichten
• Pagina 1 van 1
Het is simpel maar ik ziet het niet
Ja inderdaad ik ben weer eens aan te klojen met een script heb hier het voorbeeld script van de DS18b20 en wil daar een schakeling inbouwen dat een relais aan en uit gaat.
Naar mijn belabberde mening moet het zo kloppen maar er zit een fout in die ik niet zie, terwijl het zo simpel moet zijn.
Bij het comprimeren gaat het hier fout " Temp = sensors(); "
Naar mijn belabberde mening moet het zo kloppen maar er zit een fout in die ik niet zie, terwijl het zo simpel moet zijn.
Bij het comprimeren gaat het hier fout " Temp = sensors(); "
- Code: Alles selecteren
/* Arduino DS18B20 temp sensor tutorial
More info: http://www.ardumotive.com/how-to-use-the-ds18b20-temperature-sensor-en.html
Date: 19/6/2015 // www.ardumotive.com */
//Include libraries
#include <OneWire.h>
#include <DallasTemperature.h>
int Relay1 = 8;
int Temp;
// 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)
{
while(!Serial);
Serial.begin(9600); //Begin serial communication
Serial.println("Arduino Digital Temperature // Serial Monitor Version"); //Print a message
sensors.begin();
}
void loop(void)
{
// Send the command to get temperatures
sensors.requestTemperatures();
Serial.print("Temperature is: ");
Serial.println(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
Temp = sensors();
//Update value every 1 sec.
delay(1000);
if (Temp >30) {
digitalWrite(8,LOW);
}
if (Temp <20) {
digitalWrite(8,HIGH);
}
delay(1000);
}
Ik ben niet de slimste maar doe wel mijn best.
Andreas
Andreas
Advertisement
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Het is simpel maar ik ziet het niet
Ik het voorbeeld programma eens goed bekijken.....
Het staat er nb. Boven
Het staat er nb. Boven
Re: Het is simpel maar ik ziet het niet
Deze aanroep: "sensors.getTempCByIndex(0)" betekent:
Neem het object "sensors" van de DallasTemperature class en gebruik daar de functie "getTempCByIndex[0]" van. Die functie betekent dat de temperatuur in graden Celsius wordt opgevraagd van de eerste gevonden sensor. Als je maar één sensor hebt, dan is dat natuurlijk de eerste. Die funtie geeft vervolgens een floating point getal ('float') terug.
Er zijn namelijk twee manieren om iets van een sensor op te vragen: "By Index" en door het unieke ID nummer te gebruiken. "By Index" betekent dus de eerste of de tweede of de derde, enzovoorts. Het algoritme om te bepalen welke de eerste is, dat is lastig te doorgronden, dat kun je het beste vinden door dat uit te proberen (dat is als er meerdere DS18B20 aan dezelfde 1-Wire bus hangen).
Neem het object "sensors" van de DallasTemperature class en gebruik daar de functie "getTempCByIndex[0]" van. Die functie betekent dat de temperatuur in graden Celsius wordt opgevraagd van de eerste gevonden sensor. Als je maar één sensor hebt, dan is dat natuurlijk de eerste. Die funtie geeft vervolgens een floating point getal ('float') terug.
Er zijn namelijk twee manieren om iets van een sensor op te vragen: "By Index" en door het unieke ID nummer te gebruiken. "By Index" betekent dus de eerste of de tweede of de derde, enzovoorts. Het algoritme om te bepalen welke de eerste is, dat is lastig te doorgronden, dat kun je het beste vinden door dat uit te proberen (dat is als er meerdere DS18B20 aan dezelfde 1-Wire bus hangen).
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Het is simpel maar ik ziet het niet
Het trieste is dat het er gewoon bij staat .....
Re: Het is simpel maar ik ziet het niet
@ Koepel,
Dank voor je uitleg, dat van "getTempCByIndex" dat de C voor Celsius en F voor Fahrenheit had ik al gevonden.
Met "float" had ik het ook al geprobeerd maar volgens mij niet samen met "getTempCByIndex" .
Nu kan ik weer verder, mijn dank is groot.
Dank voor je uitleg, dat van "getTempCByIndex" dat de C voor Celsius en F voor Fahrenheit had ik al gevonden.
- Code: Alles selecteren
float Temp = sensors.getTempCByIndex(0);
Met "float" had ik het ook al geprobeerd maar volgens mij niet samen met "getTempCByIndex" .
Nu kan ik weer verder, mijn dank is groot.
Ik ben niet de slimste maar doe wel mijn best.
Andreas
Andreas
Re: Het is simpel maar ik ziet het niet
Hier: https://github.com/milesburton/Arduino-Temperature-Control-Library/blob/master/DallasTemperature.cpp
Staat dit:
Als de sensor niet gevonden wordt, dan krijg je dus een hele rare float terug. Iets van -127.00 graden of zo. In de .h file staat: "#define DEVICE_DISCONNECTED_C -127".
Dat zie je in sommige voorbeelden terug. Je zou daarop kunnen testen, voor als er een keer een slechte verbinding is naar de DS18B20.
Staat dit:
- Code: Alles selecteren
// Fetch temperature for device index
float DallasTemperature::getTempCByIndex(uint8_t deviceIndex){
DeviceAddress deviceAddress;
if (!getAddress(deviceAddress, deviceIndex)){
return DEVICE_DISCONNECTED_C;
}
return getTempC((uint8_t*)deviceAddress);
}
Als de sensor niet gevonden wordt, dan krijg je dus een hele rare float terug. Iets van -127.00 graden of zo. In de .h file staat: "#define DEVICE_DISCONNECTED_C -127".
Dat zie je in sommige voorbeelden terug. Je zou daarop kunnen testen, voor als er een keer een slechte verbinding is naar de DS18B20.
Re: Het is simpel maar ik ziet het niet
Dat ga ik er ook proberen eens testen, inmiddels draai het onderstaande script op een Arduino UNO met relaisprint en het werkt voor mij uitstekend.
Ik kan nu mij foto ontwikkel vloeistoffen mooi op temperatuur houden.
Ik kan nu mij foto ontwikkel vloeistoffen mooi op temperatuur houden.
- Code: Alles selecteren
//Include libraries
#include <OneWire.h>
#include <DallasTemperature.h>
int Relay1 = 8;
int Temp;
// Data op pin 2
#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)
{
while (!Serial);
Serial.begin(9600); //Begin serial communication
Serial.println("Verwarming ontwikelaar // Versie 1.0");
sensors.begin();
pinMode(Relay1, OUTPUT);
}
void loop(void)
{
// Send the command to get temperatures
sensors.requestTemperatures();
Serial.print("Temperature is: ");
Serial.println(sensors.getTempCByIndex(0));
float Temp = sensors.getTempCByIndex(0);
if (Temp > 21) {
digitalWrite(8, HIGH);
}
if (Temp < 20.2) {
digitalWrite(8, LOW);
}
//Update elke 5 sec.
delay(5000);
}
Ik ben niet de slimste maar doe wel mijn best.
Andreas
Andreas
Re: Het is simpel maar ik ziet het niet
Je hebt een globale variabele int Temp; en een lokale variabele float Temp =
Je kunt die globale weghalen.
Vraagje: Heb je een DS18B20 in een omhulsel gekocht of heb je hem zelf gesealed en hoe ?
Je kunt die globale weghalen.
Vraagje: Heb je een DS18B20 in een omhulsel gekocht of heb je hem zelf gesealed en hoe ?
Re: Het is simpel maar ik ziet het niet
Hallo Koepel,
Okee ga ik doen.
Ik heb er destijds een paar gekocht bij Alibaba zoals hieronder en heb ook met 2 meter kabel voor deze prijzen (€ 0,94 incl verzend) kun je niet zelf maken dacht ik.
Je hebt een globale variabele int Temp; en een lokale variabele float Temp =
Je kunt die globale weghalen.
Okee ga ik doen.
Vraagje: Heb je een DS18B20 in een omhulsel gekocht of heb je hem zelf gesealed en hoe ?
Ik heb er destijds een paar gekocht bij Alibaba zoals hieronder en heb ook met 2 meter kabel voor deze prijzen (€ 0,94 incl verzend) kun je niet zelf maken dacht ik.
Ik ben niet de slimste maar doe wel mijn best.
Andreas
Andreas
Re: Het is simpel maar ik ziet het niet
Bedankt
Het geld zit blijkbaar in de kabel
De huidige stand bij AliExpress is:
83 cent maar een kabel van slechts 1 meter: https://www.aliexpress.com/item/MK00241-Stainless-steel-waterproof-package-type-DS18b20-temperature-probe-temperature-sensor-18B20/32658611153.html
1.61 euro met een kabel van 2 meter: https://www.aliexpress.com/item/MK00015-2-meter-stainless-steel-waterproof-type-DS18b20-temperature-probe-temperature-sensor-18B20/32656173978.html
Het geld zit blijkbaar in de kabel
De huidige stand bij AliExpress is:
83 cent maar een kabel van slechts 1 meter: https://www.aliexpress.com/item/MK00241-Stainless-steel-waterproof-package-type-DS18b20-temperature-probe-temperature-sensor-18B20/32658611153.html
1.61 euro met een kabel van 2 meter: https://www.aliexpress.com/item/MK00015-2-meter-stainless-steel-waterproof-type-DS18b20-temperature-probe-temperature-sensor-18B20/32656173978.html
10 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: zexoyoy en 4 gasten