Fernsteuerung 10 Meter

Begonnen von picass, 18.03.2023, 12:44:10 CET

⏪ vorheriges - nächstes ⏩

picass

Gesucht ist eine Fernsteuerung, welche diese Eigenschaften aufweist:
- Distanz 10 Meter
- Betrieb mit Niederspannung, 12 Volt oder weniger
- wenig Energiebedarf des Empfangteils: damit sind wenige Milliampere gemeint oder in Watt ausgedrückt 0,1 Watt // Beispiel 12 Volt und 10 mA
- möglichst störsicher
- Preis für Fertigprodukt nicht gerade bei 100 € oder mehr.

Die Art der Anlage, also ob via Funk oder z.B. Infrarot ist quasi egal. Es könnte sich um ein Fertigprodukt handel, aber gerne auch ein Bausatz und mindestens ebenso gerne um einen reinen Schaltungsplan. Letzterer müsste aber komplett sein, also nicht nur z.B. den für den Empfänger enthalten und es muss realistisch möglich sein, das ohne ein Studium der Hochfrequenztechnik aufbauen zu können.

Letztlich geht es mir um die berühmte Garagentor-Fernbedienung. Zweimal habe ich schon Schiffbruch erlitten. Die ursprünglich mit dem Kauf einer kompletten elekrischen GT-Anlage mitgelieferte Funkfernsteuerung funkte wenige Jahre, dann wurde sie immer unempfindlicher, bis sie endgültig den Löffel abgab. Die billig beim Chinesen gekaufte Funkfernsteuerung hatte von Anfang an wilde Eigenschwingungen  und nun steht sie wieder in diesem Verdacht.

Ich bitte um Anregungen, auch um solche, bei welchen schlechte Erfahrungen gemacht wurden, denn auch das hilft weiter.
Grüße, picass

Peter

#1
Am einfachsten wäre eine Funksteckdose auseinander zu nehmen und
sie an deine Bedürfnisse an zu passen.
Du meinst wohl der Sender soll wenig Strom verbrauchen. Der Empfänger ist ja meistens drinnen
und da hat man ja genug Strom.
Wenn du selber bauen willst, dann gibt es Infrarot Sender. Aber da muss man schon ziemlich genau
zielen um den Empfänger zu treffen und wenn starke Sonne ist, kann das auch stören.
Bluetooth gibt es noch. Müsste man sich genauer anschauen ob das für deine Anwendung funktioniert, wegen Reichweite.
Über Funk. Da gibt es die RFM12B, RFM01, RFM69 und ähnliche Module.
Die benutze ich gerne da sie weit gehen und nicht so störanfällig sind.
Gehen bis 1000 Meter bei einer Frequenz von 433 MHz oder 868 MHz. Benutze meistens die höhere Frequenz, da die andere
Freqeunz gerne von Spielzeugautos genutz wird.
Die Module müssen natürlich programmiert werden. Dabei hat man natürlich die Kontrolle wie sicher man es macht.
Damit keiner die Garage aufmachen kann.
Beim Sender können bis zu 30mA fliessen. Aber da das nur wenige Sekunden sind, hält eine Batterie sehr lange.
Beim Empfänger sieht es anders aus. Dieser muss immer auf empfang sein und braucht dauernt Strom. Da ist es angebracht
eine Spannungsquelle zu haben die immer zur verfügung steht. Wenn nicht dann wird die Auswahl von Empfänger doch
sehr eingeschränkt sein.

picass

Zitat von: Peter am 18.03.2023, 13:28:51 CETDu meinst wohl der Sender soll wenig Strom verbrauchen. Der Empfänger ist ja meistens drinnen und da hat man ja genug Strom.
Nein, ich meinte schon, was ich geschrieben hatte: der Empfänger soll wenig Energie benötigen, weil in der Gargage eben kein 230 V- Anschluss vorhanden ist. Die Entfernung hatte ich ja auch explizit benannt.
Klar, mit Infrarot wäre die Richtung, aus welcher man "funken" könnte, sehr eingeschränkt. Das ginge quasi nur aus einer Richtung und einem Winkel, aber damit könnte ich am ehesten leben. (Hand-) Sender ist fast egal, derjenige von der orig-Anlage wurde mit dickem Akku-Block von 4 x 1,5 V - Mignon-Batterien betrieben, das tangiert nicht.

