はじめに
Raspberry Pi Picoを使ってサーボモータSG90を動かしてみたいと思います。
動作としては、サーボモータの初期位置を0[deg]として、そこから-70[deg]の位置まで動かすプログラムを作成します。使用するプログラム言語は、C言語です。
Raspberry Pi Picoの開発環境構築や自作のプロジェクトのプログラムをRaspberry Pi Picoに書き込む詳細は、下記の記事にまとめています。
回路図
サーボモータSG90には、3本の配線があります。
赤線が電源、黒線が接地、黄線がPWM信号線になります。
電源は、3.3VOUT(36ピン)、接地は任意のGNDピン(ここでは、3ピン)、PWM信号をGP2(4ピン)としています。
プロジェクトのディレクトリ作成
まず、作成するプロジェクトのディレクトリをつくっていきます。
環境構築の部分で、pico-sdkが作成されているとして、次のようなディレクトリ構成とします。
servo_sg90ディレクトリ内にsg90.cファイルを作成して、サーボモータを動かすプログラムをこのファイルに書いていきます。
C:¥prog¥pico¥DL
┗¥pico-sdk
┗¥servo_sg90
┗¥build
┗sg90.c
┗CMakeLists.txt
┗pico_sdk_import.cmake
SourceファイルとMakeファイルの作成
次にソースファイルとビルドファイルを準備します。
作成したプロジェクトディレクトリに移動します。(ここでは、servo_sg90ディレクトリ)
servo_sg90ディレクトリの中に実行するソースファイルsg90.cを作成します。
sg90.cには、次のようなコードを記述します。
サーボモータの周期は50[Hz](20[ms])としてデューティーを0.5[ms]から2.4[ms]の間で変えます。
回転したい角度をR[deg]としたときに、デューティーT[ms]は
T = R × 1.9 / 180 + 1.45
で計算されます。0[deg]の場合は、1.45[ms]、-70[deg]の場合は、0.71[ms]となります。
続いて、servo_sg90ディレクトリの中にCMakeLists.txtを作成します。
CMakeLists.txtには次のように記述しておきます。
cmake_minimum_required(VERSION 3.13)
include(pico_sdk_import.cmake)
project(sg90_project C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
pico_sdk_init()
add_executable(sg90
sg90.c
)
# pull in common dependencies and additional pwm hardware support
target_link_libraries(sg90 pico_stdlib hardware_pwm)
pico_enable_stdio_usb(sg90 1)
pico_enable_stdio_uart(sg90 1)
pico_add_extra_outputs(sg90)
target_link_libraries(sg90 pico_stdlib)
さらに、pico-sdk¥externalディレクトリの中にあるpico_sdk_import.cmakeというファイルをコピーして保存します。
ビルド
プロジェクトディレクトリservo_sg90にbuildディレクトリを作成し、カレントディレクトリとします。そこで、パス設定をしていなければ、次のコマンドを実行します。
C:\prog\pico\DL\servo_sg90\build>setx PICO_SDK_PATH "..\..\pico-sdk"
実行ファイルを生成するため、cmakeを実行します。
C:\prog\pico\DL\servo_sg90\build>cmake -G "NMake Makefiles" ..
C:\prog\pico\DL\servo_sg90\build>nmake
nmakeを実行するとビルドが開始され、正常に終了するとbuildディレクトリの中にsg90.uf2という実行ファイルが作成されます。
このファイルをRaspberry Pi Picoに書き込むことで、作成したプログラムが実行されます。
実行
buildディレクトリを確認するとsg90.uf2ファイルが生成されています。
このファイルをターゲットボードに書き込みます。
Raspberry Pi Picoのリセットボタンを押しながらRaspberry Pi PicoにつないだUSBケーブルをPCに接続します。
この環境では、DドライブとしてRPI-RP2が認識されたので、このDドライブ内にsg90.uf2ファイルをドラッグアンドドロップで入れ込みます。これで、書き込みは終了です。
書き込みが終わった時点で、プログラムが実行されます。
プログラム開始時に初期位置0[deg]となり、1秒後に-70[deg]動作すれば、プログラムが正しく動作しているとなります。
PCと接続しているUSBケーブルを抜き差しすると0[deg]位置から-70[deg]の位置まで動作します。
まとめ
このブログでは、Raspberry Pi Picoを使ってサーボモータSG90を動かしてみました。
PWM信号を使ってサーボモータの回転角を変えることができます。今回のプログラムでは、その値を定義値としていますが、ユーザーからの入力によってその角度を計算しPWM信号に入力することもできると思います。
コメント