はじめに
以前のブログでRaspberry Pi Picoを使って「サーボモータを動かす」、「押しボタンスイッチの状態を取得する」やり方を書きました。
このブログでは、その2つを組み合わせてロボットハンドのグリッパーを動かすプログラムを考えてみたいと思います。
イメージとしては、押しボタンスイッチを押すとサーボモータが動き、グリッパーが開いたり閉じたりするような感じです。
グリッパーは、3Dプリンタでギア部とリンク機構をつくり、組み合わせました。
回路図
押しボタンスイッチの一方は、1kΩの抵抗をRapberry Pi PicoのGND(8ピン)とGP0(1ピン)に接続します。もう一方は、36ピンの3.3VOUTに接続します。
サーボモータは、信号線(黄色)、電源線(赤色)、接地線(黒色)の3線があり、それぞれ、GP2(4ピン)、3.3VOUT(36ピン)、GND(3ピン)に接続します。
サーボモータを動かすため、外部電源として、単三電池3本(4.5V)をVSYS(39ピン)とGND(38ピン)につなぎます。
![](https://tsunelab-programming.com/wp-content/uploads/2022/08/image-2.png)
ロボットハンドグリッパーの設計
ロボットハンドグリッパーは、3DCADソフトのfusion360を使いました。
個人用として、無償版をダウンロードして、ロボットハンドグリッパーのギア部分とリンク部分を作成しました。
![](https://tsunelab-programming.com/wp-content/uploads/2022/08/部材_モーター.jpg)
![](https://tsunelab-programming.com/wp-content/uploads/2022/08/部材_リンクギア-rotated.jpg)
![](https://tsunelab-programming.com/wp-content/uploads/2022/08/ロボットハンド完成JPG-edited-3-rotated.jpg)
プロジェクトのディレクトリ作成
作成するプロジェクトのディレクトリをつくります。
環境構築の部分で、pico-sdkが作成されているとして、次のようなディレクトリ構成とします。
myprjディレクトリ内にsg90.cファイルを作成して、このファイルにロボットハンドグリッパーのプログラムを書いていきます。
C:¥prog¥pico¥DL
┗¥pico-sdk
┗¥myprj
┗¥build
┗sg90.c
┗CMakeLists.txt
┗pico_sdk_import.cmake
SourceファイルとMakeファイルの作成
まず、ソースファイルとビルドファイルを準備します。
作成したプロジェクトディレクトリに移動します。(ここでは、myprjディレクトリ)
myprjディレクトリの中に実行するソースファイルsg90.cを作成します。
sg90.cには、次のようなコードを記述します。
ボタンスイッチの制御とサーボモータ制御のプログラムは、以前のブログに書いたものと同じです。
その2つのプログラムを組み合わせて、スイッチが押されるごとにモータを0度、ー70度の位置に交互に動かすというプログラムとスイッチが押され続けているときのみモータを動かすプログラムが作成できるように条件付きコンパイルの記述を付けて書いています。
続いて、myprjディレクトリの中に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というファイルをコピーして保存します。
ビルド
プロジェクトディレクトリmyprjにbuildディレクトリを作成し、カレントディレクトリとします。そこで、パス設定をしていなければ、次のコマンドを実行します。
C:\prog\pico\DL\myprj\build>setx PICO_SDK_PATH "..\..\pico-sdk"
実行ファイルを生成するため、cmakeを実行します。
C:\prog\pico\DL\myprj\build>cmake -G "NMake Makefiles" ..
C:\prog\pico\DL\myprj\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ファイルをドラッグアンドドロップで入れ込みます。これで、書き込みは終了です。
書き込みが終わった時点で、プログラムが実行されます。
ボタンを押したときにサーボモータがー70度の位置に動き、グリッパーが閉じるという動作になります。ボタンを離すとサーボモータが0度の初期位置に戻り、グリッパーが開きます。
まとめ
このブログでは、Raspberry Pi Picoで「サーボモータを動かす」、「押しボタンスイッチの状態を取得する」という2つの制御を組み合わせてロボットハンドグリッパーの開閉のプログラムをつくってみました。
押しボタンスイッチの制御は状態遷移設計にしているため、スイッチの状態に応じたモータの動作が容易に処理できます。
モータの動作制御をボタンではなく、超音波センサーにすると自動的に開閉動作をすることもできます。次の動画は実験的に超音波センサーをつないで、割りばしを上から落としてキャッチできるかを試したときのものです。
コメント