Forum: Projekte & Code USB Temperatursensor: USBTemp


von Mathias D. (gonium)


Lesenswert?

Hi,

meine diesjährige Weihnachtsbastelei ist fertig: Ein kleines 
Thermometer, welches über USB kommuniziert. Ich benutze es um 
kontinuierlich die Temperatur aufzuzeichnen. In meinem Fall denke ich 
daran, eine kleine Regelung für die Heizung aufzubauen (die 
HR20-Thermostate habe ich schon) - dafür sollen im nächsten Schritt noch 
Funksensoren dazu kommen. Andere Leute haben ein ähnliches Setup im 
Serverraum laufen.

Das Projekt basiert auf dem ATMega168 und zwei Temperatursensoren 
DS18S20: Einer für die Innen-, der andere für die Außentemperatur. Ich 
benutze den Software-USB-Stack "AVR-USB" von Objective Development und 
die DS18X20-Routinen von Martin Thomas.

Der Code und die Schaltung stehen unter der GPL und sind hier verfügbar:

  http://code.google.com/p/mikrowerk/wiki/USBTemp

Mein Setup daheim beschreibe ich hier:

  http://gonium.net/md/2009/01/03/usbtemp-continuous-temperature-monitoring/

Schönen Gruß,
-Mathias

von Peter B. (basejump)


Lesenswert?

> In meinem Fall denke ich daran, eine kleine Regelung für die Heizung
> aufzubauen
Die Regeldaten (Solltemperatur) schickst du dann über ein (Java, C++, 
... )Programm mit dem du die Temp.-Kurven für die einzelnen Räume 
erstellt hast zu dem µC ?

> (die HR20-Thermostate habe ich schon) - dafür sollen im
> nächsten Schritt noch Funksensoren dazu kommen.
Willst du die Daten wirklich per Funk übertragen?

Diese HR20-Thermostate hast du dir aber nur gekauft weil du dir die 
Mechanik nicht selbst machen kannst, die Elektronik schmeißt du doch 
dann bestimmt raus.

von Mathias D. (gonium)


Lesenswert?

Hallo Peter,

Peter Bandhauer wrote:
>> In meinem Fall denke ich daran, eine kleine Regelung für die Heizung
>> aufzubauen
> Die Regeldaten (Solltemperatur) schickst du dann über ein (Java, C++,
> ... )Programm mit dem du die Temp.-Kurven für die einzelnen Räume
> erstellt hast zu dem µC ?

So denke ich mir das, ja. Welche Regelverfahren dann zum Einsatz kommen 
etc. ist noch offen. Im Moment finde ich es schon spaßig, die 
Abweichungen von Thermostat- und tatsächlicher Raumtemperatur zu plotten 
- das Verhalten erschließt sich mir noch nicht ganz. Wie gesagt, ist 
eine Spielwiese.

>> (die HR20-Thermostate habe ich schon) - dafür sollen im
>> nächsten Schritt noch Funksensoren dazu kommen.
> Willst du die Daten wirklich per Funk übertragen?

Ja, warum nicht? Ich denke an die RFM12-Module. Natürlich muß der 
Datentransfer verschlüsselt werden. Ich möchte - soweit möglich - 
bereits existierenden Code bzw. Projekte wiederverwenden, da bietet sich 
RFM12 an. (Modulo die Probleme, die ich erst später finde ;-))

> Diese HR20-Thermostate hast du dir aber nur gekauft weil du dir die
> Mechanik nicht selbst machen kannst, die Elektronik schmeißt du doch
> dann bestimmt raus.

Warum? (Ernstgemeinte Frage!) Eigentlich (s.o.) hab ich mir die 
HR20-Thermostate gekauft, weil sie als Experimentierplattform im 
preislichen Rahmen bleiben und weil es wiederum Leute hier im Forum 
gibt, die Code dafür entwickeln. Bis jetzt bin ich auch eigentlich ganz 
zufrieden damit. Gibt es denn Probleme damit?

Schönen Gruß,
-Mathias

von Peter B. (basejump)


Lesenswert?

> Gibt es denn Probleme damit?
Nein, ich hab mir die aber mal angeschaut und frage mich ob die irgend 
eine Schnittstelle haben.
Sieht nicht so aus, da ist doch nur eine Zeitschaltuhr drin.

Wie machst du das?

von Mathias D. (gonium)


Lesenswert?

Hi,

Peter Bandhauer wrote:
>> Gibt es denn Probleme damit?
> Nein, ich hab mir die aber mal angeschaut und frage mich ob die irgend
> eine Schnittstelle haben.
> Sieht nicht so aus, da ist doch nur eine Zeitschaltuhr drin.

Im Prinzip ja, allerdings ist das im Prinzip nur ein ATMega169. Guckst 
Du hier:

 http://www.mikrocontroller.net/articles/Heizungssteuerung_mit_Honeywell_HR20

