Funkthermometer

lema67

Neues Mitglied
12. Jan. 2012
21
0
1
55
Sprachen
  1. BascomAVR
Hallo Forum.
Ich bin neu hier und möchte gleich mal mein aktuelles Projekt vorstellen.
Zur Zeit arbeite ich gerade an einem Funkthermometer das über ein Webinterface abgelesen werden kann.
Ich habe hier einen kleinen Linuxserver laufen der für solche Aufgaben bestens geeignet ist.

Das Projekt besteht aus einem Empfänger, mehreren Sendern dem Webinterface und einem C Programm für den Server.

Auf der Sender / Empfängerplatine werkelt ein Atmega328, als Temperatursensor nutze ich den DS1820 und zur Funkübertragung kommen 434 RF Link Sender und Empfänger.

Anbei erstmal Bilder vom Webinterface und dem fertig aufgebauten Sender, und den Schaltplänen. Die Bilder vom Empfänger folgen sobald die Leiterplatten fertig sind.

... to be continued


Webif_ftmrx.jpg ftm_sender.jpg ftm_sender.png ftm_empfänger.png
 
Sieht interessant aus..

Hallo und Herzlich Willkommen in unserem Forum :wavey:,

Dein Projekt sieht interessant aus.
Ich bin dabei eine "spezielle" Uhr zu entwerfen und wollte auch einige Sensoren anbinden (Temp. aussen, Luftfeuchte aussen, Lufdruck aussen, vor genanntes dann nochmals fuer innen, Wasser temp. Pool und Temp. Sauna) sowie ggf. weitere
Sensoren in der Kueche....
Da ich die auch z.T. per Funk anbinden moechte, werde ich Deinen Beitrag mit grossem Interesse verfolgen...
Wuerde mich (und sicher alle anderen auch) freuen, wenn Du uns mehr Details veraten wuerdest :cool:


LG aus Addis Ababa


Klaus
 
Hallo Lema,

Willkommen in unserem Forum.


Ich finde dein Projekt ebenfalls sehr interessant. Da hätte ich für mich schon einen Anwendungsfall ;)

Das Design vom Webinterface sieht auch gut aus.

Ich würde mich freuen, wenn du uns noch weiteres zu deinem Funkthermometer-Projekt erklärst. Hast du auch dein Programm für den Mikrocontroller in C programmiert?

Noch viel Spaß bei uns!

Dirk :ciao:
 
Klar kommen noch mehr Details. Ich hatte eigentlich vor den ersten Beitrag so nach und nach mit Inhalt zu füllen. Habe jetzt aber gemerkt das man Beiträge nur 24 Std. bearbeiten kann :(
So hat halt jedes Forum seine Eigenschaften.

So nun aber zum Projekt.

Normalerweise Ätze ich mir so kleine Prototypenschaltungen selber. Da ich aber vom Sender 6 Stück benötige war mir das dann doch zu aufwendig und habe die Leiterplatten fertigen lassen.
Ich rechne damit das die Leiterplatten für den Empfänger so in 1 -2 Wochen eintrudeln. Sollten diese dann fehlerfrei funktionieren erstelle ich einen Beitrag mit allen Anhängen ( Eagle Layouts , Bascom Source usw..)
Im moment ist der Empfänger noch auf nem Steckboard aufgebaut.

Hier schon mal was zu den Sendern.

Das Program für den Atmega328 wurde in Bascom erstellt.
Als erstes wird die Temperatur des DS1820 über I2C ausgelesen und in einen String im Format ID:Temperatur (Bsp. 01:-15,3 oder 02:8,5) gespeichert.
Der Sendestring wird dann Manchestercodiert und 5 mal in folge über den 434Mhz RF Link Sender übertragen. Und das im 30 Sekunden Rhythmus.

Das Sendetelegramm ist folgendermaßen aufgebaut.
Zuerst kommt ein 200ms langer syncronisations Impuls damit Empfänger und Sender sich einpegeln können, gefolgt von einem Startbyte, 8 Datenbytes und 2 Bytes CRC Checksumme.

Ich habe versucht die Bauteile auf einen minimalen Stromverbrauch zu optimieren. Bin halt nur Hobby Bastler und habe auch Beruflich nicht annähernd was mit Elektronik zu tun :)
Im Powerdown modus verbraucht die Schaltung ca. 20uA im Sendebetrieb der gut 2 sek. benötigt sind es 140uA. Ich hoffe mal das die Batterie mindestens 2 Jahre durchhält.


Anbei mal ein Bild vom Datentelegramm.

Sender_LogicAnalyser.png
 
Hi,

