geachte lezers,

Ook in 2013 heb ik weer ideetjes.

Ik zou heel graag de buitentemperatuur willen weten. Uitlezen met de pc (Linux). Ik weet dat er veel op internet wordt aangeboden. Maar ik zou het veel nauwkeuriger en exacter willen hebben.
Nu heb ik op internet rond gezocht, en ben het volgende tegen gekomen.

Schema 1: http://martybugs.net/electronics/tempsensor/images/circuit.png
en
Schema 2: http://martybugs.net/electronics/tempsensor/images/circuit_nonparasiti…

Onderdelen:
DS18S20 1-wire temperature sensor
D1 1N5228 3.9v zener diode
D2 1N5234 6.2v zener diode
D3,D4 1N5818 Schottky diode
D5 1N4148 signal diode
D6 5.6v zener diode
C1 10uF tantalum capacitor
R1 1.5kohm resistor
female DB9 serial cable

En als software om het uit lezen:

               $fd = fopen('/dev/ttyS0', "r");
                if (!$fd) {
                 echo "No serial port";
                }
                else {
                 stream_set_timeout($fd, 2);
                 stream_set_blocking($fd, FALSE );
                 sleep(2);
                 $data_serial = fgets($fd,128);
                 $data_serial = fgets($fd,32);
                 $data_serial = fgets($fd,32);

	         $Ctemp = $data_serial + 5;
      		 $Ftemp = round((((9/5) * $Ctemp ) + 32) , 2);

                 echo '</pre><center><span class="Temp">'.$Ftemp.'°F | '.$Ctemp.'°C</span></center><pre>';
               }

              fclose($fd);

Mijn idee is dan ook om de gegevens in een database te zetten. En uit te lezen met php, daar kan eventueel wel een plaatje van gemaakt worden. Maar daar zie ik geen problemen in. (Ben programmeur.)

Mijn vragen zijn dan ook:
- Wat is het verschil van schema 1 en schema 2?
- Hoe accuraat is de meting? Maakt de lengte van de kabel ook uit? Dus van de sensor naar de computer?
- En als ik deze onderdelen bestel en ik soldeer het zoals bovenstaande schema, gaat dit dan echt werken?

Op 19 januari 2013 21:05:11 schreef kartoenweb:
Ik weet dat er veel op internet wordt aangeboden. Maar ik zou het veel nauwkeuriger en exacter willen hebben.

De DS18S20 (de DS1820 is obsolete) is niet veel beter als de meeste andere aanbiedingen.
Heeft +/- 0.5°C nauwkeurigheid en +/- 0.2°C drift, totaal max. dus zo'n 1.4°C verschil mogelijk (worst-case)

Bedankt voor je reactie,

Ik bedoelde meer dat er veel wordt aangeboden als bestaande temperaturen via xml of api's
maar die om het uur worden vernieuwd.

Deze waarde zijn voor mij prima!

Hoe kan ik zoveel mogelijk afwijkende metingen voorkomen?

Ik zou heel graag de buitentemperatuur willen weten

En dat is al wat je wil weten? En de neerslag, de windrichting, de xyz?
Als er kans is, dat je later meer wil weten dan de buitentemperatuur, kan je beter een microcontroller inzetten om de metingen te doen. Die kan dan de gegevens via /dev/ttyS0 doorspelen aan de Linux-bak.

Gnuplot kan er vervolgens een mooi grafiekje van maken, zoals dit:

http://prosje.be/CO/Schemas/WeerGrafiek.png

Hier zie je neerslag, lichtsterkte, buitentemperatuur, windrichting en windkracht samen.

Hoe nauwkeurig?

Een Pt100 is nauwkeuriger dan een DS18S20 maar heeft meer onderdelen nodig.

Sterk afwijkende metingen kun je voorkomen door ze gewoon te negeren.
Je kunt ook de gelezen waarde bijvoorbeeld middelen met de vorige 4 waardes om uitschieters te voorkomen.

Op 19 januari 2013 21:28:17 schreef pros:
[...]

Als er kans is, dat je later meer wil weten dan de buitentemperatuur, kan je beter een microcontroller inzetten om de metingen te doen. Die kan dan de gegevens via /dev/ttyS0 doorspelen aan de Linux-bak.

Wat voor soort apparaat is die mircocontroller?
En hoe kan ik die aanroepen met linux? php?

Een ATmega32, bijvoorbeeld. D'r zit zo'n exemplaar op zolder, dat al 825 dagen uptime heeft. Beschikt over analoge ingangen, en een boel I/O-pinnen waar je mee kan doen wat je wil.

Communiceert met een Epia-MB over een RS232-verbinding, en plaatst alle gegevens in een NFS-directory. Vandaar uit kan elke PC op het LAN met die gegevens doen wat het wil.

