つくったブログ

ぼくがつくったもの。

Arduinoで作る!ライントレースロボット

ライントレースロボットが完成しました。

 
http://instagram.com/p/lBKkVFBBF0/

 一年間かけてついに目標だったライントレースロボットをつくることができました。作り方を載せておきます。


使ったもの

以前の記事のものと大体は同じ。

 ※こんなやつ↓
http://instagram.com/p/dqvPiVhBJ4/

 ※今はamazonでは品切れなので秋月電子のフォトリフレクタを紹介する。
  フォトリフレクタ(反射タイプ)LBR−127HLD(10個入): 半導体 秋月電子通商 電子部品 ネット通販

  • 330Ω抵抗×二個

 ※抵抗はいろいろ必要なので以下のリンクからごそっと買うのがいいかも。
 1/4W カーボン抵抗(Ω順): 特設ページ 秋月電子通商 電子部品 ネット通販

 ※10kΩ抵抗はArduinoをはじめようキットに二個入ってます。
RPR220(フォトリフレクタ)とArduinoでモーターを制御する。 - つくったブログ

 曲がるジャンパワイヤを多めに用意した方がいいかも。

ジャンパワイヤ(オス?メス) 10本セット

ジャンパワイヤ(オス?メス) 10本セット

回路図

f:id:kyokucho1989:20140302084032p:plain
つなぎかたも大体同じ。

  • TA7291P(左)
1 GND
2 モーターA(+)
3 非接続
4 Pin11
5 Pin10
6 Pin6(PWM)
7 5V
8 電池(+)
9 非接続
10 モーターA(-)
  • TA7291P(右)
1 GND
2 モーターB(+)
3 非接続
4 Pin9
5 Pin8
6 Pin5(PWM)
7 5V
8 電池(+)
9 非接続
10 モーターB(-)

フォトリフレクタの接続位置を変更しました。
http://instagram.com/p/lBMfEGBBIy/

http://instagram.com/p/lBMZoFhBIs/




スケッチ

// センサに応じて左右のモーターを回転
const int motorA = 11;
const int motorB = 10;
const int PWM_motAB = 6;
const int motorC = 9;
const int motorD = 8;
const int PWM_motCD = 5;
// led 
const int ledA = 13;
const int ledB = 2;
// フォトトランジスタ
const int sensorA = 2;
const int sensorB = 3;
// センサから読み取った値(analog)
int valA = 0;
int valB = 0;
// 閾値
int alpha = 100;

void setup(){
  pinMode(motorA,OUTPUT); 
  pinMode(motorB,OUTPUT); 
  pinMode(motorC,OUTPUT); 
  pinMode(motorD,OUTPUT); 
  pinMode(PWM_motAB,OUTPUT); 
  pinMode(PWM_motCD,OUTPUT); 
  pinMode(ledA,OUTPUT); 
  pinMode(ledB,OUTPUT); 
  Serial.begin(9600); 
}

void loop(){
  //ledは常にONにしておく
  digitalWrite(ledA,HIGH);
  digitalWrite(ledB,HIGH);
  delay(10);
  valA = analogRead(sensorA);
  valB = analogRead(sensorB);
  //シリアルポートに読み取った値を表示させる
  Serial.print(valA);
  Serial.print(" ");
  Serial.println(valB);
  
  if (valA > alpha && valB > alpha){
    //左、右ともに白なら直進
    digitalWrite(motorA,HIGH);
    digitalWrite(motorB,LOW);
    analogWrite(PWM_motAB,120); 
    digitalWrite(motorC,HIGH);
    digitalWrite(motorD,LOW);
    analogWrite(PWM_motCD,120); 
  }else if(valA <= alpha && valB > alpha){
    //左が黒、右が白ならに左へ旋回
    digitalWrite(motorA,LOW);
    digitalWrite(motorB,LOW);
    digitalWrite(motorC,HIGH);
    digitalWrite(motorD,LOW);
    analogWrite(PWM_motCD,130); 
  }else if(valA > alpha && valB <= alpha){
    //左が白、右が黒ならに右へ旋回
    digitalWrite(motorA,HIGH);
    digitalWrite(motorB,LOW);
    analogWrite(PWM_motAB,130); 
    digitalWrite(motorC,LOW);
    digitalWrite(motorD,LOW);    
  }else{
    digitalWrite(motorA,HIGH);
    digitalWrite(motorB,LOW);
    analogWrite(PWM_motAB,120); 
    digitalWrite(motorC,HIGH);
    digitalWrite(motorD,LOW);
    analogWrite(PWM_motCD,120); 
  }
  //モーターの動作を0.05秒つづける
  delay(50);
}
  • 前回のものから修正しました。
  • 閾値はシリアルボードを見ながら適当な値に修正しましょう。エディタの右上の虫眼鏡アイコンをクリックすれば画面が出てきます。

動画


おわりに

 次は外部電源で動作させます。

Arduinoをはじめよう 第2版 (Make:PROJECTS)

Arduinoをはじめよう 第2版 (Make:PROJECTS)