MPU6050はICである3軸加速度計と組み合わせた3軸ジャイロセンサ一つのユニットに。また、複雑なタスクを実行するための温度センサーとDCMも搭載しています。MPU6050は、ドローンや自己バランスロボットなどの他のリモートロボットの構築に一般的に使用されます。このプロジェクトでは、MPU6050の使用方法を学習します。傾斜計またはスピリットレベラーが構築されています。傾斜計は表面が完全に水平になっているかどうかをチェックするために使用されることがわかっているので、傾斜計はスプリットバブルメーターまたはデジタルメーターとして利用できます。このプロジェクトでは、Androidアプリケーションを使用して監視できるデジタル傾斜計を構築します。携帯電話のようなリモートディスプレイを使用する理由は、ハードウェアを見なくてもMPU6050の値を監視できるためです。これは、MPU6050がドローンやその他のアクセスできない場所に配置されている場合に非常に便利です。
必要な材料:
- Arduino Pro-mini(5V)
- MPU6050ジャイロセンサー
- HC-05またはHC-06Bluetoothモジュール
- FTDIボード
- ブレッドボード
- 接続線
- スマートフォン
回路図:
このArduino傾斜センサープロジェクトの完全な回路図を以下に示します。コンポーネントは3つだけで、ブレッドボード上に簡単に構築できます。
I2Cの助けを借りてMPU6050連通し、したがって、SDAピンは、SDAピンとSCLピンであるアルドゥイーノのA4端子に接続されているアルドゥイーノのA5ピンに接続されています。HC-06のBluetoothモジュールは、したがって、ブルートゥースの受信ピンがピンD11とBluetoothの送信ピンがアルドゥイーノのピンD10に接続されているに接続されているシリアル通信の助けを借りて動作します。これらのピンD10およびD11は、Arduinoをプログラミングすることによりシリアルピンとして構成されます。HC-05モジュールとMSP6050モジュールは+ 5Vで動作するため、上記のようにArduinoのVccピンから電力が供給されます。
私はいくつかのブレッドボード接続ワイヤーを使用し、小さなブレッドボードの上にセットアップを構築しました。接続が完了すると、ボードは次のようになります。
セットアップの強化:
私が行ったようにFTDIプログラミングボードを介して回路に電力を供給するか、9Vバッテリーまたは12Vアダプターを使用してArduino prominiのRawピンに接続することができます。Arduino Pro-miniには、この外部電圧調整済み+ 5Vを変換する電圧レギュレーターが組み込まれています。
Arduinoのプログラミング:
ハードウェアの準備ができたら、Arduinoのプログラミングを開始できます。いつものように、このプロジェクトの完全なコードはこのページの下部にあります。しかし、プロジェクトをよりよく理解するために、コードを小さな問題に分解し、以下の手順で説明しました。
最初のステップは、MPU6050とArduinoのインターフェースです。このプロジェクトでは、以下のリンクからダウンロードできるKorneliuszによって開発されたライブラリを使用します。
MPU6050リバティ-コルネリウスヤルゼブスキー
ZIPファイルをダウンロードして、ArduinoIDEに追加します。次に、 [ファイル]-> [例]-> [Arduino_MPU6050_Master]-> [MPU6050_gyro_pitch_roll_yaw]に進み ます。これにより、ダウンロードしたライブラリを使用するサンプルプログラムが開きます。したがって、アップロードをクリックして、プログラムがArduino Prominiにアップロードされるのを待ちます。それが完了したら、シリアルモニターを開き、ボーレートを115200に設定して、次のようになるかどうかを確認します。
最初は、3つの値はすべてゼロになりますが、ブレッドボードを移動すると、これらの値が変化するのを確認できます。変更された場合は接続が正しいことを意味し、そうでない場合は接続を確認してください。ここで少し時間を取って、センサーの傾き方によってピッチロールとヨーの3つの値がどのように変化するかに注目してください。混乱した場合は、Arduinoのリセットボタンを押すと、値が再びゼロに初期化されます。次に、センサーを一方向に傾けて、どの値が変化しているかを確認します。下の写真はあなたがよりよく理解するのに役立ちます。
これらの3つのパラメーターのうち、ロールとピッチにのみ関心があります。ロール値はX軸の傾きを示し、ピッチ値はY軸の傾きを示します。基本を理解したので、実際にArduinoのプログラミングを開始して、これらの値を読み取り、Bluetooth経由でArduinoに送信します。いつものように、このプロジェクトに必要なすべてのライブラリを含めることから始めましょう
#include
次に、Bluetoothモジュールのソフトウェアシリアルを初期化します。これは、Arduinoのソフトウェアシリアルライブラリにより可能であり、IOピンはシリアルピンとして機能するようにプログラムできます。ここでは、デジタルピンD10とD11を使用しています。ここで、D10 idRxとD11はTxです。
SoftwareSerial BT(10、11); // RX、TX
続いて、プログラムに必要な変数とオブジェクトを初期化し、 setup() 関数に移動して、シリアルモニターとBluetoothのボーレートを指定します。 HC-05およびHC-06の場合、ボーレートは9600であるため、同じものを使用する必要があります。次に、ArduinoのIICバスがMPU6050に接続されているかどうかを確認します。接続されていない場合は、警告メッセージを出力し、デバイスが接続されている限りそこに留まります。その後、ジャイロをキャリブレーションし、以下に示すようにそれぞれの機能を使用してしきい値を設定します。
void setup(){Serial.begin(115200); BT.begin(9600); // 9600ボーレートでBluetooth通信を開始します// MPU6050を初期化しますwhile(!mpu.begin(MPU6050_SCALE_2000DPS、MPU6050_RANGE_2G)){Serial.println( "有効なMPU6050センサーが見つかりませんでした。配線を確認してください!"); delay(500); } mpu.calibrateGyro(); //開始時にジャイロスコープを調整しますmpu.setThreshold(3); //感度を制御します}
「 mpu.calibrateGyro();」 という行 現在配置されている位置に合わせてMPU6050を調整します。この行は、MPU6050を校正する必要があり、すべての値をゼロに設定する必要がある場合はいつでも、プログラム内で複数回呼び出すことができます。 「mpu.setThreshold(3);」 この関数は、センサーの動きに対して値がどの程度変化するかを制御します。値が小さすぎるとノイズが増加するため、これをいじるときは注意してください。
void loop() 内で、ジャイロスコープと 温度センサーの値を繰り返し読み取り、ピッチ、ロール、ヨーの値を計算して、Bluetoothモジュールに送信します。次の2行は、生のジャイロ値と温度値を読み取ります
ベクトルノルム= mpu.readNormalizeGyro(); temp = mpu.readTemperature();
次に、時間ステップを掛けて前の値に加算することにより、ピッチ、ロール、ヨーを計算します。A タイムステップは 何もなく、連続した測定値の間の間隔ではありません。
ピッチ=ピッチ+ norm.YAxis * timeStep; ロール=ロール+ norm.XAxis * timeStep; yaw = yaw + norm.ZAxis * timeStep;
タイムステップをよりよく理解するために、以下の行を見てみましょう。この行は、10mSまたは0.01秒の間隔でMPU6050から値を正確に読み取るために配置されています。したがって、timeStepの値を0.01として宣言します。残り時間があれば、下の行を使用してプログラムを保持します。(millis()– timer())は、プログラムがこれまでに実行されるのにかかった時間を示します。0.01秒で減算し、残りの時間は遅延関数を使用してプログラムを保持します。
delay((timeStep * 1000)-(millis()-タイマー));
値の読み取りと計算が完了したら、Bluetooth経由で電話に送信できます。しかし、ここには問題があります。使用しているBluetoothモジュールは1バイト(8ビット)しか送信できないため、0から255までの数値のみを送信できます。したがって、値を分割してこの範囲内にマッピングする必要があります。これは次の行によって行われます
if(roll> -100 && roll <100)x = map(roll、-100、100、0、100); if(pitch> -100 && pipe <100)y = map(pitch、-100、100、100、200); if(temp> 0 && temp <50)t = 200 + int(temp);
理解できるように、rollの値は変数xに0から100にマップされ、ピッチは変数yに100から200にマップされ、tempは変数tに200以上にマップされます。同じ情報を使用して、送信したものからデータを取得できます。最後に、次の行を使用してBluetooth経由でこれらの値を書き込みます。
BT.write(x); BT.write(y); BT.write(t);
プログラム全体を理解した場合は、下にスクロールしてプログラムを確認し、Arduinoボードにアップロードしてください。
処理を使用したAndroidアプリケーションの準備:
このArduino傾斜計のAndroidアプリケーションは、ProcessingIDEを使用して開発されました。これはArduinoと非常によく似ており、システムアプリケーション、Androidアプリケーション、Webデザインなどの作成に使用できます。私たちはすでに処理を使用して、以下にリストされている他のクールなプロジェクトのいくつかを開発しました
- Arduinoを使用したピンポンゲーム
- 処理を使用したスマートフォン制御のFMラジオ。
- 処理と超音波センサーを使用したArduinoレーダーシステム
ただし、このアプリケーションの作成方法に関する完全なコードを説明することはできません。したがって、これを乗り越えるには2つの方法があります。以下のリンクからAPKファイルをダウンロードして、Androidアプリケーションを携帯電話に直接インストールすることもできます。または、下にスクロールして完全な処理コードを見つけ、それがどのように機能するかを自分で学んでください
ZIPファイル内には、Androidアプリケーションに読み込まれるすべての画像とその他のソースで構成される data というフォルダーがあります。以下の行は、Bluetoothが自動的に接続する名前を決定します
bt.connectToDeviceByName( "HC-06");
draw() 関数内では、ここで繰り返し実行され、画像を描画し、テキストを表示し、Bluetoothモジュールからの値に基づいてバーをアニメーション化します。プログラムを読むことで、各関数内で何が起こっているかを確認できます。
void draw()//無限ループ{background(0); imageMode(CENTER); image(ロゴ、幅/ 2、高さ/1.04、幅、高さ/ 12); load_images(); textfun(); getval(); }
最後に、もう1つ説明すべき重要なことがあります。ピッチ、ロール、温度の値を0から255に分割することを忘れないでください。ここで、通常の値に逆マッピングすることで、再び通常の値に戻します。
if(info <100 && info> 0)x = map(info、0、100、-(width / 1.5)/ 3、+(width / 1.5)/ 3); // x = info; else if(info <200 && info> 100)y = map(info、100、200、-(width / 4.5)/0.8、+(width / 4.5)/0.8); // y = info; else if(info> 200)temp = info -200; println(temp、x、y);
Bluetoothモジュールから電話にデータを取得するためのはるかに優れた方法がありますが、これは単なる趣味のプロジェクトであるため、無視しているため、興味があれば深く掘り下げることができます。
Arduino傾斜計の動作:
ハードウェアとアプリケーションの準備ができたら、私たちが構築したものを楽しんでください。Arduinoコードをボードにアップロードします 。Serial.println 行のコメントを削除し、シリアルモニターを使用してハードウェアが期待どおりに機能しているかどうかを確認することもできます。とにかく、それは完全にオプションです。
コードがアップロードされたら、携帯電話でAndroidアプリケーションを起動します。アプリケーションは自動的にHC-06モジュールに接続するはずであり、以下に示すように、アプリケーションの上部に「Connect to:HC-06」と表示されます。
最初は、温度値を除いてすべての値がゼロになります。これは、Arduinoがこの位置を基準としてMPU-6050を調整したためです。これで、ハードウェアを傾けて、モバイルアプリケーションの値もアニメーションとともに変化することを確認できます。アプリケーションの完全な動作は、以下のビデオで見つけることができます。これで、ブレッドボードをどこにでも配置して、表面が完全に水平になっているかどうかを確認できます。
あなたがプロジェクトを理解し、それから何か役に立つことを学んだことを願っています。疑問がある場合は、以下のコメントセクションまたはフォーラムを使用して解決してください。