Ich hatte eigentlich vor den ersten Beitrag so nach und nach mit Inhalt zu füllen. Habe jetzt aber gemerkt das man Beiträge nur 24 Std. bearbeiten kann :(
So hat halt jedes Forum seine Eigenschaften.
ist bei einigen anderen Foren sogar noch kürzer.
Gibt dadrüber nen Infobeitrag im Forenbereich.

Gruß
Dino
 
Die Leiterplatten für den Empfänger sind heute angekommen.

ftm_empf.jpg
 
Hallo Lema,

Finde ich sehr interessant.
geht es da jetzt noch weiter....?

Gruss
Stefan
 
Ich habe die Funkthermometer bei mir jetzt im Einsatz. Einen Sender für Aussentemp und einen im Wohnzimmer.
Zwei weitere kommen noch an die Heizungsanlage. Einen für die Vorlauf und Heißwasser Temperatur, mehr hatte ich für mich nicht vorgesehen.

Was noch fehlt sind die Dateianhänge, die folgen demnächst.

Vermisst Du noch irgendwas bestimmtes?


Gruß lema67
 
Hallo Lema,

eigentlich nur die Programme,
hab die Funk-kits selber bei mir zu hause aber noch nicht richtig hinbekommen.Benutzt du noch eine zusätzliche Antenne dafür? weil ich glaube die reichweite ohne Antenne ist ziemlich kurz.

Gruss
Stefan
 
Ja als Antenne nutze ich einen 173mm langen Draht.

Der Empfänger steht im Wohzimmer, der Aussensensor ist ca 15m an der Aussenwand montiert, geht also durch mehrer Wände und Türen.
Ich sende dazu aber auch 10 mal hintereinander die gemessene Temperatur.

Hier die aktuellen Bascom Files: Anhang anzeigen Funkthermometer_Bascom_30.06.13.zip
 
Hallo Lema,

werde das mal auf einen Board aufbauen :)
Da ich bei den Funksachen in BASCOM noch nicht so fit bin,kannst du mir vielleicht erklären was man machen muss wenn man mehrere Sender benutzt.

Gruss
Stefan
 
Danke für die Antwort. Und wie sieht es aus wenn man mehrere Sender hat?

Gruß
Stefan
 
Jeder Sender hat eine eigene ID (Bascom Code Zeile 40).
Da ja jedes Datentelegramm einen crc-Check hat kann eigentlich nix passieren wenn Telegramme sich überschneiden.
 
Hallo Lema,

hab jetzt dein Projekt fertig und habe es für ein 1,8" Display abgewandelt.Nun habe ich ein Problem mit der ausgabe.
Vielleicht kannst du mir da mal helfen.
Es wird mir nur ID01 ausgegeben und ich weiß nicht wie ich ID02 ausgeben kann

Code:
Do

If Daten_empfangen = 1 Then                                 'Daten empfangen

       If Daten = Sync_byte Then Zaehler = 1                'Zeiger auf Anfang stellen

       Daten_buffer(zaehler) = Daten                        'Daten in Buffer schieben
       Daten_empfangen = 0                                  'Status ändern

       If Zaehler = Byte_counter Then                       'alle Bytes da ???

           Gosub Check_crc                                  'CRC berechnen

               If Crc <> 0 Then
                  'Hier sind die Daten ungültig
                  Incr Crc_error_count
                  '
                  Call Lcd_text( "crc-error" , 1 , 30 , 5 , Red , White )

               Else
                  'Ab hier sind die Daten gültig



                  Zaehler = 1
                  'Daten ausgeben, ohne Startbyte und die beiden CRC Bytes  Byte 2 bis 6
                  Do
                     Incr Zaehler



Temperatur = Chr(daten_buffer(2)) + Chr(daten_buffer(3)) + Chr(daten_buffer(4)) + Chr(daten_buffer(5)) + Chr(daten_buffer(6)) + Chr(daten_buffer(7)) + Chr(daten_buffer(8)) + Chr(daten_buffer(9)) + "     "


If Chr(daten_buffer(3)) = "1" Then
        Call Lcd_text(temperatur , 1 , 30 , 5 , Blue , White )

If Chr(daten_buffer(3)) = "2" Then
        Call Lcd_text(temperatur , 1 , 45 , 5 , Blue , White )

 End If
 End If



                  Loop Until Zaehler = R_count              ' old 9

                  Zaehler = 0
               End If
       End If

    Daten = 0
    Incr Zaehler


 End If
 
Erstmal gehe ich davon aus das deine Sender auch 2 verschiedene ID's haben.
Code:
'Sender ID
Dim ID as String * 2
Dim IDar(3) as Byte at ID Overlay
ID = "[COLOR="#FF0000"][B]01[/B][/COLOR]"

Und dann schau die das mal an:
Code:
If Chr(daten_buffer(3)) = "1" Then
        Call Lcd_text(temperatur , 1 , 30 , 5 , Blue , White )

If Chr(daten_buffer(3)) = "2" Then
        Call Lcd_text(temperatur , 1 , 45 , 5 , Blue , White )

 End If
 End If

ID2 wird nur ausgegeben wenn ID = 1 ist ;)

Probiere mal
Code:
If Chr(daten_buffer(3)) = "1" Then
        Call Lcd_text(temperatur , 1 , 30 , 5 , Blue , White )
End If

If Chr(daten_buffer(3)) = "2" Then
        Call Lcd_text(temperatur , 1 , 45 , 5 , Blue , White )
End If
 
so ging es auch nicht hatte ich auch schon getestet.
Ich musste jetzt das 2 und 3 Byte zusammen nehmen und als string deklarieren dann ging es.
Aber super Projekt. Danke dir nochmal.

Was ich aber jetzt noch nicht probiert habe, kann man den "crc error" sich bei einer bestimmten ID anzeigen lassen?


Code:
Tempdaten = Chr(daten_buffer(2)) + Chr(daten_buffer(3))

   If Tempdaten = "01" Then
        Call Lcd_text(temperatur , 1 , 30 , 5 , Blue , White )

      End If

   If Tempdaten = "02" Then
        Call Lcd_text(temperatur , 1 , 45 , 5 , Blue , White )

     End If
 
Das währe dann aber ein reines Glücksspiel.
So wie das Programm jetzt ausgelegt ist wird die ID des Senders und die Temperatur in einem Rutsch übertragen, und davon die Checksumme berechnet.
Wenn da jetzt was schief gegeangen ist bei der Übertragung kann doch auch die ID kaputt sein.

Gruß lema67
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)