Forum: Mikrocontroller und Digitale Elektronik Pearl Temperatur Feuchte Sensor PE5487-675


von Walter F. (mrhanky)


Angehängte Dateien:

Lesenswert?

Bei Pearl gibt es momentan einen Außensensor von FreeTec (PE5487-675) 
für die Wetterstation PE-4910 für knappe 5 Euro.

Ich will mir damit eine Übersicht über die Temperatur und die 
Feuchtigkeit in verschiedenen Räumen (besonders Bad, Küche und Keller) 
verschaffen.
Dazu wird in jedem Raum ein Sensor platziert (10 Stück in Summe), die 
Daten von einem uController eingefangen und per PC in eine Datenbank 
geschrieben.

Hier die Daten:

Der Sensor sendet auf 433MHz.

Transmitter-Modul:
EM-TX433-01 Ver1.0 2009-06-05

die Daten in der Luft:

Pulsbreite: ca. 500us konstant
Pulsabstand: 1.8ms / 3.92ms

Die Information steckt also in der Pause (1.8ms für 0 und 3.9ms für 
high)
Ein Telegramm besteht aus 36 Bit.
z.B.
5    0    9    B       0    E    F    3    2
0101 0000 1001 11.01 | 0000.1110.1111 0011.0010
ffff rrrr rrrr rr.cc
f = fix, r = random, c = channel

23.9°C (0x0EF) 50% (0x32) CH2

Es wird das gleiche Telegramm mehrfach gesendet. Dabei wird zwischen den 
einzelnen Telegramen eine Pause von ca.9ms gelassen.

Telegramm Aufbau:
Preamble H-L-H-L-H (jeweils 500us)

 4 Bit fix 0x05
10 Bit random (nach Einschalten festgelegt)
 2 Bit Kanal Nummer (0-2)
12 Bit Themperatur *10 (signed)
 8 Bit Feuchte

Die ersten 4 Bit scheinen fest auf 5 (0101) zu stehen.
Die folgenden 10 Bit werden anscheinend zufällig nach dem Einschalten 
(Einlegen der Batterien) gesetzt und bleiben konstant solange das Gerät 
eingeschaltet bleibt.
Auf der Rückseite unter dem Batteriedeckel befindet sich ein 
Schiebeschalter mit dem sich Kanal 1-3 einstellen läßt. Die Einstellung 
ist in den folgenden beiden Bits dargestellt (Kanalnummer -1).
Danach kommen 12 Bit für die Temperatur *10 (wegen der Kommastelle). 
Also für 23.8°C werden also 0xee (238) übertragen. Der Wert ist 
vorzeichenbehaftet (negative Temperaturen).
Die letzen 8 Bit geben die Feuchte an.

Auf der Rückseite befinden sich auch noch 2 Taster. Einer zum Senden, 
ein zweiter zum Umstellen der Anzeige zwischen Fahrenheit und Grad 
Celsius. Die Einstellung der Anzeige hat aber keinen Einfluß auf die 
gesendeten Daten. Hier wird die Temperatur immer in °C gesendet.

Hat jemand schonmal so ein Projekt aufgesetzt ? Ich bin jetzt auf der 
Suche nach einem passenden RF-Empfängermodul.

Walter.

von mike (Gast)


Lesenswert?


von Volker S. (volkerschulz)


Lesenswert?

mike schrieb:
> Siehe http://www.mikrocontroller.net/articles/Bildformate

Er hat doch einen Screenshot gemacht... Fluessigkristall-Screen. Einmal 
von vorne und einmal von hinten. Also kein Grund zu meckern... ;)


@Walter: Wie hast Du denn das Protokoll ausgelesen? Oder hast Du es 
irgendwo dokumentiert gefunden?


Volker

von Walter F. (mrhanky)


Lesenswert?

Hi Volker,

ich hab am TX Pin (zwischen Hauptplatine und TX-Modul) mitgelesen. Der 
Rest ergibt sich daraus.
Also: nein, leider keine Doku - nur "rumprobiert".

Walter.

von Volker S. (volkerschulz)


Lesenswert?

Walter Freywald schrieb:
> Hi Volker,
>
> ich hab am TX Pin (zwischen Hauptplatine und TX-Modul) mitgelesen.
> [...]

Also funktioniert das Ding zumindest schon mal als "wired" Sensor. Ist 
ja auch nett zu wissen. ;)

Hast Du mal einen Link auf das Ding bei Pearl?

Volker

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die Bestellnummer von dem Ding steht doch im Betreff: PE-5847-675

http://www.pearl.de/a-PE5487-5409.shtml

