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.
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.
C. H. schrieb: > Der Sensor sendet EV1527 kompatible Codes. Und wo wird das vom Receiver empfangene und demodulierte Signal decodiert?
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.
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
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.
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?
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.
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 |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.