2020.07.19
今回は、仕事やら入院やら仕事やらでしばらく放置していた Raspberry-Piのサーボモータのこと

こんな感じで構成
・GDP Micro PC (コンソール USB – TTLで接続)
・PCA9685 16チャンネル 12-ビット PWM Servo モーター ドライバー IIC モジュール
・Raspberry Pi 2B (なんか、値段が高くなった気がする)
・電池
今回は、PCA9685のライブラリ(python)を、使用してサクっと作成
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import Adafruit_PCA9685
import time
#SG92Rをコントロールするためのクラス
class SG90_92R_Class:
def __init__(self, Channel, ZeroOffset):
self.mChannel = Channel
self.m_ZeroOffset = ZeroOffset
#Adafruit_PCA9685の初期化
#address:PCA9685のI2C Channel 0x40
self.mPwm = Adafruit_PCA9685.PCA9685(address=0x40)
self.mPwm.set_pwm_freq(60)
"""位置セット"""
def SetPos(self,pos):
pulse = (650-150)*pos/180+150+self.m_ZeroOffset
self.mPwm.set_pwm(self.mChannel, 0, pulse)
def Cleanup(self):
#サーボを10degにセットしてから、インプットモードにしておく
self.SetPos(90)
time.sleep(1)
if __name__ == '__main__':
Servo = SG90_92R_Class(Channel=0, ZeroOffset=-10)
try:
while True:
Servo.SetPos(0)
time.sleep(1)
Servo.SetPos(90)
time.sleep(1)
except KeyboardInterrupt : #Ctl+C(signal 2)割り込みで、ループを終了
print("\nCtl+C")
except Exception as e:
print(str(e))
finally:
Servo.Cleanup()
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import Adafruit_PCA9685
import time
#SG92Rをコントロールするためのクラス
class SG90_92R_Class:
def __init__(self, Channel, ZeroOffset):
self.mChannel = Channel
self.m_ZeroOffset = ZeroOffset
#Adafruit_PCA9685の初期化
#address:PCA9685のI2C Channel 0x40
self.mPwm = Adafruit_PCA9685.PCA9685(address=0x40)
self.mPwm.set_pwm_freq(60)
"""位置セット"""
def SetPos(self,pos):
#pulse = 150~650 : 0 ~ 180deg
pulse = (650-150)*pos/180+150+self.m_ZeroOffset
self.mPwm.set_pwm(self.mChannel, 0, pulse)
def Cleanup(self):
#サーボを10degにセットしてから、インプットモードにしておく
self.SetPos(90)
time.sleep(1)
if __name__ == '__main__':
Servo = SG90_92R_Class(Channel=1, ZeroOffset=-10)
try:
while True:
Servo.SetPos(0)
time.sleep(1)
Servo.SetPos(90)
time.sleep(1)
except KeyboardInterrupt : #Ctl+C(signal 2)割り込みで、ループを終了
print("\nCtl+C")
except Exception as e:
print(str(e))
finally:
Servo.Cleanup()実際に動かしみました。
チャネルの番号かえただけなのですが、同じクラス(SG90_92R_Class)で動いたよ。
ちなみに、Raspberry Pi のOSは、公式のを使用しています。