前回は、Lチカの応用として「あっち向いてホイ」ゲームをつくったね。家族や友達と遊んでもらえたかな? でも、もしかしたらLEDの光だけでは物足りないと感じた人もいるかもしれない。そこで、今回と次回で、実際に頭が動く「あっち向いてホイ」をつくるぞ! 今回は、「サーボモーター」を使って人形の頭を動かしてみよう。
一般的にモーターといえば、ミニ四駆や工作でよく使う「DCモーター」を想像する人が多いだろう。電気を流すと、磁石とコイルの働きによって軸がグルグルと回転し、タイヤやプロペラを動かすモーターだね。それに対して、今回使うのは「サーボモーター」と呼ばれるもの。DCモーターにセンサーや制御基板などを組み合わせて、軸が回転する角度を正確に指定できるようにしたものだ。これを使うと、ロボットの腕や脚、首など、関節の動きを細かく制御することができるんだ。
用意するもの
●スタディーノ基板
●mini USBケーブル
●電池ボックス&単3形アルカリ乾電池×3本
●サーボモーター(写真は Tower pro デジタルマイクロサーボ SG-90)
●人形の頭部分(好きな形を紙や粘土でつくろう。写真は紙粘土でつくったゾ)
●サーボモーターは、大きさやトルク、回転角度など、いろいろな種類があるけれど、「マイクロサーボ」というタイプなら大丈夫だろう。例えばSG-90は、値段も500円以下で安く入手しやすい。
コネクターも何種類かあるけれど、黄色、赤色、茶色の順番でリード線がピンソケットに配線されている「JRタイプ」が多い。SG-90もそうだ。
電池ボックスとサーボーモーターをスタディーノにつなげよう。
はじめに電池ボックスをスタディーノにつなげよう。ケーブルを電源コネクターに接続してね。このとき、電池ボックスのスイッチがOFFになっていることを接続前に確認しよう。もしスイッチがONだと、サーボモーターをつないだ瞬間に回転することがある。サーボモーターの力は意外に強く、はさまれるとケガをすることもあるので気を付けよう。
次に、サーボモーターのケーブルをスタディーノのD9に差し込もう。SG-90なら、黄色の線が内側になるように差し込んでね。まだ電池ボックスのスイッチはONにしないように。
サーボモーターは、指定した角度に正確に向けることができるけど、そのためには、あらかじめ基準となる向きを教えてあげる必要がある。その作業のことを校正と呼ぶ(トリム調整、トリミングとも)。スタディーノをUSBケーブルでパソコンに接続し(本体の赤LEDが点灯することを確認)、ブロックプログラミング環境を起動、[編集]メニューの[モーター校正]をクリック(左)しよう。[モーター校正]はテストモードでは表示されないので、もしテストモードに入っていたら[実行]メニューの[テストモード終了]でテストモードを抜けてからメニューを選択しよう。モーター校正のウィンドウ(右)が開いたらOK。
④の写真右のモーター校正のウィンドウを無事開けたら、電池ボックスのスイッチをONにしよう。すると、サーボモーターの軸が中立位置(90°)に回転する(最初から90°なら回らない)。このとき、「ジー」という音がすることもあるけど、それは正常だ。故障の原因になるので、スイッチがONのときは絶対にモーターの軸を手で回してはいけない。
D9の数字の右にある▲(プラス)と▼(マイナス)のボタンをクリックすると、サーボモーターの軸が回転する。下の写真の方向から見ると、▲(プラス)は反時計回り、▼(マイナス)は時計回りに動くので、軸が真っ直ぐになるように調整する。ボタンを押してもモーターが回らないときは、スイッチや電源コネクター、電池の残量を確認しよう。
調整し終わったらOKボタンで校正終了だ。サーボモーターを取り替えたり、使っている間にずれることもあるので、そのときはもう一度校正しよう。
それでは、サーボモーターがどのように動くのか確認してみよう。このとき、D9にサーボモーターをつなぐことは最初から設定済みなので、入出力設定は必要ない。
ブロックプログラミング環境で、こんなプログラムを組み立ててみよう。できたら、[実行]→[テストモード開始]でテストモードにして、緑の旗をクリックして実行だ。
このサーボモーターが動く範囲は、0°から180°だ。サーボモーターを写真のように上から見て、6のプログラムを実行すると写真の矢印のように動く。
このプログラムでは、まず右端の0°まで回ってから、左端の180°まで回り、最後に中央の90°で止まったはずだ。指定できる角度はこの範囲内で、それ以外の数値は指定できない(つまり、DCモーターのようにぐるっと一周することはできない)。また、角度は「何度回すか」ではなく、サーボモーターを止める位置であることに注意しよう。回らないときは電池ボックスのスイッチがONになっているか確認しよう。
では、試しに、[○秒待つ]で指定する秒数を0.5秒にするとどうなるかな。たぶん、指定した角度まで完全には回りきらなかったはずだ。このように、サーボモーターの回転には時間がかかるので、[○秒待つ]で指定した秒数が、回転に必要な時間より短い場合は途中までしか回らない。画面の中だけだったScratchのプログラミングでは、処理にかかる時間をあまり気にすることがなかったけど、サーボモーターのような現実のものを動かす場合は、このような制限があるので注意しよう。
他にも角度を変えたり、ブロックを追加したりして、いろいろ試してみよう。