Arduinoに基づく光追従と回避ロボット:5つのステップ

Arduinoに基づく光追従と回避ロボット:5つのステップ

目次:

Anonim

これは単純なプロジェクトで、Lightを追いかけたり避けたりします。

このシミュレーションはProteus 8.6 proで作成しました。

必要なコンポーネント: -

1)Arduino uno。

2)3 LDR。

3)2 Dcギアモーター。

4)1サーボ。

5)3個の1k抵抗。

6)1 Hブリッジl290D

7)オン/オフスイッチ1個プログラムの状態変更用

8)9Vと5Vの電池

用品:

ステップ1:Ardunioコード

改善点:_

Arduinoのコードは2016年2月23日に1ビット更新されました

このコードは非常にコメントされています私は説明したくないが、uが何らかの助けが必要な場合は([email protected])に私に連絡して自由になった

注意 :-

このプログラムでは2つの条件を使用します

光追従のための第一。

光を避けるための2番目のもの。

これらの条件が満たされる限り、ロボットは光をたどるか回避するでしょう。

これは私が選ぶLDRの最小値です。通常のLightでは、Rangeは80から95ですが、Principle of Voltage Dividerに取り組んでいるため、強度が増加するにつれて、誘起される電圧が増加します。

int a = 400。 //公差値

ステップ2:プロテウスファイル

そのリンクからArduinoライブラリをダウンロードする

ステップ3:Hブリッジのしくみ

L293NE / SN754410は非常に基本的なHブリッジです。それは2つの橋を持っています、1つはチップの左側、もう1つは右側にあり、2つのモーターを制御することができます。最大1 Aの電流を駆動でき、4.5 V〜36 Vの範囲で動作します。このラボで使用している小型DCモーターは、低電圧でも安全に動作するため、このHブリッジは問題なく動作します。 Hブリッジには、次のピンと機能があります。ピン1(1,2EN)がHIGHまたはLOWのどちらであっても、モーターを有効または無効にします。Pin2(1A)は、モーターのロジックピンです(入力はHIGHまたはLOW)。 3(1Y)は一方のモーター端子用です。ピン4-5はアース用です。ピン6(2Y)はもう一方のモーター端子用です。ピン7(2A)は弊社モーター用のロジックピンです(入力はHIGHまたはLOW)。ピン8(VCC2) )このラボでは1つのモーターのみを使用しているため、9〜11のピンは接続されていません。14〜15のピンは未接続です。16(VCC1)は未接続です。上の図はHブリッジの図で、どのピンがこの例で何をしているのかを示しています。ダイアグラムに含まれているのは、論理ピンの状態(Arduinoによって設定されている)に従ってモーターがどのように機能するかを示す真理値表です。

このプロジェクトでは、イネーブルピンはArduinoのデジタルピンに接続されているため、HIGHまたはLOWのいずれかに送信してモーターをオンまたはオフにすることができます。モーターロジックピンはArduinoの指定されたデジタルピンにも接続されているので、モーターを一方向に回転させるにはHIGHとLOWを、反対方向に回転させるにはLOWとHIGHを送信できます。モーター供給電圧はモーターの電圧源に接続されています。これは通常外部電源です。あなたのモーターが5Vで500mA以下で動くことができるならば、あなたはArduinoの5V出力を使うことができます。ほとんどのモーターはこれより高い電圧と高い消費電流を必要とするので、外部電源が必要になります。

モーターをHブリッジに接続する2枚目の写真のようにモーターをHブリッジに接続します。

または、Arduinoに外部電源を使用している場合は、Vinピンを使用できます。

ステップ4:LDRのしくみ

さらなる説明が必要になるかもしれない最初のことは、光依存抵抗器の使用です。光依存抵抗器(またはLDR)は、周囲の光の量に応じて値が変化する抵抗器ですが、Arduinoで抵抗を検出するにはどうすればよいでしょうか。実際にはできませんが、アナログピンを使用して電圧レベルを検出することができます。これは(基本的には)0〜5Vの範囲で測定できます。 「抵抗値をどのようにして電圧変化に変換するのですか?」という質問があるかもしれませんが、簡単です。分圧器を作ります。分圧器は電圧を取り込み、入力電圧と使用される2つの抵抗値の比に比例してその電圧の一部を出力します。式は次のとおりです。

出力電圧=入力電圧*(R2 /(R1 + R2))ここで、R1は最初の抵抗の値、R2は2番目の抵抗の値です。

今でもこれは「LDRにはどのような抵抗値があるのか​​」という疑問を投げかけています。良い質問です。

環境光の量が少ないほど抵抗が高くなり、環境光が多いほど抵抗が低くなります。今私はそれらの抵抗範囲が200 - 10キロオームであった特定のLDRのために使用しました、しかし、これは異なったもののためにあなたがそれらをどこから購入したか調べてデータシートか種類の何かを見つけることを試みるようにしてください。ケースR1は実際には私たちのLDRなので、その方程式を元に戻して数学の魔法(数学的な電気の魔法)を行いましょう。まず、これらのキロオームの値をオームに変換する必要があります。

200キロオーム= 200,000オーム10キロオーム= 10,000オーム

それで、私たちが真っ暗な時に出力電圧が何であるかを見つけるために、我々は以下の数を差し込みます:

5 * (10000 / (200000 + 10000))

それは我々がArduinoから得ているものであるので入力は5Vです。

5 *(10000 /(10000 + 10000))これにより、正確に2.5Vが得られます。

それで、これらは我々がArduinoのアナログピンに入るであろう電圧値です、しかし、これらはプログラムで見られるであろう値ではありません、「しかし、なぜ?」あなたは尋ねるかもしれません。

Arduinoは、アナログ電圧を使用可能なデジタルデータに変換するアナログ - デジタルチップを使用しています。 0または5VであるHIGHまたはLOW状態を読み取ることしかできないArduinoのデジタルピンとは異なり、アナログピンは0-5Vから読み取り、これを0-1023の数値範囲に変換することができます。 。

Arduinoが実際にどのような値を読むのかを実際に計算することができます。

これは線形関数になるため、次の式を使用できます。Y = mX + C

どこに。 Y =デジタル値m =勾配、(上昇/走行)、(デジタル値/アナログ値)ここで、 C = Y切片Y切片は0なので、次のようになります。Y = mXm = 1023/5 = 204.6したがって、デジタル値= 204.6 *アナログ値ピッチ黒では、デジタル値は204.6 * 0.24になります。

これは約49になります。そしてピーク輝度では、204.6 * 2.5となります。

これは約511になります。

2つのアナログピンにこれら2つを設定すると、2つの整数変数を作成して2つの値を格納し、比較演算子を使用してどちらが最も低い値かを確認し、ロボットをその方向に向けることができます。

ステップ5: