Arduino über Empfänger schalten

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • schulle
    schulle

    #16
    AW: Arduino über Empfänger schalten

    danke für die antworten
    ich habe da noch ne idee den adruino als ne art weiche zu benutzen kanal x sagt den den pin sprich zu welchen server oder was auch immer das signal von kanal y weitergeleitet werden soll... is das überhaupt mit den adruino möglich oder kann ich mir das gleich aus den kopf schlagen ?

    Kommentar

    • Mirkobeast
      Senior Member
      • 27.10.2009
      • 2069
      • Mirko
      • FMSC Steinfurt / Münster / Treffen

      #17
      AW: Arduino über Empfänger schalten

      Klingt für mich völlig wirr - also ist es bestimmt möglich.

      Was für Server meinst Du denn??

      Mirko
      Mirko Align zuhaus

      Kommentar

      • Hallodrius
        Senior Member
        • 07.10.2011
        • 1327
        • Anselm
        • Wiesbaden

        #18
        AW: Arduino über Empfänger schalten

        Schulle,

        Satzzeichen sind wirklich hilfreich.
        Nachzudenken bevor man versucht sich auszudrücken genauso.
        Ich habe zwar verstanden was du willst, aber wozu willst du Kanäle umleiten?

        Anselm
        Devo 8s / DX6i
        Blade 300x / MQX / NQX
        Protos 500 / MiniProtos

        Kommentar

        • schulle
          schulle

          #19
          AW: Arduino über Empfänger schalten

          nabend

          ja sollte eigendlich auch nen servo werden und kein server

          den kanal will ich umleiten um zb auf einen kanal nen bugstrahlruder und ein schlepphacken und und und zu steuern
          wenn das so geht wie ich mir das vorstelle kann man ja aus einen kanal 7 kanäle machen es gibt sowas zwar auch von robbe wenn mich nicht alles täuscht aber ich würde das gerne erstmal so versuchen wenn es möglich ist

          es handelt sich zwar um nen boot aber das is ja egal
          ich habe leider recht wenig zu den adruino im modellbau gefunden bzw nich so ganz das was ich machen möchte

          Kommentar

          • Doomgiver
            Member
            • 25.02.2013
            • 110
            • Heiko
            • Kiel

            #20
            AW: Arduino über Empfänger schalten

            Jetzt verstehe ich, was du vorhast. Benedini hat da ein schönes Einbaumodul für Fernsteuerungen zum steuern seiner Sound-/Mutiswitchmodule. Das wäre genau das, was Du senderseitig benötigst. Hab zufälligerweise sogar noch einen in der Restekiste rumliegen, den ich nicht mehr brauche.
            Im Grunde ist der Kodierer nicht viel mehr als ein Rastpoti mit 12 festeingestellten Werten. Wenn man an den entsprechenden Kanal im Modell ein servo anschließen, würde das je nach Raststellung in eine von 12 Positionen anfahren.

            Diese kann man natürlich über eine entsprechende Setup-Routine, die die Laufzeiten für jede Raststellung registriert und im EEPROM ablegt auch einem Arduino beibringen. Anschließend kann jeder Position eine bestimmte Aktion zugewiesen werden (Pin An/Aus, PWM-Funktion, etc.). Solange Du nur jeweils eine einzelne LED schalten willst, kannst du das direkt mit der Platine machen. Bei größeren Lasten würdest Du noch einen zusätzlichen Treiberbaustein (ULN2803A ist da ein ganz heißer Kandidat) benötigen.

            Als Testboard würde ich dann eine 3,3V-Version nehmen, persönlich bin ich ja total vom Wattuino überzeugt. Grund ist folgender:
            2,4GHz-Empfänger laufen i.d.R. auf 3,3V (ist der zugrundeliegenden WLAN-Technik geschuldet). So hoch ist dann auch der Ausgangspegel an den Empfängerkanälen.
            Die Atmels, die auf den Arduinos arbeiten, brauchen in der 5V-Version laut Datenblatt mindestens einen Signalpegel von 3,0V (0,6 x Vcc). In der Praxis sprachen sämtliche Boards bei mir zwar bereits bei ca. 2,5V an. Aber verlassen würde ich mich nicht darauf.

            Ich selbst bin ganz vernarrt in die Dinger. In zwei von meinen Sci-Fi-Raumschiffen haben sie die Lichtsteuerung übernommen (streckenweise schlimmer als ein Weihnachtsbaum ), in meinem Bergepanzer 3A1 ebenfalls die Lichtanlage und mein FlakPz Gepard wird im Sommer eine neue Turmsteuerung damit bekommen.
            GruÃ? Heiko

            Kommentar

            • schulle
              schulle

              #21
              AW: Arduino über Empfänger schalten

              moin
              scheint ne gute alternative zu sein das wattuino
              kann man das teil genauso programiren wie den adruiono oder braucht man dafür ne andere software ? das man da nen anderen anderes kabel braucht habe ich schon gelesen

              hast du da videos von deinen modellen würde mich mal interesiren

              Kommentar

              • Doomgiver
                Member
                • 25.02.2013
                • 110
                • Heiko
                • Kiel

                #22
                AW: Arduino über Empfänger schalten

                Videos so habe ich nicht, aber einige Bilder vom (Ein-)bau. Hier einmal die U.S.S. Voyager mit einem Mega2520: U.S.S. Voyager (Full-Option)
                Und hier mein Berge3A1: Bergepanzer 3A1 "Büffel" (ANNICK) - 1:16

                Das Wattuino-Board ist 100% mit dem Ardiuno Pro Mini kompatibel.

                1. Gleiche Größe, gleicher Prozessor
                2. Zwei zus. Pins herausgeführt
                3. Mit 10€/Stk. lachhaft günstig
                4. Verfügbarkeit ist sehr gut

                Den kleinen Abmessungen geschuldet ist, dass kein USB-Stecker direkt angeschlossen werden kann, sondern die Programmierung über ein FTDI Breakout Reloaded V1.1 - Watterott electronic erfolgt.
                Einfach via Mini-USB-Kabel an den PC anschließen, korrekte Board-Spannung am FTDI einstellen (Mini-Schalter) und in der Arduino-IDE in der Board-Auswahl das 'Arduino Pro Mini 3,3V/8Mhz' auswählen. Fertig.
                GruÃ? Heiko

                Kommentar

                • schulle
                  schulle

                  #23
                  AW: Arduino über Empfänger schalten

                  nice wieviel hebt der panzer ?

                  habe übrigens noch was gefunden fals einer auch ansowas interesse hat
                  PWM-Signal auswerten - Arduino Forum

                  Kommentar

                  • Doomgiver
                    Member
                    • 25.02.2013
                    • 110
                    • Heiko
                    • Kiel

                    #24
                    AW: Arduino über Empfänger schalten

                    was mir an den angesprochenen PWM-Sachen nicht schmeckt: Da wird immer nur der PulsIn-Befehl verwendet, ohne weitere Aktion. Der Befehl wartet aber immer solange, bis der Pin aktiv wird, sprich bis ein Signal vom Empfänger kommt. Das wertet er dann aus und erst dann geht es im Programm weiter. Somit wird der normale Programmcode maximal 50x pro Sekunde abgearbeitet (bei Standard-Servosignal mit 20ms). Und auch das nur, wenn ein einziger Empfängerkanal überwacht wird. Etwas eleganter ist das hier:
                    Code:
                     if(digitalRead(pin_empfaenger) == HIGH){
                        zeit_regler = pulseIn(pin_empfaenger, HIGH);
                     }
                    Hier wird die Zeitmessung erst aktiv, wenn wirklich ein Signal anliegt. In der Zwischenzeit kann sich der Atmel um andere Dinge kümmern. Das ist eben die Krücke, da man im Code keinen separaten Timer ansprechen bzw. softwareseitig reseten kann.
                    Im Heli wäre sonst noch die Arduino - Micros Zeitfunktion ganz interessant. Normalerweise vermeide ich sie, da sie nach ca. 70min einen ßberlauf erzeugt (dann passieren kurzzeitig "seltsame Dinge"). Aber welcher Hei ist schon über eine Stunde mit einem Akku in Betrieb?

                    Ach ja: Der Panzer schafft ca. 0,5kg bei voll ausgestrecktem Ausleger und etwa 1kg bei sehr steiler Auslenkung. Die Kranwinde schaft auch mehr. Nur der Ausleger fängt dann an, bedenklich im Lager zu knirschen.
                    GruÃ? Heiko

                    Kommentar

                    • Hallodrius
                      Senior Member
                      • 07.10.2011
                      • 1327
                      • Anselm
                      • Wiesbaden

                      #25
                      AW: Arduino über Empfänger schalten

                      Du musst einen Propeller-Chip verwenden
                      Der hat 8 Cores die über einen Ringpuffer Daten austauschen können.
                      1 Core zum Servokanal messen, die anderen sind für sonstiges zur Verfügung.
                      Viel schwerer als ein Arduino ist er nicht zu programmieren, eben nur "anders".
                      Aber ich glaub so Breakoutboards gibt es da in ganz klein nicht...

                      Anselm
                      Devo 8s / DX6i
                      Blade 300x / MQX / NQX
                      Protos 500 / MiniProtos

                      Kommentar

                      • schulle
                        schulle

                        #26
                        AW: Arduino über Empfänger schalten

                        moin

                        nice der panzer gefällt mir

                        hm verstehe ich das richtig das ich nicht mehrere känale überwachen kann ?

                        gibt es bei diesen Propeller-Chips auch fertige platinen wie bei adruino und co ?

                        so sieht mein cleiner code aus funktioniert sogar

                        is nen bischen abgändert zu den in dem adruino forum

                        Code:
                        int a;
                        
                        
                        void setup ()
                        {
                        pinMode (5, OUTPUT);
                        pinMode (6, OUTPUT);
                        pinMode (3, INPUT);
                        }
                        
                        void loop (){
                          a = pulseIn(3,HIGH,24000);//Ließt Eingangssignal
                          
                         
                        
                          //if-Bedinung für LED1
                          if (a>1450 && a<1475)
                          {//Wenn Eingangssignal zwischen 1228 und 1242, Ausgang an LED1 aus und der Status des Ausgangs in diesem loop-durchgang noch nicht verändert wurde, dann
                            digitalWrite (6,HIGH);//schalte Ausgang an
                          
                          }
                          if (a>1960 && a<1975){//Gleich wie oben, bloß umgekehrt zum ausschalten der LED
                           digitalWrite (5,HIGH);
                           
                          }
                            //if-Bedinung für LED2
                          if (a>960 && a<975){
                            digitalWrite (6,LOW);
                           digitalWrite ( 5,LOW);
                        
                          }
                        }

                        Kommentar

                        • Hallodrius
                          Senior Member
                          • 07.10.2011
                          • 1327
                          • Anselm
                          • Wiesbaden

                          #27
                          AW: Arduino über Empfänger schalten

                          P8X32A QuickStart


                          Sowas in der Art könntest du verwenden.
                          Die Programmierung wird in einer eigenen Programmiersprache gemacht, sie ist objektorientiert und nicht sehr luxeriös. Mit ein wenig Arbeit geht aber auch da einiges.
                          Ich habe mir mal ein Dev.Board schenken lassen und damit USB/Seriell/TV gesteuert.
                          Zu mehr bin ich noch nicht gekommen.

                          Anselm
                          Devo 8s / DX6i
                          Blade 300x / MQX / NQX
                          Protos 500 / MiniProtos

                          Kommentar

                          • Doomgiver
                            Member
                            • 25.02.2013
                            • 110
                            • Heiko
                            • Kiel

                            #28
                            AW: Arduino über Empfänger schalten

                            Das Teil ist völlig übertrieben für das, was Du vorhast. So, als ob man in einem 'Porsche Cayenne Turbo' morgens die 250m zum Bäcker für ein paar Brötchen fährt.

                            Hab da mal rasch was zusammengeschrieben, womit 3 Empfängerkanäle überwacht werden. Damit können 6 weitere Kanäle geschaltet werden, kann noch beliebig weiter aufgebohrt werden. Noch ungetestet, Freiwillige also vor!
                            Code:
                            /*
                            Dieser Sketch wertet die Pins 0, 1 und 2 aus, die an einem RC-Empfänger angeschlossen sind.
                            Jeder Empfängerkanal kann dabei zwei weitere Kanäle schalten.
                            
                            WICHTIG: Nach ca. 70min ununterbrochenen Betriebs erfolgt ein Speicherüberlauf, die den internen Timer auf 0 zurücksetzt.
                            
                            2013, Heiko Petersen
                            */
                            
                            byte pin_empfaenger[3] = {0, 1, 2};                            // Empfängerkanaele, die überwacht werden sollen
                            byte pin_ausgang [6] = {3, 4, 5, 6, 7, 8};                     // zu schaltende Kanäle. Jeweils zwei Kanäle werden durch einen Empfängerpin geschaltet
                            boolean aktiv_zeitmessung[3] = {false, false, false};          // Zeitmessung aktiv?
                            unsigned long zeit_mess_start[3] = {0, 0, 0};                  // Beginn der Zeitmessung
                            unsigned int zeit_delta[3] = {0, 0, 0};                        // Ergebnis der Zeitmessung
                            unsigned long zeit_pause[6] = {0, 0, 0, 0, 0, 0};              // Zeitstempe, wann der Kanal das letzte Mal geschaltet wurde
                            unsigned int zeit_pause_vorgabe = 1000;                        // Minimalpause, nachder ein Kanal wieder geschaltet werden kann. Wert in Millisekunden
                            
                            void setup(){
                              for(unsigned int i = 0; i < 3; i++){
                                pinMode(pin_empfaenger[i], INPUT);                         // Empfängerpin als Eingang konfiguriert
                              }
                              for(unsigned int i = 0; i < 6; i++){
                                pinMode(pin_ausgang[i], OUTPUT);                           // Schaltpins als Ausgang konfigurieren
                                digitalWrite(pin_ausgang[i], LOW);                         // Schaltpins auf LOW stellen
                              }
                            }
                            
                            void loop(){
                              for (byte i = 0; i < 3; i++){
                                if(digitalRead(pin_empfaenger[i]) == HIGH && aktiv_zeitmessung == false){    // Wenn das Empfängersignal auf HIGH geht beginnt der Zeitmessung
                                  zeit_mess_start[i] = micros();
                                  aktiv_zeitmessung[i] = true;
                                }
                                
                                if(digitalRead(pin_empfaenger[i]) == LOW && aktiv_zeitmessung[i] == true){   // Wenn das Empfängersignal nach HIGH wieder auf LOW fällt, endet die Zeitmessung und der Ergebnis wird berechnet
                                  zeit_delta[i] = micros() - zeit_mess_start[i];
                                  aktiv_zeitmessung[i] = false;
                                }
                                
                                if(zeit_delta[i] > 500 && zeit_delta[i] < 1250 && millis() >= zeit_pause[i] + zeit_pause_vorgabe){   // Wenn das Signal unter dem Mittenwert von 1500µs liegt, wird der erste Kanal ausgeschaltet
                                  digitalWrite(pin_ausgang[i], (digitalRead(pin_ausgang[i]) == HIGH?LOW:HIGH));
                                  zeit_pause[i] = millis();
                                }
                                if(zeit_delta[i] > 1650 && zeit_delta[i] < 2500 && millis() >= zeit_pause[i * 2 + 1] + zeit_pause_vorgabe){ // Wenn das Signal über dem Mittenwert von 1500µs liegt, wird der zeite Kanal geschaltet
                                  digitalWrite(pin_ausgang[i * 2 + 1], (digitalRead(pin_ausgang[i * 2 + 1]) == HIGH?LOW:HIGH));
                                  zeit_pause[i * 2 + 1] = millis();
                                }
                              }
                            }
                            GruÃ? Heiko

                            Kommentar

                            • schulle
                              schulle

                              #29
                              AW: Arduino über Empfänger schalten

                              nabend

                              danke erstmal für den sketch werde ihn die tage mal testen

                              danke och für den link werde mich über das teil auch mal schlau machen

                              mit ein adruino und co is es bei mir eh nich getan

                              Kommentar

                              • Doomgiver
                                Member
                                • 25.02.2013
                                • 110
                                • Heiko
                                • Kiel

                                #30
                                AW: Arduino über Empfänger schalten

                                Hab noch einen möglichen Fehler gefunden, teste lieber den Sketch hier:
                                Code:
                                /*
                                Dieser Sketch wertet die Pins 0, 1 und 2 aus, die an einem RC-Empfänger angeschlossen sind.
                                Jeder Empfängerkanal kann dabei zwei weitere Kanäle schalten.
                                
                                WICHTIG: Nach ca. 70min ununterbrochenen Betriebs erfolgt ein Speicherüberlauf, die den internen Timer auf 0 zurücksetzt.
                                
                                V0.2
                                2013, Heiko Petersen
                                */
                                
                                byte pin_empfaenger[3] = {0, 1, 2};                            // Empfängerkanaele, die überwacht werden sollen
                                byte pin_ausgang [6] = {3, 4, 5, 6, 7, 8};                     // zu schaltende Kanäle. Jeweils zwei Kanäle werden durch einen Empfängerpin geschaltet
                                boolean aktiv_zeitmessung[3] = {false, false, false};          // Zeitmessung aktiv?
                                unsigned long zeit_mess_start[3] = {0, 0, 0};                  // Beginn der Zeitmessung
                                unsigned int zeit_delta[3] = {0, 0, 0};                        // Ergebnis der Zeitmessung
                                unsigned long zeit_pause[6] = {0, 0, 0, 0, 0, 0};              // Zeitstempe, wann der Kanal das letzte Mal geschaltet wurde
                                unsigned int zeit_pause_vorgabe = 1000;                        // Minimalpause, nachder ein Kanal wieder geschaltet werden kann. Wert in Millisekunden
                                
                                void setup(){
                                  for(unsigned int i = 0; i < 3; i++){
                                    pinMode(pin_empfaenger[i], INPUT);                         // Empfängerpin als Eingang konfiguriert
                                  }
                                  for(unsigned int i = 0; i < 6; i++){
                                    pinMode(pin_ausgang[i], OUTPUT);                           // Schaltpins als Ausgang konfigurieren
                                    digitalWrite(pin_ausgang[i], LOW);                         // Schaltpins auf LOW stellen
                                  }
                                }
                                
                                void loop(){
                                  for (byte i = 0; i < 3; i++){
                                    if(digitalRead(pin_empfaenger[i]) == HIGH && aktiv_zeitmessung == false){    // Wenn das Empfängersignal auf HIGH geht beginnt der Zeitmessung
                                      zeit_mess_start[i] = micros();
                                      aktiv_zeitmessung[i] = true;
                                    }
                                    
                                    if(digitalRead(pin_empfaenger[i]) == LOW && aktiv_zeitmessung[i] == true){   // Wenn das Empfängersignal nach HIGH wieder auf LOW fällt, endet die Zeitmessung und der Ergebnis wird berechnet
                                      zeit_delta[i] = micros() - zeit_mess_start[i];
                                      aktiv_zeitmessung[i] = false;
                                    }
                                    
                                    if(zeit_delta[i] > 500 && zeit_delta[i] < 1250 && millis() >= (zeit_pause[i] + zeit_pause_vorgabe)){   // Wenn das Signal unter dem Mittenwert von 1500µs liegt, wird der erste Kanal ausgeschaltet
                                      digitalWrite(pin_ausgang[i], (digitalRead(pin_ausgang[i]) == HIGH?LOW:HIGH));
                                      zeit_pause[i] = millis();
                                    }
                                    if(zeit_delta[i] > 1650 && zeit_delta[i] < 2500 && millis() >= (zeit_pause[i * 2 + 1] + zeit_pause_vorgabe)){ // Wenn das Signal über dem Mittenwert von 1500µs liegt, wird der zeite Kanal geschaltet
                                      digitalWrite(pin_ausgang[i * 2 + 1], (digitalRead(pin_ausgang[i * 2 + 1]) == HIGH?LOW:HIGH));
                                      zeit_pause[i * 2 + 1] = millis();
                                    }
                                  }
                                }
                                GruÃ? Heiko

                                Kommentar

                                Lädt...
                                X