Mehrere Servos synchron ansteuern

Hallo in die Runde!

Ich möchte mehrere Servos synchron ansteuern. D.h. zum Beispiel 2 Servos gleichzeitig um z.B. 90 Grad bewegen und zeitgleich 2 andere Servos um z.B. 45 Grad.

Ich möchte das mit einem arduino Nano rp2040 Connect realisieren und habe auch einen Servoshild für 16 Servos. Bisher habe ich immer nur Tutorials gefunden wo die Servos nacheinander angesteuert werden, das löst mein Problem allerdings nicht🙈. Das Ansteuern mit externer Stromversorgung ist mir bekannt, ich suche halt nach einer Lösung mehrere Positions-Signale gleichzeitig an verschiedene Servos zu senden.

Bin dankbar für jeden Lösungsansatz.

[edit] ne, über i2c wird das mit den Mobatools nichts.... [/edit]

mobatools.
Ob die auf dem rp laufen, musste ausprobieren.

Was für einer?
Was für Servos?
Was für Lib?
Link Bitte.
Wen der mit I2C Ansteuerung wird nix mit gleichzeitig, wen ich mich nicht irre geht das nicht

Mobatools kann kein I2C so wie ich weis.
also Schild bei Seite und Pin Ansteuerung

Ach.. das ist doch wieder das Ding mit dem LED-Driver IC....
Ich ziehe zurück. :wink:

Deshalb war die Frage was für einer :wink:

Mit 2PWM Pins (2Servo auf einem Pin) + mobatools sollte funktionieren

Das Servosignal ist ein Impuls von 1mS bis 2mS alle 20 mS.
Wie genau synchron brauchst Du die Servo?
Die Geschwindigkeit der Servos hängt von der Versorgungsspannung (die könnte bei einem genügend dimensionierten Netzteil für alle Servos gleich) und von der Last am Servo ab.
Ich glaube daß die Servos schon wegen der Bauweise nicht die Genauigkeit haben, die Du haben willst.
Wieso brauchst Du einen RP2040?
Grüße Uwe

@my_xy_projekt Vielen Dank für Deine Antwort(en)!

Ich habe mir (kurz) die Beschreibung von mobatools angeschaut. Ich denke ich kann Einiges aus den vielen Möglichkeiten die diese Bibliothek bietet, nutzen.

Danke! :wink:

Hallo derspitz
Nimm eine Suchmaschine deiner Wahl und befrage das WWW mit "struct servo +arduino ".

@fony Vielen Dank für Deine Antwort(en)!

Vielleicht muss ich mein Projekt etwas näher erläutern. Aber zuerst zu Deinen Fragen;

