Anleitung Nachbau Bewegungsmelder innen HM-SEC-MDIR-2

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

Moderator: Co-Administratoren

er.win
Beiträge: 17
Registriert: 25.09.2012, 07:25

Re: Anleitung Nachbau Bewegungsmelder innen HM-SEC-MDIR-2

Beitrag von er.win » 21.07.2020, 13:55

Hi Jerome!

Ja habe ich. Sieht mit dem Tsl2561Dual aktuell so aus.

Code: Alles auswählen

//- -----------------------------------------------------------------------------------------------------------------------
// AskSin++
// 2016-10-31 papa Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/
//- -----------------------------------------------------------------------------------------------------------------------

// define this to read the device id, serial and device type from bootloader section
// #define USE_OTA_BOOTLOADER

#define EI_NOTEXTERNAL
#include <EnableInterrupt.h>
#include <AskSinPP.h>
#include <LowPower.h>
// uncomment the following 2 lines if you have a TSL2561 connected at address 0x29
#include <Wire.h>
#include <sensors/Tsl2561Dual.h>

#include <MultiChannelDevice.h>
#include <Motion.h>

// we use a Pro Mini
// Arduino pin for the LED
// D4 == PIN 4 on Pro Mini
#define LED_PIN 4
// Arduino pin for the config button
// B0 == PIN 8 on Pro Mini
#define CONFIG_BUTTON_PIN 8
// Arduino pin for the PIR
// A0 == PIN 14 on Pro Mini
#define PIR_PIN1 14
#define PIR_PIN2 15
#define PIR_PIN3 16
#define PIR_PIN4 17

// number of available peers per channel
#define PEERS_PER_CHANNEL 6

// all library classes are placed in the namespace 'as'
using namespace as;

// define all device properties
const struct DeviceInfo PROGMEM devinfo = {
    {0x56,0x78,0x90},       // Device ID
    "EJ0000BM01",           // Device Serial
    {0x00,0x4a},            // Device Model
    0x16,                   // Firmware Version
    as::DeviceType::MotionDetector, // Device Type
    {0x01,0x00}             // Info Bytes
};

/**
 * Configure the used hardware
 */
typedef AvrSPI<10,11,12,13> SPIType;
typedef Radio<SPIType,2> RadioType;
typedef StatusLed<LED_PIN> LedType;
typedef AskSin<LedType,NoBattery,RadioType> BaseHal;
class Hal : public BaseHal {
public:
  void init (const HMID& id) {
    BaseHal::init(id);
    // set low voltage to 2.2V
    // measure battery every 1h
    //battery.init(seconds2ticks(60UL*60),sysclock);
    //battery.low(22);
    //battery.critical(19);
  }
} hal;


typedef MotionChannel<Hal,PEERS_PER_CHANNEL,List0,Tsl2561Dual<TSL2561_ADDR_LOW, TSL2561_ADDR_HIGH, Tsl2561Dual<>::RETURN_TSL_MAX> > MChannel;


typedef MultiChannelDevice<Hal,MChannel,1> MotionType;
MotionType sdev(devinfo,0x20);

ConfigButton<MotionType> cfgBtn(sdev);

void setup () {
  DINIT(57600,ASKSIN_PLUS_PLUS_IDENTIFIER);
  sdev.init(hal);
  buttonISR(cfgBtn,CONFIG_BUTTON_PIN);
  motionISR(sdev,1,PIR_PIN1);
  motionISR(sdev,2,PIR_PIN2);
  motionISR(sdev,3,PIR_PIN3);
  motionISR(sdev,4,PIR_PIN4);
  
  sdev.initDone();
}

void loop() {
  bool worked = hal.runready();
  bool poll = sdev.pollRadio();
  if( worked == false && poll == false ) {
    // deep discharge protection
    // if we drop below critical battery level - switch off all and sleep forever
    //if( hal.battery.critical() ) {
      // this call will never return
     // hal.activity.sleepForever(hal);
   // }
    // if nothing to do - go sleep
    hal.activity.savePower<Sleep<>>(hal);
  }
}

er.win
Beiträge: 17
Registriert: 25.09.2012, 07:25

Re: Anleitung Nachbau Bewegungsmelder innen HM-SEC-MDIR-2

Beitrag von er.win » 21.07.2020, 14:04

Habe ich den Sensor Tsl2561Dual.h richtig zusammengebaut?

Code: Alles auswählen

// mit speziellen Dank an Jerome und papa!
// 20-07-2020




#ifndef __SENSORS_TSL2561_h__
#define __SENSORS_TSL2561_h__

#include <Sensors.h>
#include <Wire.h>
#include <TSL2561.h>

