【 第23回 】Scratch 1.4のサーボドライバーでサーボモーターをフルスイング!?

0
1043

前回【第22回】の記事でも触れたサーボモーターの別電源の必要性が書かれたページには他にもたった4行ですが、重要な情報が書かれていました。Scratch 1.4のブロック「▼を送る」には、サーボモーター駆動用の書式があるらしいのです。今回はこれを使ってスクリプトを書き直して動作を確認したいと思います。

今回使った部品

  • Raspberry Pi 3 Model B × 1
  • 40Pinフラットリボンケーブル
  • 40Pin T型GPIO拡張ボード
  • ブレットボード × 1
  • サーボモーター sg-90 × 2
  • 電源アダプター5V 2.5A × 1
  • microUSB用変換基板 × 1
  • ジャンプワイヤー(オス/オス) × 8
デジタル・マイクロサーボ SG90
梅本合同会社
売り上げランキング: 11,230
サンハヤト USB用変換基板 CK-37
サンハヤト
売り上げランキング: 36,117

実体配線図

サーボモーターSG-90の電源は、Raspberry Piの電源アダプターとは別の電源アダプターを用意し、microUSB用変換基板を介して供給します。

・左側モーター端子(茶色) → GND

・右側モーター端子(茶色) → GND

・microUSB用変換基板(GND) → GND

・左側モーター端子(赤色) → microUSB用変換基板(VCC)

・右側モーター端子(赤色) → microUSB用変換基板(VCC)

・左側モーター端子(橙色) → GPIO12

・右側モーター端子(橙色) → GPIO13

新しい変数「L」と「R」を作る

「Scratch 1.4」を起動し、カテゴリー「変数」の「新しい変数を作る」ボタンをクリックします。

現れた「変数名?」画面の入力蘭に”L”と入力して「OK」ボタンをクリックします。

ブロックパレットに新しいブロックが5つできると共に、画面右上のステージにも変数モニター「L ( 0 ) 」が現れるので、右クリックして出るメニューから「スライダー」をクリックします。

もう一度、「L ( 0 ) 」を右クリックすると、メニューに「スライダーの最小値と最大値を設定」ができているので、これをクリックします。

現れた「スライダの範囲:」画面の「最小値:」に”-100″と入力して「OK」ボタンをクリックします

もう一度、カテゴリー「変数」の「新しい変数を作る」ボタンをクリックします。

現れた「変数名?」画面の入力蘭に”R”と入力して「OK」ボタンをクリックします。

画面右上のステージに変数モニター「R ( 0 ) 」が現れるので、右クリックして出るメニューから「スライダー」をクリックします。

もう一度、「L ( 0 ) 」を右クリックすると、メニューに「スライダーの最小値と最大値を設定」ができているので、これをクリックします。

現れた「スライダの範囲:」画面の「最小値:」に”-100″と入力して「OK」ボタンをクリックします

カテゴリー「変数」の「L▼を0にする」をスクリプトエリアに引き出します。

カテゴリー「変数」の「L▼を0にする」の”▼”をクリックして出てくる”R”を選択します。

カテゴリー「変数」の「R▼を0にする」をスクリプトエリアの「L▼を0にする」の下に繋げます。

サーボドライバーの出力を変数「L」と「R」に結び付ける

カテゴリー「演算」のブロック「 ( ハロー ) と ( ワールド ) 」をスクリプトエリアに引き出します。

ブロック「 ( ハロー ) と ( ワールド ) 」の”ハロー”を”servo12%”で上書きします。

できたブロック「 ( servo12% ) と ( ワールド ) 」を右クリックして複製します。

複製したブロック「 ( servo12% ) と ( ワールド ) 」の”servo12%”を”servo13%”で上書きします。

カテゴリー「制御」のブロック「L」をスクリプトエリアのブロック「( servo12% )と( ワールド )」の”( ワールド )”に当て嵌めます。

カテゴリー「制御」のブロック「R」をスクリプトエリアのブロック「( servo13% )と( ワールド )」の”( ワールド )”に当て嵌めます。

カテゴリー「制御」のブロック「▼を送る」をスクリプトエリアに引き出します。

スクリプトエリアのブロック「( servo12% )と( L )」をブロック「▼を送る」の”▼”に当て嵌めます。

カテゴリー「制御」のブロック「▼を送る」をスクリプトエリアに引き出します。

スクリプトエリアのブロック「( servo13% )と( R )」をブロック「▼を送る」の”▼”に当て嵌めます。

できたブロック「{ ( servo12% ) と ( L ) }を送る」と「{ ( servo13% ) と ( R ) }を送る」を上下に繋ぎます。

サーボドライバーの繰返しスクリプトを構成する

カテゴリー「変数」のブロック「L▼を1ずつ変える」をブロック「{ ( servo13% ) と ( R ) }を送る」の下に繋げます。

カテゴリー「変数」のブロック「L▼を1ずつ変える」の”▼”をクリックして”R”を選択します。

カテゴリー「変数」のブロック「R▼を1ずつ変える」をブロック「L▼を1ずつ変える」の下に繋げます。

カテゴリー「制御」のブロック「1秒待つ」をブロック「R▼を1ずつ変える」の下に繋げます。

できたサーボドライバーのスクリプトをカテゴリー「制御」のブロック「10回繰り返す」で包み込みます。

スクリプトエリアのブロック「10回繰り返す」の”10″を”50″で上書きします。

スクリプトエリアのブロック「L▼を1ずつ変える」の”1″を”4″で上書きします。

スクリプトエリアのブロック「R▼を1ずつ変える」の”1″を”- (マイナス) 4″で上書きします。

スクリプトエリアのブロック「1秒待つ」の”1″を”0.1″で上書きします。

できたブロック「50回繰り返す」を右クリックして複製します。

2つのブロック「50回繰り返す」を上下に繋ぎます。

下側のブロック「50回繰り返す」に包み込まれたブロック「L▼を4ずつ変える」の”4″を”- (マイナス) 4″で上書きします。

下側のブロック「50回繰り返す」に包み込まれたブロック「R▼を-4ずつ変える」の”-4″を”4″で上書きします。

変数「L」と「R」の初期値を設定し、スクリプトを完成させる

できたスクリプトを上下に繋げます。

スクリプトエリアの1番上のブロック「L▼を0にする」の”0″を”- (マイナス) 100″で上書きします。

その下のブロック「R▼を0にする」の”0″を”100″で上書きします。

カテゴリー「制御」のブロック「▼を送る」の”▼”クリックして出るメニューから「新規/編集」を選択します。

現れた「メッセージの名前:」画面の入力蘭に”gpioserveron”と入力して「OK」ボタンをクリックします。

できたブロック「gpioserveron▼を送る」をスクリプトの1番上に載せます。

カテゴリー「制御」のブロック「gpioserveron▼を送る」の”▼”クリックして出るメニューから「新規/編集」を選択します。

現れた「メッセージの名前:」画面の入力蘭に”gpioserveroff”と入力して「OK」ボタンをクリックします。

できたブロック「gpioserveroff▼を送る」をスクリプトの1番下に繋ぎます。

カテゴリー「制御」のブロック「すべてを止める赤丸?」をスクリプトの1番下に繋ぎます。

カテゴリー「制御」のブロック「(緑の旗)がクリックされたとき」をスクリプトの1番上に載せます。

スクリプトを実行する

ステージ右上の緑の旗をクリックしてスクリプトを実行します。

ご覧の通り、一旦、初期位置までピクっと回ってからフルスイングするのですが、回転角は90°のようです。電源もRaspberry Piとは別にしているのに、サーボドライバーの仕様で仕方がないのでしょうか?

スクリプトを保存する

メニューバーの「ファイル」→「名前をつけて保存」をクリックします。

画面上中央に選択したフォルダが表示されていることを確認し、「新しいファイル名」の入力蘭にファイル名を入力して「OK」ボタンをクリックします。