HM-SEC-MDIR Nachbau

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

Moderator: Co-Administratoren

Jan_von_neben_an
Beiträge: 174
Registriert: 17.11.2018, 18:05
Hat sich bedankt: 27 Mal
Danksagung erhalten: 14 Mal

HM-SEC-MDIR Nachbau

Beitrag von Jan_von_neben_an » 13.12.2018, 00:05

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
Zwischenablage02.png
Zwischenablage02.png (91.24 KiB) 2031 mal betrachtet
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.

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

Re: HM-SEC-MDIR Nachbau

Beitrag von papa » 13.12.2018, 08:18

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.
Anfragen zur AskSin++ werden nur im Forum beantwortet

Jan_von_neben_an
Beiträge: 174
Registriert: 17.11.2018, 18:05
Hat sich bedankt: 27 Mal
Danksagung erhalten: 14 Mal

Re: HM-SEC-MDIR Nachbau

Beitrag von Jan_von_neben_an » 13.12.2018, 09:06

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

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

Re: HM-SEC-MDIR Nachbau

Beitrag von papa » 13.12.2018, 10:03

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
Anfragen zur AskSin++ werden nur im Forum beantwortet

Jan_von_neben_an
Beiträge: 174
Registriert: 17.11.2018, 18:05
Hat sich bedankt: 27 Mal
Danksagung erhalten: 14 Mal

Re: HM-SEC-MDIR Nachbau

Beitrag von Jan_von_neben_an » 13.12.2018, 10:55

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

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

Re: HM-SEC-MDIR Nachbau

Beitrag von papa » 13.12.2018, 11:15

Dann frag doch gleich richtig :D
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);
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:

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

Jan_von_neben_an
Beiträge: 174
Registriert: 17.11.2018, 18:05
Hat sich bedankt: 27 Mal
Danksagung erhalten: 14 Mal

Re: HM-SEC-MDIR Nachbau

Beitrag von Jan_von_neben_an » 13.12.2018, 11:27

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

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

Re: HM-SEC-MDIR Nachbau

Beitrag von papa » 13.12.2018, 11:45

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

Jan_von_neben_an
Beiträge: 174
Registriert: 17.11.2018, 18:05
Hat sich bedankt: 27 Mal
Danksagung erhalten: 14 Mal

Re: HM-SEC-MDIR Nachbau

Beitrag von Jan_von_neben_an » 13.12.2018, 13:11

OK Danke

melde mich wenn ich es ausprobiert habe.

Danke

Jan_von_neben_an
Beiträge: 174
Registriert: 17.11.2018, 18:05
Hat sich bedankt: 27 Mal
Danksagung erhalten: 14 Mal

Re: HM-SEC-MDIR Nachbau

Beitrag von Jan_von_neben_an » 14.12.2018, 09:04

Moin,

ich habe das jetzt geändert im motion.h file unter C:\Users\janoe\Documents\Arduino\libraries\AskSinPP-master
pullup.JPG
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

Antworten

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