白か黒かで動きが変わる。
今回使っているRPR-220は光を発するLEDと反射した光を受けるトランジスタが組み合わさっている部品です。これを使うと目の前が白いか黒いかを判別することができます。Fritzingではちょうどいい部品がみつからなかったので適当に組み合わせています。
使ったもの
- ダブルギヤボックス 左右独立4速タイプ
- Arduinoをはじめようキット
- RPR-220(フォトリフレクタ)×二個
※今はamazonでは品切れなので秋月電子のフォトリフレクタを紹介する。
フォトリフレクタ(反射タイプ)LBR−127HLD(10個入): 半導体 秋月電子通商 電子部品 ネット通販
- 330Ω抵抗×二個
※抵抗はいろいろ必要なので以下のリンクからごそっと買うのがいいかも。
1/4W カーボン抵抗(Ω順): 特設ページ 秋月電子通商 電子部品 ネット通販
※10kΩ抵抗はArduinoをはじめようキットに二個入ってます。
回路図
モータードライバ(TA7291P)は欠けているほうから1番、2番と数えていくと以下のように接続します。
- TA7291P(左)
1 | GND |
2 | モーターA(+) |
3 | 非接続 |
4 | Pin12 |
5 | Pin11 |
6 | Pin6(PWM) |
7 | 5V |
8 | 電池(+) |
9 | 非接続 |
10 | モーターA(-) |
- TA7291P(右)
1 | GND |
2 | モーターB(+) |
3 | 非接続 |
4 | Pin10 |
5 | Pin9 |
6 | Pin5(PWM) |
7 | 5V |
8 | 電池(+) |
9 | 非接続 |
10 | モーターB(-) |
フォトリフレクタはこのように接続します。トランジスタ側に10kΩ、LED側には330Ωを。
スケッチ
// センサに応じて左右のモーターを回転 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 = 50; 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,100); digitalWrite(motorC,HIGH); digitalWrite(motorD,LOW); analogWrite(PWM_motCD,100); }else if(valA <= alpha && valB > alpha){ //左が黒、右が白ならに左へ旋回 digitalWrite(motorA,LOW); digitalWrite(motorB,LOW); digitalWrite(motorC,HIGH); digitalWrite(motorD,LOW); analogWrite(PWM_motCD,100); }else if(valA > alpha && valB <= alpha){ //左が白、右が黒ならに右へ旋回 digitalWrite(motorA,HIGH); digitalWrite(motorB,LOW); analogWrite(PWM_motAB,100); digitalWrite(motorC,LOW); digitalWrite(motorD,LOW); } //モーターの動作を0.5秒つづける delay(500); }
- digitalピンの0番か1番を使うとエラーが出ることがあります。使うのはなるべく避けましょう。
おわりに
曲がるジャンパーワイヤが足りなくなってきた。買い足そうかな。
次はユニバーサルプレートの組み立てをやります。
- 出版社/メーカー: スイッチサイエンス
- メディア: エレクトロニクス
- この商品を含むブログを見る