Es gibt da inzwischen so IR-Empfangs-"LED"s, welche nicht nur aus der LED bestehen, sondern im niedlichen Gehäuse (ähnlich TO-92) noch Empfänger, Filter und was-weiß-ich-nicht-noch-alles enthalten. Müsste man mal schauen, im Moment fehlt mir noch die Info über passende Sende-Dioden.
Grüße, picass

Peter

Wenn du einer der folgenden Empfängerdioden nimmst Empfängerdiode
dann kannst du auch eine lernbare Fernbedienung nehmen.
Die meisten Fernbedienungen senden auf 36 KHz.
Musst du nur einmal das Sendeprotokoll mitschneiden und es im Controller
speichern.
Das wäre die einfachste Lösung.


Peter

Oder nimmst was fertiges.
Hier  findest du jede Menge von dem Zeug.

picass

#5
Die "Fertigen" betrachte ich inzwischen mit gehörigem Misstrauen. Deren Bilder lassen erkennen, dass in sehr vielen gleichartige Komponenten verbaut sind. Das ist z.B. immer die gleiche Funkempfangsplatine und dann sitzt da noch irgendein Microcontroller. Alles sehr simpel zusammen gestrickt und - is klar - eindeutig China-Ware. Kann sein, dass ich mich dennoch dort nochmal bediene. Bis dahin versuche ich es aber mal anders, siehe meinen vorbereiteten Text hier unten:


Weil es aktuell und schon wieder Probs mit einer Funkverbindung gibt, würde ich es gerne mal mit einer Licht-Fernsteuerung versuchen. Das wäre für erste Übungen der Bau einer einfachen Lichtschranke – ist klar: mit Infrarot-LEDs. Als Empfangsdiode habe ich einen heute üblichen Baustein, bei welchem die IR-Empfangsdiode der allergeringste Anteil ist. In dem IC stecken Filter, Verstärker und alles Mögliche drin. Der Typ heißt TSOP 31238, er stammt von VISHAY, ,,funkt" mit 38 kHz und liefert am Ausgang ein direkt für einen µC geeignetes Signal. Wenn.....

....wenn man sich mit den Regularien solcher Übertragung auskennt. Um eine sinnvolle Funktion zu erreichen, muss erstens irgendein Datenprotokoll genutzt werden – also z.B. kein Dauerlicht – und dann muss in der Frequenz von 38 kHz mit bestimmtem Zeitfenster gesendet werden.

Mir geht es zunächst um das Erreichen einer Simpel-Übertragung. Das hieße, zwei Signale von einem µC erzeugt zusammengemischt, auszugeben. Das eine wäre die 38 kHz-Trägerfrequenz, das andere dann die berühmten ,,Einsen" und ,,Nullen" für den Anfang mit 50 zu 50 Tastverhältnis.

Erste Aufgabe und damit erste Frage: wie erzeugt man im PIC eine auszugebende Frequenz von 38 kHz?
Ausgehend von welcher internen F mit welchem Frequenzsteiler – und dabei bitte beachten, dass die Prozessorfrequenz ja noch durch 4 geteilt wird. Wenn die 38 kHz nicht genau getroffen werden: macht nichts. Theoretisch ist der Empfang sehr schmal-bandig, aber praktisch passen auch 0,5 kHz ,,rechts" und ,,links" – für erste Tests sowieso: die IR-Empfangsdiode mit ihrem ,,Gefolge" ist irre empfindlich.
Also wie anfangen? Es geht mir natürlich nicht um ein fertiges Programm, sondern  nur grundsätzliche Fragen, rsp. Anregungen.
Grüße, picass

Peter

Am einfachsten macht man die 38KHz mit PWM.
Hier mal ein Beispiel was ich im Netz gefunden habe.
Viellleicht hilft es weiter:

// IR remote control based on PIC12F1822 (Transmitter code)
 // Written by: BENCHEROUDA Okba
 // electronnote@gmail.com
 // http://elecnote.blogspot.com/
 // Internal oscillator used @ 32MHz
 // Use at your own risk

 bit  toggle;
 unsigned short i;
 void send_signal(unsigned short address, unsigned short command){
   // Start bit
   PWM1_Start();
   delay_us(889);
   PWM1_Stop();
   delay_us(889);
   PWM1_Start();
   delay_us(889);
   PWM1_Stop();
   // Toggle bit
   toggle = ~toggle;
   if(toggle){
     delay_us(889);
     PWM1_Start();
     delay_us(889);
     }
   else {
     PWM1_Start();
     delay_us(889);
     PWM1_Stop();
     delay_us(889);
     }
   // Address
   for(i = 0x10; i > 0; i = i >> 1){
     if( address & i ){
       PWM1_Stop();
       delay_us(889);
       PWM1_Start();
       delay_us(889);}
     else {
       PWM1_Start();
       delay_us(889);
       PWM1_Stop();
       delay_us(889);}}
   // Command
   for (i = 0x20; i > 0; i = i >> 1){
     if ( command & i ){
       PWM1_Stop();
       delay_us(889);
       PWM1_Start();
       delay_us(889);}
     else {
       PWM1_Start();
       delay_us(889);
       PWM1_Stop();
       delay_us(889);
       }
     }
   PWM1_Stop();
   }
 void main() {
   OSCCON = 0xF0; // Internal oscillator 8MHz and PLL enabled (gives 32MHz)
   ANSELA = 0;      // All I/O pins are configured as digital
   ADCON0 = 0;      // Disable ADC module
   PORTA = 0;       // Initial value of port A bits
   TRISA = 0x1F;    
   WPUA = 0x1F;     // Enable pull-up resistors
   OPTION_REG = 0;
   APFCON = 1;        // PWM output on RA5
   PWM1_Init(36000);   // PWM module initialization (36KHz)
   PWM1_Set_Duty(127);  // Set PWM duty cycle
   while(1){

     if(Button(&PORTA, 0, 100, 0)){
       send_signal(0, 1);
       delay_ms(300);
       }
     if(Button(&PORTA, 1, 100, 0)){
       send_signal(0, 2);
       delay_ms(300);
       }
     if(Button(&PORTA, 2, 100, 0)){
       send_signal(0, 3);
       delay_ms(300);
       }
     if(Button(&PORTA, 3, 100, 0)){
       send_signal(0, 4);
       delay_ms(300);
       }
     if(Button(&PORTA, 4, 100, 0)){
       send_signal(0, 5);
       delay_ms(300);
       }
     }
   }


Das ist der Sender.
Und hier der Empfänger:

// IR remote control based on PIC12F1822 (Receiver code)
 // Written by: BENCHEROUDA Okba
 // electronnote@gmail.com
 // http://elecnote.blogspot.com/
 // Internal oscillator used @ 32MHz
 // Use at your own risk

 bit RC5, toggle;
 unsigned short i, address, command;

 unsigned short read_signal(){
   RC5 = 0;
   // Check if the received signal is RC5 protocol
   delay_us(445);
   if(!PORTA.F3)
     delay_us(889);
   else return;
   if(PORTA.F3)
     delay_us(889);
   else return;
   if(!PORTA.F3)
     delay_us(1778);
   else return;
   // Read signal data
   for(i = 0; i < 12; i++){
     if(!i){
       if (PORTA.F3) toggle = 0;
       else          toggle = 1;
       }
     else {
       if(i < 6){                   //Read address bits
         if (PORTA.F3)
           address &= ~(1 << (5 - i));  //Clear bit (5-i)
         else
           address |= (1 << (5 - i));   //Set bit (5-i)
         }
       else {                       //Read command bits
         if (PORTA.F3)
           command &= ~(1 << (11 - i)); //Clear bit (11-i)
         else
           command |= (1 << (11 - i));  //Set bit (11-i)
         }
       }
       delay_us(1778);
     }
   RC5 = 1;
   }
 void main() {
   OSCCON = 0xF0; // Internal oscillator 8MHz and PLL enabled (gives 32MHz)
   ANSELA = 0;    // All I/O pins are configured as digital
   ADCON0 = 0;    // Disable ADC module
   PORTA = 0;     // Initial value of port A bits
   TRISA = 8;     // Configure RA3 as input
   while(1){
     while(PORTA.F3);
     read_signal();
     if(RC5){     // If RC5 bit equal to one
       address &= 0x1F;
       command &= 0x3F;
       if((address == 0) && (command == 1))
         PORTA.F0 = ~PORTA.F0;
       if((address == 0) && (command == 2))
         PORTA.F1 = ~PORTA.F1;
       if((address == 0) && (command == 3))
         PORTA.F2 = ~PORTA.F2;
       if((address == 0) && (command == 4))
         PORTA.F4 = ~PORTA.F4;
       if((address == 0) && (command == 5))
         PORTA.F5 = ~PORTA.F5;
       }
     delay_ms(500);
     }
   }

