Fenster Sensor 433MHz mit SYN480R Empfangen

OP #7387957
Lesenswert?

Hallo zusammen

Ich habe hier mehrere Fenstersensoren wie im Bild. Allgemein wäre ich froh, wenn jemand mehr Informationen über diesen Sensor hätte, insbesondere über das IC U1 und U2. Leider sind beide ICs unkenntlich gemacht.

Spannend wäre auch zu wissen, was U4 machen würde. Denn derzeit ist es so, dass der Sensor nur ein Signal abgibt, wenn der Reedkontakt geöffnet wird, nicht aber beim erneuten schliessen.

Das eigentliche Problem ist jedoch ein anderes. Ich versuche den Sensor mit dem Empfänger im Bild zu empfangen. Dies funktioniert leider praktisch überhautp nicht. Ausser ich berühre Sender und Empfänger mit einem Finger an einer "magic position". Dann klappts. Aber auch mit nur wenigen Millimetern entfernung gehts nicht.

Hat jemand eine Idee, woran dies liegen könnte, bzw. wie hier der Empfänger verbessert werden könnte?

Der Sensor sendet EV1527 kompatible Codes.

Hier gibt es mehr Infos zum Empfänger: https://www.botnroll.com/en/rf-lora/4112-micro-rf-433mhz-wireless-receiver-module-syn480r.html Datenblatt IC: https://datasheet.lcsc.com/szlcsc/SYN480R-FS24_C15561.pdf

Danke schonmal.

Angehängte Dateien:
#7387976
Lesenswert?

C. H. schrieb:

Dies funktioniert leider praktisch überhautp nicht.

Bisschen schwanger geht nicht. Entweder es funktioniert oder es funktioniert nicht.

Aber was bedeuted "funktioniert leider praktisch überhautp nicht" denn genau?

C. H. schrieb:

Dann klappts. Aber auch mit nur wenigen Millimetern entfernung gehts nicht.

Was bedeuted denn "dann klappts" genau?

Sorry, alles Wischi-Waschi, mit diesen Ausagen kann man nichts anfangen um dir zu helfen.

Gast #7388011
Lesenswert?

Ich glaube, ich habe deine Frage nicht richtig verstanden... Du suchst U1 und dir ist bekannt, dass ein EV1527 verwendet wird. Das passt doch. Zum EV1527 gibt es ein Datenblatt im Netz. Habe so einen EV1527 in einer Funkklingel. Empfang mit einfachst 433MHz RX-Modul und Dekodierung mit einem PIC funktioniert.

Beitrag #7388086 wurde von einem Moderator gelöscht.
OP #7388106
Lesenswert?

Hallo zusammen. Sorry für den unklaren Post.

Also. Ich versuchs nochmals :)

Ich habe hier einen Fenstersensor (433MHz mit EV1527 Codierung, auslösung mit Reedkontakt und Magnet)

Mein Ziel ist es, das Signal dieses Sensors mittels Arduino zu empfangen. Dazu habe ich besagtes 433MHz Empfangsmodul welches einen SYN480R beinhaltet an einen Arduino angeschlossen. Auf dem Arduino läuft die RCSwitch Library mit dem Minimalprogramm (https://github.com/sui77/rc-switch/blob/master/examples/ReceiveDemo_Simple/ReceiveDemo_Simple.ino).

Nun zum Problem: Ich sehe kein empfangenes Paket auf dem Arduino welcher die Daten mittels Serialport an den PC sendet. Egal wie nahe ich mit dem Sender zum Empfänger gehe.

Wenn ich jedoch die Ausgagsspule des Senders mit dem Finger berühre und dabei gleichzeitig irgendwie auch den Ant-Eingang des Empfängers berühre und nun noch gleichzeitig den Sender auslöse, so empfange ich das Paket korrekt mit korrekter ID.

Das ist mal das Hauptproblem.

Daneben bin ich noch interessiert an weiteren Details zur Senderschaltung. Weil der Sender nur sendet, wenn der Reedkontakt aufgeht (Fenster offen - Alarm). Ich möchte jedoch den Zustand des Fensters anzeigen. Also ob offen oder zu. Daher muss mein Sender beim öffnen und beim schliessen auslösen. Deshalb dachte ich, dass evtl. der fehlende U4 dafür vorgesehen sein könnte.

Derzeit löse ich das Problem wie folgt: Ich werde den Arduino code so überarbeiten, dass er sich die ID's der Sender merkt und entsprechend den übermittelten Status toggelt.

Damit dies mit dem Reedkontakt geht, werde ich den Reedkontakt durch einen Zweipoligen ersetzen. Das ist dann quasi ein Wechsler welcher kurzzeitig kein Kontakt hat.

Noch lieber wäre es mir natürlich, wenn der Sensor bei geschlossenem Kontakt (Fenster Zu), bzw. Wechsel von Kontakt offen -> Kontakt zu) z.B. ein 1 sendet als Zustand und beim Wechsel von Kontakt zu -> Kontakt offen z.B. ein 2. Es gibt tatsächlich ähnliche Sensoren welche jedoch einen uC enthalten und tatsächlich jemand sich die Mühe gemacht hat eine eigene FW zu entwickeln. https://hackaday.com/2023/01/08/low-cost-433-mhz-door-sensors-get-open-firmware/

Gast #7388131
Lesenswert?

Der EV1527 könnte doch, auch ohne zusätzlichen Mikrocontroller, verschiedene Codes senden. Er hat 4 Eingänge um damit die letzten 4 der insgesamt 24 Bits zu definieren. Somit sind 16 Codierungen möglich um z.B. 4 Schalter abzufragen. Nur löst eine Änderung an diesen Eingängen leider keinen Sendevorgang aus.

#7729181
Lesenswert?

C. H. schrieb:

Allgemein wäre ich froh, wenn jemand mehr Informationen über diesen Sensor hätte, insbesondere über das IC U1 und U2. Leider sind beide ICs unkenntlich gemacht.

Der abgebildete Fenstersensor wurde zwischenzeitlich einer Revision unterzogen, zumindest der Reedkontakt wurde durch einen Hallsensor ersetzt. Möglicherweise war der damals auch schon als U4 vorgesehen.

U1 ist zumindest den Pins nach ein Puya PY32F002, also wäre da eine Softwareanpassung durchaus machbar U2 etwas ähnliches wie der SYN115, da passt die Funktion und Beschaltung der Antennenanpassung, allerdings hat der verbaute eine andere Pinbelegung, ASK/Data ist zB an Pin4, nicht Pin6. Lediglich wie der Quarz verschaltet ist, verstehe ich nicht so ganz. 3 Pins an GND, ein Pin an Pin6 des U2. Die für di übliche Quarzbeschaltung notwendigen Kondensatoren fehlen dagegen.

Angehängte Dateien:
#7742577
Lesenswert?

Update: habe den Prozessor durch einen pinkompatiblen Attiny412 ersetzt. Anbei das Programm auf Basis der Arduino-IDE und MegaTinyCore. Für mich funktioniert das soweit, auch wenn da sicherlich noch Potential zur Verbesserung ist. Unterschiedliche Datenpakete für "Fenster aufmachen". "zumachen" und "Taster". Die werden derzeit über Schaltsteckdose unter Tasmota mit einem zusätzlich verbauten 433MHz-Empfänger ausgewertet. Im Normalzustand schläft der Attiny, das ganze benötigt im Ruhezustand ~0.5µA inklusive Hallsensor.

1
// ATtiny412 / ARDUINO
2
//                                     _____
3
//                             VDD   1|*    |8  GND
4
//             (DAC) (AIN6) PA6  0   2|     |7  4~  PA3 (AIN3)(SCK)(EXTCLK)
5
//                   (AIN7) PA7  1   3|     |6  5   PA0 (nRESET/UPDI)
6
// (MOSI)(TXD*)(SDA) (AIN1) PA1  2   4|_____|5  3   PA2 (AIN2)(MISO)(RXD*)(SCL)
7

8
// Programmieradapter linke Seite Laptop
9
// Ausgang Trigger auf Pin 2&3 schält Pin 5&7 
10
// dazwischen schläft er, Stromverbrauch ~0,5µA
11
// clock 8MHz, bei 1MHz ist RF-timing zu ungenau
12

13
#include <avr/sleep.h>                  // Sleep Modes
14

15
const int buttonPin = 2;                // pin 4 / PCINT1
16
const int reedPin = 1;                  // pin 3 / PCINT7
17
const int rfPin = 3;                    // pin 5
18
const int ledPin = 4;                   // pin 7
19
const int Unused1 = 0;                  // pin 2
20
const int Unused2 = 5;                  // pin 6 / UPDI
21
volatile bool eventButton = false;
22
volatile bool eventSensorOn  = false;
23
volatile bool eventSensorOff = false;
24
const int txRepeat = 15;                // Original 30
25
const int txPulselength = 350;          // protocol 1
26

