Scratch 2はPWM出力をサポートしていないので、サーボモーターの制御はScratch 1.4でしかできないと思っていましたが、別途、Scratch2GPIOというものをインストールすれば、Scratch 2でもサーボモーターが制御できることを最近、知りました。早速、インストールしてみたので紹介します。
今回使った部品
- Raspberry Pi 3 Model B × 1
- 40Pinフラットリボンケーブル
- 40Pin T型GPIO拡張ボード
- ブレットボード × 1
- サーボモーター sg-90 × 1
- 電源アダプター5V 2.5A × 1
- microUSB用変換基板 × 1
- ジャンプワイヤー(オス/オス) × 5
実体配線図
サーボモーターSG-90の電源は、Raspberry Piの電源アダプターとは別の電源アダプターを用意し、microUSB用変換基板を介して供給します。
・モーター端子(茶色) → GND
・microUSB用変換基板(GND) → GND
・モーター端子(赤色) → microUSB用変換基板(VCC)
・モーター端子(橙色) → GPIO18 ( =物理pin番号12 )
Scratch2GPIOのインストール
OSが”RECOMMENDED SOFTWARE”なしのRASPBIAN STRETCH WITH DESKTOPの場合、Scratch2GPIOをインストールする前にScratch 2をインストールしておかなければならないので、タスクバー左端のメニューアイコンから「設定」→「Recommended Software」をクリックします。
「Recommended Software」画面が現れて、パッケージデータのダウンロードが終わったら、左ペインの「Programming」をクリックします。右ペインの「Scratch 2」のチェックボックスにチェックを入れて「OK」ボタンをクリックします。
インストールが完了したら、「OK」ボタンをクリックして閉じます。
LXTerminalを起動し、コマンド”wget”でScratch2GPIOのインストーラーをダウンロードします。
wget https://git.io/vQsDn -O isgh8dev.sh
プロンプトが返ってきたら、、インストーラーを実行します。
sudo bash isgh8dev.sh
インストール中の画面には、多くの制御ライブラリとサンプルプログラムをインストールしている過程が表示されます。インストールされるライブラリはScratchGPIOのときより増えているようです。
スタートメニューにScratch2GPIOを登録
タスクバー左端のメニューアイコンから「設定」→「Main Menu Editor」をクリックして開きます。
開いた「Main Menu Editor」画面の左ペインで「プログラミング」を選択し、右ペインの「新しいアイテム」ボタンをクリックします。
「Launcher Properties」画面が開きますが、先にデスクトップの「Scratch2GPIO8devplus」を右クリックして出てくるメニューから「ファイルのプロパティ」を選択します。
「ファイルのプロパティ」画面の項目「名前:」の入力欄の文字列を全て選択し、右クリックして出てくるメニューから「コピー」を選択します。
「Launcher Properties」画面に戻り、項目「Name:」の入力欄で右クリックして出てくるメニューから「貼り付け」を選択します。
「ファイルのプロパティ」画面に戻り、タブ「デスクトップエントリ」の項目「コマンド:」の入力欄の文字列を全て選択し、右クリックして出てくるメニューから「コピー」を選択します。
「Launcher Properties」画面に戻り、項目「Command:」の入力欄で右クリックして出てくるメニューから「貼り付け」を選択します。
「Launcher Properties」画面の「OK」ボタンをクリックして閉じます。
「Main Menu Editor」画面の「OK」ボタンをクリックして閉じます。
タスクバー左端のメニューアイコンから「プログラミング」→「Scratch2GPIO 8devplus」を右クリックして出てくるメニューから「Properties」を選択します。
開いた「ファイルのプロパティ」画面左上にあるアイコンをクリックします。
「ファイルの選択」画面が現れるので、”Scratch2″を選択して「OK」ボタンをクリックします。
「ファイルのプロパティ」画面のアイコンがScratchの猫になっているのを確認し、「OK」ボタンをクリックして閉じます。
拡張機能Scratch2GPIOを追加する
タスクバー左端のメニューアイコンから「プログラミング」→「Scratch2GPIO 8devplus」をクリックして開きます。
起動した「Scratch2GPIO 8devplus」の地球儀アイコンをクリックして現れるプルダウンメニューから、日本語を選択します。
ブロックパレットのカテゴリ「その他」を選択して「拡張機能を追加」ボタンをクリックします。
「Extension Library」画面が現れるので、”Pi GPIO”を選択して「OK」ボタンをクリックします。
Scratch2GPIOでサーボモーターを動かしてみる
ブロックパレットのブロック「set ( ) to ( )」の左側入力欄に”Servo12”を入力します。Scratch2GPIOでは、接続先をいつものGPIO番号ではなく、基板上に並んだ順の物理pin番号で指定します。
ブロック「set ( ) to ( )」の右側入力欄に”0”を入力します。
できたブロック「set (Servo12) to (0)」をブロックパレットに置いたままでクリックすると、ステージエリアの緑旗が一瞬光って、サーボモーターが回転しました。
ブロック「set (Servo12) to (0)」をスクリプトエリアに引き出します。
ブロックパレットのカテゴリ「データ」を選択して「変数を作る」ボタンをクリックします。
現れた「新しい変数」画面の入力欄に”angle”と入力して「OK」ボタンをクリックします。
ステージエリアに変数モニター「angle ( 0 ) 」が現れるので、右クリックして出るメニューから「スライダー」をクリックします。
もう一度「angle ( 0 ) 」を右クリックして出るメニューから今度は「スライダーの最小値と最大値を設定」を選択します。
現れた「スライダーの範囲」画面の項目「最小値」の入力欄を”-100”で上書きして「OK」ボタンをクリックします。
ブロック「angle」をブロック「set (Servo12) to (0)」の”(0)”に当て嵌めます。
ブロックパレットのカテゴリ「制御」を選択してブロック「ずっと」でブロック「set (Servo12) to (angle)」を抱え込みます。
ブロック「ずっと」をクリックするとサーボモーターが時計方向に90°回転しました。
ステージエリアの変数モニターのスライダーをマウスで左右に動かすとその上の数値が-100~100の間で変化し、それに連れてサーボモーターが回転します。
GPIO出力のリセット
ブロックパレットのカテゴリ「その他」のブロック「set gpio ( ) to (output high ▼)」の”( )”内に”12″を入力します。
ブロック「set gpio (12) to (output high ▼)」の”▼”をクリックして出てくるメニューから”input”を選択します。
できたブロック「set gpio (12) to (output high ▼)」をブロックパレットに置いたままでクリックすると、ステージエリアの緑旗が一瞬光ります。
念の為、このコマンドでGPIOの設定状況を確認します
gpio readall
GPIO18(=物理pin番号12)の設定が既定の”IN”に戻っていることが確認できました。