4. ラインを追う¶
この車にはライン追跡モジュールが装備されており、黒いラインに沿って車を動かすことができます。
ライン追跡モジュールが黒いラインを検出すると、右のモーターは回転し、左のモーターは回転しないため、車は左前方に一歩進みます。 車が移動すると、ラインモジュールはラインから移動し、左のモーターが回転し、右のモーターが回転しなくなり、車はラインに戻るために右に一歩移動します。 上記の2つの手順を繰り返すことで、車は黒いラインに沿って移動することができます。
プロジェクトを開始する前に、黒いラインテープで曲線マップを作成する必要があります。推奨されるラインの幅は0.8-1.5cmで、曲がる角度は90度未満であってはなりません。
必要なコンポーネント
このプロジェクトには、以下のコンポーネントが必要です。
一式を購入するのは非常に便利です、以下のリンクを参照してください:
名前 |
このキットのアイテム数 |
リンク |
---|---|---|
3 in 1 スターターキット |
380+ |
以下のリンクからそれぞれ購入することもできます。
コンポーネント紹介 |
購入リンク |
---|---|
- |
|
- |
|
配線
これはデジタルライン追跡モジュールで、黒いラインが検出されると1を出力し、白いラインが検出されると0の値を出力します。さらに、モジュールのポテンショメーターを通じて、感知距離を調整することができます。
以下の図に従って回路を組み立ててください。
ライン追跡モジュール |
R3 ボード |
---|---|
S |
2 |
V+ |
5V |
G |
GND |
モジュールの調整
プロジェクトを開始する前に、モジュールの感度を調整する必要があります。
上記の図に従って配線を行い、R3ボードに電源を供給します(USBケーブルを直接挿入するか、9Vのバッテリーケーブルを押して供給する)。コードをアップロードすることなく。
テーブルに黒い電気テープを貼り、カートを上に置いてください。
モジュール上の信号LEDを観察して、白いテーブル上で点灯し、黒いテープ上で消灯することを確認してください。
そうでない場合は、上記の効果を実現するためにモジュールのポテンショメーターを調整する必要があります。
コード
注釈
3in1-kit\car_project\4.follow_the_line
のパスの下で4.follow_the_line.ino
ファイルを開きます。または、このコードを Arduino IDE にコピーします。
または、 Arduino Web Editor を使用してコードをアップロードします。
R3ボードにコードをアップロードした後、車の下のライン追跡モジュールを黒いラインに合わせると、車がラインを追っているのがわかります。
どのように動作するか?
このコードでは、ライン追跡モジュールの値に従って、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); }