pic18

ich würde den Timer (vorzugsweise Timer 2) so einstellen, das er alle 13,57us einen Interrupt auslöst. = (1/38000)/2. Im Interrupt würde ich dann ein Prog schreiben welches einmal das Hi-Signal verknüpft mit 1 oder 0 sendet, und danach würde ich die Null senden. Bei 13,57us benötigst Du aber eine entsprechend hohe Taktfrequenz. Das ganze würde ich in Assembler wegen der Geschwindigkeit schreiben.


picass

Danke, @pic18 , für deine Hinweise. Ein solches Empfangsmodul habe ich ja schon und das passende Datenblatt natürlich auch. Die Hinweise darin auf Übertragungs-Parameter sind aber nicht gerade leicht verständlich. Sehr vergröbert könne man sagen, man muss 5 mS lang einen Impuls übertragen, welcher 38 kHz-Schwingungen enthält. Mal sehen, ob ich das richtig verstanden habe...., wird ein Test ja zeigen.

Um auf die 38 kHz zu gelangen, habe ich Quarze mit 2.4576 MHz oder 4.0152 MHz oder 9.8304 MHz ausgemacht. Deren Takte lassen sich durch 4 und dann entsprechend Zweier-Potenzen von 2 teilen und man kommt auf 38.400 kHz. Das wäre nicht das Optimum, aber besser geht mit Quarzen nicht, jedenfalls nicht, wenn man nicht zu solchen Tricks greift, wie du sie mit dem IRQ wohl angesprochen hattest.

Für den Anfang versuche ich es aber ganz anders: mit einem RC-Schwingungskreis. Ist zum Experimentieren und Einüben sowieso 'ne gute Sache. Bin mal gespannt, was das bringt.
Grüße, picass

picass

Bei der Suche nach passenden Oszillator-Frequenzen bin ich nun endgültig fündig geworden. Ein Quarz mit 10,24 MHZ lässt sich prima runter teilen bis auf 40 kHz, und dafür gibt es ein Exemplar dieser TSOP-Infrarot-Empfängerschaltungen. Also habe ich eben jeweils solche Bauteile bestellt. Das Experiment mit IR geht weiter, sobald die da sind.
Grüße, picass

pic18

ich habe hier noch ein entsprechendes Sendemodul gefunden. Damit braucht Du die 38khz nicht programmieren. Du benötigst nur noch die Zeit für die Hi bzw. Lo Signale. Das geht auch über Interrupt mit Timer. Du schiebst von einem oder mehreren Bytes die zu sendenten Bits nacheinander rüber und schaltest den Ausgang über die Timerzeit. Evtl. kannst du auch die USART Module des Pic's entsprechend programmieren. Dann hast Du auch einen entsprechenden Sendepuffer.
https://www.linkerkit.de/index.php?title=KY-005_Infrarot_Transmitter_Modul
https://www.makershop.de/module/infrarot/ky-005-infrarot-sender/

PICkel

@pic18:
Wenn ich das richtig sehe, ist das Sendemodul m.E. nur eine IR-LED auf dem PCB, die 38kHz müssen extern erzeugt werden.

@picass
Die TSOP-Empfänger sind nicht extrem schmalbandig, ich habe einen 36kHz-TSOP mit 38kHz ansprechen können. Allerdings im Nahbereich auf dem Schreibtisch, die Reichweite ist bei dieser "Fehlabstimmung" sicher nicht berauschend.

