ScienceFairプロジェクトのためにこのラインフォロワーロボットを作る

問題を排除するために楽器を試してください





この投稿では、Arduinoを使用してラインフォロワーロボット回路を構築する方法を学習します。Arduinoは、特別に描画されたラインレイアウト上で実行され、センサーによって利用可能で追跡可能である限り、忠実に追跡します。

navneetsajwan著



ラインフォロワーロボットとは

自律型ロボットは、人間がリアルタイムで手動で制御することなく、プログラマーの指示に従って一連の行動をとることができる機械です。

ラインフォロワー(LFR)も、1つ以上のセンサーと黒または白のラインパスによって誘導される自律型ロボットカーです。それらは現代の自動運転車の基礎を形成しています。



すべての自律型ロボットと同様に、ラインフォロワーには信号処理および意思決定ユニット、センサー、アクチュエーターがあります。あなたがロボット工学の初心者であり、それを真剣に受け止めたいのであれば、ここから始めるべきです。作り始めましょう。

このプロジェクトを作成するために、2つの赤外線センサーと3つのホイールドライブを使用しました。使用できるセンサーの最小数は1つで、PIDベースのラインフォローには最大8つで十分です。

必要なコンポーネント:

Arduino uno

シャーシ

2つのバッテリー駆動(b.o.)モーターと互換性のあるタイヤ

キャスターボール

2つの赤外線センサー

モータードライバーモジュール

電源

ArduinoIDEソフトウェア

それでは、コンポーネントを見てみましょう。

ARDUINO ONE :私たちのロボットの制御室として想像してみてください。現在、このプロジェクトで検討された開発ボードはたくさんありますが、ArduinoUNOは他のボードに匹敵するものではありませんでした。私たちの主人公がその多次元的特徴の点で優れていたというわけではありません。

もしそうなら、ラズベリーパイとインテルエジソンは目の間にそれを叩いたでしょう。 Arduino UNOの選択につながった最も説得力のある議論は、プロジェクトの機能、価格、サイズ、および要件の組み合わせによって形成されました。

いくつかの関連する理由は次のとおりです。

サイズ :Atmega16またはAtmega8ベースの開発ボードと比較して非常に小さく、シャーシのスペースを少し消費するため、コンパクトで便利なボットを入手できます。

これは、ロボット競技では本当に重要です。その大きな醜いボットと一緒に歩き回って、一日中会場を変えるのは嫌だと私を信じてください。

サイズが小さいほど、ロボットは速くなり、ターンはより効率的になります。

最高のプロトタイピングボード :間違いなく、ArduinoUNOは機能の最良の組み合わせを持っています プロトタイピング 。回路が設置され、プロジェクトが完全に機能したら、ArduinoNanoやAttiny85icなどのより小型で安価なものと交換できます。

それらのために、大学プロジェクトのラインフォロワーを作るために、私は最後にUNOをNanoに置き換えることを提案します。

シャーシ :すべてのコンポーネントを所定の位置に保持するフレームです。新しいシャーシを購入する際に考慮すべき点がいくつかあります。

軽量で丈夫でなければなりません。

プロジェクトの場合は、市場から購入する方が良いでしょう。ただし、競争の準備をしている場合は、競争の規模と要件を念頭に置いて、独自にカスタマイズすることを強くお勧めします。

プラスチックまたは木製のシャーシを選択してください。金属フレームがArduinoに接触すると、いくつかのピンが短絡します。これは、シャーシを探しているときに焦点を当てる大きな要素です。

シャーシをできるだけ低くしてください。これにより、ボットに安定性がもたらされます。

モーター :軽量バッテリー駆動(B.O.)d.c。を使用してください。モーター。

キャスターボール :通常のホイールは単一軸に沿った並進運動を提供しますが、キャスターボールは表面の任意の方向に沿って移動するように設計されています。それは私達に三輪ドライブを与えます。

4輪よりも3輪駆動を好む理由は、回転動作が比較的速いためです。爬虫類のように自転車の人力車が交通を突き抜けていることに気づいたかもしれません。私たちのロボットの場合も同じです。

センサー :環境の物理的パラメータを検出または測定し、それを電気信号に変換するデバイスです。この場合、検出されるパラメータは赤外線です。

センサーはどのロボットにとっても非常に基本的なものです。ええと、arduinoがボットの頭脳である場合、センサーも目の役割を果たす可能性があります。センサーについていくつか説明します。

センサーは、LEDが地面に面するように配置する必要があります。

ボットのフロントエンドに配置する必要があります。

それらの間の最小間隔は、黒い線の幅よりも大きくする必要があります。

モータードライバーボード :モータードライバーは、より高い電圧を必要とするモーターに電力を供給するために低電圧信号を取り込むバッファー回路です。

私たちの場合、Arduinoはモーターを駆動するのに十分な電圧を提供できますが、十分な電流を提供することはできません。 Arduino UNOの5vピンとGNDピンの定格電流は200mAですが、GPIOピンの定格電流は40mAです。これは、必要な始動および失速電流モーターよりもはるかに低くなります。

このプロジェクトで私が好むモータードライバーは、L298NとL293Dの2つです。どちらもこのプロジェクトの作成に等しく適しています。

しかし、 L293Dは比較的安価です ただし、定格電流は低くなっています。それらの接続はほぼ同じです。両方の接続を示したので、ボットをどのように作成するかは完全にあなた次第です。

電源

12 vアダプターまたはバッテリー(12ボルト以下)を使用してください。

コンポーネントの配置(フロントエンドからバックエンドへ):

ボットの先頭にあるセンサー。

真ん中のキャスターホイール。

モーターとタイヤが後ろに一列に並んでいます。

接続:

ARDUINOへのセンサー

図のようにセンサーピンをarduinoピンに接続します。

センサーピンArduinoピン
VCC(5v)5V
GND(G)GND
左センサー出力(DO)ピン6
右センサー出力(DO)ピン7

注:センサーの電源が入っているかどうかを確認するには、携帯電話のカメラをIR送信機のLEDに向けます。肉眼では見えないLEDが画面に光ります。最近の携帯電話のカメラの中には、赤外線フィルターを備えているものがあります。それで、それを考慮に入れてください。

モーターからモータードライバーへ:

各モーターには、モータードライバーに接続する必要がある2つの端子があります。それらを直接arduinoに接続しようとしないでください。ボットの背面から見て、モーターが近くにあり、センサーが離れている状態で、次のように接続します。

エンジンL298NL293D
左モーターピン1と2ピン7および8
右モーターピン13および14ピン9および10

モータードライバーからARDUINOUNOへ:

モータードライバー(L298N)ARDUINO ONE
PIN 4ワイン
PIN 5GND
PIN 65V
PIN 8&PIN 9PIN3とPIN9
PIN 10&PIN 11PIN5とPIN10
PIN7とPIN125V
モータードライバー(L293D)ARDUINO ONE
PIN 3ワイン
PIN 2GND
PIN 15V
ピン5とピン6PIN3とPIN9
ピン11とピン12PIN5とPIN10
ピン4とピン55V

注:l298nのピン8と9は、1と2に接続されたモーターを制御するために使用されます。また、10と11は、ピン13と14に接続されたモーターを制御します。同様に、l293dのピン5と6は、に接続されたモーターを制御するために使用されます。そして、ピン9と10に接続された12と11の制御モーター。

設計部分の最後まで、皆さんです。まだコーディングは必要ですが、その前に、行追跡を可能にする原則について説明します。

赤外線センサーの仕組み:

赤外線センサー(IRセンサー)を使用して、色のコントラストとオブジェクトの近接を感知できます。 IRセンサーの動作の背後にある原理はかなり基本的です。

ご覧のとおり、IR発光LEDとフォトダイオードの2つのLEDがあります。それらは送信機と受信機のペアとして機能します。障害物がエミッター光線の前に来ると、それらは反射されてレシーバーによって遮断されます。

これによりデジタル信号が生成され、マイクロコントローラーやアクチュエーターに供給して、障害物に遭遇したときに必要なアクションを実行できます。

基本的な物理学によれば、黒体はそれに入射するすべての電磁放射を吸収し、白体はそれを反射します。この原理は、白と黒の表面を区別するためにラインフォロワーによって利用されます。

ラインフォロワーロボットのしくみ:

LINE FOLLOWER LAYOUT

通常の状態では、ロボットは両方のセンサーが白くなり、黒い線が両方のセンサーの真ん中にくるように動きます。

ボットが順方向に移動するように、両方のモーターを回転させるようにプログラムされています。

当然のことながら、時間が経過すると、2つのセンサーの1つが黒い線を越えます。

左側のセンサーがラインを超えた場合、左側のモーターが停止し、その結果、左側のセンサーが白い表面に戻って通常の状態に達しない限り、ボットは左に向かって回転し始めます。

同様に、右側のセンサーが黒い線を超えると、右側のモーターが停止し、その結果、センサーが白い表面に戻らない限り、ボットは右に向きを変えます。この回転メカニズムは、差動駆動メカニズムとして知られています。

回路図:

配線の詳細:

プログラミングと概念:

回路部分を終えたら、プログラミング部分に移ります。このセクションでは、ロボットを制御するプログラムについて理解します。コードは次のとおりです:/ *
Created and tested by Navneet Singh Sajwan
*Based on digital output of two sensors
*Speed control added
*/
int left, right
int value=250
void setup()
{
pinMode(6,INPUT)//left sensor
pinMode(7,INPUT)//right sensor
pinMode(9,OUTPUT)//left motor
pinMode(3,OUTPUT)//left motor
pinMode(10,OUTPUT)//right motor
pinMode(5,OUTPUT)//right motor
// Serial.begin(9600)
}
void read_sensors()
{
left=digitalRead(6)
right= digitalRead(7)
}
void move_forward()
{
analogWrite(9,value)//3,9 for left motor
digitalWrite(3,LOW)
analogWrite(10,value)//10,5 for right motor
digitalWrite(5,LOW)
}
void turn_left()
{
digitalWrite(9,LOW)//9,3 for left motor
digitalWrite(3,LOW)
analogWrite(10,value)//10,5 for right motor
digitalWrite(5,LOW)
}
void turn_right()
{
analogWrite(9,value)// 9,3 for left motor
digitalWrite(3,LOW)
digitalWrite(10,LOW)// 10,5 for right motor
digitalWrite(5,LOW)
}
void halt()
{
digitalWrite(9,LOW)// 9,3 for left motor
digitalWrite(3,LOW)
digitalWrite(10,LOW)// 10,5 for right motor
digitalWrite(5,LOW)
}
void print_readings()
{
Serial.print(' leftsensor')
Serial.print(' ')
Serial.print(left)
Serial.print('rightsensor')
Serial.print(' ')
Serial.print(right)
Serial.println()
}
void loop()
{
read_sensors()
while((left==0)&&(right==1)) // left sensor is over black line
{
turn_left()
read_sensors()
print_readings()
}
while((left==1)&&(right==0)) // right sensor is over black line
{
turn_right()
read_sensors()
print_readings()
}
while((left==0)&&(right==0)) // both sensors over the back line
{
halt()
read_sensors()
print_readings()
}
while((left==1)&&(right==1))// no sensor over black line
{
move_forward()
read_sensors()
print_readings()
}
}

使用される機能の説明:

read_sensors():両方のセンサーの読み取り値を取得し、それらを変数の左右に格納します。

move_forward():arduinoがこの関数を実行すると、両方のモーターが順方向に移動します。

turn_left():左モーターが停止します。ボットは左に曲がります。

turn_right():右モーターが停止します。ボットは右に曲がります。

停止():ボットが停止します。

print_readings():シリアルモニターにセンサーの読み取り値を表示します。このためには、void設定で「Serial.begin(9600)」のコメントを解除する必要があります。

センサーの読み:

センサーオーバーラインセンサーの読み
正しい
左センサー01
右センサー10
なし11
両方とも00

速度制御:

モーターの速度が非常に速いため、arduinoがセンサー信号を解釈する前にロボットが回線を失うことがあります。要するに、ボットは高速のためにラインに従わず、アルゴリズムが正しいにもかかわらずラインを失い続けます。

このような状況を回避するために、PWM技術を使用してボットの速度を下げます。上記のコードには、valueという名前の変数があります。

関数の数値を下げるだけで速度が下がります。 Arduino UNOでは、0〜255のpwm値のみを持つことができます。

AnalogWrite(ピン、値)

0<= value <=255

これで私のオンラインフォロワーの投稿は終わりです。私はそれがあなたのすべての燃えている質問に答えるのに十分詳細であることを望みます、そして最もまれな現実でそうでないならば、私たちはあなたのためにいつでもコメントセクションを利用できます。あなたの疑問をコメントアウトしてください。幸せないじくり回してください!




前:DTMFモジュールを使用した携帯電話制御のロボットカー 次へ:パスワード制御のAC電源ON / OFFスイッチ