-         
Ergebnis 1 bis 6 von 6

Thema: Neubau eines Hexapoden

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    29.09.2010
    Beiträge
    15

    Neubau eines Hexapoden

    Anzeige

    Hallo liebe Experten,

    Denke auch über den Bau eines Hexapoden nach. Habe auch schon mal ein einzelnes Bein gebaut, um die Ansteuerung mit PWM zu verstehen.

    Mein Equipment:
    Arduino Due
    Servoboard SD21
    2 Labornetzgeräte
    Multimeter
    Servos Graupner C5077 (nur zum ausprobieren, später will ich gute Servos nehmen)
    div. ...

    Zunächst habe ich die 3 Servos mit PWM angesteuert, um erstmal einen Einstieg zu haben.
    Jetzt soll das Ganze mit I2C passieren und da tun sich bei mir Verständnisprobleme auf..

    Die Adresse des SD21 habe ich ausgelesen = 0x61

    Wie werden nun die einzelnen Servo - Adressen gefunden?
    Die Adresse für Servo 1 habe ich (Roland war so freundlich und hat mir ein Stückchen Code gegeben)

    #define SERVO 0x3F // Address of first servo

    Das funktioniert auch, der Servo bewegt sich, allerdings funktioniert die Einstellung der Drehgeschwindigkeit nicht.
    Egal was ich einstelle, der Servo bewegt sich immer mit gleicher Geschwindigkeit.

    Der komplette Code

    #include <Wire.h>
    #define ADDRESS 0x61 // The address of the SD21
    #define SERVO 0x3F // Address of first servo

    void setup(){
    Wire.begin();
    }

    void loop(){
    Wire.beginTransmission(ADDRESS);
    Wire.write(SERVO);
    Wire.write(100); // Send a value of xxx to 255 to servo 1
    Wire.endTransmission();
    delay(1000);
    Wire.beginTransmission(ADDRESS);
    Wire.write(SERVO);
    Wire.write(2000);
    Wire.endTransmission();
    delay(1000);
    Wire.beginTransmission(ADDRESS);
    Wire.write(SERVO);
    Wire.write((byte)0); // Values of 0 being sent using writ have to be masked as a byte to stop them being misinterperted as NULL this is a bug with arduino 1
    Wire.endTransmission();
    delay(1000);
    Wire.beginTransmission(ADDRESS);
    Wire.write(SERVO);
    Wire.write(12; // send a value of 128 to servo 1
    Wire.endTransmission();
    delay(1000);
    }

    Habe ich es richtig verstanden, zwischen jeder

    Wire.beginTransmission
    und
    Wire.endTransmission();

    vergehen 20 ms ?

    Danke für Eure Hilfe

    Jürgen

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    30
    Beiträge
    4.698
    Du verstehst es falsch. Das SD21 steuert unabhängig vom uC die Servos an. Mit dem uC gibst du nur die Anweisung welcher Servo mit welcher Geschwindigkeit wohin fahren soll. Die Impulserzeugung für die Servos (1-2ms Puls, 20ms Periode) übernimmt das SD21.

    Du musst dir das Datenblatt/Anleitung zum SD21 besorgen und dann genau lesen welches Register was macht. Ich habe auch ein SD21, jedoch finde ich das Register 0x3f nicht (eventuell Versionsabhängig, meines habe ich schon ewig). Meine Register gehen von 0 bis 65 (dez. nicht hex).

    MfG Hannes

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    30.12.2008
    Ort
    Essen
    Alter
    59
    Beiträge
    336
    Habe Dir mal eine Uebersicht aller Register rausgesucht:

    http://www.roboter-teile.de/datasheets/sd21.pdf

    Damit duerftest Du deine Probleme loesen koennen.

    Und, zwischen:

    Wire.beginTransmission
    und
    Wire.endTransmission();

    stehen die Befehle, die der SD 21 ausfuehren soll.
    Um das Timing kuemmert sich der SD 21 selbststaendig.
    Du sagst: Fahre Servo X nach Pos. 255 mit Speed X , dann macht den Rest der SD21.
    Es sei denn, Du gibst ihm bevor er alles erledigt hat, eine neue Anweisung zum gleichen Servo.
    Durch den Befehl delay(1000) gibst Du ihm genuegend Zeit, um alles zu erledigen


    MfG
    Roland
    Robotik Homepage
    www.sensobot.de

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    29.09.2010
    Beiträge
    15
    Hallo Roland,

    erstmal lieben Dank für Deine Mühe, natürlich auch an Hannes. Leider habe ich immer noch nicht verstanden, wie die Servos
    im Programmcode angesprochen werden. OK lt Datenblatt SD21 hat jedes Servo 3 Register (0 = Speed Servo 1, 1 = Low Byte, 2 High Byte) usw. In meinem obigen Programmcode steht #define SERVO 0x3F // Address of first servo. Ist nun das 0x3F die Servoadresse?

    Habe schon tagelang gegoogelt, komme aber nicht weiter. Mir würde ein Stückchen Programmcode sehr helfen, damit ich nachvollziehen kann, was überhaupt passiert. Ein provisorisches Bein mit 3 Servos habe ich ja schon gebaut. Wie weit ist denn mittlerweile Dein runder Hexa?

    viele Grüße

    Jürgen

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    30
    Beiträge
    4.698
    Es gibt (nach der PDF von Roland) 62 Grundregister zum Schreiben und 2 zum Lesen. Zusätzlich gibt es noch weitere die man nur schreiben kann (fängt bei 63 = 0x3f für Servo 1). Wenn du die Register 0-62 nimmst, benötigst du einmal Geschwindigkei und einmal die Sollposition, aufgeteilt auf 2 Byte. Wenn du die Register ab 63 nimmst gibt es eine Formel, damit benötigst aber nur 1Byte anstatt 2Bytes.

    Also für Servo 1 gibt es die Register 1 und 2 (0x01, 0x02) und Register 63.

    MfG Hannes

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    30.12.2008
    Ort
    Essen
    Alter
    59
    Beiträge
    336
    Hallo juergen

    021aet04 hat es vortrefflich erklaert:

    0x3f ist die Servoadresse fuer Servo 1
    0x40 waere dann Servo 2
    0x41 Servo3
    Damit koenntest Du deine 3 Servos deines Hexapod Beins schon mal verfahren.
    Wenn Du aber alle 3 Servos mit verschiedenen Geschwindigkeiten fahren willst, musst Du die Register DEZIMAL 0-62 verwenden.
    Das solltest Du aber schon selbst hin bekommen.
    Falls das zu schwierig ist, wuerde ich Dir empfehlen etwas weniger komplexes als einen HEXA zu bauen.
    Weil das nur ein minimaler Bruchteil der Programmierarbeit ist, die da noch auf Dich zu kommt.
    Ein Hexapod ist kein Wochenend - Projekt.

    Mein Runder HEXA ist mechanisch fertig, bewegt sich auch schon, koennte auch laufen , aber das ist mir noch nicht perfekt genug.
    Im Moment habe ich auch andere Sachen on Top.
    Eines Tages , bei Lust und Laune, hol ich den wieder von seinem Podest und mache daran weiter.

    MfG
    Roland
    Robotik Homepage
    www.sensobot.de

Ähnliche Themen

  1. Steuerung eines Hexapoden mittels C
    Von Dani3l im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 9
    Letzter Beitrag: 18.02.2015, 11:15
  2. Steuerung Neubau für Rasenroboter: ROBITOBI ?
    Von papapopop im Forum Staubsaugerroboter / Reinigungs- und Rasenmähroboter
    Antworten: 7
    Letzter Beitrag: 29.04.2013, 12:45
  3. FPV steuerung eines RC-Cars mit hilfe eines smartphones
    Von nonam im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 1
    Letzter Beitrag: 08.02.2013, 13:57
  4. Fräsen, scannen ,hexapoden
    Von Testläufer im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 8
    Letzter Beitrag: 20.06.2011, 15:10
  5. Antworten: 5
    Letzter Beitrag: 30.06.2007, 19:24

Berechtigungen

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