- Labornetzteil AliExpress         
Seite 6 von 9 ErsteErste ... 45678 ... LetzteLetzte
Ergebnis 51 bis 60 von 89

Thema: Zwei Arduino´s drahtlos verbinden ??

  1. #51
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Anzeige

    LiFePo4 Akku selber bauen - Video
    An deiner Stelle würde als erstes ein Testprogramm schreiben, dass einfach nur die Potis des Sender-Arduinos liest und die Werte am Bildschirm ausgibt.
    Dann die Werte analysieren: Gehen sie von 0 bis 1023? Ist der Verlauf linear?
    Daran kannst du schon sehr viel sehen.

  2. #52
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2011
    Ort
    Heilbronn
    Alter
    35
    Beiträge
    180
    danke Sisor für deine Hilfe =)

    Werde ich morgen, auch ausprobieren dann bin ich schlauer, wie der Bereich der Potis ist.
    Sind ja ganz normale Potis wie man sie aus den PS2 Controllern kennt.

    Mfg und gute Nacht =)
    Benny

  3. #53
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2011
    Ort
    Heilbronn
    Alter
    35
    Beiträge
    180
    Hallo zusammen,

    also @ Sisor,

    ich hab das Test Programm geschrieben und der Serielle Monitor gibt folgendes aus:

    bei Joystick Stellung ganz vorne (Vollgas) = 1023
    bei Joystick Stellung ganz zurück ( Vollgas Rückwärts) = 0

    bei Joystick Mittelstellung ( Neutral ) = 514

    Das heist der Joystick ist Linear?

    Habe es auch am Roboter ausprobiert, im Prinzip funktioniert es nach dem Tip mit den

    ...radio.write(data, 8 );...
    und
    ...done = radio.read(msg, 8 );...

    ABER:

    es ist sehr ruckelig wenn man es so nennen mag ....
    Also, ein kleines bisschen den Joystick nach vorn bewegt und der Roboter fährt schon mehr als
    halb Gas.

    Was kann ich denn dagegen tun?
    Hab den wert der Servos schon von 179 auf 255 geändert

    Lg Benny

  4. #54
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Was kann ich denn dagegen tun?
    Hab den wert der Servos schon von 179 auf 255 geändert
    Alles noch mal logisch durchdenken.
    Was für Werte muß der Servo bekommen, damit er weniger stark dreht?

  5. #55
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2011
    Ort
    Heilbronn
    Alter
    35
    Beiträge
    180
    jetzt komm ich durcheinander .....

    0 und 180 (179) sind doch die Gradzahlen des Servos oder nicht ?

  6. #56
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Ich hab noch nicht verstanden, wie die Servos verbaut sind.
    Foto?
    Brauchst du den Vollausschlag der Servos?
    Willst du, dass sie langsam anlaufen?

    Und welchen Wert liefern die Potis in auf der Hälfte zwischen Neutral und Vollausschlag?
    Geändert von Sisor (31.03.2014 um 21:27 Uhr)

  7. #57
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2011
    Ort
    Heilbronn
    Alter
    35
    Beiträge
    180
    achso aneinander vorbei geredet

    ich hab ja gar keinen Servo, sondern einen Fahrtenregler der Firma SGS Electronic.

    Er wird angeschlossen wie zwei Servos, er hat zwei Servo Kabel .....

    eins für Vorwärts und Rückwärts und ....
    eins für Links und Rechts.

    die Fahrtenregler Kurzbeschreibung .....

    Der Regler beinhaltet alle Komponenten zur Ansteuerung von zwei Gleichstrommotoren
    in einem Kettenfahrzeug. Der integrierte Mischer verzögert beim Lenkungsausschlag die kurveninnenliegende Kette
    proportional bis zum Stillstand. Bei stehendem Fahrzeug bewirkt das Betätigen der Lenkung eine proportional steuerbare Drehung „auf dem Teller“.

    und hier das PDF Dokument des Reglers:

    Anleitung_Regler_TVC-B-30-b.pdf

    Was man dem PDF entnehmen kann is das er mit der Pulsweitenregulierung 16 MHZ arbeitet bzw programmiert worden ist!

    Und noch zu sagen, es funktioniert ja einwandfrei sogar, das steuern meines Roboters.
    Nur halt das bei geringer Neigung des Joystick, schon fast Dreiviertel bzw voll gas gefahren wird.

    Und das hätte ich gerne etwas gedämpft bzw sanfter so zu sagen

    Mfg Benny

  8. #58
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Keine Garantie, dass das so funktioniert wie du willst,
    aber theoretisch sollte das klappen.

    Folgende Schritte:

    1. Sender muss Werte von 0-255 schicken:
    Code:
    ...map(analogRead(xPotPin), 0, 1023, 0, 255);...
    2. Empfänger-Code bekommt eine zusätzliche Funktion:
    Hier werden die linearen Werte in eine quadratische Parabel überführt.
    Code:
    ...
    int parabel(int val)
    {
    	float a = (val - 127) / 13.35;
    	int b = a*a;
    	if (val < 127) b = -b;
    	return b + 90;
    }
    ...
    3. Und in die loop() statt:
    Code:
    ...myServo1.write (msg[0]);...
    schreibst du:
    Code:
    ...myServo1.write( parabel(msg[0]) );...
    parabel(val) rechnet die Eingangs-Werte von 0-255 so um, dass am Ende Werte zwischen 0 und 180 herauskommen, nur halt nicht linear sondern parabol.

  9. #59
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2011
    Ort
    Heilbronn
    Alter
    35
    Beiträge
    180
    okay, das hätte ich jetzt nicht gewusst das es auch als Parabel geht ....

    direkt aneinander vorbei geredet nicht :P hab schon immer gewusst das eigentlich zwischen einem
    Servo und einem Elektromotor fast kein unterschied besteht weil im Servo ja auch nur ein Elektromotor mit Elektronik
    drin steckt.

    Dann werde ich es gleich nochmal morgen ausprobieren und wieder berichten obs funktioniert hat.
    Wenn ja würd ich mich mega freuen, sollte ja machbar sein das die " Servos " langsamer anlaufen

    Vielen Dank nochmal für die Info - währe ich nicht drauf gekommen

    Lg Benny

    - - - Aktualisiert - - -

    in welchen teil muss denn die Zeile mit dem ...

    ...
    int parabel(int val)
    ...

    Code:
    #include <Servo.h>
    #include <SPI.h>
    #include "RF24.h"
    
    Servo myServo1;
    Servo myServo2;
    const uint64_t pipe = 0xE8E8F0F0E1LL; 
    
    RF24 radio(9,10);
    
    void setup()
    {
       //Serial.begin(9600);  // zum Debuggen Kommentarzeichen entfernen 
                              // und diesen Arduino über Serial Mointor auslesen
      myServo1.attach(3);     // Pin 3
      myServo2.attach(4);     // Pin 4
      radio.begin();
    
      radio.openReadingPipe(1, pipe); 
      radio.startListening(); 
    }
    
    void loop()
    {
      if (radio.available())
      {
        bool done = false;
        int msg[2];
        while (!done)
        {
          done = radio.read(msg, 8);
          //myServo1.write (msg[0]);
          //myServo2.write (msg[1]);
          
          myServo1.write ( parabel (msg[0]) );
          myServo2.write ( parabel (msg[0]) );
          
          //Serial.println(msg[0]);  // zum Debuggen Kommentarzeichen entfernen 
          //Serial.println(msg[1]);
        }
      }
    }
    - - - Aktualisiert - - -

    hab es zwischen setup und loop eingefügt und der kompilier meckert nicht !

    war das richtig so ? oder muss es in den loop teil ?

    Code:
    #include <Servo.h>
    #include <SPI.h>
    #include "RF24.h"
    
    Servo myServo1;
    Servo myServo2;
    const uint64_t pipe = 0xE8E8F0F0E1LL; 
    
    RF24 radio(9,10);
    
    void setup()
    {
       //Serial.begin(9600);  // zum Debuggen Kommentarzeichen entfernen 
                              // und diesen Arduino über Serial Mointor auslesen
      myServo1.attach(3);     // Pin 3
      myServo2.attach(4);     // Pin 4
      radio.begin();
    
      radio.openReadingPipe(1, pipe); 
      radio.startListening(); 
    }
    
    
    int parabel(int val)
    {
     float a = (val - 127) / 13.35;
     int b = a*a;
     if (val < 127) b = -b;
     return b + 90;
    }
    
    
    void loop()
    {
      if (radio.available())
      {
        bool done = false;
        int msg[2];
        while (!done)
        {
          done = radio.read(msg, 8);
          //myServo1.write (msg[0]);
          //myServo2.write (msg[1]);
          
          myServo1.write ( parabel(msg[0]) );
          myServo2.write ( parabel(msg[0]) );
          
          //Serial.println(msg[0]);  // zum Debuggen Kommentarzeichen entfernen 
          //Serial.println(msg[1]);
        }
      }
    }

  10. #60
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2011
    Ort
    Heilbronn
    Alter
    35
    Beiträge
    180
    Guten Morgen Community,

    ich wollte gestern, die Verbindung per NRF24L01+PA+LNA Modul testen,
    bin gestern fast verzweifelt, weil es schon funktioniert hat, jetzt auf einmal nicht mehr!
    Von der Schaltung hab ich nichts verändert, also Hardware mäßig alles I.O. denke ich mal

    Da es am Roboter nicht funktioniert hat, hab ich es nochmal mit zwei Servos probiert,
    und siehe da .... mit den Servos funktioniert es auch nicht!

    Sie werden echt gut warm und brummen leicht, der Serielle Monitor gibt immer -1 aus!

    Dann hab ich aber mein Code ausprobiert, wo ich vorher ohne Funkmodul verwendet habe,
    also Servos an den zu Sendenden Arduino angeschlossen um auszuschließen das die neuen
    Pottis nicht gehen!

    Aber ohne NRF24L01+PA+LNA Modul geht es also sind die Potts schonmal I.O.

    Es kann sein das ich vllt im Code ein Fehler habe, da ich ja das mit der Parabeln Werten von " Sisor " ausprobiert habe
    und den Wert von 179 des Servos in 255 geändert hab!

    Nur jetzt hab ich so lang in den Code geschaut das vllt jemand änderst was auffällt, was mir nicht auffällt.
    (Seh vor lauter Bäumen den Wald nicht)

    Arduino Code Sender:
    Code:
    #include <SPI.h>
    #include "RF24.h"
    
    const uint64_t pipe = 0xE8E8F0F0E1LL;            // Adresse des Übertragungskanals
    const int xPot1Pin = A1;                         // Joystick 1 Pin X Achse
    //const int yPot1Pin = A2;                       // Joystick 1 Pin Y Achse
    //const int xPot2Pin = A3;                       // Joystick 2 Pin X Achse        
    const int yPot2Pin = A2;                         // Joystick 2 Pin Y Achse
    
    // Funkmodul NRF24L01 mit Arduino-Pins verbinden:
    // SCK -> 13 // MISO -> 12 // MOSI -> 11 // CSN -> 10  // CE -> 9
    // SPI-Bus Pins 9 und 10
    
    RF24 radio(9,10);
    
    void setup (void)
    {
      radio.begin();
      radio.openWritingPipe(pipe);        // Kanal öffnen
    }
    
    void loop (void)
    {
      int data[2]; 
      data[0] = map(analogRead(xPot1Pin), 0, 1023, 255, 0);          // liest den Wert des Potentiometers (Wert zwischen 0 und 1023)
      data[1] = map(analogRead(yPot2Pin), 0, 1023, 255, 0);          // und skalierter den Wert (zwischen 0 und 179) für den Servo / Fahrtenregler
      //data[2] = map(analogRead(xPot2Pin), 0, 1023, 0, 179); 
      //data[3] = map(analogRead(yPot2Pin), 0, 1023, 0, 179); 
    
      radio.write(data, 8);               // Adresse (data) und Länge (4) der zu sendenden Daten
    }
    Arduino Code Empfänger:
    Code:
    #include <Servo.h>
    #include <SPI.h>
    #include "RF24.h"
    
    Servo myServo1;
    Servo myServo2;
    const uint64_t pipe = 0xE8E8F0F0E1LL; 
    
    RF24 radio(9,10);
    
    int parabel(int val)
    {
     float a = (val - 127) / 13.35;
     int b = a*a;
     if (val < 127) b = -b;
     return b + 90;
    }
    
    
    void setup()
    {
      Serial.begin(9600);  // zum Debuggen Kommentarzeichen entfernen 
                              // und diesen Arduino über Serial Mointor auslesen
      myServo1.attach(3);     // Pin 3
      myServo2.attach(5);     // Pin 5
      radio.begin();
    
      radio.openReadingPipe(1, pipe); 
      radio.startListening(); 
      
    }
    
    
    void loop()
    {
      if (radio.available())
      {
        bool done = false;
        int msg[2];
        while (!done)
        {
          done = radio.read(msg, 8);
          myServo1.write ( parabel(msg[0]) );
          myServo2.write ( parabel(msg[1]) );
          
          Serial.println(msg[0]);  // zum Debuggen Kommentarzeichen entfernen 
          Serial.println(msg[1]);
        }
      }
    währe cool wenn mir evtll jemand ein Tipp geben könnte.

    Mfg Benny

Seite 6 von 9 ErsteErste ... 45678 ... LetzteLetzte

Ähnliche Themen

  1. Antworten: 16
    Letzter Beitrag: 01.12.2011, 17:12
  2. Verbinden von zwei Schrittmotoren mit RN-Control
    Von mklayton im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 3
    Letzter Beitrag: 13.01.2010, 20:38
  3. Mit Rs 232 zwei avr verbinden
    Von fofi1 im Forum AVR Hardwarethemen
    Antworten: 14
    Letzter Beitrag: 16.08.2009, 11:53
  4. Zwei PIC über CAN verbinden
    Von Tonelli im Forum PIC Controller
    Antworten: 6
    Letzter Beitrag: 17.11.2007, 15:10
  5. Signale von zwei Encodern verbinden neue frage!
    Von sdz55 im Forum Elektronik
    Antworten: 68
    Letzter Beitrag: 21.03.2006, 18:31

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests