Forum: HF, Funk und Felder Fenster Sensor 433MHz mit SYN480R Empfangen


von C. H. (hedie)


Angehängte Dateien:

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.

von Wastl (hartundweichware)


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.

von Georg M. (g_m)


Lesenswert?

C. H. schrieb:
> Der Sensor sendet EV1527 kompatible Codes.

Und wo wird das vom Receiver empfangene und demodulierte Signal 
decodiert?

von Erni (pudding)


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 vom Autor gelöscht.
von C. H. (hedie)


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/

: Bearbeitet durch User
von Erni (pudding)


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.

von Georg M. (g_m)


Lesenswert?

C. H. schrieb:
> Ich sehe kein empfangenes Paket auf dem Arduino welcher die Daten
> mittels Serialport an den PC sendet.

Wie ist das zu verstehen? Das Oszilloskop zeigt nichts an, oder was?

von Dieter R. (dieter_r)


Angehängte Dateien:

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.

von Dieter R. (dieter_r)


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

von C. H. (hedie)


Lesenswert?

Das ist ja cool! Tolle Arbeit. Danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.