今回はホビー用途でも手軽に使えるサーボモーターSG90をRaspberry Piから制御する方法について解説したいと思います。
Raspberry Pi(ラズベリーパイ)とは
Raspberry Pi 5は、Raspberry Pi財団が開発した最新のシングルボードコンピュータで、従来モデルよりも大幅な性能向上を実現しています。
搭載される64ビットクアッドコアプロセッサは、クロック速度が最大2.4GHzに達し、前世代よりも処理速度が格段に向上しました。また、4GBまたは8GBのRAMを選択できるため、教育用途からリソースを必要とするプロジェクトまで幅広く対応可能です。
グラフィックス性能も強化され、4K解像度でのデュアルディスプレイ出力をサポートしています。さらに、新たにPCIeインターフェイスが追加され、外部ストレージや高速デバイスとの接続が容易になりました。Wi-Fi 6やBluetooth 5.2の導入により、無線通信も高速かつ安定。
教育、IoT、AI開発、メディア再生など、多様な用途に対応するRaspberry Pi 5は、初心者から上級者まで幅広いユーザーにとって魅力的な選択肢となっています。
Raspberry Piでできることについては以下の記事で解説していますので、あわせてご覧ください。
サーボモータ 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で手軽に電子工作しよう!また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。
スキルアップや副業にぜひ活用してみてください。
スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。
講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。
それでは、また次の記事でお会いしましょう。
\ Raspberry Piを使ったアプリ開発を学びたい人には自宅で学べるUdemyがおすすめ! /
講座単位で購入できます!
コメント