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: 26
Registriert: 25.09.2012, 07:25
System: CCU und Access Point
Danksagung erhalten: 1 Mal

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

Beitrag von er.win » 20.07.2020, 18:45

WOW! Mir fehlen die Worte!
Dass Euch das so locker von der Hand geht.

Danke!

Werde mich heute noch dransetzen und ausprobieren.

Update 02:11 Uhr:
Leider bekomme ich nur den Helligkeitswert: 0

Tsl2561Dual.h

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
Sketch:

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;

#ifdef _TSL2561_H_
typedef MotionChannel<Hal,PEERS_PER_CHANNEL,List0,Tsl2561Dual<TSL2561_ADDR_LOW, TSL2561_ADDR_HIGH, Tsl2561Dual<>::RETURN_TSL_MAX> > MChannel;
#else
typedef MotionChannel<Hal,PEERS_PER_CHANNEL,List0> MChannel;
#endif

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);
  }
}
Mit gleichem Versuchsaufbau und den normalen Sketch bekomme ich mit TSL2561_ADDR_HIGH als auch mit TSL2561_ADDR_LOW die erwarteten Werte des jeweiligen Sensors.
Mit herzlichsten Grüßen
Er.win
Zuletzt geändert von er.win am 21.07.2020, 10:07, insgesamt 1-mal geändert.

er.win
Beiträge: 26
Registriert: 25.09.2012, 07:25
System: CCU und Access Point
Danksagung erhalten: 1 Mal

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

Beitrag von er.win » 21.07.2020, 10:05

Hm! Grübel, grübel und studier...

Worin besteht der Unterschied ob ich den Helligkeitswert RETURN_TSL_MAX in einem -sensor.h- File abfrage oder im Sketch „HIGH“ und „LOW“ abfrage und den Größeren Sensor „in motion“ setze?

Mit lieben Grüßen
Erwin
Zuletzt geändert von er.win am 21.07.2020, 10:20, insgesamt 1-mal geändert.

jp112sdl
Beiträge: 12084
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

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

Beitrag von jp112sdl » 21.07.2020, 10:14

er.win hat geschrieben:
21.07.2020, 10:05
im Sketch „HIGH“ und „LOW“ abfrage und den Größeren Sensor „in motion“ setze?
Wie/Wo genau würdest du das machen wollen?
Der Sensor wird als Template-Parameter der MotionChannel-Klasse zur Kompilierzeit übergeben. Den kannst du nicht zur Laufzeit setzen.

VG,
Jérôme ☕️

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

er.win
Beiträge: 26
Registriert: 25.09.2012, 07:25
System: CCU und Access Point
Danksagung erhalten: 1 Mal

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

Beitrag von er.win » 21.07.2020, 10:51

Hallo Jerome!
Du siehst ja, dass ich ziemlich unbedarft bin. Ich suche nur nach einer Lösung und würde gerne verstehen wie es funktioniert.

Kann man die Werte der Sensoren im Sketch auslesen und vergleichen?

Und dann:

Im standard Sketch wird mit

typedef MotionChannel<Hal ,PEERS_PER_CHANNEL,List0;Tsl2561<TSL2561_ADDR_LOW oder HIGH

bestimmt welche Adresse zählt. Ich kenne die notwendige Form nicht. Kann TSL2561_ADDR_LOW An der Stelle auch eine Variable sein die man auf Grund des Vergleiches definiert hat?

Ich habe keine bevorzugte Lösung. Hauptsache es funktioniert.
Leider bekomme ich aktuell nur den Helligkeitswert: 0

Habe ich den Sensor Tsl2561Dual.h richtig zusammengebaut?
Zuletzt geändert von er.win am 21.07.2020, 11:18, insgesamt 1-mal geändert.

papa
Beiträge: 705
Registriert: 22.05.2018, 10:23
Hat sich bedankt: 24 Mal
Danksagung erhalten: 120 Mal

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

Beitrag von papa » 21.07.2020, 11:15

Was kommen denn für Ausgaben auf der Console ?
Anfragen zur AskSin++ werden nur im Forum beantwortet

jp112sdl
Beiträge: 12084
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

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

Beitrag von jp112sdl » 21.07.2020, 11:18

er.win hat geschrieben:
21.07.2020, 10:51
Kann TSL2561_ADDR_LOW An der Stelle auch eine Variable sein die man auf Grund des Vergleiches definiert hat?
Nein das geht nicht. :arrow:
jp112sdl hat geschrieben:
21.07.2020, 10:14
Der Sensor wird als Template-Parameter der MotionChannel-Klasse zur Kompilierzeit übergeben. Den kannst du nicht zur Laufzeit setzen.

VG,
Jérôme ☕️

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

er.win
Beiträge: 26
Registriert: 25.09.2012, 07:25
System: CCU und Access Point
Danksagung erhalten: 1 Mal

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

Beitrag von er.win » 21.07.2020, 12:02

Hallo papa!
papa hat geschrieben:
21.07.2020, 11:15
Was kommen denn für Ausgaben auf der Console ?
Ich hoffe die richtigen Informationen zu Übermitteln:
Dateianhänge
122703.png

papa
Beiträge: 705
Registriert: 22.05.2018, 10:23
Hat sich bedankt: 24 Mal
Danksagung erhalten: 120 Mal

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

Beitrag von papa » 21.07.2020, 13:19

Es kommen überhaupt keine Ausgaben von den Lichtsensoren. Scheinbar sind sie gar nicht mit einkompiliert. Mach mal das #ifdef _TSL2561_H_ weg.
Also aus

Code: Alles auswählen

#ifdef _TSL2561_H_
typedef MotionChannel<Hal,PEERS_PER_CHANNEL,List0,Tsl2561Dual<TSL2561_ADDR_LOW, TSL2561_ADDR_HIGH, Tsl2561Dual<>::RETURN_TSL_MAX> > MChannel;
#else
typedef MotionChannel<Hal,PEERS_PER_CHANNEL,List0> MChannel;
#endif
wird einfach nur

Code: Alles auswählen

typedef MotionChannel<Hal,PEERS_PER_CHANNEL,List0,Tsl2561Dual<TSL2561_ADDR_LOW, TSL2561_ADDR_HIGH, Tsl2561Dual<>::RETURN_TSL_MAX> > MChannel;
Anfragen zur AskSin++ werden nur im Forum beantwortet

er.win
Beiträge: 26
Registriert: 25.09.2012, 07:25
System: CCU und Access Point
Danksagung erhalten: 1 Mal

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

Beitrag von er.win » 21.07.2020, 13:28

Auch kein Sensor
Dateianhänge
132418.png

jp112sdl
Beiträge: 12084
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

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

Beitrag von jp112sdl » 21.07.2020, 13:29

Du hast die TSL2561 Unterstützung aber schon inkludiert?
https://github.com/pa-pa/AskSinPP/blob/ ... no#L14-L15

Code: Alles auswählen

//#include <Wire.h>
//#include <sensors/Tsl2561.h>
Die beiden // müssen da weg...

VG,
Jérôme ☕️

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

Antworten

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