このチュートリアルでは、FLEXセンサー、Arduino Uno、およびサーボモーターを使用して回路を開発します。このプロジェクトは、サーボシャフトの位置がFLEXセンサーの屈曲または屈曲または偏差によって決定されるサーボ制御システムです。
まず、サーボモーターについて少しお話ししましょう。サーボモーターは、シャフトの正確な動きや位置が必要な場合に使用されます。これらは高速アプリケーションには提案されていません。これらは、低速、中トルク、および正確な位置のアプリケーション向けに提案されています。これらのモーターは、ロボットアームマシン、飛行制御、および制御システムで使用されます。サーボモーターは、自動販売機などの組み込みシステムで使用されます。
サーボモーターは、さまざまな形状とサイズで入手できます。サーボモーターは主にワイヤーがあり、1つは正電圧用、もう1つはアース用、最後の1つは位置設定用です。赤の線は電源に接続され、黒の線はアースに接続され、黄色の線は信号に接続されています。
サーボモーターは、DCモーター、位置制御システム、ギアの組み合わせです。DCモーターのシャフトの位置は、PWM信号のデューティ比SIGNALピンに基づいて、サーボの制御電子機器によって調整されます。
簡単に言えば、制御電子機器はDCモーターを制御することによってシャフトの位置を調整します。シャフトの位置に関するこのデータは、SIGNALピンを介して送信されます。コントロールへの位置データは、サーボモーターの信号ピンを介してPWM信号の形式で送信する必要があります。
PWM(Pulse Width Modulated)信号の周波数は、サーボモーターのタイプによって異なります。ここで重要なのは、PWM信号のデューティ比です。この義務に基づいて、制御電子機器がシャフトを調整します。シャフトを9時の位置に移動するには、ターンオン比が1/18である必要があります。18ミリ秒の信号で1ミリ秒の「オン時間」と17ミリ秒の「オフ時間」。
シャフトを12oクロックに移動するには、信号のオン時間は1.5ミリ秒、オフ時間は16.5ミリ秒である必要があります。この比率はサーボの制御システムによってデコードされ、それに基づいて位置を調整します。
ここでのこのPWMは、ARDUINOUNOを使用して生成されます。したがって、今のところ、ArduinoUnoによって生成されるPWM信号のデューティ比を変更することでサーボモーターシャフトを制御できることがわかっています。UNOには、PWM信号に支障をきたすことなくサーボの位置を提供できる特別な機能があります。ただし、PWMデューティ比とサーボ位置の関係を知ることは重要です。これについては、説明で詳しく説明します。
それでは、FLEXSENSORについてお話ししましょう。FLEXセンサーをARDUINOUNOに接続するために、8ビットADC(アナログ-デジタル変換)機能を使用して作業を行います。FLEXセンサーは、形状が変化すると抵抗が変化するトランスデューサーです。FLEXセンサーの長さは2.2インチ、または指の長さです。図に示します。
フレックスセンサーは、直線面が曲がると抵抗が変化するトランスデューサーです。そのため、フレックスセンサーという名前が付けられました。簡単に言えば、センサー端子の抵抗は、曲げると増加します。これを下図に示します。
この抵抗の変化は、私たちがそれらを読めない限り、何の役にも立ちません。手元のコントローラーは、電圧の可能性のみを読み取ることができます。このため、分圧回路を使用します。これにより、電圧の変化として抵抗の変化を導き出すことができます。
分圧器は抵抗回路であり、図に示されています。この抵抗ネットワークには、1つの一定の抵抗と他の可変の抵抗があります。図に示すように、ここでのR1は一定の抵抗であり、R2は抵抗として機能するFLEXセンサーです。
分岐の中点が測定されます。R2の変更により、Voutで変更があります。したがって、これにより、重量によって変化する電圧が得られます。
ここで注意すべき重要なことは、ADC変換のためにコントローラーが受け取る入力が50µAmpと低いことです。分圧器のVoutから引き出される電流がエラー率を増加させるため、抵抗ベースの分圧器のこの負荷効果は重要です。今のところ、負荷効果について心配する必要はありません。
曲げると抵抗が変化するフレックスセンサー。このトランスデューサーを分圧回路に接続すると、トランスデューサーのFLEXで電圧が変化します。この可変電圧はADCチャネルの1つに供給されます。FLEXに関連するデジタル値があります。
このデジタル値をサーボ位置に一致させ、これによりフレックスによるサーボ制御を行います。
コンポーネント
ハードウェア: Arduino Uno 、 電源(5v)、1000 uFコンデンサ、100nFコンデンサ(3個)、100KΩ抵抗、サーボモーター(SG 90)、220Ω抵抗、FLEXセンサー。
ソフトウェア: Atmel studio6.2またはAurdinoを毎晩。
回路図と説明
FLEXセンサーによるサーボモーター制御の回路図を下図に示します。
センサーの両端の電圧は完全に線形ではありません。うるさいものになります。ノイズを除去するために、図に示すように、分圧回路の各抵抗の両端にコンデンサが配置されています。
ここでは、分圧器によって提供される電圧(重量を線形に表す電圧)を取得し、ArduinoUNOのADCチャネルの1つに供給します。これにはA0を使用します。ADCの初期化後、センサーの曲がりを表すデジタル値が得られます。この値を取り、サーボ位置と一致させます。
これを実現するには、プログラムでいくつかの命令を確立する必要があります。それらについては、以下で詳しく説明します。
図に示すように、ARDUINOには6つのADCチャネルがあります。それらでは、それらのいずれかまたはすべてをアナログ電圧の入力として使用できます。UNO ADCの分解能は10ビットです(したがって、(0-(2 ^ 10)1023)の整数値)。これは、0〜5ボルトの入力電圧を0〜1023の整数値にマッピングすることを意味します。 (5/1024 = 4.9mV)/ユニット。
ここではUNOのA0を使用します。
私たちはいくつかのことを知る必要があります。
|
まず、UNOADCチャネルのデフォルトの基準値は5Vです。これは、任意の入力チャネルでのADC変換に5Vの最大入力電圧を与えることができることを意味します。一部のセンサーは0〜2.5Vの電圧を提供するため、5Vのリファレンスでは精度が低下します。そのため、このリファレンス値を変更できるようにする命令があります。したがって、参照値を変更するために、(「analogReference();」)を残します。
デフォルトでは、10ビットの最大ボードADC解像度が得られます。この解像度は、命令(「analogReadResolution(bits);」)を使用して変更できます。この解像度の変更は、場合によっては便利です。今のところ、そのままにしておきます。
上記の条件がデフォルトに設定されている場合、関数「analogRead(pin);」を直接呼び出すことにより、チャネル「0」のADCから値を読み取ることができます。ここで「pin」はアナログ信号を接続したピンを表します。この場合は「A0」になります。
ADCからの値は、「int SENSORVALUE = analogRead(A0);」のように整数に変換できます。」、この命令により、ADCが整数「SENSORVALUE」に格納された後の値。
それではサーボについてお話しましょう。UNOには度数を与えるだけでサーボ位置を制御できる機能があります。サーボを30にしたい場合は、プログラムで値を直接表すことができます。SERVOヘッダーファイルは、すべてのデューティ比の計算を内部で処理します。
#include
サーボサーボ; Servo.attach(3); Servo.write(度); |
最初のステートメントは、サーボモーターを制御するためのヘッダーファイルを表します。
2番目のステートメントはサーボに名前を付けることです。サーボ自体として残します。
3番目のステートメントは、サーボ信号ピンが接続されている場所を示しています。これはPWMピンでなければなりません。ここではPIN3を使用しています。
4番目のステートメントは、サーボモーターを位置決めするためのコマンドを示し、度単位です。30を与えると、サーボモーターは30度回転します。
これで、sg90は0〜180度に移動でき、ADCの結果は0〜1024になります。
したがって、ADCはサーボ位置の約6倍です。したがって、ADCの結果を6で割ると、おおよそのサーボハンドの位置が得られます。
これにより、サーボモーターにサーボ位置の値が供給されます。これは、屈曲または屈曲に比例します。このフレックスセンサーをグローブに装着すると、手の動きでサーボ位置を制御できます。