AVR - Basteleien - Sensoren - Übersicht


Irgendwann hatte ich mal einige 433MHz Funkmodule bestellt, weil ich damit irgendwas machen wollte...
Irgendwann später bot jemand bei www.mikrcontroller.net ein paar Temperatur-/Feuchtesensoren FOST02 an.
Nach etwas rumfragen fanden sich auch noch 2 Luftdrucksensoren HP03, nun gab es keine Ausrede mehr für mich...
Bei beiden Anbiertern möchte ich ich mich hier nochmal bedanken.

Mittlerweile hat die Geschichte etwas Form angenommen und ich will sie hier mal vorstellen:
Allgemein: es sollten einzelne Sensormodule werden, die in vorgegebenen Abständen ihre Daten senden.
Diese werden an einer oder mehreren Stellen empfangen und angezeigt oder ausgewertet.
Einen bestimmten Zweck soll das Ganze vorerst nicht erfüllen.

Alle Module senden ca. alle 60s ein Telegramm mit z.Z. 24 Byte mit 19200Baud auf 433,92MHz mit 120kHz Shift.
Die Daten selbst werden als vorformatierte ASCII-Daten gesendet, das hat den Vorteil,
daß es keine Probleme bei der Bittakt-Rückgewinnung in den Empfängern gibt, es sind immer genug 0/1-Wechsel vorhanden.
Außerdem erfolgt die Weiterverarbeitung bei mir entweder als Anzeigewert oder als CSV-Datei.
Es können maximal 16 Sensormodule benutzt werden, jedes Sensormodul kann die Daten von bis zu 3 Sensoren übertragen.
Prinzipiell läßt sich das auch erweitern.

Genutzt werden die Daten bisher zur direkten Anzeige im Anzeigemodul.
Dort werden die Daten zur Zeit auch in einem 16MBit Flash gespeichert und können mit TeraTerm per X-Modem als CSV ausgelesen werden.
Das ist aber eigentlich praktisch noch ungenutzt, die Software ist auch noch nicht ganz fehlerfrei.

Eigentlich geplant ist es, die Daten alle paar Stunden auf dem FTP meines NAS (evtl. auch auf dem FTP meiner Homepage) zu speichern und dann per MySQL und Webinterface weiterzuverarbeiten.
Der Webserver basiert auf den ETH_M32_EX Sourcen von U.Radig, auch die Leiterplatte ist von ihm.
Die Sourcen sind modifiziert, der RFM12 ist als Empfänger eingebunden.
Normalerweise ist der Webserver hier zu erreichen.
Der FTP-Client ist leider noch nicht komplett funktionsfähig.

Die Sender der Uni-Module stehen auf -12dBm, der im Keller und der im Gefrierfach auf -3dBm.
Das Protokoll ist sehr simpel, Prüfsumme nur eine XOR-Verknüpfung aller Bytes.
Zur Zeit benutztes Protokoll:
Format der Daten PAKET_LEN = 24

 0 Sensornummer 0x5y    y -> 0...F Sensornummer, maximal 16 Sensoren
 1 Status       0x5y    y -> 0...F 0 - ok, 1 - Batterie leer
 
 Sensordaten, 3 Sensoren, 3 * 7 = 21 Byte, Daten als ASCII mit Komma, alle Stellen mit Space (0x20) gefüllt
 0 Sensortyp    0x5y    y -> 0...F 0 kein Sensor,
  1 - Temperatur: Vorzeichen, 4 Stellen (999,9), führende Nullen unterdrückt, - vor der ersten Ziffer, rechtsbündig
  2 - Feuchte:    3 Stellen (99,9), rechtsbündig
  3 - Luftdruck   5 Stellen (9999,9), führende Nullen unterdrückt, rechtsbündig
  4 - Switch      2 Stellen (99 oder 00), linksbündig, 00 - Aus, 99 - Ein
 23 Checksumme XOR

#define SENSOR_NR       1           // Nummer des Sensors, wird im 1. Byte gesendet

#define USE_TMP36S      0   		// TMP36S wird eingebunden
#define USE_TINY        0		 	// Tiny als Sensor wird eingebunden
#define USE_FOST02      1			// FOST02 als Sensor wird eingebunden
#define USE_SWITCH      0			// Schalter als Statusmeldung

#define TYP_NONE        0			// Typ-Liste, legt Daten-/Zahlenformat fest
#define TYP_TEMPERATUR  1
#define TYP_FEUCHTE     2
#define TYP_LUFTDRUCK   3
#define TYP_SWITCH      4

#if USE_TMP36S
  #define SUB_TYP_1 TYP_TEMPERATUR  // legt fest, an welcher der 3 Positionen und in welchem Format die Daten ins Paket sortiert werden 
  #define SUB_TYP_2 TYP_NONE      
  #define SUB_TYP_3 TYP_NONE
#endif

#if USE_FOST02
  #define SUB_TYP_1 TYP_TEMPERATUR  // Typ des Sub-Sensors 
  #define SUB_TYP_2 TYP_FEUCHTE     // Typ des Sub-Sensors 
  #define SUB_TYP_3 TYP_NONE      
#endif

Alle Module sind frei auf Lochraster verdrahtet, nur für das Uni-Sensormodul gibt es einen noch ungetesteten Layout-Entwurf.
Näheres beschreibe ich unter den einzelnen Baugruppen.
Ursprünglich war alles in Assembler geschrieben, inzwischen sind fast alle Sachen nach C unter WinAVR umgesetzt.
Da es mein erstes C-Projekt ist, nehme ich Kritiken und Hinweise gern entgegen

Letzte Änderung am 25.05.2009