3 graden te weinig
17 berichten
• Pagina 1 van 2 • 1, 2
3 graden te weinig
Ben momenteel met een temperatuursensor (DS18B20) bezig maar deze geeft 3 graden te weinig aan is dit aan te passen in onderstaande code?
- Code: Alles selecteren
#include <OneWire.h>
// DS18B20 op pin 2.
OneWire ds(10);
void setup() {
// Start seriele poort.
Serial.begin(9600);
}
void loop() {
byte data[2];
ds.reset();
ds.write(0xCC);
ds.write(0x44);
delay(5000);
ds.reset();
ds.write(0xCC);
ds.write(0xBE);
data[0] = ds.read();
data[1] = ds.read();
int Temp = (data[1]<<8)+data[0];
Temp = Temp>>4;
// schrijf temperatuur naar console.
Serial.print(" T = ");
Serial.print(Temp);
Serial.println("'C");
}
Ik ben niet de slimste maar doe wel mijn best.
Andreas
Andreas
Advertisement
Re: 3 graden te weinig
Hallo,
Ik heb je code ingevoerd en geprobeerd.
Geeft bij mij 23 graden aan.
Een, gekalibreerde, thermistor geeft op het zelfde moment 22,35 graden.
Die 23 graden van jouw code is wel afgerond...
Je kunt er vanuit gaan dat je code goed werkt.
Zit hij wel in de goede poort?
Je geeft aan dat hij op pin 2 zit.
Maar in je code staat ds(10).
Dus heb ik hem in pin 10 gestopt...
Waarom gebriuk je niet een bestaande library voor de DS18B20.
Kun je ook de decimalen uitlezen.
Groet,
Henk Siewert
Ik heb je code ingevoerd en geprobeerd.
Geeft bij mij 23 graden aan.
Een, gekalibreerde, thermistor geeft op het zelfde moment 22,35 graden.
Die 23 graden van jouw code is wel afgerond...
Je kunt er vanuit gaan dat je code goed werkt.
Zit hij wel in de goede poort?
Je geeft aan dat hij op pin 2 zit.
Maar in je code staat ds(10).
Dus heb ik hem in pin 10 gestopt...
Waarom gebriuk je niet een bestaande library voor de DS18B20.
Kun je ook de decimalen uitlezen.
Groet,
Henk Siewert
Re: 3 graden te weinig
Hallo,
Probeer dit eens.
NU WEL IN PIN 2 STOPPEN!
Geeft bij mij 23,87 graden.
Mijn Thermistor geeft 22,52 graden.
Iets meer dan één graad verschil.
Maar ik heb nog nooit 2 sensoren meegemaakt die het helemaal met elkaar eens waren.
Dit kun je wel kalibreren.
Probeer dit eens.
NU WEL IN PIN 2 STOPPEN!
Geeft bij mij 23,87 graden.
Mijn Thermistor geeft 22,52 graden.
Iets meer dan één graad verschil.
Maar ik heb nog nooit 2 sensoren meegemaakt die het helemaal met elkaar eens waren.
Dit kun je wel kalibreren.
- Code: Alles selecteren
/*
ThermistorVWK
Auteur : Henk Siewert
Datum : 25 november 2015
Sensor : Maxim ( Dallas ) DS18B20
Versie : 001
MCU : Arduino Uno
Language : Arduino C++
Compiler : EArduino 1.6.6
Editor : NotePad++
WWW : http://www.swtcomp.com
*/
#include <OneWire.h>
int DS18S20_Pin = 2; // DS18S20 Signal pin on digital 2
//Temperature chip i/o
OneWire ds(DS18S20_Pin); // on digital pin 2
void setup()
{
Serial.begin(9600);
}
void loop()
{
float temperature = getTemp();
Serial.println(temperature);
delay(1000);
}
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("CRC is not valid!");
return -1000;
}
if ( addr[0] != 0x10 && addr[0] != 0x28)
{
Serial.print("Device is not recognized");
return -1000;
}
ds.reset();
ds.select(addr);
ds.write(0x44, 1); // Start conversion, with parasite power on at the end
byte present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
for (int i = 0; i < 9; i++) // We need 9 bytes
{
data[i] = ds.read();
}
ds.reset_search();
byte MSB = data[1];
byte LSB = data[0];
float tempRead = ((MSB << 8) | LSB); // Using two's compliment
float TemperatureSum = tempRead / 16;
return TemperatureSum;
}
Re: 3 graden te weinig
Hallo,
Ik heb de DS18B20 eens aangesloten op mijn Texas Instruments LaunchPad.
Hij geeft nu 22,6.
De thermistor geeft 22,61.
Lijkt me niet verkeert...
Maar de DS flippert af en toe wel naar 22,0 en weer terug.
De DS is niet zo'n erg stabiele sensor.
Bovendien duurt het wel lang, 750 milliseconden, voordat hij weer eens gaat meten.
Als je meer snelheid en een hogere resolutie wil kan ik je de LM35CZ aanraden.
Als je die dan in een 1 seconde loop zet en daar het gemiddelde van neemt heb je zeer betrouwbare uitkomsten.
Dat doe ik ook met mijn thermistor...
Het is bekent dat er nogal wat ruis op de ingangen van de Arduino staat.
Bovendien verdenk ik de opamp in de chip van een niet gecorrigeerde offset.
Eigenlijk zou je alle niet gebruikte ingangen aan massa moeten leggen.
Doe ik altijd met mijn LaunchPad's.
Succes,
Henk Siewert
Ik heb de DS18B20 eens aangesloten op mijn Texas Instruments LaunchPad.
Hij geeft nu 22,6.
De thermistor geeft 22,61.
Lijkt me niet verkeert...
Maar de DS flippert af en toe wel naar 22,0 en weer terug.
De DS is niet zo'n erg stabiele sensor.
Bovendien duurt het wel lang, 750 milliseconden, voordat hij weer eens gaat meten.
Als je meer snelheid en een hogere resolutie wil kan ik je de LM35CZ aanraden.
Als je die dan in een 1 seconde loop zet en daar het gemiddelde van neemt heb je zeer betrouwbare uitkomsten.
Dat doe ik ook met mijn thermistor...
Het is bekent dat er nogal wat ruis op de ingangen van de Arduino staat.
Bovendien verdenk ik de opamp in de chip van een niet gecorrigeerde offset.
Eigenlijk zou je alle niet gebruikte ingangen aan massa moeten leggen.
Doe ik altijd met mijn LaunchPad's.
Succes,
Henk Siewert
Re: 3 graden te weinig
Dank je wel Henk Siewert,
Wat een gedetailleerde uitleg, de decimalen zijn voor mij niet van belang en de temperatuur hoeft maar 1 keer per uur worden uitgelezen.
Alleen de waarde zou wel correct moeten zijn met +- 1 graad.
De tip om de niet gebruikte ingangen aan de GND leggen ga ik zeker gebruiken.
Wat voor sensor zou ik voor de correctheid kunnen gebruiken?
Wat een gedetailleerde uitleg, de decimalen zijn voor mij niet van belang en de temperatuur hoeft maar 1 keer per uur worden uitgelezen.
Alleen de waarde zou wel correct moeten zijn met +- 1 graad.
De tip om de niet gebruikte ingangen aan de GND leggen ga ik zeker gebruiken.
Wat voor sensor zou ik voor de correctheid kunnen gebruiken?
Ik ben niet de slimste maar doe wel mijn best.
Andreas
Andreas
Re: 3 graden te weinig
staat de resolutie wel goed, etc. probeer het volgende eens
cpp code
cpp code
/ This Arduino sketch reads DS18B20 "1-Wire" digital
// temperature sensors.
// Tutorial:
// http://www.hacktronics.com/Tutorials/ar ... orial.html
#include <OneWire.h>
#include <DallasTemperature.h>
// Data wire is plugged into pin 3 on the Arduino
#define ONE_WIRE_BUS 3
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
// Assign the addresses of your 1-Wire temp sensors.
// See the tutorial on how to obtain these addresses:
// http://www.hacktronics.com/Tutorials/ar ... inder.html
DeviceAddress insideThermometer = { 0x28, 0x94, 0xE2, 0xDF, 0x02, 0x00, 0x00, 0xFE };
DeviceAddress outsideThermometer = { 0x28, 0x6B, 0xDF, 0xDF, 0x02, 0x00, 0x00, 0xC0 };
DeviceAddress dogHouseThermometer = { 0x28, 0x59, 0xBE, 0xDF, 0x02, 0x00, 0x00, 0x9F };
void setup(void)
{
// start serial port
Serial.begin(9600);
// Start up the library
sensors.begin();
// set the resolution to 10 bit (good enough?)
sensors.setResolution(insideThermometer, 10);
sensors.setResolution(outsideThermometer, 10);
sensors.setResolution(dogHouseThermometer, 10);
}
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
Serial.print("Error getting temperature");
} else {
Serial.print("C: ");
Serial.print(tempC);
Serial.print(" F: ");
Serial.print(DallasTemperature::toFahrenheit(tempC));
}
}
void loop(void)
{
delay(2000);
Serial.print("Getting temperatures...\n\r");
sensors.requestTemperatures();
Serial.print("Inside temperature is: ");
printTemperature(insideThermometer);
Serial.print("\n\r");
Serial.print("Outside temperature is: ");
printTemperature(outsideThermometer);
Serial.print("\n\r");
Serial.print("Dog House temperature is: ");
printTemperature(dogHouseThermometer);
Serial.print("\n\r\n\r");
}
paul deelen
shooter@home.nl
shooter@home.nl
Re: 3 graden te weinig
Hallo,
Als je met 'correctheid' precisie en betrouwbaarheid bedoelt dan zou ik je de Texas Instruments LM35CZ aanraden.
Goed en betrouwbaar. Resolutie ongeveer 0,5 graden.
Ik weet niet waarvan hij de temperatuur moet meten.
Maar als absolute topper geldt de PT100. Maar een echt goede kan heel veel Euro's kosten.
Maar misschien is een thermokoppel beter.
Hangt van de toepassing af.
Het is ook belangrijk of je onder het vriespunt moet meten.
Dus laat even weten wat je aan het meten bent.
Groet,
Henk Siewert
Als je met 'correctheid' precisie en betrouwbaarheid bedoelt dan zou ik je de Texas Instruments LM35CZ aanraden.
Goed en betrouwbaar. Resolutie ongeveer 0,5 graden.
Ik weet niet waarvan hij de temperatuur moet meten.
Maar als absolute topper geldt de PT100. Maar een echt goede kan heel veel Euro's kosten.
Maar misschien is een thermokoppel beter.
Hangt van de toepassing af.
Het is ook belangrijk of je onder het vriespunt moet meten.
Dus laat even weten wat je aan het meten bent.
Groet,
Henk Siewert
Re: 3 graden te weinig
- Code: Alles selecteren
Getting temperatures...
Inside temperature is: C: 0.00 F: 32.00
Outside temperature is: C: 0.00 F: 32.00
Dog House temperature is: C: 0.00 F: 32.00
Dit is wat ik krijg als ik de code van Shooter gebruik.
Wat ik aan het meten ben is water in een bak met dus DS18B20 een huis tui en keuken thermometer digitaal en een lab thermometer die niet meer is geijkt digitaal tussen deze 2 meters zit een verschil van 0,2 graden.
Ik ben niet de slimste maar doe wel mijn best.
Andreas
Andreas
Re: 3 graden te weinig
je moet wel even het adres aanpassen natuurlijk, want dat weet ik niet.
elke ds heeft een ander getal daarvoor.
dat stuur je er naar toe en dan krijg je antwoord van de ds.
0,2 C is toegestaan bij calibratie bij ijswater.
als je ijsklontjes pakt, liefst in een geisoleerde beker (een soepbeker bijv.) dan er water bij doet tot het ijs net gaat drijven, dan 15 min uten wachten tot het allemaal stabiel is, dan is de garantie 0.02 Celsius.
kokend water is 100 C (maar daar kan een ds niet tegen.
ik doe heel veel Pt100 calibreren voor USDA.
Je zult je wel even moeten verdiepen in die ds want het is geen eenvoudige sensor wat een pt100 wel is, maar die heeft een omzetter nodig.
koop ik op ebay, want dat is goedkoper dan de losse chip kopen.
elke ds heeft een ander getal daarvoor.
dat stuur je er naar toe en dan krijg je antwoord van de ds.
0,2 C is toegestaan bij calibratie bij ijswater.
als je ijsklontjes pakt, liefst in een geisoleerde beker (een soepbeker bijv.) dan er water bij doet tot het ijs net gaat drijven, dan 15 min uten wachten tot het allemaal stabiel is, dan is de garantie 0.02 Celsius.
kokend water is 100 C (maar daar kan een ds niet tegen.
ik doe heel veel Pt100 calibreren voor USDA.
Je zult je wel even moeten verdiepen in die ds want het is geen eenvoudige sensor wat een pt100 wel is, maar die heeft een omzetter nodig.
koop ik op ebay, want dat is goedkoper dan de losse chip kopen.
paul deelen
shooter@home.nl
shooter@home.nl
Re: 3 graden te weinig
Het verdient geen schoonheidsprijs maar ik heb het even zo opgelost.
@Shooter
Bedoel je DeviceAddress??
Hoe kan ik daar achter komen?
- Code: Alles selecteren
// schrijf temperatuur naar console.
Serial.print(" T = ");
Serial.print(Temp +2); // een +2 erachter gezet
Serial.println("'C");
}
@Shooter
Bedoel je DeviceAddress??
Hoe kan ik daar achter komen?
Ik ben niet de slimste maar doe wel mijn best.
Andreas
Andreas
17 berichten
• Pagina 1 van 2 • 1, 2
Terug naar Afgeronde projecten
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 15 gasten