サーボモータを活用してオリジナル「自動給餌器」を作ろう!:アイデア・ハック!! Arduinoで遊ぼう(11)(2/3 ページ)
頭の中のアイデアを「Arduino(アルドゥイーノ)」で実現!! 筆者と一緒にモノづくりの喜びや難しさを体験・体感してみよう。連載第11回では、サーボモータを用いた「自動給餌器」を作る。これさえあれば、お留守番しているペットの食事を心配せずに思う存分残業できるぞ!!
まずは、サーボモータだけを動かそう!
部品の配置図(画像5)で説明したように、サーボモータを動かすだけなら、乾電池4本とサーボモータだけでOKです。
まずは、Arduinoの統合開発環境「Arduino IDE」で、サーボモータを動かすスケッチ(プログラム)を作成し、動作テストをしてみましょう(画像7、スケッチ1)。
#include <Servo.h> //----------------------- // 定数の定義 //----------------------- Servo myservo; // サーボオブジェクトを宣言 int pos; // サーボモータのシャフト回転位置 int servopin = 9; // サーボモータの信号線 接続ピン void setup() { pinMode(servopin, OUTPUT); myservo.attach(servopin); // 9番ピンをサーボオブジェクトに接続 myservo.write(0); // サーボモータのシャフトを0角度に指定 } void loop() { for(pos = 0; pos <= 180; pos += 1) // 0〜180度まで 1度ずつ { myservo.write(pos); // シャフトの角度を指示 delay(50); // 50ms待機 } for(pos = 180; pos>=0; pos-=1) // 180〜0度まで −1度ずつ { myservo.write(pos); // シャフトの角度を指示 delay(50); // 50ms待機 } delay(3000); // 0度で3秒待機 }
Arduinoには、サーボモータを扱うためのライブラリが用意されています。1行目で、ライブラリ(Servo.h)を読み込んでいます。このライブラリのおかげで、難しいことを考えずに、サーボの角度を指定するだけで、モータを動かすことができます。
6行目で、Servo型オブジェクトのインスタンスを作成しています。Arduino公式サイトのライブラリのコメントによると最大で8個のサーボまで扱えるようです。7行目で、サーボモータのシャフトの角度を指定するための変数を宣言し、サーボモーターの信号線に接続するピンとして9番を宣言しています(8行目)。
「servopin」のピンモードを出力(OUTPUT)に設定し、宣言したサーボオブジェクトに接続します(12〜13行目)。これでサーボモータを使う準備は完了です。
「write()」で引数に0〜180の値を入れて、モータを動かします。ここでは、デフォルトの位置として、サーボモータを0度に設定しました(14行目)。
17行目の「loop()」内でサーボモータを動かしています。まずは、0〜180度まで1度刻みでモータを動かします(19〜23行目)。そして、180〜0度まで逆に戻します(24〜28行目)。29行目で、0度の状態をキープし、3秒間停止させています。
このスケッチ1を実行した様子が動画2です。
loop()が一通り終わって、サーボモータが「myservo.write(0)」で3秒停止しているときに、電源をカットし、サーボモータのスタート地点としています。その状態でサーボホーンを取り付けたのが動画2です。サーボホーンの初期位置がずれていると、意図した角度にモータが動きません。
スケッチ1を実行して、「やったぁ〜!! ばっちり動きました!」と言いたいところですが……。どう見ても、サーボモータの最終地点が180度ではありません。動画2では分かりにくいのですが、180度よりも広い角度まで動いています(画像8)。
調べたところ、使用しているサーボモータ(GWS Micro2BB)は、動作角が235度程度あるようです。どうやらwrite()は、動作角の235度を180分割して動かしているみたいです。このままでは、自分が意図した角度にサーボモータを動かすことができません。この状態のまま、仮にヒューマノイドロボットに適用してしまうと、まともに歩くことができないロボットが完成してしまいます。それはよろしくありません。
とはいうものの、今回は厳密な位置を指定したいわけではないので「まぁ、いっかー」としました。筆者がちゃんとした電子工作ができるようになるまでには、まだまだ勉強が必要です。
Copyright © ITmedia, Inc. All Rights Reserved.