von Walter F. (mrhanky)


Lesenswert?

Ja, der 433MHz Sender ist zum Glück seperat, da läßt sich leicht 
mitlesen ;-)

Ich hab mittlerweile auch die Funkstrecke am Laufen.
Klappt soweit prima. Die Teile senden ziemlich genau alle 34-36 
Sekunden. Bei 4 Stück ist das ja weiter kein Problem. Wenn es dann aber 
10 oder 15 Stück werden, dann wirds schon recht eng. Mal sehen

Walter.

von egberto (Gast)


Lesenswert?

kannst ja mal Schaltung +  Soft hier reinstellen, hätte auch Interesse 
das mit meiner Uhr zu empfangen.

Viele Grüße,

egberto

von Volker S. (volkerschulz)


Lesenswert?

Thx, Rufus.


Walter Freywald schrieb:
> [...] Bei 4 Stück ist das ja weiter kein Problem. Wenn es dann aber
> 10 oder 15 Stück werden, dann wirds schon recht eng. Mal sehen

Man koennte dann ja sensorseitig das Senden immer fuer ein paar Minuten 
unterbinden...

Volker

von Walter F. (mrhanky)


Angehängte Dateien:

Lesenswert?

Hallo egberto,

eine wirklich Schaltung gibt es nicht.
Ich habe ein "standart" 433MHz AM Modul aus einer alten Wetterstation 
ausgebaut (Anschlüsse: Vcc,GND und Data) und an einen Mikrocontroller 
(uC) angeschlossen. Die serielle Schnittstelle des uC hab ich mit ein 
Handy Datenkabel (ist glaube ich ein PL2303 drin) verbunden. Das ist 
alles.

Ich habe mal den wichtigsten Code angehängt.

Es werden 2 8-Bit Timer verwendet:
Timer 1: 20us Zeitbasis für das Ausmessen der RF Signale von 
433MHz-Modul
Timer 2: löst alle 10ms einen Interrupt aus in dem ein Sekundensignal 
für die Ausgabe und das Timeout (Alterung) erzeugt wird

Desweiteren ein Interrupt Pin mit zugehöriger Interrupt Service Routine 
(ISR). Hier findet die eigentliche Auswertung der RF Signale statt. 
Dabei werden sowohl high Phase als auch Low Phase auf gültige Längen 
überprüft. Es werden 36 Bit empfangen und in einem Byte und einem 
Langwort abgelegt und ein Signal gesetzt, dass neue Daten da sind. Für 
die weitere Verarbeitung sorgt dann die Hauptschleife.

Die Daten von den verschiedenen Sensoren werden in einem Strukturfeld 
gespeichert (stSens), damit man die nicht immer wieder aus den 36 Bit 
Rohdaten ableiten muss. Die Struktur ist in em3330.h definiert.
In der Struktur ist auch ein Timeout und ein Delta vorhanden.

Das Timeout dient dazu, dass Sensoren, die nicht mehr senden (weil warum 
auch immer - wahrscheinlich hat sie jemand gestohlen...) automatisch aus 
der Liste entfernt werden. Soll eine neuer Datensatz gespeichert werden 
wird zuerst nach der ID in der List gesucht. Ist die ID vorhanden, so 
werden die Daten an dieser Stelle aktualisiert. Ist er nicht vorhanden 
und die List nicht voll, wird ein neuer Eintrag erstellt. In beiden 
Fällen wird der Timeoutzäher zurückgesetzt.

Der Delta Wert wird gibt für jeden Eintrag die zeitliche Differenz an. 
Man kann daran sehen, vor wieviel Sekunden das letzte Mal gesendet 
wurde.

In der Main Schleife habe ich vorgesehen, dass man die Daten CSV oder 
Human Readable (HR) ausgibt. Ersteres ist sicherlich sinnvoll wenn man 
die Daten am PC weiter verarbeiten will. Bei HR wird die ID ind ID und 
Channel aufgeteilt. Channel sind die untersten beiden Bits der Original 
ID und geben die Schalterstellung auf der Sender-Rückseite wieder.

In printser.c sind ein paar Routinen für die serielle Ausgabe. Hier muß 
eigentlich nur das Funktion "uart_sendbyte(xxx)" angepasst werden.

Der uC den ich verwende ist ein R8C35 von Renesas (habe ich hier noch 
ein Starterkit aus früheren Projekten rumfliegen).
Ist ein 16 Bit Controller mit 20MHz onchip Oszillator, ausreichend 
Speicher, Timer, etc.

Sollte aber auch ohne Probleme auf anderen uCs laufen.

Walter.

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.