- LM393スピードセンサーモジュール(H206)
- H206センサーの取り付け配置
- DIY ArduinoLM393速度センサーロボット回路図
- LM393速度センサーモジュールによる速度測定の背後にあるロジック
- ホイールの移動距離の測定の背後にあるロジック
- ボットの角度を測定する背後にあるロジック
- Arduinoロボットコード
- 距離、速度、角度を測定するためのArduinoロボットのテスト
ロボットは私たちの生活をよりシンプルにするためにゆっくりと私たちの社会に這い始めました。英国の道路には、スターシップの6輪の食品配達ロボットがすでにあり、民間人の間をスマートに移動して目的地に到着しています。環境に移動するすべての移動ロボットは、実世界に対するその位置と向きを常に認識している必要があります。 GPS、RF三角測量、加速度計、ジャイロスコープなどのさまざまなテクノロジーを使用してこれを実現する方法はたくさんあります。それぞれのテクニックには独自の利点があり、それ自体が独自のものです。このArduinoLM393スピードセンサーチュートリアルでは、シンプルで簡単に入手できるLM393スピードセンサーモジュールを使用しますArduinoを使用して、速度、移動距離、ロボットの角度などの重要なパラメータを測定します。これらのパラメータを使用すると、ロボットは実際の状態を知ることができ、安全にナビゲートするために使用できます。
Arduinoは、単純なラインフォロワーから、より複雑なセルフバランシングまたは床掃除ロボットまで、ロボットを構築するための愛好家の間で最も人気のある選択肢です。ロボット工学のセクションであらゆる種類のロボットをチェックできます。
リチウム電池を動力源とする小型ロボットを製作し、ジョイスティックで駆動します。実行時に、ロボットの速度、距離、角度を測定し、 Arduinoに接続されたLCDディスプレイにリアルタイムで表示できます。このプロジェクトは、これらのパラメーターの測定に役立ちます。これが完了したら、これらのパラメーターを使用して、必要に応じてボットを自律的に操作できます。面白そうですね。それでは始めましょう。
LM393スピードセンサーモジュール(H206)
プロジェクトの回路図とコードに入る前に、LM393速度センサーモジュールがプロジェクトで重要な役割を果たしていることを理解しましょう。H206スピードセンサーモジュールは、 LM393電圧コンパレータICと統合し、赤外光センサーその名LM393スピードセンサーから構成されています。モジュールは、モーターの回転シャフトに取り付ける必要のあるグリッドプレートでも構成されています。以下の画像では、すべてのコンポーネントにラベルが付けられています。
赤外光センサはIR LED及び小GABによって分離されたフォトトランジスタから成ります。上に示すように、センサーの配置全体が黒いハウジングに配置されます。グリッドプレートはスロットで構成され、センサーがグリッドプレートのギャップを感知できるように、プレートは赤外線センサーのギャップの間に配置されます。グリッドプレートの各ギャップは、ギャップを通過するときにIRセンサーをトリガーします。これらのトリガーは、コンパレータを使用して電圧信号に変換されます。コンパレータは、ON半導体のLM393ICに他なりません。モジュールには3つのピンがあり、そのうち2つはモジュールに電力を供給するために使用され、1つの出力ピンはトリガーの数をカウントするために使用されます。
H206センサーの取り付け配置
これらのタイプのセンサーの取り付けは少し注意が必要です。シャフトが両側に突き出ているモーターにのみ取り付けることができます。シャフトの片側はホイールに接続され、反対側は上記のようにグリッドプレートを取り付けるために使用されます。
ホイールとプレートは同じシャフトに接続されているため、両方とも同じ速度で回転します。したがって、プレートの速度を測定することで、ホイールの速度を測定できます。グリッドプレートのギャップがIRセンサーを通過することを確認してください。そうしないと、センサーは通過したギャップの数をカウントできなくなります。また、指定された条件を満たす限り、センサーを取り付けるための独自の機械的配置を考え出すこともできます。IRセンサーは、多くのロボティクスプロジェクトで一般的に使用され、障害物についてロボットを誘導します。
上に示したグリッドプレートには20個のスロット(グリッド)があります。これは、センサーがホイールの1回転に対して20個のギャップを検出することを意味します。センサーが検出したギャップの数を数えることで、ホイールが移動した距離を計算できます。同様に、センサーがギャップを検出する速度を測定することで、ホイールの速度を検出できます。私たちのロボットでは、このセンサーを両方の車輪に取り付けているので、ロボットの角度も見つけることができます。ただし、回転角は、加速度計またはジャイロスコープを使用してより賢明に計算できます。ここで、加速度計とジャイロスコープをArduinoと接続し、それらを使用して回転角を測定してみてください。
DIY ArduinoLM393速度センサーロボット回路図
この速度および距離検知ロボットの完全な回路図を以下に示します。ボットは、で構成されてArduinoのナノその頭脳として、ホイール用の2つのDCモータはL298N Hブリッジモータドライバモジュールによって駆動されます。ジョイスティックはボットの速度と方向を制御するために使用され、2つの速度センサーH206はボットの速度、距離、および角度を測定するために使用されます。測定値は16x2LCDモジュールに表示されます。 LCDに接続されたポテンショメータを使用してLCDのコントラストを調整し、抵抗を使用してLCDのバックライトに流れる電流を制限します。
完全な回路が7.4Vのリチウム電池によって供給されています。この7.4Vは、モータードライバーモジュールの12Vピンに供給されます。次に、モータードライバーモジュールの電圧レギュレーターが7.4Vを安定化された+ 5Vに変換し、Arduino、LCD、センサー、ジョイスティックに電力を供給します。
モーターは、Arduinoのデジタルピン8、9、10、11によって制御されます。モーターの速度も制御する必要があるため、モーターの正端子にPWM信号を供給する必要があります。したがって、ピン9と10があり、どちらもPWM対応ピンです。ジョイスティックのX値とY値は、それぞれアナログピンA2とA3を使用して読み取られます。
私たちが知っているように、H206センサーはグリッドプレートのギャップが検出されたときにトリガーを生成します。正しい速度と距離を計算するためにこれらのトリガーを常に正確に読み取る必要はないため、両方のトリガー(出力)ピンがArduinoボードの外部割り込みピン2と3に接続されています。説明したように回路全体をシャーシに組み立て、速度センサーを取り付けます。接続が完了すると、ボットは次のようになりました。このページの最後にあるビデオを見て、センサーがどのように取り付けられているかを知ることもできます。
ハードウェアの部分が完成したので、ボットの速度、距離、単一を測定する方法のロジックに入り、プログラミングのセクションに進みます。
LM393速度センサーモジュールによる速度測定の背後にあるロジック
センサーの取り付け設定から、LM393速度センサーモジュール(H206)はグリッドプレートに存在するギャップのみを測定することに注意してください。取り付け中は、ホイール(速度を測定する必要があります)とグリッドプレートが同じ速度で回転することを確認する必要があります。ここのように、ホイールとプレートの両方を同じシャフトに取り付けているので、両方とも明らかに同じ速度で回転します。
私たちのセットアップでは、ボットの角度を測定するために、各ホイールに2つのセンサーを取り付けました。ただし、速度と距離のみを測定することが目的の場合は、センサーを任意の1つのホイールに取り付けることができます。センサーの出力(トリガー信号)は、最も一般的にはマイクロコントローラーの外部割り込みピンに接続されます。グリッドプレートのギャップが検出されるたびに、割り込みがトリガーされ、ISR(割り込みサービスルーチン)のコードが実行されます。このような2つのトリガー間の時間間隔を計算できれば、ホイールの速度を計算できます。
Arduinoでは、 millis() 関数を使用してこの時間間隔を簡単に計算できます。このミリ秒関数は、デバイスの電源を入れたときから1ミリ秒ごとに1ずつ増加し続けます。したがって、最初の割り込みが発生したときに、millis()の値をダミー変数(このコードの pevtime など)に保存し、2番目の割り込みが発生したときに、millis()から pevtime 値を減算することで時間を計算できます。。
かかった時間=現在の時間–以前の かかった時間=ミリ秒()-pevtime ; // timetakenでミリ秒
所要時間を計算したら、次の式を使用してrpmの値を簡単に計算できます。ここで、(1000 / timetaken)はRPS(1秒あたりの回転数)を示し、60を掛けてRPSをRPM(1分あたりの回転数)に変換します。 。
rpm =(1000 /所要時間)* 60;
回転数を計算した後、ホイールの半径がわかっていれば、以下の式を使用して車両の速度を計算できます。
速度=2π×RPS×ホイールの半径。 v = radius_of_wheel * rpm * 0.104
上記の式はm / sで速度を計算するためのものであり、km / hrで計算する場合は、0.0104を0.376に置き換えます。値0.104がどのように取得されたかを知りたい場合は、式V =2π×RPS×ホイールの半径を単純化してみてください。
ホールセンサーを使用して回転物体の速度を測定する場合でも、同じ手法が使用されます。ただし、H206センサーには問題があり、グリッドプレートには20個のスロットがあるため、2つのスロットギャップ間の時間を測定すると、マイクロコントローラーが過負荷になります。したがって、ホイールが完全に回転したときのみ速度を測定します。ギャップごとに2つの割り込みが生成されるため(ギャップの開始時と終了時に1つ)、ホイールが1回転するのに合計40の割り込みが発生します。したがって、実際にホイールの速度を計算する前に、40回の割り込みを待ちます。同じためのコードを以下に示します
if(rotation> = 40) { timetaken = millis()-pevtime; //ミリ秒単位の時間 rpm =(1000 / timetaken)* 60; // rpmを計算する式 pevtime = millis(); 回転= 0; }
この方法のもう1つの欠点は、rpm値を計算するためにホイールが1回転を完了するのを割り込みが常に待機するため、速度の値がゼロに低下しないことです。この欠点は、2つの割り込み間の時間間隔を監視する単純なコードを追加することで簡単に克服でき、通常よりも長い場合は、rpmと速度の値を強制的にゼロにすることができます。以下のコードのリンクでは、変数 dtime を使用して時間の差を確認し、500ミリ秒を超えると、速度とrpmの値を強制的にゼロにします。
/ *車両が停止した場合にゼロにドロップする* / if(millis()-dtime> 500)// 500msの間中断が見つかりません { rpm = v = 0; // rpmと速度をゼロにします dtime = millis(); }
ホイールの移動距離の測定の背後にあるロジック
ホイールが完全に1回転すると、Arduinoが40回の割り込みを感知することはすでにわかっています。したがって、ホイールが1回転するごとに、ホイールが移動した距離がホイールの円周に等しいことは明らかです。ホイールの半径はすでにわかっているので、次の式を使用して走行距離を簡単に計算できます。
距離=2πr*回転数 距離=(2 * 3.141 * radius_of_wheel)*(left_intr / 40)
ここで、ホイールの円周は式2πrを使用して計算され、ホイールの回転数が乗算されます。
ボットの角度を測定する背後にあるロジック
ロボットの天使を決定する方法はたくさんあります。これらの値を決定するために、通常、加速度計とジャイロスコープが使用されます。しかし、もう1つの安価なアプローチは、両方のホイールにH206センサーを使用することです。このようにして、各ホイールが何回転したかを知ることができます。次の図は、角度の計算方法を示しています。
ロボットが初期化されると、ロボットが向いている角度は0°と見なされます。そこから左に回転すると角度が負に増加し、右に回転すると天使が正に増加します。理解のために、図に示すように-90から+90の範囲を考えてみましょう。このような配置では、両方のホイールが同じ直径であるため、ホイールのいずれかが完全に回転すると、ボットは90°の角度で回転します。
たとえば、左のホイールが1回転(80割り込み)すると、ボットは左に90度回転し、同様に、右のホイールが1回転(80割り込み)すると、ボットは右に-90°回転します。これで、Arduinoが1つのホイールで80の割り込みを検出した場合、ボットは90°回転し、どのホイールに基づいてボットが正(右)または負(左)に回転したかがわかります。したがって、左右の角度は次の式を使用して計算できます
int angle_left =(left_intr%360)*(90/80); int angle_right =(right_intr%360)*(90/80);
ここで、90は、80の割り込みを作成するときにカバーされる角度です。結果の値は、割り込みの数に乗算されます。また、360のモジュラスを使用して、結果の値が36を超えないようにしました。左右の角度を計算すると、ボットが向いている有効角度は、直角から左の角度を引くことで簡単に得られます。
angle = angle_right-angle_left;
Arduinoロボットコード
この速度と角度の測定ロボットの完全なArduinoコードは、このページの最後にあります。プログラムの目的は、上記のロジックを使用してボットの速度、距離、角度を計算し、それをLCD画面に表示することです。それとは別に、ジョイスティックを使用してボットを制御するオプションを提供する必要があります。
2つのモーターのデジタルI / Oピンを定義することからプログラムを開始します。モーターの速度も制御する必要があるため、ArduinoのPWMピンを使用してモーターを制御する必要があることに注意してください。ここでは、ピン8、9、10、および11を使用しました。
#define LM_pos 9 //左モーター #defineLM_neg 8 //左モーター #defineRM_pos 10 //右モーター #defineRM_neg 11 //右モーター #definejoyX A2 #define joyY A3
カバーされる速度と距離を測定するには、ホイールの半径を知り、値を測定して、以下に示すようにメートルで入力する必要があります。私のボットの半径は0.033メートルでしたが、ボットによって異なる場合があります。
float radius_of_wheel = 0.033; //ホイールの半径を測定し、ここにcm単位で入力します
セットアップ 関数内で、すべての値をゼロに初期化してから、LCDにイントロテキストを表示します。また、デバッグ用にシリアルモニターを初期化しました。次に、速度センサーH206が外部割り込みとしてピン2と3に接続されていることを説明しました。これは、割り込みが検出される たびに 、ISR関数 Left_ISR および Right_ISR がそれに応じて実行される場所です。
void setup() { 回転= rpm = pevtime = 0; //すべての変数をゼロに初期化します Serial.begin(9600); lcd.begin(16、2); // 16 * 2 LCDを初期化します lcd.print( "Bot Monitor"); //イントロメッセージライン 1lcd.setCursor(0、1); lcd.print( "-CircuitDigest"); //イントロメッセージライン 2delay(2000); lcd.clear(); lcd.print( "Lt:Rt:"); lcd.setCursor(0、1); lcd.print( "S:D:A:"); pinMode(LM_pos、OUTPUT); pinMode(LM_neg、OUTPUT); pinMode(RM_pos、OUTPUT); pinMode(RM_neg、OUTPUT); digitalWrite(LM_neg、LOW); digitalWrite(RM_neg、LOW); attachInterrupt(digitalPinToInterrupt(2)、Left_ISR、CHANGE); // Left_ISRは、左ホイールセンサーがトリガーされたときに呼び出されます attachInterrupt(digitalPinToInterrupt(3)、Right_ISR、CHANGE); // Right_ISRは、右ホイールセンサーがトリガーされたときに呼び出されます }
Left_ISRルーチン内で、left_intrという変数をインクリメントするだけです。この変数は、後でボットの角度の測定に使用されます。Right_ISR内でも同じことを行いますが、さらにここで速度も計算します。可変回転は割り込みごとにインクリメントされ、上記のロジックを使用して速度が計算されます。
void Left_ISR() { left_intr ++; delay(10); } void Right_ISR() { right_intr ++; delay(10); 回転++; dtime = millis(); if(rotation> = 40) { timetaken = millis()-pevtime; //ミリ秒単位の時間 rpm =(1000 / timetaken)* 60; // rpmを計算する式 pevtime = millis(); 回転= 0; } }
メインの無限ループ関数内で、ジョイスティックからXとYの値を監視します。ジョイスティックを動かした場合の値に基づいて、それに応じてボットを制御します。ボットの速度は、ジョイスティックがどれだけ押されたかによって異なります。
int xValue = analogRead(joyX ); int yValue = analogRead(joyY ); int加速度=マップ(xValue、500、0、0、200); if(xValue <500) { analogWrite(LM_pos、acceleration); AnalogWrite(RM_pos、acceleration); } else { analogWrite(LM_pos、0); AnalogWrite(RM_pos、0); } if(yValue> 550) analogWrite(RM_pos、80); if(yValue <500) analogWrite(LM_pos、100);
これは、ユーザーがボットを移動して、取得した値が期待どおりかどうかを確認するのに役立ちます。最後に、上記のロジックを使用してボットの速度、距離、角度を計算し、以下のコードを使用してLCDに表示できます。
v = radius_of_wheel * rpm * 0.104; //0.033は、メートル 距離 でのホイールの半径=(2 * 3.141 * radius_of_wheel)*(left_intr / 40); int angle_left =(left_intr%360)*(90/80); int angle_right =(right_intr%360)*(90/80); angle = angle_right-angle_left; lcd.setCursor(3、0); lcd.print( ""); lcd.setCursor(3、0); lcd.print(left_intr); lcd.setCursor(11、0); lcd.print( ""); lcd.setCursor(11、0); lcd.print(right_intr); lcd.setCursor(2、1); lcd.print( ""); lcd.setCursor(2、1); lcd.print(v); lcd.setCursor(9、1); lcd.print( ""); lcd.setCursor(9、1); lcd.print(distance); lcd.setCursor(13、1); lcd.print( ""); lcd.setCursor(13、1); lcd.print(angle);
距離、速度、角度を測定するためのArduinoロボットのテスト
ハードウェアの準備ができたら、コードをArduinoにアップロードし、ジョイスティックを使用してボットを移動します。ボットの速度、ボットがカバーする距離、角度が次のようにLCDに表示されます。
LCDでは、LtとRtという用語は、それぞれ左割り込みカウントと右割り込みカウントを表します。これらの値は、センサーによって検出されたギャップごとに増分されることがわかります。TEM Sは、M /秒、Dは距離メートルで覆わ示す用語でボットの速度を示します。ボットの角度は、0°が直線の場合は負になり、反時計回りの回転の場合は正になり、時計回りの回転の場合は正になります。
このページの最後にあるビデオを見て、ボットがどのように機能するかを理解することもできます。あなたがプロジェクトを理解し、それを構築することを楽しんだことを願っています。ご不明な点がございましたら、コメント欄にご記入ください。できる限り返信させていただきます。フォーラムを使用して、技術的なヘルプをすばやく入手することもできます。