【自動運転#21】サーボモータを動かしてみた【ソフトウェアPart10】

目次

環境

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繋ぐ先
茶色マイナス線 GND6番ピン(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”をクリック。

すると、下の動画のような動きをします。

動いた!

やったーー!

使った部品

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次