Shild:PCA9685 (16 Kanal 12Bit PWM Treiber, max 1000Hz Taktfrequenz [AZ-Delivery)
Link: https://www.amazon.de/AZDelivery-PCA9685-Servotreiber-Arduino-Raspberry/dp/B072N8G7Y9?ref_=ast_sto_dp&th=1&psc=1

Servos: ganz einfache SG90
Link: https://www.amazon.de/AZDelivery-⭐⭐⭐⭐⭐-Roboter-Hubchrauber-Flugzeug/dp/B07CZ42862?ref_=ast_sto_dp&th=1&psc=1

Bibliothek: Noch keine, da ich in den Tutorials nicht das gefunden habe was ich für mein Projekt suche.

So, nun ein bisschen Erklärung zu meinem Projekt bzw. zu meinem Vorhaben;

Ziel ist es ein Spielzeug zu bauen (Zur Zeit habe ich einen Teddy und eine Puppe, beide sind ca 50cm groß) mit dem man sprachlich interagieren kann. Diese sollen dann, entsprechend der gewünschten Reaktion interagieren (Antworten und sich bewegen) (Das Projekt wird später auf Der-Puppenmacher.de/.com zu sehen sein, da möchte ich die Entwicklung schritt für Schritt veröffentlichen). Da die Meisten Ansätze zur Spracherkennung mit einem Training verbunden sind, habe ich mir ein Experimentier-Kid von vicControl gekauft. Dieses erkennt Sprache auch ohne Training und unabhängig vom Sprechenden.
(Link: https://de.elv.com/viccontrol-go-kit-offline-sprachsteuerung-251951?utm_source=google&utm_medium=cpc&utm_campaign=perfmax_shopping_de&refid=Gads&Gads_PerfMax_Shopping&gclid=Cj0KCQjwjvaYBhDlARIsAO8PkE2nZCHe6-JU527wbmSCfmP3D8UnLyLDix8XRnN-H9zuVaa3cW6PTA0aAjxkEALw_wcB )

Das eigentliche Spracherkennungsmodul ist sehr klein, von daher bestens für mein Projekt geeignet. Die Puppen hingegen sind groß genug um EIniges an Servos (vielleicht auch Längsgetriebe) aufzunehmen. ALs Sprachausgabe möchte ich, ebenfalls von AZ-Delivery, den Mini-mp3-Player nutzen, dieser hat sich als gut ansteuerbar erwiesen und lässt sich über eine 4-stellige Nummerierung ansteuern.

Ebenfalls soll eine Gesichtserkennung integriert werden, die halt das Kind oder den Besitzer "erkennt" und entsprechend anspricht. Von daher werde ich später vermutlich einen ESP32 zum EInsatz bringen, aber jetzt für die schrittweise Entwicklung sollte ein Arduino nano ausreichend sein.Im Augenblick ist das Konzept auf 22 Servos ausgelegt (Augen, Hals, Schulter, Arme, Oberkörper, Beine und Füße). Die Spracherkennung funktioniert dem vicControl-Modul funktioniert bereits obwohl ich die Software dafür für ziemlich kompliziert halte :wink:

So, nun wisst Ihr was ich vorhabe und könnt vielleicht so besser nachvollziehen was ich brauche.

Das würde vermutlich funktionieren aber ich möchte ja nicht ständig die gleichen Paare ansteuern wie Du vielleicht jetzt wegen meiner Erklärung, verstehen wirst :wink:

@uwefed Auch DIr herzlichen Dank für Deine Antwort!

Nun, ich möchte einen/mehrere Roboter bauen der/die sich halt so natürlich als möglich bewegen. Wenn zum Beispiel der Kopf nach rechts oben bewegt werden soll dann sieht es nicht schön aus wenn er erst den Kopf hebt und dann nach rechts. Ich hoffe Du verstehst was ich meine.

Wieso ich einen rp2040 brauche? Naja, brauche ist vllt der falsche Ausdruck, ich habe einen Arduino uno, zwei RP2040 und vermutlich wird als finale Version ein ESP32 zum Einsatz kommen (wegen meiner Anforderungen zur Gesichtserkennung) Im AUgenblich ist es einfach eine Platine die ich da habe und wegen des Formfaktors für mich ideal ist.

Wegen Deiner sorge mit der Genauigkkeit; Danke erstmal für den Einwurf aber ich denke mit einer bidirektionalen Abfrage auf die Servostellung sollte eine Fehlpositionierung erkannt und korrigierbar sein. Es wird soooo viele Stolpersteine geben, das ist mir bewusst, deshalb bin ich ja froh über jeden Hinweis/Denkanstoß von Euch!

Mir ist auch bewusst das Servos eine Unmenge an Strom brauchen, deshalb ziehe ich auch noch Längsgetriebe in Betracht. Leider kann man bei den preiswerten und kleinen Modellen keine Position abfragen weswegen ich am überlegen bin die aktuelle Position über Potis an den entsprechenden Gelenken abzufragen. AUch dafür muss eine Lösung gefunden werden.

Alle mechanischen Teile sowie das Endoskelett werden mit einem 3D-Drucker (ELEGO Master pro) hergestellt. Als Software zum konstruieren verwende ich FreeCad.

Also auch DIr nochmals Dank!

@An Alle
Vielen lieben Dank für Eure Antworten und Ideen!
Ich werde Euch auf dem Laufenden halten wie es mit dem Puppenmacher weiter geht :wink:

Danke auch Dir für Deine Antwort :wink:

Leider habe ich nur englische Antworten zum Suchthema gefunden. Da ich mich mit Englisch etwas schwer tue, werde ich mir die Beiträge von Tante G mal einen nach dem Anderen übersetzen lassen.

Gerade habe ich mir einen Sketch mit der Ansteuerung von vier Servos angeschaut, es sieht so aus als werden sie über Pinout mit einem PWM-Signal gesteuert. Grundsätzlich richtig, lässt sich aber bei 22 Servos so nicht umsetzen.

Aber danke für den Tip, ich denke über die Suche werde ich noch EIniges herausbekommen.

Such mal nach DeepL. Das übersetzt dir die Texte besser als Google.

Beim lesen deiner Beiträge, dachte ich kurz an Chucky, die Mörderpuppe :sweat_smile:

Danke für Deinen TIp :wink: !

Naja, der Gedanke ist nicht von der Hand zu weisen, ich denke das man bei der Wahl der Bewegungsabläufe sehr genau darauf achten muss wie sich die Puppe bewegt und vor Allem wie sie spricht, also die Stimme. Das wird vermutlich sowieso ein recht schwieriges Thema werden. Alle TTS-Reader die ich bisher getestet habe, klingen nicht so, wie ich es mir vorstelle. Aber dieses Thema kommt relativ am Ende des Projekts, vermutlcih werde ich durch twago einen Sprecher arrangieren, es sei denn jemand kennt eine Software die Texte in Sprache umsetzt, als mp3 speichern kann und die halt wie ein Teddy bzw eine Mädchenstimme klingt. Das Bisherige war eher enttäuschend.

Also auch DIr nachmals Dank :wink:

Du betrachtest in mehreren Beiträgen diese Platine wie einen "normalen" Arduino Nano. Das ist falsch. der "normale" Nano hat einen AtMega328 als Prozessor, der RP2040 ist ein völlig anderer Prozessor (ARM 2 Kerne), so dass Libs ohne explizite Anpassung da kaum laufen werden.

Gruß Tommy

Was ist für dich "gleichzeitig"?

Ein kurzer Blick ins Datenblatt zeigt:

allow groups of devices to be addressed at the same time in any
combination

und::

Change of the outputs at the STOP command allows synchronizing outputs ...

Was das wohl bedeuten mag....?
Vielleicht, dass du das Datenblatt noch nicht einmal ignoriert hast?

na dann bewegst halt den Kopf
einen Grad nach rechts ,
einen Grad nach oben,
einen Grad nach rechts,
einen Grad nach oben,
...

so lange bis du dort bist wo du willst.
das geht so schnell hintereiander - da ist die Mechanik träger als du das sehen kannst das das lauter kleine Steps sind.

und wenn die durchzuführenden Schritte nicht gleich sind, kann man das auch in Steps aufteilen:

zwei Grad nach rechts ,
einen Grad nach oben,
zwei Grad nach rechts,
einen Grad nach oben,
...

vor gut nem Monat kam mal die Frage auf wie man einen Servos "langsam" ansteuert.
http://werner.rothschopf.net/microcontroller/202207_millis_slow_servo.htm

auf dieser Basis hab ich dann jetzt einfach mal was für zwei Servos gemacht:

wenn man zunächst ermittelt, welcher Servo die größere Abweichung von neuem Ziel hat, kann man die Bewegung auch gleichmäßig aufteilen.