Raspberry Pi mit Servo Motor anschließen?

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 :)


PeterKremsner  02.06.2022, 22:08

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.

0
RareDevil  02.06.2022, 22:05
auf langer sicht muss man das ganze über transistor laufen lassen und dazu schutzschaltungen für den raspi aufbauen..

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...

0
iEdik  02.06.2022, 22:24
@RareDevil

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..

0
RareDevil  02.06.2022, 22:29
@iEdik

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...

0
iEdik  03.06.2022, 17:21
@RareDevil

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.

1

Bild zum Beitrag

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

Woher ich das weiß:eigene Erfahrung
 - (Computer, Technik, Technologie)

AnonymPrivat205 
Beitragsersteller
 02.06.2022, 22:01

Danke sehr für die Informationen! Was genau macht aber dieser Code?

0