このチュートリアルでは、力センサー、Arduino Uno、およびサーボモーターを使用して回路を開発します。これは、サーボシャフトの位置が力センサーに存在する重量によって決定されるサーボ制御システムになります。先に進む前に、サーボと他のコンポーネントについて話しましょう。
サーボモーターは、シャフトの正確な動きや位置が必要な場合に使用されます。これらは高速アプリケーションには提案されていません。これらは、低速、中トルク、および正確な位置のアプリケーション向けに提案されています。これらのモーターは、ロボットアームマシン、飛行制御、および制御システムで使用されます。サーボモーターは、一部のプリンターやファックス機でも使用されています。
サーボモーターは、さまざまな形状とサイズで入手できます。サーボモーターは主にワイヤーがあり、1つは正電圧用、もう1つはアース用、最後の1つは位置設定用です。赤の線は電源に接続され、黒の線はアースに接続され、黄色の線は信号に接続されています。
サーボモーターは、DCモーター、位置制御システム、ギアの組み合わせです。DCモーターのシャフトの位置は、PWM信号のデューティ比SIGNALピンに基づいて、サーボの制御電子機器によって調整されます。簡単に言えば、制御電子機器はDCモーターを制御することによってシャフトの位置を調整します。シャフトの位置に関するこのデータは、SIGNALピンを介して送信されます。コントロールへの位置データは、サーボモーターの信号ピンを介してPWM信号の形式で送信する必要があります。
PWM(Pulse Width Modulated)信号の周波数は、サーボモーターのタイプによって異なります。ここで重要なのは、PWM信号のデューティ比です。この義務に基づいて、制御電子機器がシャフトを調整します。
下の図に示すように、シャフトを9時の位置に移動するには、ターンオン比が1/18である必要があります。18msの信号で、「オン時間」の1ミリ秒と「オフ時間」の17ミリ秒。
シャフトを12oクロックに移動するには、信号のオン時間は1.5ミリ秒、オフ時間は16.5ミリ秒である必要があります。
この比率はサーボの制御システムによってデコードされ、それに基づいて位置を調整します。
ここでのこのPWMは、ARDUINOUNOを使用して生成されます。
したがって、今のところ、UNOによって生成されるPWM信号のデューティ比を変更することでサーボモーターシャフトを制御できることがわかります。
それでは、力センサーまたは重量センサーについて説明しましょう。
FORCEセンサーをARDUINOUNOとインターフェースするために、arduno unoの8ビットADC(アナログ-デジタル変換)機能を使用します。
FORCEセンサーは、表面に圧力がかかると抵抗が変化するトランスデューサーです。FORCEセンサーは、さまざまなサイズと形状で利用できます。
ここではあまり精度を必要としないため、より安価なバージョンの1つを使用します。FSR400は、市場で最も安価な力センサーの1つです。FSR400の写真を下図に示します。
ここで、FSR 400は長さに沿って敏感であることに注意することが重要です。図に示すように、力または重量はセンサーの目の中央にある迷路に集中する必要があります。
力が間違った時間に加えられた場合、デバイスは永久に損傷する可能性があります。
知っておくべきもう1つの重要なことは、センサーが高範囲の電流を駆動できることです。したがって、インストール中は駆動電流に注意してください。また、センサーには10ニュートンの力の制限があります。したがって、1Kgの重量しか適用できません。1Kgを超える重量が適用された場合、センサーに多少の偏差が見られる場合があります。3Kg以上増加した場合。センサーが恒久的に損傷する可能性があります。
前に述べたように、このセンサーは圧力の変化を感知するために使用されます。そのため、FORCEセンサーの上にウェイトをかけると、抵抗が大幅に変化します。重量に対するFS400の抵抗を下のグラフに示します。
上図に示すように、センサーの2つの接点間の抵抗は重量とともに減少するか、センサーの2つの接点間のコンダクタンスが増加します。
純粋な導体の抵抗は次の式で与えられます。
どこ、
p-導体の抵抗率
l =導体の長さ
A =導体の面積。
ここで、抵抗「R」の導体について考えます。導体の上部に圧力がかかると、圧力の結果として導体の面積が減少し、導体の長さが増加します。したがって、式により、抵抗Rは面積に反比例し、長さlにも正比例するため、導体の抵抗は増加するはずです。
したがって、これにより、圧力または重量がかかっている導体の場合、導体の抵抗が増加します。しかし、この変化は全体的な抵抗に比べて小さいです。かなりの変更のために、多くの導体が一緒に積み重ねられています。
これは、上の図に示されている力センサーの内部で発生することです。よく見ると、センサーの内側に多くの線が見えます。これらの線はそれぞれ導体を表しています。センサーの感度は導体番号にあります。
ただし、この場合、ここで使用されている材料は純粋な導体ではないため、抵抗は圧力とともに減少します。ここでのFSRは、堅牢なポリマー厚膜(PTF)デバイスです。したがって、これらは純粋な導体材料デバイスではありません。これらは、センサーの表面に加えられる力の増加とともに抵抗の減少を示す材料で構成されています。
この材料は、FSRのグラフに示すような特性を示しています。
この抵抗の変化は、私たちがそれらを読めない限り、何の役にも立ちません。手元のコントローラーは、電圧の可能性のみを読み取ることができます。これには、分圧回路を使用します。これにより、電圧の変化として抵抗の変化を導き出すことができます。
分圧器は抵抗回路であり、図に示されています。この抵抗ネットワークには、1つの一定の抵抗と他の可変の抵抗があります。図に示すように、ここでのR1は一定の抵抗であり、R2は抵抗として機能するFORCEセンサーです。
分岐の中点が測定されます。R2の変更により、Voutで変更があります。したがって、これにより、重量によって変化する電圧が得られます。
ここで注意すべき重要なことは、ADC変換のためにコントローラーが受け取る入力が50µAmpと低いことです。分圧器のVoutから引き出される電流がエラー率を増加させるため、抵抗ベースの分圧器のこの負荷効果は重要です。今のところ、負荷効果について心配する必要はありません。
これで、力がFORCE SENSORに加えられると、分周器側の電圧がUNOのADCチャネルに接続されているため、このピンを変更します。センサーにかかる力が変化するたびに、UNOのADCから異なるデジタル値を取得します。
このADCデジタル値はPWM信号のデューティ比に一致しているため、センサーに加えられた力に関連するサーボ位置制御があります。
コンポーネント
ハードウェア: UNO、電源(5v)、1000uFコンデンサ、100nFコンデンサ(3個)、100KΩ抵抗、サーボモーター(SG 90)、220Ω抵抗、FSR400力センサー。
ソフトウェア: Atmel studio6.2またはaurdinoを毎晩。
回路図と動作説明
力センサによるサーボモータ制御の回路図を下図に示します。
センサーの両端の電圧は完全に線形ではありません。うるさいものになります。ノイズを除去するために、図に示すように、分圧回路の各抵抗の両端にコンデンサが配置されます。
ここでは、分圧器によって提供される電圧(重量を線形に表す電圧)を取得し、ArduinoUnoのADCチャネルの1つに供給します。変換後、そのデジタル値(重みを表す)を取得してPWM値に関連付け、このPWM信号をサーボモーターに提供します。
したがって、重みを使用すると、デジタル値に応じてデューティ比が変化するPWM値が得られます。デジタル値が高いほど、PWMのデューティ比が高くなります。したがって、デューティ比が高いPWM信号では、概要で示した図のように、サーボシャフトが右端または左端に到達する必要があります。
重量が小さい場合、PWMデューティ比は低くなり、導入の図のように、サーボは右端に到達するはずです。
これにより、WEIGHTまたはFORCEによるサーボ位置制御が可能になります。
これを実現するには、プログラムでいくつかの命令を確立する必要があります。それらについては、以下で詳しく説明します。
図に示すように、ARDUINOには6つのADCチャネルがあります。それらでは、それらのいずれかまたはすべてをアナログ電圧の入力として使用できます。UNO ADCの分解能は10ビットです(したがって、(0-(2 ^ 10)1023)の整数値)。これは、0〜5ボルトの入力電圧を0〜1023の整数値にマッピングすることを意味します。 (5/1024 = 4.9mV)/ユニット。
ここではUNOのA0を使用します。私たちはいくつかのことを知る必要があります。
|
まず第一に、Arduino 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のPWMは、PCBボード上の「〜」で表される任意のピンで実現できます。UNOには6つのPWMチャネルがあります。PIN3を目的に使用します。
AnalogWrite(3、VALUE); |
上記の条件から、対応するピンでPWM信号を直接取得できます。括弧内の最初のパラメータは、PWM信号のピン番号を選択するためのものです。2番目のパラメータはデューティ比を書き込むためのものです。
ArduinoUnoのPWM値は0から255まで変更できます。「0」を最低から「255」を最高にします。デューティ比として255を使用すると、PIN3で5Vが得られます。デューティ比が125と指定されている場合、PIN3で2.5Vが得られます。
さて、サーボモーターの制御についてお話しましょう。ArduinoUnoには、度の値を与えるだけでサーボの位置を制御できる機能があります。サーボを30にしたい場合は、プログラムで値を直接表すことができます。SERVOヘッダーファイルは、すべてのデューティ比の計算を内部で処理します。arduinoを使用したサーボモーター制御について詳しくは、こちらをご覧ください。
これで、sg90は0〜180度に移動でき、ADCの結果は0〜1024になります。
したがって、ADCはサーボ位置の約6倍です。したがって、ADCの結果を6で割ると、おおよそのサーボハンドの位置が得られます。したがって、デューティ比がWEIGHTまたはFORCEに比例して変化するPWM信号があります。これをサーボモーターに与えることで、力センサーでサーボモーターを制御することができます。