Arduino(Japanino) で DCモータを制御してみる

今回はDC(直流)モータを扱ってみようと思い、カホパーツセンターに行ったところ、タミヤの「ミニバイク工作セット」なるものを見つけました。
DCモータも付いてるのでこれを動かしてみようということで即購入。
モータドライバには「TA7291P」を購入しました。

ギヤはありません。モータとタイヤをつなぐのは輪ゴム。工作な感じが出てますw

電子工作でモータを使うのは初めてだったので、書籍「Prototyping Lab」を見ながら回路を組んでみました。

今回Arduinoではなく、互換機のJapaninoを使った理由は、電池で動くので電源コードを引きずらなくて済むからということです。
同じく電池で動くFIOでも試してみたのですが、電力不足か何かでタイヤを回すまでに至りませんでした。(モータだけなら回るのですが。)

Japaninoを使うことによって書籍のサンプル回路と変わる点があります。(書籍ではArduino Duemilanoveが使われています。)
モータドライバ「TA7291P」の7ピンと繋ぐのがJapaninoでは5Vではなく3V3に、同じく8ピンと繋ぐのがVinではなく5Vに変更すれば動きました。

まるごと一まとめに

下の動画では、サイン波で徐々に前に進んだり後ろに進んだりするプログラムをJapaninoにアップロードしたものを動かしています。
荷物が重くてすぐ倒れるので後半はハンドルを持って支えています。補助輪がほしい!

最後に今回のArduinoのスケッチを載せておきます。

// モータドライバのIN1、IN2に接続したピンの番号
const int in1Pin = 9;
const int in2Pin = 10;
//サイン波の角度
int degree = 0;

// モータを回転させる
void set_move(double value) {

  if(value > 10){ //順方向
    analogWrite(in1Pin, value);
    analogWrite(in2Pin, 0);

  }else if(value < -10){ //逆方向
    analogWrite(in1Pin, 0);
    analogWrite(in2Pin, abs(value));

  }else{ //ブレーキを使用しないで停止
    digitalWrite(in1Pin, LOW);
    digitalWrite(in2Pin, LOW);
  }
}

void setup() {
  // IN1、IN2、PWMの各ピンのモードを出力にセット
  pinMode(in1Pin, OUTPUT);
  pinMode(in2Pin, OUTPUT);
}

void loop() {
  set_move( sin(degree*0.03)*255 );
  degree ++;

  delay(20);
}

Japanino(大人の科学付録)と魚釣りゲーム

大人の科学マガジンに Arduino の互換機「Japanino」と「光残像キットP.O.V」が付いてくるということで早速購入して組み立てたところ、これでなんか軽くやってみたいなと思っているうちに、それらを使った「魚釣りゲームコンテスト」なるものがあるという事なので、簡単なゲームを作って応募してみました。

作ったゲーム「カニ漁」はwonderflのサイトにアップしてるのですが、「光残像キットP.O.V」がないとPLAY出来ない為、PLAY中の動画をアップしました。


ゲームは昭和初期のオホーツク海という設定です。
船にカニが入ったら「光残像キットP.O.V」にカニが表示されるんですが、分かり難いというかこの動画では全然カニに見えませんねw
解像度が15×7ドットなのでこんなもんでしょうか。

今、思いついたんですけど、ハンドルを回すとゴマのパーティクルが落ちる「バーチャルゴマすり」とかどうでしょう?
需要ありますでしょうか?

※「魚釣りゲームコンテスト」の応募は7月14日で締め切られました。

[追記:2010.7.27]
応募期間が延長されました。

大人の科学マガジン Vol.27(8ビットマイコン)
大人の科学マガジン Vol.27(8ビットマイコン)

付録:「Japanino」 と 「光残像キットP.O.V」

加速度センサーで演奏

上の映像で、PCモニタに映っているのはswfファイルです。
手に持っているやつは3軸加速度センサー×FIO×XBee無線モジュールです。
これでswfファイルのスティックの動きをコントロールします。

本当は手に持っているやつの動きとまったく同じ動きが出せれば良かったのですが、3軸加速度センサーからの情報だけでは厳しいようです。
3軸加速度センサーの値からは、XYZの3軸の角度情報が割り出せるので、2軸分の角度情報だけを使ってswfのスティックを動かしています。

加速度センサーとFIO

2軸分の動きしかしないんだったら特にflashを3Dにする必要もなかったんですがね。
と、後で気付きました。

FIOのセッティング

FIOをPCと無線で通信できるようにする為の設定を行いました。

以下のページを主に参考にしました。

FIO: funnel.cc
Funnel Set up!: labo

FIOにFirmataのコードをアップロードするところで思いっきりハマッてしまいました。
最初は、はんだ付けに失敗したのかなーと思い、「XBeeエクスプローラUSB」を買いなおして再度はんだ付けしましたが、またもうまくいかなかったので途方にくれていました。
これまでMacBook ProからBoot CampでXPを立ち上げて作業していたのですが、試しにMac OSXのArduino IDE からアップロードしてみたところ一発でアップロード成功しました。ははは
多分、Boot Campに罠があったようです。

FIOとブレッドボードの接続方法をどうするか迷ったんですが、結局下の写真のような感じで落ち着きました。

FIOにピンヘッダをはんだ付けします。

小型ブレッドボードを2個つなげて、そこにFIOを差します。
※番号やアルファベットが振ってある標準的なブレッドボードだとXBee無線モデムが引っかかってうまく差さらないので注意!

加速度センサーの出力値を受け取る

3軸加速度センサー「KXM52-1050」のアナログ出力値を、ArduinoとFunnelを使ってswfファイルでキャッチするテストです。

緑の基板が「KXM52-1050」で、緑のワイヤーがX軸の出力、黄色がY軸、青がZ軸です

AS3ドキュメントクラスのコードはこちら。
出力値を受け取ってテキストフィールドに表示します。

package {
	import flash.display.Sprite;
	import flash.text.TextField;
	import funnel.*;

	public class Main extends Sprite {
		private var aio:Arduino;

		private var xTx:TextField = new TextField();
		private var yTx:TextField = new TextField();
		private var zTx:TextField = new TextField();

		public function Main() {
			var config:Configuration = Arduino.FIRMATA;

			aio = new Arduino(config);

			var myX:Pin = aio.analogPin(0);
			var myY:Pin = aio.analogPin(1);
			var myZ:Pin = aio.analogPin(2);

			myX.addEventListener(PinEvent.CHANGE, xChange);
			myY.addEventListener(PinEvent.CHANGE, yChange);
			myZ.addEventListener(PinEvent.CHANGE, zChange);

			set_text(xTx, 50, 50);
			set_text(yTx, 50, 100);
			set_text(zTx, 50, 150);

		}
		//テキストフィールド作成
		private function set_text(tx:TextField,_x:int,_y:int):void {
			tx.x = _x;
			tx.y = _y;
			tx.width = 200;
			tx.height = 20;
			addChild(tx);
		}
		//Xの値が変化
		private function xChange(e:PinEvent):void {
			xTx.text = "X: " + String(e.target.value);
		}
		//Yの値が変化
		private function yChange(e:PinEvent):void {
			yTx.text = "Y: " + String(e.target.value);
		}
		//Xの値が変化
		private function zChange(e:PinEvent):void {
			zTx.text = "Z: " + String(e.target.value);
		}
	}
}

この出力値さえ取り込めれば後はFlash側でいろいろ面白そうなことが出来そうですね。

ABOUT

CATEGORIES

ARCHIVES

TAGS

ふんどしリーグ カメラ キャラ スクリーンセーバー デバッグ ミニマル ランニング 作品 文字 料理 福岡てら子 美食家 鉄道 Arduino client work Flash Funnel PhotoShop Progression

FEEDS

--

Arduinoをはじめよう
Arduinoをはじめよう

電子工作が未経験の人にも
分かりやすい入門書

Arduinoをはじめようキット
Arduinoをはじめようキット

上の書籍の内容が
一通り試せるツールセット

Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ
Prototyping Lab

「Arduinoをはじめよう」より
深く掘り下げた内容の実践書

+GAINER
+GAINER

フィジカルコンピューティングの
基礎がびっしり詰まってます