27
void rfSend(unsigned long code,  byte length) {
28
  for (int nRepeat = 0; nRepeat < txRepeat; nRepeat++) {
29
    for (char i = length - 1; i >= 0; i--) {
30
      if (code & (1L << i))
31
        rfTransmit(3, 1);         // protocol 1
32
      else
33
        rfTransmit(1, 3);         // protocol 1
34
    }
35
    rfTransmit(1, 31);            // protocol 1
36
  }
37
  digitalWrite(rfPin, LOW);
38
}
39

40
void delay_pulselengths(uint16_t us)
41
{
42
  while (us > 0)
43
  {
44
    delayMicroseconds(txPulselength);
45
    us--;
46
  }
47
}
48

49
void rfTransmit(byte high, byte low) {
50
  digitalWrite(rfPin, HIGH);
51
  delay_pulselengths(high);
52
  digitalWrite(rfPin, LOW);
53
  delay_pulselengths(low);
54
}
55

56
void flashLed (int wait) {
57
  digitalWrite(ledPin, LOW);                // LED ist low aktiv
58
  delay(wait);
59
  digitalWrite(ledPin, HIGH);
60
  delay(wait);
61
}
62

63
ISR(PORTA_PORT_vect) {
64
  if(!digitalRead(buttonPin)){
65
        eventButton = true;           // Button triggert auf Masse 
66
  }
67
  else if(digitalRead(reedPin)){
68
        eventSensorOn = true;           // Vorrang Button, sonst Annahme, dass Interrupt vom Sensor kam
69
  }
70
  else if(!digitalRead(reedPin)){
71
        eventSensorOff = true;           // Vorrang Button, sonst Annahme, dass Interrupt vom Sensor kam
72
  }
73
  PORTA.INTFLAGS = PORT_INT1_bm;        // Clear PA6 interrupt flag
74
  PORTA.INTFLAGS = PORT_INT7_bm;        // Clear PA7 interrupt flag
75
}
76

77
void setup ()    {
78
  pinMode(ledPin, OUTPUT);              // 
79
  digitalWrite (ledPin, HIGH);                        // LED liegt an Plus, beim Start ausschalten
80
  pinMode(rfPin, OUTPUT);                  
81
  PORTA.PIN1CTRL = PORT_PULLUPEN_bm;    // Same as pinMode(Button, INPUT_PULLUP);
82
  PORTA.PIN7CTRL = PORT_ISC_INPUT_DISABLE_gc;
83
  pinMode(Unused1, INPUT_PULLUP);       // Don't leave unused pins floating
84
  pinMode(Unused2, INPUT_PULLUP);
85

86
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
87
  sleep_enable();
88
}  // end of setup
89

90
void loop ()   {
91

92
  if (eventButton == true) {
93
   flashLed(125);
94
   rfSend(3848390, 24);           // toggle, 3848390₁₀ = 3AB8C6₁₆
95
   eventButton = false;
96
  }
97
  if (eventSensorOn == true) {
98
    flashLed(125);
99
    flashLed(125);
100
    rfSend(3848393, 24);          // An, 3848393₁₀ = 3AB8C9₁₆
101
    eventSensorOn = false;
102
    }
103
  if (eventSensorOff == true) {
104
    flashLed(500);
105
    rfSend(3848396, 24);          // Aus, 3848396₁₀ = 3AB8CC₁₆
106
    eventSensorOff = false;
107
  }
108

109
  delay(1000);                      // unklar, ob noch benötigt
110
  PORTA.PIN1CTRL = PORT_PULLUPEN_bm | PORT_ISC_LEVEL_gc; // Pullup + Trigger Button on low level
111
  PORTA.PIN7CTRL = PORT_ISC_BOTHEDGES_gc; // Trigger Sensor auf beide Flanken
112

113
  sleep_mode();
114

115
//  sleep_cpu();
116
  // Continue after interrupt
117
  PORTA.PIN1CTRL = PORT_PULLUPEN_bm;                     // Turn off pin sense interrupt
118
  PORTA.PIN7CTRL = PORT_ISC_INPUT_DISABLE_gc;
119
}  // end of loop

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren