Selbstbau Funkthermometer 433Mhz

Begonnen von matlen67, 28 April 2016, 09:59:57

Vorheriges Thema - Nächstes Thema

juergs

#15
Hallo,

ich habe mal den Arduino-Code von hier https://forum.fhem.de/index.php?action=dlattach;topic=50333.0;attach=50293 genommen und als ATtiny85-Typ eingestellt 
und die seriellen Ausgaben entfernt. Protokoll: "LaCrosse" , "TCM" funktionierte bei mir nicht.
Der ATtiny hat 8 KB Flash-Speicher und 512 Bytes Ram und EEPROM. Der Code braucht unoptimiert 5634 Bytes.
Evtl. noch Platz für einen Bootloader (ca. 1900 Bytes) : http://electronics.stackexchange.com/questions/161361/burn-micronucleus-bootloader-to-use-attiny85-via-usb-avrdude
Dazu mehr Infos: http://docs.aakashlabs.org/anuduino/getting_started.html#burning-micronucleus-hex-and-setting-fuses

Arduino-IDE-Konfigurationserweiterung: http://highlowtech.org/?p=1695

Zum Entwickeln kann ich VisualStudio mit VisualMicro + USBAsp-Programmer empfehlen (einfach F5 drücken ...)

Konfiguration:
Der DQ-Pin des DS18B20 Sensors:             PB2 (Arduino D2) => Pin 7   des ATtiny85
Der Sende-Pin auf den 433MHz-Sender:      PB0 (Arduino D0) => Pin 5   des ATtiny85

Todo: Für Batteriebetrieb noch Sleep-Modus implementieren. (Siehe Code, bin noch am Einarbeiten ...).

Beta-Code:

juergs

#16
Um Powersave erweitert, liest nur 1 Sensor ein. (+ Fehler bereinigt.)
Allerdings immer noch etwas Beta ...
Senden: kurz 10 mA.
Sensor einlesen kurz: 0,21 mA
Idle:  unter 0,00 mA.
Funktioniert auch noch mit durchaus leerer Batterie mit ca. 2.85 V ...
Reichweite ca. 10 m.

Zum Programmieren den Jumper von der Batterie ziehen und Sensor entfernen,
sonst meckert der Programmer ... 
(-> weil SCK und DQ des DS18B20 zusammen gelegt sind. Besser DQ auf PB3 oder PB4 legen)

weitere Infos:
http://interface.khm.de/index.php/lab/interfaces-advanced/sleep_watchdog_battery/
http://blog.rot13.org/2013/08/monitoring-room-temperature-using-arduino.html
https://www.insidegadgets.com/projects/standalone-temperature-logger/
https://www.insidegadgets.com/projects/standalone-voltage-logger/
https://www.insidegadgets.com/projects/low-voltage-battery-monitor/
http://interface.khm.de/index.php/lab/interfaces-advanced/nonlinear-mapping/
https://www.insidegadgets.com/code-snippets
http://arduino-info.wikispaces.com/Brick-Temperature-DS18B20?responseToken=e43b79ee6aff5960bbc5d1f1eb7bdde3
https://github.com/chrisfeltman/Arduino/tree/master/libraries/Narcoleptic
https://github.com/nathanchantrell/TinyTX/blob/master/TinyTX_SRF_DS18B20/TinyTX_SRF_DS18B20.ino

Achtung: Im Netz kursieren falsche Arduino-Pinbelegungen des ATtiny85!

juergs

#17
Hi,
habe die Software etwas aufgeteilt:
1.) Arduino Lib: LaCrosse    (433 Mhz LaCrosse Protokoll als Cpp-Library umgesetzt.)
2.) Arduino Lib: Narcoleptic (Powerdown Lib (nicht das Orginal!) , erweitert mit Minuten-Sleep-Vorgabe + AD-Wandler OFF während der Sleep-Phase. Gewinn: von 2 mA auf kleiner 10yA). Siehe auch hier: http://s6z.de/cms/index.php/homeautomation-homecontrol/hardwareplattformen/arduino-atmel/9-winterschlaf-fuer-arduino
3.) VisualMicro-Projekt. ( 5 Minuten Sleep-Phase, fertig kompilierte HEX-Dateien im "Debug"-Verzeichnis)
4.) Multi-Sensor-Betrieb habe ich noch nicht implementiert.

Falls nicht mit VisualMicro kompiliert werden kann/will:
--> Includes anpassen, vorher die Libs in der  Arduino-Ide installieren. Dann sollte es auch über Arduino-IDE  zu kompilieren sein.

Konfiguration für ATtiny85:
    D3 = PB3 = DS18x20-DQ (4K7 Pullup)
    D4 = PB4 = TX-PIN 433MHz-Sender


juergs

#19
Hier die Version mit DHT22@3V .

