Raspberry Pi mit Servo Motor anschließen?
Ich habe diesen Motor hier.
und ich möchte dieses Projekt nachstellen:
https://www.hackster.io/will-su/touchless-automatic-motion-sensor-trash-can-bbeed1
-> Nur leider ist hier nur der Code für Arduino angezeigt. Ich weiß leider nicht wirklich genau wie das auf einem Raspberry Pi funktionieren würde. Kann mir da jemand helfen?
Angeschlossen habe ich Meinen Motor so:
Den Rest also den Berührungssensor muss ich an einen BOARD befestigen und dann mit Jumper Kabel mit dem Raspberry verbinden. Weiß jemand wie ich das machen muss?
3 Antworten
Hallo,
etwas overkill für die raspi ..aber ok..
erstmal musst du wissen dass alle ein/ausgänge am pi nur für 3,3V Signale geeignet sind..das heisst alles was 5V hat oder mehr musst du zwingend "umwandeln".
das fängt schon an beim Servo-Motor.
so wie in deinem Link wirst du es NIE so mit ienem pi hinkriegen..mich wunderts noch dass der arduino da noch lebt bei den stromstössen..
auf langer sicht muss man das ganze über transistor laufen lassen und dazu schutzschaltungen für den raspi aufbauen..
am besten du suchst mal im netz nach : raspberry pi servo 5V
dann raspberry pi ultrasonic module
da gibts es sicherlich paar beispiele wie man mit python das ganze programmieren kann..und dann kombinierst du diese beiden :)
Muss man nicht zwingend. Gut die 5V am Servo direkt vom Raspi zu beziehen geht zwar aber ist wie du auch gesagt hast nicht all zu sauber. Wenn die Batterie aber nicht zu weit weg ist sind die Spannungsspitzen erträglich und mit einem Elko so auch kein Problem.
Den Signalpin vom Servo kann man Problemlos am Pi Anhängen. Die aller meisten Servoeingänge sind direkt 3V3 kompatibel, kann vielleicht welche geben welche das Signal nicht vielleicht nicht all zu gut erkennen werden, aber der Pi wird dadurch auch nicht kaputt.
ja über usb würds auch packen..wenns direkt anschliesst..nur der servo ist immernoch eine induktive last..ob die schutzschaltung intern ist? .. ein zusätzlicher 250-1000µF Kondensator wär da vom vorteil..Stromspitzen abzufangen..
es hängt stark davon ab welches raspi-modell der fragesteller nutzt und dazu das netzteil..
da wär ich vorsichtiger ..weil raspi mir da viel zu schade wär..vorallem bei heutigen raspi-knappheit..
und GPIOs sind trotzdem 3,3V Logiklevel..allein da sollte man wenigstens auf richtige logik wandeln..
Ja, ich bezog mich tatsächlich auf den Arduino und die Verschaltung, hab die falsche Zeile kopiert ^^.
mich wunderts noch dass der arduino da noch lebt bei den stromstössen..
Ich glaube, der Pi hat eh keine 5V oder? Da müsste die versorgung eh extern geschehen. Hab damit noch nie gearbeitet... Nur mit Arduino...
der raspi hat schon 5V als spannungsversorgung an den GPIO, aber auch der ist über eine PolyFuse verbunden. ich glaub die löst aus bei 200mA oderso..dann kriegt der pi zu wenig strom (blitz-symbol unten rechts) sobald man hdmi dran hat..
gab so etliche defekte genau deswegen und solcher direkten schaltungen.
Und der Code
#!/usr/bin/env python3
########################################################################
# Filename : Sweep.py
# Description : Servo sweep
# Author : www.freenove.com
# modification: 2019/12/27
########################################################################
import RPi.GPIO as GPIO
import time
OFFSET_DUTY = 0.5 # define pulse offset of servo
SERVO_MIN_DUTY = 2.5 + OFFSET_DUTY # define pulse duty cycle for minimum angle of servo
SERVO_MAX_DUTY = 12.5 + OFFSET_DUTY # define pulse duty cycle for maximum angle of servo
SERVO_DELAY_SEC = 0.001
servoPin = 12
def setup():
global p
GPIO.setmode(GPIO.BOARD) # use PHYSICAL GPIO Numbering
GPIO.setup(servoPin, GPIO.OUT) # Set servoPin to OUTPUT mode
GPIO.output(servoPin, GPIO.LOW) # Make servoPin output LOW level
p = GPIO.PWM(servoPin, 50) # set Frequence to 50Hz
p.start(0) # Set initial Duty Cycle to 0
def servoWrite(angle): # make the servo rotate to specific angle, 0-180
if(angle < 0):
angle = 0
elif(angle > 180):
angle = 180
dc = SERVO_MIN_DUTY + (SERVO_MAX_DUTY - SERVO_MIN_DUTY) * angle / 180.0 # map the angle to duty cycle
p.ChangeDutyCycle(dc)
def loop():
while True:
for angle in range(0, 181, 1): # make servo rotate from 0 to 180 deg
servoWrite(angle)
time.sleep(SERVO_DELAY_SEC)
time.sleep(0.5)
for angle in range(180, -1, -1): # make servo rotate from 180 to 0 deg
servoWrite(angle)
time.sleep(SERVO_DELAY_SEC)
time.sleep(0.5)
def destroy():
p.stop()
GPIO.cleanup()
if __name__ == '__main__': # Program entrance
print ('Program is starting...')
setup()
try:
loop()
except KeyboardInterrupt: # Press ctrl-c to end the program.
destroy()
Quelle : Freenove
Ich hoffe es hilft dir…
VG

Danke sehr für die Informationen! Was genau macht aber dieser Code?
Es würde gutefrage ein bisschen sprengen, wenn man den Sketch komplett in Python oder so übersetzt.
Hier findest du eine gute Anleitung wie man den Motor über GPIO mit Python anspricht. https://draeger-it.blog/raspberry-pi-tutorial-7-servomotor-steuern/
Die Logik aus dem Arduino Sketch kannst du ja nach Python übertragen
Nicht zwingend.. Die Steuerelektronik für den Servo ist ja im Servo. Und wenn der Arduino eine ext 5V-Versorgung hat, wird der vom Servo gar nicht belastet. Selbst über USB-Versorgung oder V-In schaffen die 5V 500mA...