Integration eines akkubetriebenen LED-Strahlers in HomeMatic

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

Antworten
Benutzeravatar
Gelegenheitsbastler
Beiträge: 464
Registriert: 15.10.2017, 07:29

Integration eines akkubetriebenen LED-Strahlers in HomeMatic

Beitrag von Gelegenheitsbastler » 20.05.2019, 22:29

Ich habe mir vor einiger Zeit einen LED-Strahler aus Fernost bestellt, weil es mir gefiel, ihn sowohl mit NiMH-Akkus als auch mit LiIOn-Zellen betreiben zu können. Leider ist der Betrieb mit 3 NiMh nicht zu empfehlen, da der Strahler damit nicht richtig hell leuchtet. Zwei 18650 hingegen lassen ihn schon ziemlich hell erstrahlen.

Weil ich neugierig war, habe ich mir die Elektronik näher angeschaut. Sie ist relativ überschaubar, weshalb ich auf die Idee kam, die Treiber für die großen LEDs (es gibt auch noch eine seitliche kleine Lampe) per HomeMatic anzusteuern. Da ein batterieoptimierter Sketch kein PWM-Signal ausgeben kann, habe ich mich dazu entschlossen, eine kleine Zusatzplatine zu entwerfen. Auf ihr werkelt ein Tiny13. Für die Anbindung an die HomeMatic habe ich meine Platine "Modular" mit LDO verwendet. Die beiden genutzten Ausgänge der Modular sind direkt auf zwei Eingänge des Tiny13 gelegt. Sofern diese beiden Eingänge auf LOW liegen, befindet sich der Tiny13 im Tiefschlaf. Er erwacht sehr kurz, wenn ein Pegelwechsel auf einem der Eingänge stattfindet und schaltet den Ausgang dann entsprechend. Programmiert habe ich die Helligkeit auf 100% und auf etwa 50%. Schaltet man beide Ausgänge gleichzeitig ein, dann blitzt die Lampe mit knapp 1 Hz.

Dadurch, dass ich den Treiber direkt ansteuere, ist die ursprüngliche Funktionalität der Lampe weiterhin gegeben. Die Nutzung mit der HomeMatic ist nur optional. Damit ich auch künftig problemlos Zugriff auf den Konfigurationstaster habe, habe ich diesen extern in das Batteriefach verlegt und in Schrumpfschlauch verpackt.

Der Stromverbrauch der beiden Platinen liegt in etwa bei 180 - 200µA und fällt damit kaum ins Gewicht.

Mein Dank gilt mal wieder Jérôme, der Softwarelegasthenikern wie mir bereitwillig hilfreich zur Seite steht!
viewtopic.php?f=76&t=50740

edit 02.06.2019:
Da ich darum gebeten wurde, hier noch weitere Infos zu dem Projekt.
Die beiden Ausgänge meiner Modular gehen auf D1 und D3 des Tiny13. Es kann auch jeder andere AVR verwendet werden, aber da der Sketch so klein ist, reicht ein Tiny13 aus. Der Ausgang D4 des Tiny geht über einen 10K Widerstand auf einen NPN. In diesem Fall ein BC817-40, der widerum auf den Eingang des LED-Treibers auf der Platine der Lampe geht. Wenn ich es richtig in Erinnerung habe, waren dort zwei Fets parallel geschaltet. Insofern ist es egal, an welchem der beiden Fets man das Kabel anlötet. Den Sketch für die Modular (oder auch einen ProMini, etc.) habe ich oben schon verlinkt, aber trotzdem noch mal angehangen. Einfach die zweite Endung (ZIP) löschen.

Die Blinkfrequenz, die über den Tiny13 vorgegeben wird, kann je nach Geschmack abgeändert oder auch ganz weg gelassen werden. Der Hardwareaufwand ist in Summe sehr überschaubar.

Code: Alles auswählen

#include <avr/sleep.h>
#include <avr/interrupt.h>

#define IN0 3
#define IN1 1
#define OUT1 4

byte Zustand_IN0;
byte Zustand_IN1;

int Frequenz1 = 100; // ms 
int Frequenz2 = 3000;
int Frequenz3 = 100;


void setup() {
  pinMode(IN0, INPUT);
  pinMode(IN1, INPUT);
  pinMode(OUT1, OUTPUT);
}

void sleep() 
{
    GIMSK |= _BV(PCIE);                     // Enable Pin Change Interrupts
    PCMSK |= _BV(PCINT3);                   // Use PB3 as interrupt pin
    PCMSK |= _BV(PCINT1);                   // Use PB1 as interrupt pin
    ADCSRA &= ~(1<<ADEN);                   // Testweise ADC off Befehl von anderer Webseite
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);    // replaces above statement
    sleep_enable();                         // Sets the Sleep Enable bit in the MCUCR Register (SE BIT)
    sei();                                  // Enable interrupts
    sleep_cpu();                            // sleep
    cli();                                  // Disable interrupts
    PCMSK &= ~_BV(PCINT3);                  // Turn off PB3 as interrupt pin
    PCMSK &= ~_BV(PCINT1);                  // Turn off PB1 as interrupt pin
    sleep_disable();                        // Clear SE bit
    ADCSRA |= (1 << ADSC);                  // Testweise ADC off Befehl von anderer Webseite    
    sei();                                  // Enable interrupts
} 
ISR(PCINT0_vect)
{

}

void loop() {

  Zustand_IN0 = digitalRead(IN0);
  Zustand_IN1 = digitalRead(IN1);
 
  if ((Zustand_IN0 == HIGH) && (Zustand_IN1 == LOW)) {digitalWrite (OUT1, HIGH);}
  if ((Zustand_IN0 == LOW) && (Zustand_IN1 == LOW)) {digitalWrite (OUT1, LOW); sleep();}

  if ((Zustand_IN0 == LOW) && (Zustand_IN1 == HIGH)) {
    digitalWrite (OUT1, HIGH);
    delay (Frequenz1);
    digitalWrite (OUT1, LOW);
    delay (Frequenz1);   
    }
   
  if ((Zustand_IN0 == HIGH) && (Zustand_IN1 == HIGH)) {
    digitalWrite (OUT1, HIGH);
    delay (Frequenz3);
    digitalWrite (OUT1, LOW);
    delay (Frequenz2);    
    }
 
}
Geflasht habe ich den Tiny über die Arduino IDE per ISP.
Dateianhänge
HomeMatic Umbau Strahler.ino.zip
(3.57 KiB) 1-mal heruntergeladen
IMG_20190520_215506-1280x960.jpg
IMG_20190520_214817-1280x960.jpg
IMG_20190520_213151-1280x960.jpg
IMG_20190520_213135-1280x960.jpg
IMG_20190520_211017-1280x960.jpg
IMG_20190520_220248-1280x960.jpg
Das Komplizierteste an der Hausautomatisation ist der WAF.™ ​

RaspberryMatic 3.45.7.20190511 auf Raspberry Pi 3B mit HomeMatic Funkmodul von ELV und RTC
FritzBox 7490 FW 7.01 mit Mesh
FritzRepeater 1750E FW 7.01 mit Mesh
FRITZ!DECT 200 (als CUxD Gerät eingebunden)
Etliche selbst gebaute Aktoren und Sender

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“