DHT22:
1 - Vcc ------- 10K.1--- 3V
2 - Data ----  10K.2 ---- Pin2 = D3
3 - not connected
4 - GND

433 TX an PIN 3 = D4

Batterie: CR2450P-H (u.A. @Reichelt)

Die rote SMA-Abdeckung erhöht den WAF.  ;D

Hinweis zum Auslesen des DHT22:
https://forum.fhem.de/index.php/topic,47090.0.html
Sollte (bei korrektem Aufruf) der DHT22-Treiber schon beim ersten Versuch einen Wert zurückliefern, so handelt es sich nicht um einen aktuellen Messwert. Der DHT22 liefert nämlich beim Aufruf den abgespeicherten Messwert der zurückliegenden Messung und startet parallel einen neuen Messvorgang. Der Hersteller empfiehlt, den Sensor zweimal aufzurufen und nur den letzten Rückgabewert zu verwenden.


juergs


juergs

#22
Anbei überarbeiteter Arduino Sensor DHT22-Code.

Die Fuses für den ATtiny85 sollten auf:

Zitat
LF = 0xF1 ( PLL-Clock, not internal 8 MHz)
HF = 0xDF
EF = 0xFF
LB = 0x03

eingestellt werden.

Der fertige Hex-Code ist für Sensor-ID 123 gesetzt. Timing-Daten des Protokolls im Zip.

Gehäuse: KEMO "G023N"


drdownload

das ist natürlich gerade größenmäßig sehr gut.

Ich bin schon länger auf der Suche nach etwas um meine normalen Lichtschalter in die HA einzubinden, aber eigenbau 230 Sachen will ich nicht einbauen und UP ist halt wenig platz.
CUL 868 Slow-RF (FS20 Aktoren, Sender, FHT8V), CUL 868 (WMBUS-Empfang), Jeelink (PCA301), WS3600 (WH3080 über USB-Basis), Bewässerung mit ESP-Easy und Proplanta, RFXTRX433 Home-Easy Empfang und Senden, Oregon TH, WS001 TH), Blackbean IR, Mopidy-Snapcast MR Audio, Kodi, Forum-LED-Controller,

juergs

#25
Die Ideen dort finde ich auch super, allerdings konnte ich den Code dazu nicht endecken .. :(
Die Idee der Reverse-Schutz-Diode hatte ich auch schon gesucht, um eine FET Lösung beim Programmieren zu umgehen.
Das spart ja einen Jumper.
Diese ist mit 0.1 Volt scheint sehr gut geeignet zu sein, oder die der Arduinos: MBR0520LT.
http://www.nxp.com/documents/data_sheet/PMEG1030EH_EJ.pdf
Mal schauen wo es die gibt.

Vielleicht weiß auch schon jemand, wie bzw. mit welchem Protokoll (On-Off) das in FHEM einzubinden geht?

Z.B. der Garagentor-Sensor:
https://hackaday.io/project/1552-lofi/log/4918-garage-door-monitor

juergs

#26
Lacrosse-Temperatur-Erfassung für 4 Dallas 18B20 Sensoren mit Arduino NANO.
Pro Sensor eine separate LaCrosseId, ausgehend ab einer BasisID (z.B. 105 .. 108).
Sensor _1 = D2
Sensor _2 = D3
Sensor _3 = D4
Sensor _4 = D5
Für jeden Sensor ist ein 4K7 Pullup erforderlich.
Der SendePort ist D12.
Das Sende-Intervall ist auf 30s + Random (10000) eingestelt, so dass die Sendeintervalle unterschiedlich ausfallen.
Das beugt Konflikten mit anderen mit festen Intervallen sendenden Sensoren vor.
Um das Problem der Zuordnung SensorID == LaCrosseID zu umgehen bin ich auf feste Portvorgabe
ausgewichen. So benötigt man keine (externe) Konfiguration der Zuordnung mehr und man kann auf definierte Sensoren
über FHEM, mit nur einem Sender zugreifen. 

SensorID: 105 First: 22.56
SensorID: 106 Second: 22.50
SensorID: 107 Third: 22.75
SensorID: 108 Fourth: 22.62
Rand: 32907


Die verwendete Onewire-Library habe ich noch hinzugefügt.
ohne "-master" entpacken und ins Arduino Library Verzeichnis legen.
Oder über "Sketch - Include Library - Add Zip Libary" 
https://www.arduino.cc/en/Guide/Libraries

chris1284


juergs

#28
Yep, dafür ist er gemacht. Das LaCrosse-Protokoll (433MHz !) geht  "out-of-the-box" .
Das Prinzip lässt sich auch auf noch mehr Sensoren anwenden.

Die Temp-Ausschläge stammen noch von meinen Tests. "Hello World"  ...

Danke für den Hinweis auf den anderen Thread. Dort ist aber die 868Mhz-Variante diskutiert?
Kein JeeLink! Bewusst ohne OW-Gateway und Kabel.