Raspberry Pi Picoを使ってサーボモータSG90を動かす

Raspberry Pi Pico

はじめに

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信号に入力することもできると思います。

コメント

タイトルとURLをコピーしました