Die Leute schreiben eine alternative Firmware für den HR20. Später ist 
dann geplant, weitere Interfaces (CAN, RFM12) dranzuhängen.

> Wie machst du das?

Noch gar nicht ;-) Ich benutze die HR20 nur, weil ich sonst vergesse, 
die Heizung in meiner Mietwohnung herunterzudrehen. Nächster Schritt ist 
für mich erst einmal, via Funk einzelne Sensoren zu erfassen. Heute kam 
mein SHT11-Sample ;-)

Gruß,
-Mathias

von Björn B. (elmo)


Lesenswert?

Hallo Mathias,

viele Dank für dieses Projekt. Ich habe die Schaltung soeben nachgebaut 
und es hat alles auf Anhieb funktioniert. Nur einen kleinen Fehler im 
Schaltplan habe ich entdeckt: C5 fühlt sich anders gepolt wohler.

Gruß
Björn

von Mathias D. (gonium)


Lesenswert?

Hallo Björn,

in der Tat, C5 fühlte sich verpolt. Danke für den Hinweis, der 
Kondensator ist nun richtig herum im Schaltplan. Gleichzeitig habe ich 
noch ein paar Bugfixes an der Hostsoftware gemacht. Weiterhin enthalten 
die Graphen nun neben dem letzten Wert auch direkt Minimum, Maximum und 
Durchschnitt der Temperaturen in dem jeweiligen Zeitraum, siehe hier:

  http://gonium.net/md/temperature/

Das neue Release (V0.1.1) ist bei Google Code zu haben:

  http://code.google.com/p/mikrowerk/wiki/USBTemp

Schönen Gruß,
-Mathias

von M. W. (hobbyloet)


Lesenswert?

Hallo Mathias,

wofür bzw. wohin geht VDD?
Ich habe eine Brille, finde aber trotzdem keinen Anschluss dafür.

Die Software finde ich auch nicht.

Gruss Marcel

von Mathias D. (gonium)


Lesenswert?

Hallo Marcel,

M. W. wrote:
> wofür bzw. wohin geht VDD?
> Ich habe eine Brille, finde aber trotzdem keinen Anschluss dafür.

Das wenn Du VDD in der rechten oberen Ecke des Schaltplans meinst: Das 
liegt daran, daß das Eagle-Symbol für den DS18S20 VDD und GND benutzt. 
Die beiden werden einfach auf GND gelegt, die Temperaturmessung 
funktioniert über Parasite Power.

> Die Software finde ich auch nicht.

Brauchst Du Brille:

http://code.google.com/p/mikrowerk/downloads/list

HTH,
-Mathias

von Simon K. (simon) Benutzerseite


Lesenswert?

Warum kein AVR mit eingebautem USB? Das ist standardkonformer.

von Mathias D. (gonium)


Lesenswert?

Simon K. wrote:
> Warum kein AVR mit eingebautem USB? Das ist standardkonformer.

Kennst Du einen USB-AVR im DIL-Gehäuse? Ich würde auch einen "richtigen" 
USB-Stack bevorzugen, aber ich mag nicht extra Platinen ätzen lassen. 
Ich kenne den 90USB162 recht gut, aber der ist eben als SMD-Bauteil 
ausgelegt.

Schönen Gruß,
-Mathias

von Simon K. (simon) Benutzerseite


Lesenswert?

Mathias D. wrote:
> Simon K. wrote:
>> Warum kein AVR mit eingebautem USB? Das ist standardkonformer.
>
> Kennst Du einen USB-AVR im DIL-Gehäuse? Ich würde auch einen "richtigen"
> USB-Stack bevorzugen, aber ich mag nicht extra Platinen ätzen lassen.
> Ich kenne den 90USB162 recht gut, aber der ist eben als SMD-Bauteil
> ausgelegt.

Ok, im DIL Gehäuse wird's dann doch problematisch.

von Björn B. (elmo)


Lesenswert?

Hallo,

ich habe/hatte das Problem, dass die Sensoren bei längerem 
Anschlusskabel nicht erkannt wurden. Nach Abschalten der Compiler 
Optimierung ( OPT=0 ) funktionierte es. Allerdings benutze ich auch 
einen Mega8. Damit die Firmware noch ins Flash passt, habe ich die debug 
Infos abgeschaltet.

Gruß
Björn

von Mathias D. (gonium)


Lesenswert?

Hallo Björn,

Björn Biesenbach wrote:
> ich habe/hatte das Problem, dass die Sensoren bei längerem
> Anschlusskabel nicht erkannt wurden. Nach Abschalten der Compiler
> Optimierung ( OPT=0 ) funktionierte es. Allerdings benutze ich auch
> einen Mega8. Damit die Firmware noch ins Flash passt, habe ich die debug
> Infos abgeschaltet.