Met één PC kan het ook. Maak een programma dat alle gegevens opvraagt en ze noteert in een dir. Laat daar vervolgens je PHP-spul op los.

Op 19 januari 2013 21:53:06 schreef pros:
Een ATmega32, bijvoorbeeld. D'r zit zo'n exemplaar op zolder, dat al 825 dagen uptime heeft. Beschikt over analoge ingangen, en een boel I/O-pinnen waar je mee kan doen wat je wil.

Communiceert met een Epia-MB over een RS232-verbinding, en plaatst alle gegevens in een NFS-directory. Vandaar uit kan elke PC op het LAN met die gegevens doen wat het wil.

Met één PC kan het ook. Maak een programma dat alle gegevens opvraagt en ze noteert in een dir. Laat daar vervolgens je PHP-spul op los.

Dit alles gaat voor mijn zijn doel voorbij. Tot nu toe heb ik meer dan genoeg met alleen een temperatuur!

Even terug komend op mijn vragen.

Kan iemand mij vertellen wat het verschil is tussen schema 1 en schema 2?
Behalve dat de ene meer onderdelen heeft dan de ander...

En het klopt als ik dit maak, dat het ook werkt?

Het onderste schema is het beste (ze zijn allebei nogal beroerd). De onderste gebruikt 'echte' voeding, de bovenste haalt dat uit de datalijn.
De schakeling voeden vanuit de RS232 poort is niet aan te raden, en het mishandelen van de DTR pin met een zenerdiode ook niet...

Wat het verschil is staat gewoon in de tekst op de pagina waar de schema's staan. Je kan schrijven, dan zal lezen toch ook wel lukken:-)

IK weet niet of ik het topic weer mag gebruiken of dat ik met een nieuw topic moet beginnen?

Maar na veel geprutst en gesoldeerd te hebben, krijg ik tot mijn grote teleurstelling het apparaatje niet aan de praat. Dus mijn laatste hoop zijn jullie :)

Het volgende heb ik geprobeerd.
Zowel schema 1 als 2.
http://martybugs.net/electronics/tempsensor/images/circuit.png
http://martybugs.net/electronics/tempsensor/images/circuit_nonparasiti…

De installatie in linux ging op zich ook prima. Digitemp werkt goed.

#digitemp -i -s /dev/ttyS0 -q -c /etc/digitemp.conf
--output:--
101EB29D0208003A : DS1820/DS18S20/DS1920 Temperature Sensor
ROM #0 : 101EB29D0208003A

mijn configfile ziet er dan als volgt uit die gemaakt word: (/etc/digitemp.conf)
TTY /dev/ttyS0
READ_TIME 2000
LOG_TYPE 1
LOG_FORMAT "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F"
CNT_FORMAT "%b %d %H:%M:%S Sensor %s #%n %C"
HUM_FORMAT "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F H: %h%%"
SENSORS 1
ROM 0 0x10 0x1E 0xB2 0x9D 0x02 0x08 0x00 0x3A

Zodra ik probeer de sensoren te benaderen via de serial port krijg ik keurig netjes response.
#digitemp -a -q -c /etc/digitemp.conf
--output:--
Feb 27 21:05:25 Sensor 0 C: 127.69 F: 261.84

Het vervelende is alleen dat ik dus C127 graden terug krijg. wat na een tijdje C85 graden word. (En reken maar dat dat niet de temperatuur is in mijn huis ;))
En wat ook op de website word aangegeven is dat als die melding komt, ik opnieuw de config moet uitvoeren. Dit kan ik heel vaak herhalen, waardoor het dus uiteindelijk de waarde C85 graden krijg.

Als ik meerdere sensoren aansluit krijg ik deze ook netjes te zin in mijn config en in mijn scherm dat er meerder sensors zijn. Zodra ik ze uitlees staan ze allemaal op C85 graden...

Nu kreeg ik de tip om bij schema 2 (circuit_nonparasitic.png) een extra 5 volt voeding er aan te hangen.
Dit heb ik gedaan via de usb-poort (5volt). Die heb ik over de condensator gehangen!? Is dit de juiste manier?
Ik heb dus 5 volt over de condensator gehangen waardoor ik dus een 5 volt heb op de Ground een Vdd. Ga ik dan het commando uitvoeren om de temperatuur te vragen krijg ik geheel niets terug. of hij niet meer aanwezig is. Zowel bij schema 1 als 2. Wat kan ik nog proberen?

Of moet ik dit juist bij schema 1 doen? zoja, waar moet ik dan de 5 volt op aansluiten?
En zit er nu een fout in mijn soldering? Of in de linux?

Hopelijk kunnen jullie mij verder helpen....

Ik heb hier een MS5611 druksensor. Is over I2C uit te lezen. Ik heb dat een tijd aan mijn linuxbakje gehad: de raspberry pi.

