4. ライン追従¶
この車はライントラックモジュールを搭載しており、車が黒い線を追従するようにすることができます。
ライン追従モジュールが黒い線を検出すると、右のモーターが回転し、左のモーターは回転しないため、車は左前方に一歩進みます。 車が動くと、ラインモジュールは線から外れ、次に左のモーターが回転し、右のモーターは回転しないため、車は右に一歩進んで線に戻ります。 上記の2つのステップを繰り返すことで、車は黒い線に沿って動くことができます。
プロジェクトを開始する前に、黒い線テープで曲線マップを作成する必要があります。推奨される線の幅は0.8-1.5cmで、曲がる角度は90度未満であってはなりません。
必要な部品
このプロジェクトでは、以下のコンポーネントが必要です。
キット全体を購入すると非常に便利です。以下がリンクです:
名前 |
このキットのアイテム |
リンク |
---|---|---|
3 in 1 Starter Kit |
380+ |
以下のリンクからそれぞれ別々に購入することもできます。
コンポーネントの紹介 |
購入リンク |
---|---|
- |
|
- |
|
配線図
これはデジタルライン追従モジュールです。黒い線が検出されると、出力は1となり、白い線が検出されると、出力は0となります。さらに、モジュール上のポテンショメータを調整することで、感知距離を調整することができます。
以下の図に従って回路を組み立ててください。
ライントラッキングモジュール |
R4ボード |
---|---|
S |
2 |
V+ |
5V |
G |
GND |
モジュールの調整
プロジェクトを開始する前に、モジュールの感度を調整する必要があります。
上記の図に従って配線し、R4ボードに電源を供給します(USBケーブルを直接挿入するか、9Vの電池ボタンケーブルを使用)。コードをアップロードすることなく。
黒い電気テープをテーブルに貼り、カートをその上に置きます。
モジュール上の信号LEDを観察して、白いテーブルの上で点灯し、黒いテープの上で消灯することを確認してください。
そうでない場合は、モジュール上のポテンショメータを調整して、上記の効果を実現できるようにします。
コード
注釈
3in1-kit\car_project\4.follow_the_line
のパスの下で4.follow_the_line.ino
ファイルを開きます。または、このコードを Arduino IDE にコピーします。
あるいは、 Arduino Web Editor を通じてコードをアップロードします。
R4ボードにコードをアップロードした後、車の下のライン追跡モジュールを黒線に合わせると、車が線に沿って動くのを見ることができます。
どのように動作するのか?
このコードでは、ライントラックモジュールの値に従って2つのモータを微調整することで、車が黒線に沿って動くのを見ることができます。
ライントラッキングモジュールのピン定義を追加します。ここでは
INPUT
に設定されています。また、シリアルモニターを初期化し、ボーレートを9600bpsに設定します。... const int lineTrack = 2; Serial.begin(9600); void setup() { ... pinMode(lineTrack, INPUT); }
ライントラッキングモジュールの値を読み取ります。それが1の場合、車を左に進めます。そうでなければ、右に進めます。また、USBケーブルを抜く前に、右上隅の虫眼鏡アイコンをクリックしてシリアルモニターを開き、黒と白の線上でのライントラッキングモジュール値の変化を見ることができます。
void loop() { int speed = 150; int lineColor = digitalRead(lineTrack); // 0:white 1:black Serial.println(lineColor); if (lineColor) { moveLeft(speed); } else { moveRight(speed); } }
moveLeft()
およびmoveRight()
関数について。プロジェクト 2. コードによる移動 の左右回転機能とは異なり、ここでは小さな左右の回転のみが必要です。したがって、毎回
A_1A
またはB_1B
の値を調整するだけで十分です。例えば、左前方に移動する場合(moveLeft()
)、A_1A
の速度を設定し、他のすべてを0に設定するだけで、右のモータが時計回りに回転し、左のモータは動かないようになります。void moveLeft(int speed) { analogWrite(A_1B, 0); analogWrite(A_1A, speed); analogWrite(B_1B, 0); analogWrite(B_1A, 0); } void moveRight(int speed) { analogWrite(A_1B, 0); analogWrite(A_1A, 0); analogWrite(B_1B, speed); analogWrite(B_1A, 0); }