Raspberry PiでサーボモーターSG90をPWM制御する方法

  • URLをコピーしました!

※本ページはアフィリエイト広告を利用しています

今回はホビー用途でも手軽に使えるサーボモーターSG90をRaspberry Piから制御する方法について解説したいと思います。

目次

Raspberry Pi(ラズベリーパイ)とは

Raspberry Pi(ラズベリーパイ)はイギリスのラズベリーパイ財団が教育用に開発したボードコンピュータです。

\ポイント最大9倍!/
楽天市場
\ポイント5%還元!/
Yahooショッピング

最新のRaspberry Pi 4では、ARMアーキテクチャを採用したBroadcom製の高性能SoC BCM2711を搭載しており、1.5GHzで動作するARM Cortex-A72が4コアとマイコンボードの中では非常に高速な処理能力を持っています。また、ユーザーがアクセス可能な40ピンのGPIOも搭載しており、外部ハードウェアを制御することが可能です。

詳細なスペック等は以下の記事で解説していますので、あわせてご覧ください。

ソーテック社
¥3,058 (2024/04/22 14:15時点 | Amazon調べ)
\ポイント最大9倍!/
楽天市場
\ポイント5%還元!/
Yahooショッピング

サーボモータ SG90

今回使用するサーボモーターはSG90というホビー用途などで良く用いられる小型のモーターです。

ARCELI 飛行機 9g SG90ミニサーボアクセサリー450飛行機カーボート(4pcsパック)

私は今回アマゾンで4個パックのものを購入しました。モータを固定する部分のプラスチックの部品が3種類ついているものを選びました。

下記の写真のようにサーボモーターはからは3本の配線が出ています。

赤:電源、茶:GND、オレンジ:制御信号となります。

以下のようにRaspberry Pi 4のGPIOに接続しました。赤と茶はRaspberry Pi 4の5VとGND、オレンジはGPIO18のPWMポート(ソースコードでGPIO18を指定しているためです)へ接続します。

なお今回はサーボモーターの動作テストで負荷無しで動かすため、電源をRaspberry Piから取りました。本来はRaspberry Piからは少ない電流しか流せないため、モーターの負荷を付けたり、複数のモーターを駆動する場合は、別途モーター駆動用電源回路を用意する必要があります。

PWMとは

Raspberry PiからPWM信号を出力する方法については以下の記事で解説しています。今回もRaspberry PiのGPIO制御ライブラリ、pigpioを使っています。

SG90仕様

SG90の仕様は以下となります。1周期20msのPWM信号で、そのうちのデューティー比を変更することでサーボモーターの位置を制御します。
PWMのON時間が0.5msで-90度、2.4msで90度の位置に制御できます。

出典:秋月電子通商

PWMのデューティー比

デューティー比の計算は「デューティー比=パルス幅/周期」となります。
ON時間0.5msはデューティ比2.5%、
ON時間2.4msはデューティ比12%です。

以下のようにPythonのコード上でデューティー比を指示します。

duty1 = 2.5 #デューティー比を%で指定 0度はduty2.5%
duty2 = 12 #デューティー比を%で指定 180度はduty12%

cnv_dutycycle1 = int((duty1 * 1000000 / 100))
cnv_dutycycle2 = int((duty2 * 1000000 / 100))

作成したソースコード

SG90を制御するプログラムをPythonで以下のように記述しました。
サーボモーターを-90度から+90度の位置まで駆動します。

import pigpio
import time

pi = pigpio.pi()

#PWMパラメータ
pwm_pin1 = 18 #PWM出力ピンを指定
duty1 = 2.5 #デューティー比を%で指定 0度はduty2.5%
duty2 = 12 #デューティー比を%で指定 180度はduty12%
freq = 50 #PWM周波数をHzで指定 SG90は1周期20ms(50Hz)

#パラメータ変換
cnv_dutycycle1 = int((duty1 * 1000000 / 100))
cnv_dutycycle2 = int((duty2 * 1000000 / 100))

#PWMを出力
pi.hardware_PWM(pwm_pin1, freq, cnv_dutycycle1) #サーボを0度の位置に駆動

time.sleep(3) #3秒停止する

pi.hardware_PWM(pwm_pin1, freq, cnv_dutycycle2) #サーボを180度の位置に駆動

実行結果

プログラムを実行した結果、以下のように正しく駆動することができました。

動画では先ほどのプログラムを2回実行しています。

\ Pythonを自宅で好きな時に学べる! /

まとめ

今回は安価で手軽に使えるサーボモーターSG90をRaspberry Piで制御する方法を解説しました。サーボを使うことで「ソフトウェアからモノを動かす」ということができるようになりますので、ぜひ活用してみてください。

当サイトでは今回紹介したようなサーボモーターを関節に12個搭載したスパイダーロボットの製作も行っています。

また、Raspberry Piでのハードウェア制御をさらに深く学びたい方にはUdemyの以下の講座がおすすめです。

Raspberry Pi Picoで作る!USBショートカットキーデバイス。Pythonで手軽に電子工作しよう! icon

また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。

スキルアップや副業にぜひ活用してみてください。

スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。

講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。


それでは、また次の記事でお会いしましょう。

著:山内 直, 著:大久保 竣介, 著:森本 梨聖, 監修:太田 昌文
¥2,618 (2024/04/22 16:32時点 | Amazon調べ)
\ポイント最大9倍!/
楽天市場
\ポイント5%還元!/
Yahooショッピング

\ Raspberry Piを使ったアプリ開発を学びたい人には自宅で学べるUdemyがおすすめ! /

講座単位で購入できます!

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

コメント

コメントする

CAPTCHA


目次