Wenn Du evtl. eine IR-Fernbedienung für Wildkamera, Lichtsteuerung o.ä. hast, kannst Du erste Versuche damit machen. Diese IR-Sender nutzen meist das NEC-Protokoll, das gut dokumentiert ist:
https://www.sbprojects.net/knowledge/ir/nec.php
Ich hatte da mal eine Auswertung mit Anzeige der Adresse und der Daten auf LCD programmiert.



pic18

@
Zitat von: PICkel am 23.03.2023, 18:17:47 CETWenn ich das richtig sehe, ist das Sendemodul m.E. nur eine IR-LED auf dem PCB, die 38kHz müssen extern erzeugt werden.


Ist durchaus möglich, die schreiben überall 38khz, aber wenn ich die Bauteile anschaue, dann ist es etwas mager. 
Wenn es nichts gibt, dann muss man doch meinen alten beliebten Timer NE555 nehmen.
Vielleicht kann man die infrarot LED für die Nullen abschalten, in dem man den Reset-Eingang Pin 4 gegen Masse schaltet.
https://www.researchgate.net/figure/38kHz-IR-Transmitter_fig1_261503897

picass

#14
Mist, die Reichelt'er haben nicht wie üblich über Nacht geliefert. Wegen der für Montag anstehenden Totalstreikwelle kann das nun dauern.

Beim Protokoll für die IR-Daten-Übermitlung strebe ich zumindest für den Anfang dieses an: nämlich gar kein Protokoll. Eine Adressierung scheint mir nicht nötig, weil es ja nur um ein einziges Gerät und das auch nur mit einer einzigen Funktion geht. Letzteres bewirkt dann auch meinen geplanten Verzicht auf ausgefuchste und mehrere Byte lange Datenraten.

Für den Anfang würde es mir reichen, überhaupt nur mal zwei Bits rüber zu schieben. Die werden eine bestimmte Länge haben. Das erste Bit ist für das Aufwachen aus Sleepmodus und das zweite enthält dann alles: Adresse und Daten! Eine Kontrolle findet allerdings schon statt, indem sowohl die Länge als auch die Störfreitheit, also keine Unterbrechung des Bits geprüft wird. Wenn das geklappt haben sollte, kann dann auf z.B. gesamt 5 Bits erweitert werden. Das würde mir reichen, weil ich gutgläubig davon ausgehe, dass niemand auf unserem Gemeinschafts-Garagenhof mit einem IR-Sender rumläuft, weder Berechtigte, noch potentielle ,,Langfinger". Und dann soll der Empfänger so eingebaut werden, dass nur Licht aus einem ganz kleinen Bereich überhaupt auf das Modul treffen kann.

Im Moment tangiert mich eh' mehr die Frage, was überhaupt weiter verfolgen?  Es liegt der nun doch wieder funktionierende bisherige Funkempfänger auf dem Werktisch, daneben der heute angelieferte Neue für 40 €, und dann evtl. demnächst noch ,ne optische Version? Lebensberatung in dieser Frage?

Zur Technik des Senders: das wird nur über den geplanten Weg funktionieren, zu der Empfangsfrequenz des Empfangsmoduls - demnächst 40 kHz - einen exakt passenden Sender zu haben. Und dafür brauche ich den bestellten Quarz mit 10,24 MHz und einen PIC. Der Hauptgrund für diese These ist die Reichweite. Es wird um einige wenige Meter mehr als im Wohnzimmer gehen und schließlich sollen auf keinen Fall dauernde Fehlversuche stattfinden. Also muss sowohl Exaktheit bei der Sendefrequenz, als auch Exaktheit bei der Länge von "Einsen" und "Nullen" her und zudem auch noch ein kurzer, aber sehr kräftiger Licht-Impuls. Angedacht ist zudem auch noch die Zuhilfenahme optischer Einrichtung wie Linsen. Mal sehen, das wird wieder war Rechtes zum Experimentieren werden.....
Grüße, picass

Schnellantwort

Name:
Verifizierung:
Bitte lassen Sie dieses Feld leer:
Geben Sie die Buchstaben aus dem Bild ein
Buchstaben anhören / Neues Bild laden

Geben Sie die Buchstaben aus dem Bild ein:

Tastenkürzel: Alt+S Beitrag schreiben oder Alt+P für Vorschau