Dieses Problem habe ich in meinem Fall durch ein geschirmtes Kabel 
gelöst. Mein Anschlußkabel ist allerdings auch nur ca. fünf Meter lang. 
Interessant, daß sich die Probleme auch durch das Abschalten der 
Kompileroptimierungen beheben lassen. Wahrscheinlich "optimiert" der 
Compiler die Timings des Onewire-Protokolls kaputt.

Schönen Gruß,
-Mathias

von seit_z80 (Gast)


Lesenswert?

Zuerst einmal vielen Dank für diese tolle Lösung, entsprach sie doch 
fast dem, was ich erreichen wollte.
Mittlerweile habe ich den Code auf den ATTiny45 portiert und dabei noch 
den Quarz eingespart. Zwei Pins des 45er dienen jetzt als Ausgang und 
einer davon wird in Zukunft meine Heizung steuern.
Als nächstes wird noch der watchdog implementiert und dann folgt der 
Langzeittest.
Erstaunlich ist die Streuung der DS18S20. Vier von sechs sind ziemlich 
genau, d.h. eine Abweichung von weniger als 0,2°C, während einer bei ca. 
0,7°C liegt und der letzte mit über 1,2°C abweicht, wobei es kein 
linearer Offset ist.

von Mathias D. (gonium)


Lesenswert?

Hi,

seit_z80 schrieb:
> Zuerst einmal vielen Dank für diese tolle Lösung, entsprach sie doch
> fast dem, was ich erreichen wollte.

Schön!

> Mittlerweile habe ich den Code auf den ATTiny45 portiert und dabei noch
> den Quarz eingespart. Zwei Pins des 45er dienen jetzt als Ausgang und
> einer davon wird in Zukunft meine Heizung steuern.
> Als nächstes wird noch der watchdog implementiert und dann folgt der
> Langzeittest.

Interessant. Du hast auch den USB-Part auf den ATTiny45 gebracht? Ist 
der Code bzw. Dein Schaltplan irgendwo zugänglich?

> Erstaunlich ist die Streuung der DS18S20. Vier von sechs sind ziemlich
> genau, d.h. eine Abweichung von weniger als 0,2°C, während einer bei ca.
> 0,7°C liegt und der letzte mit über 1,2°C abweicht, wobei es kein
> linearer Offset ist.

Hm, das habe ich noch gar nicht gemessen. Bei den beiden, die ich 
benutze, liegt der Unterschied konstant bei 0.1°C, wenn sie 
nebeneinander liegen. 1,2° ist schon etwas viel.

Schönen Gruß,
-Mathias

von seit_z80 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Mathias,

ja, der 45er macht de facto alles und natürlich auch die Kommunikation 
per USB. Im Grunde nichts revolutionär neues nach eurer Vorarbeit.
Da ich den Code für die UART entfernt habe, passt jetzt alles in den 
45er. Ich werde den uC-Code weiter reduzieren und nur noch die 
Sensordaten unkonvertiert übertragen, denn die Konvertierung kann das 
usbtemp45 übernehmen.
Was mich momentan noch stört, ist die relativ geringe 
Konvertierungsrate, denn wenn ich 5 Sensoren minütlich abfrage, dann 
dauert es bis zu 3 Minuten, bis die Sensoren ihre Werte aktualisieren.
Aber an sich eine super Lösung und kaum noch zu unter- bzw. überbieten.

Viele Grüße,

Steffen

von Mathias D. (gonium)


Lesenswert?

Hi Steffen,

seit_z80 schrieb:
> ja, der 45er macht de facto alles und natürlich auch die Kommunikation
> per USB. Im Grunde nichts revolutionär neues nach eurer Vorarbeit.
> Da ich den Code für die UART entfernt habe, passt jetzt alles in den
> 45er. Ich werde den uC-Code weiter reduzieren und nur noch die
> Sensordaten unkonvertiert übertragen, denn die Konvertierung kann das
> usbtemp45 übernehmen.

Ah, ok. Ohne den Serial-Teil kann das natürlich funktionieren. Macht 
Sinn :-)

> Was mich momentan noch stört, ist die relativ geringe
> Konvertierungsrate, denn wenn ich 5 Sensoren minütlich abfrage, dann
> dauert es bis zu 3 Minuten, bis die Sensoren ihre Werte aktualisieren.

Hm, hast Du vielleicht Probleme mit der Kommunikation über Onewire? Zum 
Debuggen wäre natürlich eine serielle Leitung schön ;-) Ich hab 
instabile
Verbindungen über Onewire beobachtet, die von zu langen Kabeln (> 5m) 
verursacht wurden.

> Aber an sich eine super Lösung und kaum noch zu unter- bzw. überbieten.

Standing on the shoulders of giants... Der Obdev USB Stack sowie die 
Arbeiten von Martin Thomas sollten nicht unerwähnt bleiben.

Schönen Gruß,
-Mathias

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.