MeArm on the Raspberry Pi

MeArm auf dem Raspberry Pi

Einen MeArm auf einem Raspberry Pi zu betreiben, ist zunächst sehr einfach. Wir hoffen, es mit einem guten Beispielcode noch einfacher zu machen. Im Moment ist es sehr einfach, mit nur wenigen Jumper-Kabeln und einem externen Netzteil (wie unserem 6V 2A Netzteil) loszulegen.

Wir gehen davon aus, dass Sie einen Raspberry Pi betriebsbereit haben und alle benötigten Zubehörteile dafür vorhanden sind. Wenn dieser läuft, möchten Sie den Pi wie unten gezeigt an die Servos anschließen. Wir verwenden die GPIOs 4, 17, 18 und 27. Diese werden nacheinander zu den Servos 0, 1, 2 und 3. Wir empfehlen Ihnen, diesen gesamten Vorgang vor dem Zusammenbau Ihres MeArms durchzuführen, um Zeit bei der Kalibrierung zu sparen und auch um zu vermeiden, dass Sie Ihre Servos durch das Senden an Positionen, die sie nicht erreichen können, beschädigen! (Datei hier verfügbar)

MeArm Setup for the Raspberry Pi

Das in der Abbildung verwendete Breadboard dient lediglich der Übersichtlichkeit. In der Realität können Sie einfach alle Erdungs- und alle Stromleitungen direkt an die Stromversorgung anschließen und dann die PWM-Leitungen (die Servosteuerleitungen, die vom GPIO kommen) direkt in die Servos führen. Schließen Sie die 6V-Stromversorgung nicht an den GPIO an (außer dem Erdungskabel). Es wird auch nicht empfohlen, die Stromversorgung für die Servos über den GPIO zu beziehen, da sie jeweils bis zu einem Ampere ziehen können und der Pi dafür nicht ausgelegt ist. Lieber auf Nummer sicher gehen, als einen neuen Pi kaufen zu müssen!

Jetzt müssen wir die Befehlszeile Ihres Pi aufrufen. Starten Sie entweder direkt dorthin oder verwenden Sie ein Terminal in Ihrer grafischen Benutzeroberfläche. Wir haben eine Neuinstallation von Raspbian verwendet.

 pi@raspberry ~ $ git clone git://github.com/richardghirst/PiBits.git
Klone nach 'PiBits' ...
remote: Vorhandenes Pack wird wiederverwendet: 359, fertig.
remote: Gesamt 359 (Delta 0), wiederverwendet 0 (Delta 0)
Empfange Objekte: 100% (359/359), 362.62 KiB | 311.00 KiB/s, fertig.
Löse Deltas auf: 100% (154/154), fertig.
Überprüfe Konnektivität... fertig.

pi@raspberry ~ $ cd PiBits/ServoBlaster/user
pi@raspberry ~/PiBits/ServoBlaster/user $ make servod
gcc -Wall -g -O2 -o servod servod.c -lm

pi@raspberry ~/PiBits/ServoBlaster/user $ sudo ./servod --idle-timeout=2000

Board-Revision: 2
Hardware wird verwendet: PWM
DMA-Kanal wird verwendet: 14
Inaktivitäts-Timeout: 2000
Anzahl der Servos: 8
Servo-Zykluszeit: 20000us
Puls-Inkrementschrittgröße: 10us
Minimaler Breitenwert: 50 (500us)
Maximaler Breitenwert: 250 (2500us)
Ausgangspegel: Normal

Verwende P1-Pins: 7,11,12,13,15,16,18,22
Verwende P5-Pins:

Servo-Zuordnung:
0 auf P1-7 GPIO-4
1 auf P1-11 GPIO-17
2 auf P1-12 GPIO-18
3 auf P1-13 GPIO-27
4 auf P1-15 GPIO-22
5 auf P1-16 GPIO-23
6 auf P1-18 GPIO-24
7 auf P1-22 GPIO-25

 

Wenn alles funktioniert, können Sie den Befehl senden

 pi@raspberry ~/PiBits/ServoBlaster/user $ echo 0=50% > /dev/servoblaster

Dadurch wird Servo 0 (der an GPIO 4 angeschlossene) auf 50% seines Bereichs eingestellt. Wenn Sie echo 1=20% > /dev/servoblaster ändern, wird Servo 1 auf 20% seines 0 --> 180 Grad Bereichs eingestellt.

