Het is simpel maar ik ziet het niet

Arduino specifieke Software
Gebruikers-avatar
Berichten: 102
Geregistreerd: 26 Okt 2015, 16:07

Het is simpel maar ik ziet het niet

Berichtdoor Atwist » 10 Nov 2017, 15:49

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(); "

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

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Het is simpel maar ik ziet het niet

Berichtdoor nicoverduin » 10 Nov 2017, 17:34

Ik het voorbeeld programma eens goed bekijken.....
Het staat er nb. Boven :(
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Het is simpel maar ik ziet het niet

Berichtdoor Koepel » 10 Nov 2017, 20:14

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).

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Het is simpel maar ik ziet het niet

Berichtdoor nicoverduin » 10 Nov 2017, 20:35

Het trieste is dat het er gewoon bij staat .....
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 102
Geregistreerd: 26 Okt 2015, 16:07

Re: Het is simpel maar ik ziet het niet

Berichtdoor Atwist » 11 Nov 2017, 08:01

@ Koepel,
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

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Het is simpel maar ik ziet het niet

Berichtdoor Koepel » 11 Nov 2017, 11:30

Hier: https://github.com/milesburton/Arduino-Temperature-Control-Library/blob/master/DallasTemperature.cpp
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.

Gebruikers-avatar
Berichten: 102
Geregistreerd: 26 Okt 2015, 16:07

Re: Het is simpel maar ik ziet het niet

Berichtdoor Atwist » 11 Nov 2017, 12:48

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.

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

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Het is simpel maar ik ziet het niet

Berichtdoor Koepel » 14 Nov 2017, 16:23

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 ?

Gebruikers-avatar
Berichten: 102
Geregistreerd: 26 Okt 2015, 16:07

Re: Het is simpel maar ik ziet het niet

Berichtdoor Atwist » 14 Nov 2017, 17:35

Hallo Koepel,
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.

Free-Shipping-1pcs-DS18B20-Stainless-steel-package-1-meters-waterproof-DS18b20-temperature-probe-temperature-sensor-18B20.jpg_220x220.jpg
Free-Shipping-1pcs-DS18B20-Stainless-steel-package-1-meters-waterproof-DS18b20-temperature-probe-temperature-sensor-18B20.jpg_220x220.jpg (11.12 KiB) 6722 keer bekeken
Ik ben niet de slimste maar doe wel mijn best.
Andreas


Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 25 gasten