namespace as {

template <int ADDRESS_ONE=TSL2561_ADDR_LOW, int ADDRESS_TWO=TSL2561_ADDR_HIGH, uint8_t MODE=0>
class Tsl2561Dual : public Brightness {
public:
  enum Mode { RETURN_TSL_MIN = 0, RETURN_TSL_MAX };
private:
  ::TSL2561   _tsl1;
  ::TSL2561   _tsl2;
  bool        _x16;
public:
  Tsl2561Dual () : _tsl1(ADDRESS_ONE), _tsl2(ADDRESS_TWO), _x16(true) {}
  void init () {
    bool present1 = _tsl1.begin();
    if (present1 == false) { DPRINT("TSL2561 not found at address ");DHEXLN((uint8_t)ADDRESS_ONE); }
    bool present2 = _tsl2.begin();
    if (present2 == false) { DPRINT("TSL2561 not found at address ");DHEXLN((uint8_t)ADDRESS_TWO); }

    if( present1 == true  && present2 == true) {
      _tsl1.setGain(TSL2561_GAIN_16X);
      _tsl2.setGain(TSL2561_GAIN_16X);
      _tsl1.setTiming(TSL2561_INTEGRATIONTIME_101MS);
      _tsl2.setTiming(TSL2561_INTEGRATIONTIME_101MS);
    }

  }
  void measure (__attribute__((unused)) bool async=false) {
    if( present() == true ) {
      uint16_t b1 = _tsl1.getLuminosity(TSL2561_VISIBLE);
      if( b1 > 63000 && _x16 == true ) {
        _x16 = false;
        _tsl1.setGain(TSL2561_GAIN_0X);
        b1 = _tsl1.getLuminosity(TSL2561_VISIBLE);
      }
      else if ( b1 < 500 && _x16 == false ) {
        _x16 = true;
        _tsl1.setGain(TSL2561_GAIN_16X);
        b1 = _tsl1.getLuminosity(TSL2561_VISIBLE);
      }

      uint16_t b2 = _tsl2.getLuminosity(TSL2561_VISIBLE);
      if( b2 > 63000 && _x16 == true ) {
        _x16 = false;
        _tsl2.setGain(TSL2561_GAIN_0X);
        b2 = _tsl2.getLuminosity(TSL2561_VISIBLE);
      }
      else if ( b2 < 500 && _x16 == false ) {
        _x16 = true;
        _tsl2.setGain(TSL2561_GAIN_16X);
        b2= _tsl2.getLuminosity(TSL2561_VISIBLE);
      }

      DPRINT("Brightness 1: ");DDECLN(b1);
      DPRINT("Brightness 2: ");DDECLN(b2);

      switch (MODE) {
      case RETURN_TSL_MIN:
        _brightness = min(b1, b2);
        break;
      case RETURN_TSL_MAX:
        _brightness = max(b1, b2);
        break;
      }
    }
  }
};
}
#endif

jp112sdl
Beiträge: 5878
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 257 Mal
Danksagung erhalten: 521 Mal
Kontaktdaten:

Re: Anleitung Nachbau Bewegungsmelder innen HM-SEC-MDIR-2

Beitrag von jp112sdl » 21.07.2020, 16:06

Einen Fehler hab ich grad gefunden...
Mach mal aus

Code: Alles auswählen

    if( present1 == true  && present2 == true) {
      _tsl1.setGain(TSL2561_GAIN_16X);
      _tsl2.setGain(TSL2561_GAIN_16X);
      _tsl1.setTiming(TSL2561_INTEGRATIONTIME_101MS);
      _tsl2.setTiming(TSL2561_INTEGRATIONTIME_101MS);
    }
->

Code: Alles auswählen

    if( present1 == true  && present2 == true) {
      _present = true;
      _tsl1.setGain(TSL2561_GAIN_16X);
      _tsl2.setGain(TSL2561_GAIN_16X);
      _tsl1.setTiming(TSL2561_INTEGRATIONTIME_101MS);
      _tsl2.setTiming(TSL2561_INTEGRATIONTIME_101MS);
    }

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

er.win
Beiträge: 17
Registriert: 25.09.2012, 07:25

Re: Anleitung Nachbau Bewegungsmelder innen HM-SEC-MDIR-2

Beitrag von er.win » 21.07.2020, 19:03

Ich glaube ich habe den kleinen Großen Fehler gefunden.

Habe im Sensor Tsl2561Dual in der Zeile 16 Mode=0 durch Mode=1 ersetzt.

Code: Alles auswählen

// mit speziellem Dank an Jerome und papa!
// 20-07-2020




#ifndef __SENSORS_TSL2561_h__
#define __SENSORS_TSL2561_h__

#include <Sensors.h>
#include <Wire.h>
#include <TSL2561.h>

