Voor mijn projecten gebruik ik diverse standaard servo's die worden gecontroleerd door de ADAFRUIT PWM SERVO DRIVER, die op zijn beurt wordt bestuurd door een python-script dat wordt uitgevoerd op de Raspberry Pi.
Telkens ik re / monteren van een hoorn op een servo die ik moet opnieuw het aanpassen van de 'nul hoek'. Als ik een servo vervangen, wellicht het andere conversie voor PWM hoek positie. Het duurde zo veel van mijn tijd aan te passen die parameters bij elke wijziging die heb ik besloten om het schrijven van eenvoudige Tkinter GUI waarmee zou instellen, verifiëren en opslaan:
* PWM waarde voor de 'nul hoek' (pwm0)
* conversie van rotatiehoek in graden naar PWM verandering (factor)
* upper/lower beperkt op de hoek met de hardware te beschermen tegen beschadiging (pwmHigh, pwmLow)
* kanaal ID 0-15 van PWM generator die servo is aangesloten
De formule die de ingestelde hoek (A) converteren naar PWM waarde afgegeven aan servo is als volgt:
PWM = A * factor + pwm0
Als pwm < pwmLow:
PWM = pwmLow
Elif pwm > pwmHigh:
PWM = pwmHigh
De film toont hoe een kunt deze GUI experimenteel bepalen: pwm0, factor, pwmLow, pwmHigh. In deze film wilde ik de zwarte pijl te wijzen op de rode '0' toen ik de hoek A bij 0 graden op de schaal en de pijl mag nooit hoger zijn dan de hoekige bereik gekenmerkt door zwarte 'X' en 'Y'. Nadat servo genaamd 'futuba-S3003' is gekalibreerd worden de parameters opgeslagen in een python augurk.
Vervolgens kunt een die instellingen zoals in dit korte programma:
armConfName ="./servo.futuba-S3003.confarmConf=pickle.load( open(armConfName, "r" ) ) print 'loaded arm conf ',armConfName arm = ServoDriver() arm.setupController(armConf['freq']) arm.config(armConf) for ang in [10., 20., -20, -10.]: arm.setAngleDeg(ang) print 'set armAngDeg=%s, status=%s '%(ang,arm.status) time.sleep(2.) print "servos STOP & RELAX" arm.fullStop()
Deze code is toegankelijk vanaf bitbucket GIT repo als:
git clone
Het wordt verwacht dat u al hebt geïnstalleerd op uw R-Pi (en getest) de Adafruit bibliotheek, zoals hier beschreven
https://Learn.adafruit.com/adafruit-16-Channel-se...
Met alle code is in plaats lanceer enkel servo kalibrator als 'gksu' (graphics kan anders niet tunnel). Controleer ook of dat uw servo is aangesloten op het kanaal van de PWM weergegeven op de GUI
$ gksu ./servoCalibMain.py
Nadat u hebt opgeslagen kalibratie in augurk, gebruiken om het verplaatsen van de servo met slechts enkele lijnen van python
$ sudo ./exampleRun.py
Succes
Jan