ARDUINO

Aruduinoでコンパクトなライントレースロボット制作③~ラインセンサー基板追加~

Arduinoライントレースロボット制作のつづきです。
今回は、ラインセンサー2個を使用したライントレースのセンサー基板を制作してライントレースができるようにします。

Aruduinoでコンパクトなライントレースロボット制作②~電源・モーター制御~ 前回のArduinoライントレースロボット制作の続きです。 今回は、モーター制御とマイコンとモーターの電源の回路を作ります。 ...
準備したもの
  • Arduino NANO(互換品)
  • フォトリフレクタLBR127HLD
  • ユニバーサル基板
  • 抵抗器
  • 可変抵抗器
  • XHコネクタ

フォトリフレクタ

フォトリフレクタは送信部と受信部が一体となったセンサーで、送信部から発光された光を物体が反射して、その反射した光を受信部のフォトトランジスタが受信するしくみです。「フォトセンサ」や「フォトインタラプタ」などと呼ばれることもあります。

フォトリフレクタ

上図「A」の場合(抵抗が電源側)、アナログピン接続点の電圧は電源電圧から抵抗の電圧を引いたものとなり、暗く電流が流れないとき(抵抗の電圧低下がない)は電源電圧となります。もっとも明るいときは、電源電圧-抵抗値x電流となります。

上図「B」の場合(抵抗がGND側)、アナログピン接続点の電圧は抵抗に発生した電圧と同じになり、暗く電流が流れないとき(抵抗の電圧低下がない)は0Vとなります。もっともあかるいときは、抵抗値x電流となります。

したがって、Aの場合は明るいほど電圧は低くなり、Bは明るいほど電圧が高くなります。Bの方が感覚的には分かりやすい気がしますが、配線などの関係もあると思いますので、違いを理解できていることが大事だと思います。

センサー基板

センサーの数は2個。フォトリフレクタは、いつもはRPR220を使ってるのですが、価格の安いLBR-127HLDとしました。抵抗値は手持ちの抵抗の中から、赤外線LEDは220Ω、フォトトランジスタは4.7KΩ + 10KΩ(可変抵抗)としました。

ラインセンサーx2基板

プログラム


#include

#define TACT1 6
#define PHASE1 2
#define ENABLE1 3
#define PHASE2 4
#define ENABLE2 5
#define LineLeft A6
#define LineRight A7

int LineLeftVal = 0;
int LineRightVal = 0;
int LeftWhite = 33;
int LeftBlack = 900;
int RightWhite = 31;
int RightBlack = 860;
int ThresholdLeft = (LeftWhite + LeftBlack) /2;
int ThresholdRight = (RightWhite + RightBlack) /2;      

void setup() {
    pinMode(TACT1, INPUT_PULLUP);     
    pinMode(PHASE1, OUTPUT);
    pinMode(ENABLE1, OUTPUT);
    pinMode(PHASE2, OUTPUT);
    pinMode(ENABLE2, OUTPUT);

    Serial.begin(9600);
    while(digitalRead(TACT1) == HIGH) {
        LineLeftVal = analogRead(LineLeft);
        LineRightVal = analogRead(LineRight);   
        Serial.print("左ラインセンサー:");
        Serial.println(LineLeftVal); 
        Serial.print("右ラインセンサー:");
        Serial.println(LineRightVal);                
    }
}

void loop() { 
    LineLeftVal = analogRead(LineLeft);
    LineRightVal = analogRead(LineRight);
    if (LineLeftVal < ThresholdLeft) {
        if (LineRightVal < ThresholdRight) {
            digitalWrite(PHASE1, LOW);
            analogWrite(ENABLE1, 100);
            digitalWrite(PHASE2, LOW);
            analogWrite(ENABLE2, 100);         
        }
        else {
            digitalWrite(PHASE1, LOW);
            analogWrite(ENABLE1, 0);
            digitalWrite(PHASE2, LOW);
            analogWrite(ENABLE2, 100);          
        }
    }
    else {
        if (LineRightVal < ThresholdRight) {
            digitalWrite(PHASE1, LOW);
            analogWrite(ENABLE1, 100);
            digitalWrite(PHASE2, LOW);
            analogWrite(ENABLE2, 0);
        }
        else {
            digitalWrite(PHASE1, LOW);
            analogWrite(ENABLE1, 0);
            digitalWrite(PHASE2, LOW);
            analogWrite(ENABLE2, 0);   
        }             
    }
}

ライントレースの様子(動画)

部材購入先リンク

フォトリフレクタLBR-127HLD

ユニバーサル基板

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です