namespace as {

template <int ADDRESS_ONE=TSL2561_ADDR_LOW, int ADDRESS_TWO=TSL2561_ADDR_HIGH, uint8_t MODE=1>
class Tsl2561Dual : public Brightness {
public:
  enum Mode { RETURN_TSL_MIN = 0, RETURN_TSL_MAX };
private:
  ::TSL2561   _tsl1;
  ::TSL2561   _tsl2;
  bool        _x16;
public:
  Tsl2561Dual () : _tsl1(ADDRESS_ONE), _tsl2(ADDRESS_TWO), _x16(true) {}
  void init () {
    bool present1 = _tsl1.begin();
    if (present1 == false) { DPRINT("TSL2561_LOW not found at address ");DHEXLN((uint8_t)ADDRESS_ONE); }
    bool present2 = _tsl2.begin();
    if (present2 == false) { DPRINT("TSL2561_HIGH not found at address ");DHEXLN((uint8_t)ADDRESS_TWO); }

    if( present1 == true  && present2 == true) {
      _present = true;
      _tsl1.setGain(TSL2561_GAIN_16X);
      _tsl2.setGain(TSL2561_GAIN_16X);
      _tsl1.setTiming(TSL2561_INTEGRATIONTIME_101MS);
      _tsl2.setTiming(TSL2561_INTEGRATIONTIME_101MS);
    }

  }
  void measure (__attribute__((unused)) bool async=false) {
    if( present() == true ) {
      uint16_t b1 = _tsl1.getLuminosity(TSL2561_VISIBLE);
      if( b1 > 63000 && _x16 == true ) {
        _x16 = false;
        _tsl1.setGain(TSL2561_GAIN_0X);
        b1 = _tsl1.getLuminosity(TSL2561_VISIBLE);
      }
      else if ( b1 < 500 && _x16 == false ) {
        _x16 = true;
        _tsl1.setGain(TSL2561_GAIN_16X);
        b1 = _tsl1.getLuminosity(TSL2561_VISIBLE);
      }

      uint16_t b2 = _tsl2.getLuminosity(TSL2561_VISIBLE);
      if( b2 > 63000 && _x16 == true ) {
        _x16 = false;
        _tsl2.setGain(TSL2561_GAIN_0X);
        b2 = _tsl2.getLuminosity(TSL2561_VISIBLE);
      }
      else if ( b2 < 500 && _x16 == false ) {
        _x16 = true;
        _tsl2.setGain(TSL2561_GAIN_16X);
        b2= _tsl2.getLuminosity(TSL2561_VISIBLE);
      }

      DPRINT("Brightness 1: ");DDECLN(b1);
      DPRINT("Brightness 2: ");DDECLN(b2);

      switch (MODE) {
      case RETURN_TSL_MIN:
        _brightness = min(b1, b2);
        break;
      case RETURN_TSL_MAX:
        _brightness = max(b1, b2);
        break;
      }
    }
  }
};
}
#endif
Sicher ein Versuch der Hoffnungslosigkeit!

Und nun:
185931.png
Herzlichen Dank! Jetzt kann ich testen.

Mit ganz lieben Grüßen
Er.win

jp112sdl
Beiträge: 5878
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 257 Mal
Danksagung erhalten: 521 Mal
Kontaktdaten:

Re: Anleitung Nachbau Bewegungsmelder innen HM-SEC-MDIR-2

Beitrag von jp112sdl » 21.07.2020, 22:18

er.win hat geschrieben:
21.07.2020, 19:03
Habe im Sensor Tsl2561Dual in der Zeile 16 Mode=0 durch Mode=1 ersetzt.
Das hat keine Auswirkungen.
Das ist nur der Standardwert, wenn du den Template-Parameter im Sketch weg lässt.

Quasi so:

Code: Alles auswählen

typedef MotionChannel<Hal,PEERS_PER_CHANNEL,List0,Tsl2561Dual<TSL2561_ADDR_LOW, TSL2561_ADDR_HIGH> > MChannel;
Dann wird der MODE=1 genutzt.

Es lag dann also wirklich nur noch am fehlenden _present = true;
Prima.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

er.win
Beiträge: 17
Registriert: 25.09.2012, 07:25

Re: Anleitung Nachbau Bewegungsmelder innen HM-SEC-MDIR-2

Beitrag von er.win » 22.07.2020, 01:00

Nochmals vielen herzlichen Dank Euch beiden!

Läuft prima!

In meinem nächsten Leben werde ich Programmierer und verschmelze diesen Bewegungsmeldern mit einem HB-UNI-SenAct-4-4.
Ich finde jeder Sensor hat sich auch einen Schalter/Aktor verdient! :D

Normal kann man kaufen. Das hier ist unbezahlbar!

Mit herzlichen Grüßen
Er.win

Antworten

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