Raspberry Pi + Servo

Last Updated on 31 May 2019 by Suffocation

Controlling a servo with the Raspberry Pi 3.
Hierbei geht es nur um die grundlegende Technik, der Einsatz könnte beispielsweise ein Mobiler Roboter sein.

Der Servo soll hierbei über den Software PWM angesteuert werden um die Hardwar PWMs für andere Funktionen frei zu halten.

Zusätzlich soll der Servo nicht wie üblich über Integer Werte gesteuert werden sondern über eine Gradzahl im Bezug zur Mittelstellung des Servos.

The image below shows what is meant by this.

I will not go into the actual workings of a servo here; this can be read up on if needed at http://rn-wissen.de/wiki/index.php/Servos or other websites.

Benötigte Hardware

  • PI3 (oder älter bitte auf die richtigen Pins achten)
  • Standard Servo
  • Diverse Cables (Pre-assembled Pin Header Cables)

Circuit arrangement

Die Ansteuerung des Servos geschieht in meinem Fall über GPIO 27. Die Spannungsversorgung liefert der PI. Für größere Servos müsste evtl. auf eine externe Spannungsversorgung zurückgegriffen werden.

The GPIOs are only valid in conjunction with pi4j and wirePi

Software

I am using BlueJ on the Pi itself as my development environment. I have created the following classes with it.


Code

A First Test

Ein guter Anfang ist immer den im Internet gefundenen Code eine Main Funktion zu packen, um zu schauen ob überhaupt was klappt. Dies habe ich in Form der FirstTest Klasse getan. Sie fährt alle Positionen des Servos ab. Die Funktionalität ist hier nicht gekapselt.

[gistpen id=“232″]

Encapsulated code

Als nächsten Schritt habe ich den Code aus dem ersten Test genommen und ihn mit ein paar Änderungen in eine Klasse gepackt. Hierbei habe ich auch die Umrechnung von absoluten Werten in Grad implementiert. Für den Test der Klasse habe ich wiederum eine Main-Klasse erstellt die alles mal aufruft.

Servo Class

Class for controlling the servo. The two most important methods are:

  • setPos – Set the position, value range from posMin to posMax where (posMax-posMin+1) is the centre position.
  • setDeg – Diese Methode projeziert die angegebene Gradzahl auf die möglichen Positionen (aktuell sehr ungenau 🙁 )

[gistpen id=“228″]

Test Class

Klasse mit Main-Methode zum Testen der Servo-Klasse. In der Main-Methode werden alle Positionen abgefahren wobei die Positionierung über den Winkel relativ zur 0 Position erfolgt.

[gistpen id=“230″]

Fingertips

Das Positionieren über die PI4j Lib ist sehr ungenau für die 180° Bewegungsspielraum des Servos stehen gerade mal rund 20 (+-2) Positionen zur Verfügung. Das sind rund 9° pro Position.  Evtl. sollte man vorher testen welche Positionen für den Aktuellen Zweck am besten geeignet sind. Sollte der genaue Winkel wichtig sein, ist es besser diesen vorab zu messen als ihn über die setDeg Methode berechnen zu lassen.

Es gibt noch weitere Lib’s (Servoblast, … ) die evtl genauer sind, man könnte auch überlegen die Programmiersprache zu wechseln und dann den Ensprechenden Code über das Nativ-Interface anzusprechen. Als nächsten Versuch klingt Servoblast ersteinmal vielversprechend.

Next steps

PWM in Thread

Ich habe versucht den Software PWM innerhalb eines Threads laufen zu lassen, jedoch ohne Erfolg. Der Servo weigert sich zu funktionieren.  Über die Ursache hierfür bin ich mir noch im unklaren. Ich nehme allerdings an, dass hierdurch der Timer zerschossen wird.

ServoBlast

After various tests with different frequencies, I have decided ServoBlaster od. It is better to use the PI variant (PiBits). The installation is as simple as follows.

[gistpen id=“257″ ]

Programming example

This is where a code example with ServoBlast should actually follow. However, as I have currently stopped working on the PI and am using the ESP8266 and ESP32, please refer to the following links:

https://github.com/richardghirst/PiBits/tree/master/ServoBlaster
http://www.leenabot.com/en/Servo-Motor-driver/


Troubleshooting

Execution failed

If the Java exec function does nothing, here's a good link for bug fixing.

http://www.javaworld.com/article/2071275/core-java/when-runtime-exec—won-t.html


Problems with println

Weiterhin könnte es helfen nicht die println Methode zu verwenden, sondern die print. Da zumindest mein PI den Abschluss der Zeile nicht richtig interpretieren konnte. print( „5=100\n“) hat jedoch funktioniert.

https://github.com/richardghirst/PiBits/tree/master/ServoBlaster
http://www.leenabot.com/en/Servo-Motor-driver/

Verwandte Beiträge

Sources

http://razzpisampler.oreilly.com/ch05.html

https://github.com/Pi4J/pi4j/blob/master/pi4j-example/src/main/java/MaestroServoExample.java

https://phyks.me/2015/05/controlling-servomotors-on-a-raspberry-pi.html

https://github.com/richardghirst/PiBits/tree/master/ServoBlaster

http://rn-wissen.de/wiki/index.php/Servos

https://github.com/BioMachinesLab/drones/wiki/Installing-Servoblaster

Attachment

Pin assignment

DateChangeAuthor
11.06.2017Post createdSuffocation

2 thoughts on “Raspberry PI + Servo

  1. Considering the article is over a year old, I find it a bit of a shame that you still have to read „… to come“ in some places.
    It also seems like something is missing from the „gistpen id“ lines, or I don't understand it.

    1. Hello and thank you for your comment.
      Yes, the age of the post is a bit of an issue. I started this on my last holiday and then didn't get around to finishing it, or I've been more involved with the ESP8266/ESP32 recently. Unfortunately, I haven't gotten around to a documented test with ServoBlast yet, maybe on the next holiday ;) . I've adjusted the post accordingly to inform readers about this. The two pages that describe the use of ServoBlast quite well from my perspective are now linked again.
      The Gistpen ID thing is annoying. One version of Gistpen unfortunately didn’t work, which resulted in all source code pages no longer being displayed. For this reason, I unfortunately had to deactivate it and, as always, I didn't have time to revise the old pages. On new pages, I now offer a download. Long story short, I have reactivated Gistpen in the current version and it seems to be working again.
      Greetings SFA

Leave a Reply

Your email address will not be published. Required fields are marked *