Selbstbau Funkthermometer 433Mhz

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

Vorheriges Thema - Nächstes Thema

ArduPino

Ja ja, FHEM ist so ne Sache. Recht komplex und kompliziert. Dafür offener...sagen alle. Ich wollte auch schon alles hin schmeißen.
Vielleicht ist das ja besonders toll für Programmierer, ich weiß es nicht.

BOD hab ich auch aus  :P
War am überlegen das auf 2,7V zu setzen, aber wenn ich jetzt irgend wann mal das Alarmanlagen Modul am laufen habe (glaube ich fast nicht dran), lasse ich mir ne Nachricht über WhatsApp senden, dann vergesse ich das nicht mehr und dann nudelt der Digispark mir den Akku auch nicht mehr auf unter 2V leer (was im übrigen schädlich für LiIon Akkus ist).

03.3 sieht doch sehr nach 3.3V aus ?
Es sei denn du betreibst den mit ner anderen Spannung  :o
Schau mal, ob der Wert von Anfang an falsch ist, oder erst nach dem 2. Senden.
Wenn von Anfang an, dann zeig mal den Teil im Sketch der bei dir diese Vcc Auslesung macht. Dann könnte man mal vergleichen.

long readVcc() {
  // Read 1.1V reference against AVcc
  // set the reference to Vcc and the measurement to the internal 1.1V reference
  #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
    ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
    ADMUX = _BV(MUX5) | _BV(MUX0);
  #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
    ADMUX = _BV(MUX3) | _BV(MUX2);
  #else
    ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #endif 

  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Start conversion
  while (bit_is_set(ADCSRA,ADSC)); // measuring

  uint8_t low  = ADCL; // must read ADCL first - it then locks ADCH 
  uint8_t high = ADCH; // unlocks both

  long result = (high<<8) | low;

  result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
  return result; // Vcc in millivolts
}


Und das hier noch in die LOOP:

long voltage = readVcc();
double decimalVcc = doubleMap(double(voltage),0,6000,0,6);


decimalVcc ist dann schon die richtige Ausgabe wie z.B. 3,8V

juergs

#136
@Ardupino
Zitatdann nudelt der Digispark mir den Akku auch nicht mehr auf unter 2V leer (was im übrigen schädlich für LiIon Akkus ist).

Hast du mal den Stromverbrauch mit Deinen PowerSave-Einstellungen gemessen?

Evtl. müsstes Du den Spannungsregler 78L05 oder 78M05 auf dem Digispark gegen etwas effizienteres (MCP1702) tauschen.
Stichwort (Quiescent Current).
Die 78x05er haben schon einen hohen Ruhestrom, wenn der  im > 2 mA Bereich ist hast Du schon verloren. Das wäre wohl für den Batteriebetrieb kontraproduktiv.

Gut ist, wenn er im Sleep-Modus < 10uA kommt.

Die LaCrosse-Lib hat auch Repetitions implementiert und sendet, glaube ich je nach Konfiguration 3..5 Mal den Wert raus.
Dazischen liegen Sekunden Pause. Da könnte man auch Power sparen, wenn man die Anzahl der Sendungen verringert.
Je nach Reichweite des Empfängers und Störung durch andere Sensoren würde das gehen.

Zitatdouble decimalVcc = doubleMap(double(voltage),0,6000,0,6);
Wenn es nicht auf Geschindigkeit ankommt ist das auch ok.  :)
Was hattest Du gegen den impliziten Cast?

Jürgen

ArduPino

#137
Zitat von: juergs am 09 November 2016, 20:41:41
@Ardupino
Hast du mal den Stromverbrauch mit Deinen PowerSave-Einstellungen gemessen?

Also ich habe gerade noch mal gemessen (einfaches Multimeter). Beim starten habe ich ca. 9mA, wenn er dann im Sleep ist, habe ich 2,5mA.
Ich benutze direkt den USB Stecker, damit (so dachte ich mir) umgehe ich ja den 7805, da dieser ja dann gar nicht verwendet wird.
Deine 10uA ja doch erheblich weniger.
Ich hatte damals die sleep Funktion so weit angepasst, das noch alles funktioniert.
Ich benutze ja auch noch einen Eingang als Interrupt, der muss deshalb an bleiben.
Deshalb denke ich eher nicht, das es bei mir am Sketch liegt, sondern wie du geschrieben hast, am 7805 ?
Ich bau den gleich mal aus, brauche den eh nicht.

Zitat
Was hattest Du gegen den impliziten Cast?