Anyway, die heeft een temperatuur sensor aan boord. De handleiding zegt hoe je de boel moet berekenen om in tienden van celcius de temperatuur te verkrijgen. Maar als je op het laatst door een getal deelt wat 100x kleiner is, dan krijg je de temp in mili-celcius. En als hij zegt dat ie 2 mili-celcius omhoog is gegaan (*) dan geloof ik hem. D'r zit echt nauwelijks ruis op die meting.

De absolute nauwkeurigheid is natuurlijk niet zo ontzettend hoog.

De sensor is wel duur en lastig te solderen. Rond de 10 euro, geen pootjes.

(*) Een vinger op 2cm van het ding houden zorgt voor een temperatuurstijging van zoiets.

Nu kreeg ik de tip om bij schema 2 (circuit_nonparasitic.png) een extra 5 volt voeding er aan te hangen.
Dit heb ik gedaan via de usb-poort (5volt). Die heb ik over de condensator gehangen!? Is dit de juiste manier?
Ik heb dus 5 volt over de condensator gehangen waardoor ik dus een 5 volt heb op de Ground een Vdd. Ga ik dan het commando uitvoeren om de temperatuur te vragen krijg ik geheel niets terug. of hij niet meer aanwezig is. Zowel bij schema 1 als 2. Wat kan ik nog proberen?

Of moet ik dit juist bij schema 1 doen? zoja, waar moet ik dan de 5 volt op aansluiten?
En zit er nu een fout in mijn soldering? Of in de linux?

Ik zou deze schema's gewoon al niet gebruiken. Je seriele poort is nooit voor dit soort dingen gemaakt. Als je ook nog op een laptop werkt met een poort waarvan de spanningen aan de lage kant zijn zal helmaal vervelend gaan werken. Of gewoon niet. Een langdurig goedwerkende schakeling zul je nooit lekker voor elkaar krijgen op deze manier. Ik begrijp ook niet helemaal wat je met die vijf volt erbij doet. Het kan wel maar doe het dan zoals in de datasheets en de applicatie notes van dallas wordt aangegeven. Ik heb de indruk dat je met die vijf volt je bus omhog trekt zodat die niets meer doen kan. Je kunt hiermee ook je seriele poort slopen.

Als je dit goed wilt doen neem je een pic628 o.i.d. en die programmeer je met proton basic. En met een max232 pas je de ttl signaal niveau's aan naar de 232 levels.

Hier kun je al bijna alles vinden: http://www.picbasic.nl/frameload.htm?http://www.picbasic.nl/register_c…

Je zult alleen een stukje moeten proggen om de waarden via de uart naar je linux bakje te sturen. Je kunt ook nog de pic cpu uitbreiden met seriele geheugen chip (I2C of zo.) waarin je alle meetwaardes gedurende een tijd op kunt slaan. Dan hoeft dan die 350 watt linux bak niet de hele tijd te laten draaien. Je leest eens in de zoveel tijd even de memory buffer uit en kunt dan de data verwerken.

je hebt dan een veilig systeem dat wel goed werkt en de kans dat je je seriele poort sloopt is ook een stuk kleiner. En het proggen in dat basic is een eitje.

Ik had overigens de indruk dat je systeem zonder die vijf volt al werkte. Alleen was je temp uitlezing niet juist. Je zag de waarden en ID's van de sensoren toch binnenkomen in je linux bak. In principe werkt het dan.

Ik weet het niet zeker meer maar die waarden die die sensor uitstuurt moesten dacht ik omgerekend worden naar iets leesbaars. Er komt in elk geval niet gewoon maar graden C uit. Zie de datasheet hoe dit zit.

Op 28 februari 2013 10:35:44 schreef Ex-fietser:
[...]

Als je dit goed wilt doen neem je een pic628 o.i.d. en die programmeer je met proton basic. En met een max232 pas je de ttl signaal niveau's aan naar de 232 levels.

Hier kun je al bijna alles vinden: http://www.picbasic.nl/frameload.htm?http://www.picbasic.nl/register_c…

Je zult alleen een stukje moeten proggen om de waarden via de uart naar je linux bakje te sturen. Je kunt ook nog de pic cpu uitbreiden met seriele geheugen chip (I2C of zo.) waarin je alle meetwaardes gedurende een tijd op kunt slaan. Dan hoeft dan die 350 watt linux bak niet de hele tijd te laten draaien. Je leest eens in de zoveel tijd even de memory buffer uit en kunt dan de data verwerken.

De termen pic628, max232, ttl en 232 kevels zeggen mij eerlijk gezegd helemaal niets.
Wat is het precies? en kan ik nog wel mijn sensors paralel er aanhangen? en lees ik het dan nog steeds met digitemp uit?

