Arduinoでタミヤの模型を思いどおりに動かしてみよう  つくれば工房 ２０１３年１０月１９日	  （遠藤一太）

本日の目標	  1. 自分のPCでArduinoのスケッチ（プログラムのこと）が描ける。	  
2. 反射光センサーの値をPCに表示することができる。	  
3. 「Hブリッジ」 ICを用いて、タミヤの模型用モーターの回転を制御することができる。	  
4. センサーの値に応じて、モーターの回転方向を変化させることができる。	  
5. ライントレーサーカーの製作を想定して、便利なスケッチ集を作れる。	  準備作業	  !PCにArduinoの開発環境をセットアップする。	  
!手持ちのPCに、必要なファイルをUSBからコピー。（またはArduino.ccのホームページよりダウンロード）。	  
!最新の安定運用バージョンはArduino1.0.5	  だが、それ以前の物でも良い。	  

!USBケーブルでPCとArduinoマイコンボードを接続	  !このとき、「新しいハードウェアが検出されました」というメッセージとデバイスドライバーのインストール手順に関する質問がでてくる場合がある。ドライバーは配布したAruduino-­‐1.0.5フォルダーのdriversの中にある。	  
!新しいボードの場合基板上のLEDが点滅する。	  Arduinoのアイコンをダブルクリックすると開発環境ウインドウが開く。	  
ツールメニューのhardwareでArduinoUnoを選ぶ。	  
ツール  メニューのSerial	  Porのうち、適切な名前を選ぶ（多分自動的にできている。	  
Windowsの場合COM3,COM4,COM5などの番号を選ぶ。各
自のパソコン毎に異なっているので、試してみて見つからなければお知らせください）	  何もしないプログラム//全体で共有する変数や定数を準備する場所	  	  void	  setup()	  {	  	  	  //	  最初に一回だけ実行する内容を書く場所	  }	  void	  loop()	  {	  	  	  //	  繰り返して実行する内容を書く場所      	  }「新規ファイル」ボタン（左から３番目）を押して上記内容を入れる。（二重斜線(//)の行は注釈なので不要）。	  
ファイルメニューから名前を付けて保存する。例えば mytest0	  「マイコンボードに書き込む」（２番目の右向け矢印）を押すとArduinoボードにスケッチが転送されて、実行される。転送中はArduinoボードのLEDが瞬く。	  
（ここでは、何もしないという仕事をする。電源ランプだけがついた状態）	  	  第一歩	  Arduinoに何かをつなぐ	  接続１（LEDと抵抗）

ブレドボード抵抗値は	  数百オーム

５点ずつ裏で縦につながっている

両端の青線と赤線のそばの２５点は互いに横につながっているLEDを点ける	  void	  setup()	  {	  	  	  pinMode(3,OUTPUT);//３番ピンを出力用に設定	  	   digitalWrite(3,HIGH);//３番ピン電圧を５Vにする	  delay(3000);	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  //3000ミリ秒(3秒）待つ	  digitalWrite(3,LOW);//3番ピン電圧を０V	  }	  void	  loop()	  {	  	  	  }上記の内容を追加したら、ファイルメニューから名前を付けて保存する。例
えば myTKB1	  アップロードボタン（２番目の右向け矢印）を押すとArduinoボードにスケッチが転送されて、実行される。	  
再び実行するためには、ボード上のリセットボタンを押す。	  	  LEDを点滅（Lチカ）	  void	  setup()	  {	  	  	  pinMode(3,OUTPUT);//３番ピンを出力用に設定	  	   }	  void	  loop()	  {	  	  	  digitalWrite(3,HIGH);//３番ピン電圧を５Vにする	  delay(3000);	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  //3000ミリ秒(3秒）待つ	  digitalWrite(3,LOW);//電圧ピン電圧を０V	  	  	  	  delay(1000);	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  //１秒待つ	  	  }上記のように書き換えたら、５番目ボタン（下向け矢印）をクリックする。これで、上書き保存された。	  
アップロードボタン（２番目の右向け矢印）を押すとArduino
ボードにスケッチが転送されて、実行される。	  	  loop部分に書いた内容が、いつまでも繰り返し実行される。	  	  LEDの明るさを変える

int	  v=100;	  void	  setup()	  {	  	  	  pinMode(3,OUTPUT);//３番ピンを出力用に設定	  	   }	  void	  loop()	  {	  	  	  	  analogWrite(3,v);//３番ピン電圧をvの値に応じて０〜５Vに。	  
delay(500);	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  //500ミリ秒(0.5秒）待つ	  	  	  	  v=v+10;	  	   if	  (v>255)	  v=0;	  }出力ピン番号３には〜３と書かれている。これには、５v以下の任意電圧を	  出すことができる。analogWrite	  命令で０から２５５段階の電圧を指定する。	  
（~5,~6,~9,~10,~11番ピンも同様）	  接続２（反射センサー）

第二歩	  反射センサーの値をPCに表示
int	  sensorPinA=0;	  	  void	  setup(){	  Serial.begin(9600);	  }	  	  void	  loop(){Serial.println(analogRead(sensorPinA));	  delay(1000);	  	  }	  上記のように書き換えたら、名前をつけて保存。	  

上記スケッチをArduinoに転送してから、PCのArduino	  開発window	  の右端（虫眼鏡）ボタンをクリックするとモニターが現れる。右下の窓に9600	  baudと上記の通信速度の値が合っていればUSBケーブルから受け取ったデータが表示される。	  
センサーから3mm	  ぐらいの反射物の黒白によって、表示値が変わる。	  
次のステップで使用するので、値の変化する範囲を覚えておく。	  	  第三歩	  タミヤ模型の標準モータを動かす!使用するのは、直流（ブラシあり）モータ。電圧３V以下。	  
!まず電池（単三電池２個直列接続済み）をモーターに直接つないでみる。電池ボックスのスイッチを入れて回転方向を調べる。接続の極性を変えると逆転するはず。	  
!ブレドボードにHブリッジモジュール(TB6612FNG	  DualMotor	  Driver	  Carrier)を差し込み、図のように配線する。（これはマイコンの指令通りに、モーターの電流の大きさや方向を制御するための回路）

使用するモータードライバーの機能!TB6612FNG	  DualMotor	  Driver	  Carrier	  のピン説明	  ! AIN1(BIN1)	  	   A(B)前進指令（IN1=HIGH,IN2	  =LOW)	  ! AIN2(BIN2)
A(B)後進指令(IN1	  =LOW,IN2=HIGH)	  ! AO1(BO1) モーターA(B)へ接続	  ! AO2(BO2) モーターA(B)へ接続	  ! PWMA(PWMB)	  モーターA(B)の速度設定信号	  ! STBY	  	  	  	  	  	  待機信号 （HIGHにしなければ動作しない）	  ! VCC
論理回路用供給電圧	  ! VMOT	  モーター用プラス電源電圧	  ! GND
アース＝電源のマイナス端子に接続	  !静止命令 空転 (IN1=LOW,IN2=LOW)	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  ブレーキ (IN1=HIGH,IN2=HIGH)	  	  接続３ 	  モータードライバー(回路図）

接続３モータードライバー(ブレドボード）

結線対応表Arduino	  Pin	  	  	  	  	  	  	  	  	  	  	  	  	  	  MotorDriver	  Pin	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  (番号は表から見て左下が１、右下が８、右上  が９、左上が１６	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  となるように、マークを起点として逆時計回りにつける）	  	  	  	  	  D4	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  AIN1	  	  	  	  (14)	  	  	  	  	  D2	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  AIN2	  	  	  	  (15)	  	  	  	  	  D3	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  PWMA	  (16)	  	  	  	  	  D5	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  STBY	  	  	  	  	  (13)	  	  	  	  	  D7	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  BIN1	  	  	  	  	  (12)	  	  	  	  	  D8	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  BIN2	  	  	  	  	  (11)	  	  	  	  	  D9	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  PWMB	  (10)	  ５VVcc	  	  	  	  	  	  	  	  	  (2)	  	  	  	  GND	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  GND 	  	  	  (１,8,9)
   モーター用電池のー極へ 	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  VMOT	  	  	  (7)	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	     モーター用電池の＋極へ	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  AOUT1	  	  (3)モーターA1へ	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  AOUT2	  	  	  (4)  モーターA2へ	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  BOUT2	  	  	  (5)  モーターB2へ	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  BOUT1	  	  	  	  (6)モーターB1へ	  	  	  	  A0	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  センサーAの出力（中央ピン）	  	  	  	  A1	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  センサーBの出力（中央ピン）	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  モーターの正転と逆転テスト/*	  Test	  of	  Motor	  Driver	  TB6612FNG	  Dual	  Motor	  Driver	  by	  POLOLU	  *******	  2013/9/26	  	  	  I.	  Endo	  	  	  	  ******/	  int	  LED=13;	  int	  AIN1=4;	  int	  AIN2=2;	  int	  PWMA=3;	  int	  STBY=5;	  int	  velocity=100;//0と２５５の間の数値	  	  void	  setup(){	  	  	  pinMode(LED,OUTPUT);	  	  	  pinMode(AIN1,OUTPUT);	  	  	  pinMode(AIN2,OUTPUT);	  	  	  pinMode(PWMA,OUTPUT);	  	  	  pinMode(STBY,OUTPUT);	  	  digitalWrite(STBY,HIGH);	  }	  void	  loop(){	  //mae	  	  	  digitalWrite(LED,HIGH);	  	  	  digitalWrite(AIN1,HIGH);	  	  	  digitalWrite(AIN2,LOW);	  	  	  analogWrite(PWMA,velocity);	  	  delay(3000);	  //ushiro	  	  	  digitalWrite(LED,LOW);	  	  	  digitalWrite(AIN1,LOW);	  	  	  digitalWrite(AIN2,HIGH);	  	  	  analogWrite(PWMA,velocity);	  	  	  delay(3000);	  }	  第四歩	  センサーの値に応じて  モーターAを前進／後退させる。自分で便利な関数を定義	  int	  LED=13;	  int	  AIN1=4;	  int	  AIN2=2;	  int	  PWMA=3;	  int	  STBY=5;	  int	  velocity=100;//0と２５５の間の数値	  	  void	  setup(){	  	  	  pinMode(LED,OUTPUT);	  	  	  pinMode(AIN1,OUTPUT);	  	  	  pinMode(AIN2,OUTPUT);	  	  	  pinMode(PWMA,OUTPUT);	  	  	  pinMode(STBY,OUTPUT);	  	  digitalWrite(STBY,HIGH);	  }	  void	  loop(){	  if(analogRead(0)>512)	  	  AFoward(velocity);	  	  else	  ABackward(velocity);	  delay(1000);	  	  	  }	  //以下は自分で定義した関数	  void	  AFoward(int	  v){	  	  	  digitalWrite(LED,HIGH);	  	  	  digitalWrite(AIN1,HIGH);	  	  	  digitalWrite(AIN2,LOW);	  	  	  analogWrite(PWMA,v);	  }	  	  void	  ABackward(int	  v){	  	  	  digitalWrite(LED,LOW);	  	  	  digitalWrite(AIN1,LOW);	  	  	  digitalWrite(AIN2,HIGH);	  	  	  analogWrite(PWMA,v);	  }	  次のステップは？
!タミヤの標準工作部品を組み合わせて、電池で動く車を作る。	  
!左右の車輪が独立にモーターで動く構造にする。	  
!車体の前部にセンサーを２個取り付ける。	  
!Arduino+ブレドボード＋電池を車に固定する。	  
!用意したスケッチをarduinoに転送し、センサーの値に応じて、進行方向を変えながら、黒い線上を自動的に走るように工夫する。（ライントレーサー）	  さらに次のステップは？	  
ー＞例えば無線コントロールを併用。

参考情報!入門書	  !公式HP	  !電子工作関連物品の入手先	  !スイッチサイエンス	  !秋月電子通商	  !共立電子	  !Digikey	  !松本無線（広島市中区銀山町）	  !エディオン広島本店地下２階	  Thanks	  for	  joining	  us!
毎週土曜日に各自が作品づくりを楽しんでいます。12月（１月？）には作品発表会をしたい。	  
!Arduino等の購入希望者はお知らせください。	  
!MBeeDuino（中谷寿洋氏開発）の後継ボードを「つくれば工房」とAdwin社で共同開発準備中。仕様に関するご意見を頂ければ幸いです。