Verstehe nicht was du meinst, immer diese Fremdwörter :)
Ich hatte die Vcc Messung wie gesagt schon vorher in meinem Sketch. Das habe ich mir aus dem Internet so zusammengesucht und es so gelassen.

EDIT:
So, habe den 7805 entfernt, liege jetzt bei 0,78mA !
Zu meinen 2,5mA schon mal eine Steigerung.
Sehe im Schaltplan aber noch eine Diode und einige Widerstände an PB3 und PB4. Außerdem noch zwei Z Dioden gegen GND.
Mein Akku hat 3,67V der Attiny bekommt davon nur noch 3,46V
Das war auch die Differenz die ich zwischen Messung am Akku und Messung durch den Attiny selber hatte.
Dachte das wären Ungenauigkeiten. Also sind diese Digispark eher nicht so gut wenn man mit Batterien arbeitet.
Aber ok, durch deinen Tipp hat sich das doch schon um einiges gebessert.
Das bleibt nun mal so, wenn ich nun FHEM soweit habe das ich das ganze auch nutzen kann, und weitere Sensoren benötige,werde ich nur den "nackten" Attiny85 verwenden, mal sehen.

EDIT:
Habe sogar "nur" noch 0,59mA , hatte vergessen, das wenn die Tür/Fenster zu ist, das ganze weniger verbraucht als wenn das Fenster oder die Tür auf ist, wegen dem verwendeten PullDown am Reed Kontakt.

juergs

#138
ZitatAlso sind diese Digispark eher nicht so gut wenn man mit Batterien arbeitet.

Ja, darauf wollte ich hinaus  ;)

Du kannst evtl. die "Verbraucher" mit einem 2N7002 von Vcc abhängen, dann fließt kein Ruhestrom, sondern nur dann,
wenn Du es brauchst und einschaltest. Das mach ich jetzt z.B. mit meinem Dallas 18B20.
Mit angemessener "Vorwärm-Phase" natürlich. bei dem 1K5 USB-Pullup- Widerstand fließt auch noch Strom ....

USB brauchst Du ja nur einmal zu programmieren dann ist es funktionslos ....

Aber für andere Typen von Anwendungen sind die Digispark-Teile ja wiederum besser geeignet und
zwar dann wenn sie vom Bus gespeist werden  ;)

rippi46

Hallo Jürgen,

hast du ein Schaltungsbeispiel, wie du die Dallas 18B20 mit dem 2N7002 von VCC abhängst?
Und wie schaltest du ihn wieder ein? Wird dadurch ein zusätzlicher Pin benötigt?


Gruß

Hartmut

PS: Mein Fenstersensor liegt jetzt bei 1,04 V und funktioniert immer noch.
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

ArduPino

Zitat von: rippi46 am 11 November 2016, 10:41:11

PS: Mein Fenstersensor liegt jetzt bei 1,04 V und funktioniert immer noch.

Oh das ist echt wenig. Was kommt denn am StepUp raus ? Bestimmt weniger als 5V ?

Ich habe mir gestern noch schnell irgend was abgeschossen.
Das die Digispark 2 Pins für USB benutzen, wusste ich. An einem habe ich den Reed Kontakt.
Habe gestern noch was am Sketch geändert und vergessen, den Magneten weg zu legen, als ich das Programm neu übertragen habe.
Durch den Reed wird der Pin auf GND geschaltet, was (nach 3x) dann wohl doch nicht so gut war.
Nun ja, Programmieren geht noch, benutze jetzt einen anderen Pin für den Reed und fertig  ;D

rippi46

Hallo ArduPino,

Ich betreibe den Fenstersensor mit einem Eneloop AAA Akku und einem StepUp 3,3V.
Zum Senden wären natürlich 5V besser. Aber das war jetzt mein erster Fenstersensor.
Ich sende all 5 Minuten Temperatur und und die Spannung des Akku. Wenn in der Zwischenzeit das Fenster geöffnet oder geschlossen wird, sende ich auch noch den Status des Fensterkontakts.

Das Ganze läuft jetzt seit ca 5 Wochen.

Gruß

Hartmut
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

KölnSolar

ZitatGut ist, wenn er im Sleep-Modus < 10uA kommt.
Das hast Du so aus dem Datenblatt, oder ? Ich komme mit avr-sleep auf 0,28 mA und vollausgereiztem Narcoleptic(nur noch WDT) mit nem "nackten" 85er auf 0,26 mA  :'( Was hast Du für Werte ?
Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