Ik zelf heb mac / linux geen Windows is het dan ook te configureren?

PS: Ik draai op een oud laptopje (10 watt) Die 24 p/d aanstaat.

Op 28 februari 2013 10:00:08 schreef rew:
Ik heb hier een MS5611 druksensor. Is over I2C uit te lezen. Ik heb dat een tijd aan mijn linuxbakje gehad: de raspberry pi.
De sensor is wel duur en lastig te solderen. Rond de 10 euro, geen pootjes.

Helaas moet ik het met mijn eigen sensor doen. heb geen andere optie (Lang verhaal)

koop een arduino. daar zit een voorbeeld programma bij dat de temperatuur kant en klaar over de serieele poort uitspuugt. (zit een usb->serieel omvormer in, dus je krijgt netjes een compoort als je hem aansluit)

sluit je meerdere sensoren aan dan herkent hij ze automatisch en zal hij alle temperaturen op de bus eruit gooigen.

ik heb zelf ooit een chron-job gestart die iedere 5 minuten een script start. die zend een commando naar de arduino en ontvangt een lijstje met temperaturen. de arduino neemt om de zoveel seconden een meting en bewaart de laatst X gemiddelden. dat script slaat de dat op in een SQL database en de rest is peanuts.

p.s. 2000 ms is mischien een beetje kort. de sensor verbruikt energie tijdens het nemen van een meting, en dat veroorzaakt opwarming. het is maar een paar mW, maar als je te vaak meet stijgt de temperatuur!

[Bericht gewijzigd door Progger op (14%)]

TTL = Transistor Transistor Logic waarbij geld dat een logische 0 is nul volt en een logische 1 is vijf volt. BIJ RS232 geld de logische 0 is -12 volt en een logische 1 is +12 volt. Dat kun je dus niet zomaar aan elkaar knopen. Daar moet iets tussen. Bijvoorbeeld een max232 van Maxim. Overigens is Dallas tegenwoordig ook Maxim

Voor de rest Google is your friend. Voor pic628 zou je mischien de zoekterm pic16f628 kunnen gebruiken.

Heb je dit gelezen?

Ik had overigens de indruk dat je systeem zonder die vijf volt al werkte. Alleen was je temp uitlezing niet juist. Je zag de waarden en ID's van de sensoren toch binnenkomen in je linux bak. In principe werkt het dan.

Ik weet het niet zeker meer maar die waarden die die sensor uitstuurt moesten dacht ik omgerekend worden naar iets leesbaars. Er komt in elk geval niet gewoon maar graden C uit. Zie de datasheet hoe dit zit.

Verder heb ik ook geen windhoos. Je ux progje ken ik niet maar als dat gemaakt is om rechtreeks via de uart van je pc met dat dallas ding te praten gaat dat niet werken als dat met een cpu moet praten. Daar zul je zelf een stukje software voor moeten klussen.

Je hebt tegenwoordig heel nauwkeurige NTC sensoren. Die hebben als voordeel dat de verandering per graad groot is, waardoor je elektronica niet moeilijk is. Even calibreren in ijs in water en kokend water, dan heb je je parameters en kun je in software de precieze temperatuur berekenen.

ex-fietser heeft gelijk

Het vervelende is alleen dat ik dus C127 graden terug krijg. wat na een tijdje C85 graden word. (En reken maar dat dat niet de temperatuur is in mijn huis )

uit de datasheet (p4):

*The power-on reset value of the temperature register is +85°C.

dus je krijgt wel data binnen, maar het read commando wordt niet goed verwerkt, waardoor je de reset waarde krijgt.

Op 28 februari 2013 11:01:54 schreef Progger:
koop een arduino. daar zit een voorbeeld programma bij dat de temperatuur kant en klaar over de serieele poort uitspuugt. (zit een usb->serieel omvormer in, dus je krijgt netjes een compoort als je hem aansluit)

sluit je meerdere sensoren aan dan herkent hij ze automatisch en zal hij alle temperaturen op de bus eruit gooigen.

ik heb zelf ooit een chron-job gestart die iedere 5 minuten een script start. die zend een commando naar de arduino en ontvangt een lijstje met temperaturen. de arduino neemt om de zoveel seconden een meting en bewaart de laatst X gemiddelden. dat script slaat de dat op in een SQL database en de rest is peanuts.

p.s. 2000 ms is mischien een beetje kort. de sensor verbruikt energie tijdens het nemen van een meting, en dat veroorzaakt opwarming. het is maar een paar mW, maar als je te vaak meet stijgt de temperatuur!

Hier ben ik wel erg geïnsereerd na. Hoe ziet die code er ongeveer uit? En wat voor script is het?
En welke variant zou zal ik dan aanschaffen?
Arduino Uno, Arduino Uno SMD, Arduino Leonardo, of met Arduino Ethernet?