Als Nächstes verwenden wir Python und etwas namens TKinter (das bereits auf Ihrem Pi installiert sein sollte). Erstellen Sie eine neue Datei mit Ihrem bevorzugten Texteditor (es sollte GVIM sein - es wird Sie beliebter, stärker und besser aussehend machen). Ich nannte sie MeArm.py. Fügen Sie den folgenden Code hinzu und speichern Sie.

 #!/usr/bin/env python
from Tkinter import * #allows us to make a GUI with TKinter
import os

root = Tk()
# First Set Up the Servos
# Going to use lists for this
SNums = [0,1,2,3] #Numbers of the Servos we'll be using in ServoBlaster
SName = ["Waist","Left","Right","Claw"] #Names of Servos
AInis = [90,152,90,60] #Initial angle for Servos 0-3
AMins = [0,60,40,60] #Minimum angles for Servos 0-3
AMaxs = [180,165,180,180] #Maximum angles for Servos 0-3
ACurs = AInis #Current angles being set as the intial angles
Step = 5
for i in range(4):
print(SNums[i],AInis[i],AMins[i],AMaxs[i],ACurs[i])

os.system('sudo /home/pi/PiBits/ServoBlaster/user/servod --idle-timeout=2000') #This line is sent to command line to start the servo controller

#inc listens for all key presses. On certain presses in the if statements below it either calls a process to add or subtract from the current servo angle.
def inc(event):
print "pressed", repr(event.char)
if repr(event.char) == "'a'":
AAdd(0)
if repr(event.char) == "'d'":
ASub(0)

if repr(event.char) == "'w'":
AAdd(1)
if repr(event.char) == "'s'":
ASub(1)

if repr(event.char) == "'j'":
AAdd(2)
if repr(event.char) == "'l'":
ASub(2)

if repr(event.char) == "'i'":
AAdd(3)
if repr(event.char) == "'k'":
ASub(3)

def callback(event):
frame.focus_set()

def AAdd(Servo):
if ACurs[Servo] < AMaxs[Servo]:
ACurs[Servo] = ACurs[Servo]+Step
# micro = (1000 + (ACurs[Servo] * 5.555))
micro = (1000 + (ACurs[Servo] * 8.3333))
print(ACurs[Servo],micro)
os.system("echo %d=%dus > /dev/servoblaster" % (SNums[Servo],micro))
else:
print "Max Angle Reached",SName[Servo],"Servo"

def ASub(Servo):
if ACurs[Servo] > AMins[Servo]:
ACurs[Servo] = ACurs[Servo]-Step
# micro = (1000 + (ACurs[Servo] * 5.555))
micro = (1000 + (ACurs[Servo] * 8.3333))
print(ACurs[Servo],micro)
os.system("echo %d=%dus > /dev/servoblaster" % (SNums[Servo],micro))

else:
print "Min Angle Reached",SName[Servo],"Servo"

frame = Frame(root, width=500, height=300)
boxtext = Label(root, text="Click this box for keyboard command of the MeArm. Use the a d s w j l i and k keys for control.")
boxtext.pack()
frame.bind("<Key>",inc)
frame.bind("<Button-1>", callback)
frame.pack()

root.mainloop()

 

Geben Sie in einem Terminal oder der Befehlszeile Folgendes ein:

 pi@raspberry ~ $ python MeArm.py

 

Wenn alles gut geht, sollte nun ein Pop-up-Fenster erscheinen, das Sie auffordert, darauf zu klicken, um Ihren MeArm zu steuern!

Hier ist ein grobes und fertiges Video der Ergebnisse!

Dieses Tutorial verdanken wir Carl Monk, der dies bereits vor fast einem Jahr gemacht hat und weiter gegangen ist, als ich hier. Seine exzellente Arbeit finden Sie hier.

Wir verlassen uns beide auf die ServoBlaster-Software von Richard Hirst und diesen großartigen Beitrag von Cihat Keser, wie man sie schnell zum Laufen bringt.

 
 
Zurück zum Blog

6 Kommentare

Hi

We would like to become distributors of some of your products, but there is absolutely no contact information on your website. How do we contact you?

Mike

Hinterlasse einen Kommentar

Bitte beachte, dass Kommentare vor der Veröffentlichung freigegeben werden müssen.