HM-SEC-MDIR Nachbau
Moderator: Co-Administratoren
-
- Beiträge: 174
- Registriert: 17.11.2018, 18:05
- Hat sich bedankt: 27 Mal
- Danksagung erhalten: 14 Mal
HM-SEC-MDIR Nachbau
ERLEDIGT!!!!
Hallo,
ich habe ein Probelm mit dem Nachbau von HM-SEC-MDIR
Problem:
Also der Sensor wird von der Homematic sauber erkannt und wenn ich PIR gegen Masse schalte dann wird in der Arduino IDE (Serieller Monitor) "Motion" erkannt und in der Homematik ebenfall "Bewegung" erkannt.
Der AS312 Sensor scheint zu funktionieren, nur schafft er es nicht den PIR auf GND zu ziehen was ich sehen kann ist das die Spannung bei Bewegung 3,3 Volt ist und bei keiner Bewegung die Spannung auf 2,7 Volt fällt. Ich habe versucht einen 10 KOhm zischen GND und PIR zu schalten.......keine Verbesserung erst bei einem Widerstand von 4.7 K Ohm funktioniert die Erkennung. Probelm ist jetzt aber das bei Bewegung die Spannung bei 1,8 PIR/GND ist und bei keiner Bewegung die Spannung 1,5 Volt ist und der Arduino bei "keiner Bewegung" ständig signal "Motion" sendet. Also genau flasch herum. Ich habe leider nur sehr wenig Ahung von der Programmierung man müsste das in dem Sketch verändern. Die nächste Frage wäre warum ich hier einen Widerstand zwischen PIR und GND brauche ich habe Beiträge gesehen da ist hier kein Widerstand verbaut.
Vielen Dank Schon mal für Eure Hilfe
hier die Details:
Hardware
- Mini IR Bewegungssensor PIR AM312
https://www.ebay.de/itm/Mini-IR-Bewegun ... 2749.l2649
- Aduino Pro Mini
- Funkmodul wird ein CC1101 868Mhz
- Taster
- LED
- 330Ohm widerstand
kurz gesagt dieser Aufbau hier nur bei mir ist der PIR auf Input 3
Sketch habe ich diesen verwendet:
https://github.com/pa-pa/AskSinPP/blob/ ... C-MDIR.ino
//- -----------------------------------------------------------------------------------------------------------------------
// 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 <TSL2561.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_PIN 3
// 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
"papa222222", // 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<4> LedType;
typedef AskSin<LedType,BatterySensor,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,BrightnessTSL2561<TSL2561_ADDR_LOW> > 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_PIN);
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);
}
}
Hallo,
ich habe ein Probelm mit dem Nachbau von HM-SEC-MDIR
Problem:
Also der Sensor wird von der Homematic sauber erkannt und wenn ich PIR gegen Masse schalte dann wird in der Arduino IDE (Serieller Monitor) "Motion" erkannt und in der Homematik ebenfall "Bewegung" erkannt.
Der AS312 Sensor scheint zu funktionieren, nur schafft er es nicht den PIR auf GND zu ziehen was ich sehen kann ist das die Spannung bei Bewegung 3,3 Volt ist und bei keiner Bewegung die Spannung auf 2,7 Volt fällt. Ich habe versucht einen 10 KOhm zischen GND und PIR zu schalten.......keine Verbesserung erst bei einem Widerstand von 4.7 K Ohm funktioniert die Erkennung. Probelm ist jetzt aber das bei Bewegung die Spannung bei 1,8 PIR/GND ist und bei keiner Bewegung die Spannung 1,5 Volt ist und der Arduino bei "keiner Bewegung" ständig signal "Motion" sendet. Also genau flasch herum. Ich habe leider nur sehr wenig Ahung von der Programmierung man müsste das in dem Sketch verändern. Die nächste Frage wäre warum ich hier einen Widerstand zwischen PIR und GND brauche ich habe Beiträge gesehen da ist hier kein Widerstand verbaut.
Vielen Dank Schon mal für Eure Hilfe
hier die Details:
Hardware
- Mini IR Bewegungssensor PIR AM312
https://www.ebay.de/itm/Mini-IR-Bewegun ... 2749.l2649
- Aduino Pro Mini
- Funkmodul wird ein CC1101 868Mhz
- Taster
- LED
- 330Ohm widerstand
kurz gesagt dieser Aufbau hier nur bei mir ist der PIR auf Input 3
Sketch habe ich diesen verwendet:
https://github.com/pa-pa/AskSinPP/blob/ ... C-MDIR.ino
//- -----------------------------------------------------------------------------------------------------------------------
// 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 <TSL2561.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_PIN 3
// 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
"papa222222", // 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<4> LedType;
typedef AskSin<LedType,BatterySensor,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,BrightnessTSL2561<TSL2561_ADDR_LOW> > 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_PIN);
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);
}
}
Zuletzt geändert von Jan_von_neben_an am 25.12.2018, 16:54, insgesamt 2-mal geändert.
-
- Beiträge: 705
- Registriert: 22.05.2018, 10:23
- Hat sich bedankt: 24 Mal
- Danksagung erhalten: 120 Mal
Re: HM-SEC-MDIR Nachbau
Du musst den PIR an D3 anschließen. Der Kommentar in Sketch ist falsch.
Der PIR zieht auch nicht auf GND sondern geht auf HIGH, wenn sich was bewegt.
Der PIR zieht auch nicht auf GND sondern geht auf HIGH, wenn sich was bewegt.
Anfragen zur AskSin++ werden nur im Forum beantwortet
-
- Beiträge: 174
- Registriert: 17.11.2018, 18:05
- Hat sich bedankt: 27 Mal
- Danksagung erhalten: 14 Mal
Re: HM-SEC-MDIR Nachbau
Hallo,
Ja der PIR ist auf D3 angeschlossen, das habe ich auch geändert in meinem Code.
Wenn ich GND mit D3 verbinde dann kommt auch im Seriellen Monitor IDE "Motion" und dieser wird auch zur Homematik übertragen. Das Bild ist in dem Fall falsch ich habe das einfach kopiert das war einfacher als neu zeichnen.
Ich müsste das Signal einfach negieren, ich habe nur keine Ahnung wie das geht. Was ich halt nicht schnalle warum ich einen Widerstand hier brauche es gibt hier User da läuft es ohne Widerstand?
Danke
Ja der PIR ist auf D3 angeschlossen, das habe ich auch geändert in meinem Code.
Wenn ich GND mit D3 verbinde dann kommt auch im Seriellen Monitor IDE "Motion" und dieser wird auch zur Homematik übertragen. Das Bild ist in dem Fall falsch ich habe das einfach kopiert das war einfacher als neu zeichnen.
Ich müsste das Signal einfach negieren, ich habe nur keine Ahnung wie das geht. Was ich halt nicht schnalle warum ich einen Widerstand hier brauche es gibt hier User da läuft es ohne Widerstand?
Danke
-
- Beiträge: 705
- Registriert: 22.05.2018, 10:23
- Hat sich bedankt: 24 Mal
- Danksagung erhalten: 120 Mal
Re: HM-SEC-MDIR Nachbau
Du brauchst nen Pulldown-Widerstand, damit der Pegel ohne Motion garaniert auf LOW liegt.
Siehe hier: https://rn-wissen.de/wiki/index.php?tit ... Widerstand
Siehe hier: https://rn-wissen.de/wiki/index.php?tit ... Widerstand
Anfragen zur AskSin++ werden nur im Forum beantwortet
-
- Beiträge: 174
- Registriert: 17.11.2018, 18:05
- Hat sich bedankt: 27 Mal
- Danksagung erhalten: 14 Mal
Re: HM-SEC-MDIR Nachbau
Ja Danke auch das ist mir bekannt das der Widerstand den Eingang definiert auf GND gezogen wird.
Die Frage war:
1. Warum es hier User in diesem Forum gibt die den Nachbau gemacht haben und keinen Widerstand hier brauchen? Gibt es unterschiedliche AM312?
2. Wie kann ich den Sketch so anpassen das bei LOW = keine Bewegung detektiert wird? Wenn Ich Frage 1 beantwortet hätte dann wäre die Frage 2 auch überflüssig.
Danke
Die Frage war:
1. Warum es hier User in diesem Forum gibt die den Nachbau gemacht haben und keinen Widerstand hier brauchen? Gibt es unterschiedliche AM312?
2. Wie kann ich den Sketch so anpassen das bei LOW = keine Bewegung detektiert wird? Wenn Ich Frage 1 beantwortet hätte dann wäre die Frage 2 auch überflüssig.
Danke
-
- Beiträge: 705
- Registriert: 22.05.2018, 10:23
- Hat sich bedankt: 24 Mal
- Danksagung erhalten: 120 Mal
Re: HM-SEC-MDIR Nachbau
Dann frag doch gleich richtig
Der Motion-Pin wird im motionISR Macro initialisiert. Dieses ist in Motion.h wie folgt definiert
Wie man sehen kann, wird der Pin auf INPUT gestellt und der Interrupt wird bei RISING ausgelöst. Für Schalten nach GND muss der Pin auf INPUT_PULLUP und der Interrupt muss bei FALLING auslösen. Dazu kannst Du Dir einfach ein neues Macro machen:
Der Motion-Pin wird im motionISR Macro initialisiert. Dieses ist in Motion.h wie folgt definiert
Code: Alles auswählen
#define motionISR(device,chan,pin) class device##chan##ISRHandler { \
public: \
static void isr () { device.channel(chan).motionDetected(); } \
}; \
pinMode(pin,INPUT); \
if( digitalPinToInterrupt(pin) == NOT_AN_INTERRUPT ) \
enableInterrupt(pin,device##chan##ISRHandler::isr,RISING); \
else \
attachInterrupt(digitalPinToInterrupt(pin),device##chan##ISRHandler::isr,RISING);
Code: Alles auswählen
#define lowmotionISR(device,chan,pin) class device##chan##ISRHandler { \
public: \
static void isr () { device.channel(chan).motionDetected(); } \
}; \
pinMode(pin,INPUT_PULLUP); \
if( digitalPinToInterrupt(pin) == NOT_AN_INTERRUPT ) \
enableInterrupt(pin,device##chan##ISRHandler::isr,FALLING); \
else \
attachInterrupt(digitalPinToInterrupt(pin),device##chan##ISRHandler::isr,FALLING);
Anfragen zur AskSin++ werden nur im Forum beantwortet
-
- Beiträge: 174
- Registriert: 17.11.2018, 18:05
- Hat sich bedankt: 27 Mal
- Danksagung erhalten: 14 Mal
Re: HM-SEC-MDIR Nachbau
Vielen Dank
jetzt eine andere Frage also die Motion.h edieren bekomme ich noch hin, reicht es die lokal abzuspeichern und dann auf dem Arduino zu übertragen?
Sorry für die Frage aber ein Lib habe ich noch nie verändert.
Danke
Gruß
Jan
jetzt eine andere Frage also die Motion.h edieren bekomme ich noch hin, reicht es die lokal abzuspeichern und dann auf dem Arduino zu übertragen?
Sorry für die Frage aber ein Lib habe ich noch nie verändert.
Danke
Gruß
Jan
-
- Beiträge: 705
- Registriert: 22.05.2018, 10:23
- Hat sich bedankt: 24 Mal
- Danksagung erhalten: 120 Mal
Re: HM-SEC-MDIR Nachbau
Mach das doch erst mal in Deinem Sketch. Und wenn das dann alles gut geht, können wir das auch in die Lib übernehmen. Könnten ja auch noch andere gebrauchen.
Anfragen zur AskSin++ werden nur im Forum beantwortet
-
- Beiträge: 174
- Registriert: 17.11.2018, 18:05
- Hat sich bedankt: 27 Mal
- Danksagung erhalten: 14 Mal
-
- Beiträge: 174
- Registriert: 17.11.2018, 18:05
- Hat sich bedankt: 27 Mal
- Danksagung erhalten: 14 Mal
Re: HM-SEC-MDIR Nachbau
Moin,
ich habe das jetzt geändert im motion.h file unter C:\Users\janoe\Documents\Arduino\libraries\AskSinPP-master
Im Prinzip scheint das zu funktionieren nur wird der Status in der Homematik "Bewegung erkannt" nicht zurück gesetzt! D. h. der Sensor meldet immer Bewegung erkannt obwohl das Ereignis längst vorbei ist.
Jemand noch eine Idee wie ich das ändern könnte?
Danke
ich habe das jetzt geändert im motion.h file unter C:\Users\janoe\Documents\Arduino\libraries\AskSinPP-master
Im Prinzip scheint das zu funktionieren nur wird der Status in der Homematik "Bewegung erkannt" nicht zurück gesetzt! D. h. der Sensor meldet immer Bewegung erkannt obwohl das Ereignis längst vorbei ist.
Jemand noch eine Idee wie ich das ändern könnte?
Danke