目次
環境
Raspberry pi zero
エディターはラズパイに初めから付いている、Thonnyを使ってます。
前回まで
前回、サーボモータをハンダづけしたので、
今回はプログラムを書いて、実際に動かしたいと思います。
部品
- サーボモータ
- Raspberry Pi Zero
- ジャンプワイヤー
- モバイルバッテリ
準備
サーボモータ(SG92R)の確認
まず、使うサーボモータ(SG92R)のスペックを確認しましょう。
電圧 | 4.8V〜6.0V |
PMWサイクル | 20ms(50Hz) |
制御パルス | 0.5〜2.4ms |
制御角度 | -90度から90度(180度) |
トルク | 2.5kgf・cm |
になります。これらはプログラムを書くときに必要になります。
電圧はラズパイの2番ピンが5Vなので、それで大丈夫そうですね。
サーボモータとラズパイGPIOを繋ぐ
サーボモータ | 配線と機能 | ラズパイGPIO繋ぐ先 |
茶色 | マイナス線 GND | 6番ピン(GND) |
橙(赤?) | プラス線 | 2番ピン(5V) |
黄色 | 制御線 | 12番ピン *1kΩ抵抗を噛ませています。 |
サーボモータを回すプログラミングコード
実際のコードです。サーボモータを−90度、0度、90度、0度と繰り返すだけのシンプルなプログラムです。”servo.py”という名前にしました。
#サーボモータを動かす。
import RPi.GPIO as GPIO
from time import sleep
# ポート番号やサーボモータの情報を指定
SV_PORT = 18 #ラズパイGPIOピン12番
SV_FREQ = 50 #スペックでPWM信号サイクルは20ms"(50Hz)"とあったのでそれの50です。
#デューティ比で回転角度を設定
SV_DUTY_OFFSET = 0.025
SV_DUTY_RES = (2.4 -0.5) / 20 / 180 #スペックで制御パルス"0.5〜2.4ms"とあったので、それです。
#GPIOの設定
GPIO.setmode(GPIO.BCM)
GPIO.setup(SV_PORT, GPIO.OUT)
# PWMを利用する準備
servo = GPIO.PWM(SV_PORT, SV_FREQ)
servo.start(0)
# 角度を計算し変更する関数
def set_angle(angle):
degree = angle + 90
duty = (SV_DUTY_OFFSET + SV_DUTY_RES * degree) * 100
print("angle=", angle, "duty=", int(duty))
servo.ChangeFrequency(SV_FREQ)
servo.ChangeDutyCycle(duty) #デューティ比を変更
#実際に角度を変えてみる。制御角度が-90度から90までだったのでそれを参考にしました。
while True:
try:
set_angle(90)
sleep(1)
set_angle(0)
sleep(1)
set_angle(-90)
sleep(1)
set_angle(0)
sleep(1)
except KeyboardInterrupt:
break
GPIO.cleanup()
動作確認
(ラズパイ側)
上のプログラミングファイル(servo.py)をダブルクリック。
“Run”をクリック。
すると、下の動画のような動きをします。
動いた!
やったーー!