juergs

#143
@rippi46, hallo Hartmut
anbei mein "Prototyp"  :-[  -> bin auch noch am Experimentieren, aber diese Schaltung geht.

Dallas Sensor per Portpin mit  2N7002 geschalten: High = EIN.
Spart, nach Datenblatt, im Standby noch mal 1mA ein.

wenn man genauer darüber nachdenkt und das Datenblatt des Sensors konsultiert ,
liefert der Port des '85ers bei 3V3 glaube ich 5 mA,  @5V 10mA, vieleicht reicht das schon aus,  um ihn zu betreiben ??? 
(Mal nachschauen ...)

Ui, Sensor knapp 4 mA ... müsste man mal probieren  ;) FET -ist auf alle Fälle sicherer.
Bei Vcc = 2.86Volt macht der Sensor aber schlapp und will nicht mehr ...
Bei einer leereren 3V -Batterie stößt das schnell an die Grenze.

Grüße,
Jürgen


PS: Kabeldicke, viele benutzen teilweise viel zu dicke Litze -> schwer zu löten. Tipp: ein altes 80 poliges P-ATA PC-HD-Kabel auseinander nehmen.
Hat einen CU-Kern und lässt sich prima verarbeiten und abisolierenund ist nicht so "dick", so 0,05 mm Durchmesser. (was die Bastelkiste so hergibt ...)

juergs

#144
Stromverbrauch beim Senden.  ;)

Ok, das Multimeter ist ein bisschen lahm, ist nicht hypergenau, zeigt aber das Wesentliche. 

ArduPino

Zitat von: rippi46 am 11 November 2016, 17:16:00
Hallo ArduPino,

Ich betreibe den Fenstersensor mit einem Eneloop AAA Akku und einem StepUp 3,3V.
Zum Senden wären natürlich 5V besser. Aber das war jetzt mein erster Fenstersensor.
Ich sende all 5 Minuten Temperatur und und die Spannung des Akku. Wenn in der Zwischenzeit das Fenster geöffnet oder geschlossen wird, sende ich auch noch den Status des Fensterkontakts.

Das Ganze läuft jetzt seit ca 5 Wochen.

Gruß

Hartmut

Ich sende auch nur mit 3,6V eben LiIon Akku.
Mit der Reichweite komme ich so ganz gut zurecht, hab nur ein Kabel am Sender, keine richtige Antenne. Kabel hat aber die richtige Länge (glaube 17cm?) für 433Mhz.
Habe nun auf eine Minute reduziert ! Vorher habe ich ca. 30 Sekunden gehabt. Das war aber noch aus der Testphase, damit ich mal Werte bekomme.
Mein Log ist über 10MB groß :) Kann man das eigentlich einfach so löschen und es wird ein neues angelegt ?
Werde mal sehen ob ich das noch auf 2 oder 3 Minuten setze. 5 ist mir etwas zu viel...obwohl für Temperatur eigentlich auch noch egal.
Der Fensterkontakt arbeitet eh über Interrupt, bedeutet, das der Attiny ja sowieso direkt aufwacht und direkt den Code für Fenster auf oder Fenster zu, sendet.
Würde bestimmt noch einiges an Akku Kapazität sparen.

juergs

#146
Große Logfiles machen FHEM etwas langsamer im Seitenaufbau. Bei mir sind die Files auch etwas größer,
stört aber noch nicht richtig.  Wenn Du FHEm runterfährst kannst Du sie ja umbenennen, wenn so geht -> dann löschen.

hier
ZitatWie schon im Artikel über die Max!-Thermostate geschrieben, muss auch hier das Logging etwas eingeschränkt werden. Per Gerät ist mittels ,,event-on-change-reading" und ,,event-min-interval" dafür zu sorgen, dass zwar permanent, aber nur das notwendige geloggt wird.

juergs

Hier noch eine weitere Möglichkeit der Stromversorgung:
solar-pb-akku-lader-mit-attiny13/

KölnSolar

Bin jetzt auf 5µA runter  ;) Die werden vom WDT verursacht. Mein Problem war, dass ADC nicht abgeschaltet hatte, obwohl das eigentlich im power_down so sein soll. Machte also 260 µA !!. Schau ich mir noch einmal in Ruhe an.
Ohne WDT, also mit reinem Interrupt-wake-up läuft mit 0 µA(also mein Schätzeisen zeigt nix mehr an). Ideal für meine geplanten Postmelder  ;)
Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

juergs