- MPU6050ジャイロスコープおよび加速度センサー
- フレックスセンサー
- 3DプリントされたロボットARMの準備:
- 必要なコンポーネント:
- 回路図:
- MPU6050とフレックスセンサーの手袋への取り付け
- ロボットアーム用のArduinoNanoのプログラミング
- Arduinoを使用したジェスチャー制御ロボットアームの動作
ロボットアームは魅力的なエンジニアリング作品の1つであり、人間の腕と同じように複雑なことを行うために、これらのものが傾いたりパンしたりするのを見るのは常に魅力的です。これらのロボットアームは、溶接、穴あけ、塗装などの激しい機械的作業を行う組立ラインの産業で一般的に見られます。最近では、複雑な外科手術を行うために高精度の高度なロボットアームも開発されています。以前は、ロボットアームを3Dプリントし、ARM7マイクロコントローラーを使用してDIYピックアンドプレースロボットアームを構築しました。再び同じ3Dプリントされたロボットアームを 使用して、Arduino Nano、MPU6050ジャイロスコープ、およびフレックスセンサーを使用して ハンドジェスチャー制御のロボットARMを作成します。
この3D印刷されたロボットアームの位置は、MPU6050ジャイロスコープとフレックスセンサーが取り付けられたハンドグローブを介して制御され ます。フレックスセンサーはロボットアームのグリッパーサーボを制御するために使用され、MPU6050はX軸とY軸でのロボットの動きに使用されます。プリンターをお持ちでない場合は、Arduinoロボットアームプロジェクト用に作成したように、簡単なボール紙で腕を作成することもできます。インスピレーションについては、Arduinoを使用して以前に構築したRecord and Play RoboticArmを参照することもできます。
詳細に入る前に、まず、MPU6050センサーとフレックスセンサーについて学びましょう。
MPU6050ジャイロスコープおよび加速度センサー
MPU6050は、Micro-Mechanical Systems(MEMS)テクノロジーに基づいています。このセンサーには、 3軸加速度計、3軸ジャイロスコープ、および内蔵の温度センサーがあります。加速度、速度、向き、変位などのパラメーターを測定するために使用できます。以前にMPU6050をArduinoおよびRaspberry piとインターフェースし、セルフバランシングロボット、Arduinoデジタル分度器、Arduino傾斜計などのいくつかのプロジェクトを構築しました。
MPU6050センサーの機能:
- 通信:設定可能なI2Cアドレスを備えたI2Cプロトコル
- 入力電源:3-5V
- 内蔵の16ビットADCは高精度を提供します
- 内蔵のDMPは高い計算能力を提供します
- 磁力計などの他のI2Cデバイスとのインターフェースに使用できます
- 内蔵温度センサー
MPU6050のピン配置の詳細:
ピン | 使用法 |
Vcc | モジュールに電力を供給します。+ 3V〜 + 5Vにすることができます。通常、+ 5Vが使用されます |
接地 | システムのアースに接続 |
シリアルクロック(SCL) | I2C通信にクロックパルスを提供するために使用されます |
シリアルデータ(SDA) | I2C通信を介してデータを転送するために使用されます |
補助シリアルデータ(XDA) | 他のI2CモジュールをMPU6050とインターフェースするために使用できます |
補助シリアルクロック(XCL) | 他のI2CモジュールをMPU6050とインターフェースするために使用できます |
AD0 | 1つのMCUで複数のMPU6050を使用する場合は、このピンを使用してアドレスを変更できます。 |
割り込み(INT) | データがMCUが読み取ることができることを示す割り込みピン |
フレックスセンサー
フレックスセンサーは可変抵抗器に他なりません。フレックスセンサーの抵抗は、センサーを曲げると変化します。 それら は通常2.2インチ と 4.5インチの2つのサイズで利用できます 。
プロジェクトでフレックスセンサーを使用する理由
このジェスチャ制御ロボットアームでは、フレックスセンサーを使用してロボットアームのグリッパーを制御します。ハンドグローブのフレックスセンサーを曲げると、グリッパーに取り付けられているサーボモーターが回転し、グリッパーが開きます。
フレックスセンサーは多くのアプリケーションで役立つ可能性があり、ゲームコントローラーやトーンジェネレーターなどのフレックスセンサーを使用していくつかのプロジェクトを構築しました。
3DプリントされたロボットARMの準備:
このチュートリアルで使用される3D印刷されたロボットアーム は、Thingiverseで利用可能なEEZYbotARMによって提供された設計に従って作成され ました。3Dプリントされたロボットアームの作成とビデオによる詳細の組み立ての完全な手順は、上記で共有されているThingiverseリンクにあります。
上の画像は、4つのサーボモーターで組み立てた後の3Dプリントされたロボットアームの画像です。
必要なコンポーネント:
- Arduino Nano
- フレックスセンサー
- 10k抵抗
- MPU6050
- ハンドグローブ
- 接続線
- ブレッドボード
回路図:
次の画像は、Arduino ベースのジェスチャー制御ロボットアームの回路接続を示してい ます。
MPU6050とArduinoNano間の回路接続:
MPU6050 |
Arduino Nano |
VCC |
+ 5V |
GND |
GND |
SDA |
A4 |
SCL |
A5 |
サーボモーターとArduinoNano間の回路接続:
Arduino Nano |
サーボモーター |
電源アダプタ |
D2 |
サーボ1オレンジ(PWMピン) |
- |
D3 |
サーボ2オレンジ (PWMピン) |
- |
D4 |
サーボ3オレンジ (PWMピン) |
- |
D5 |
サーボ4オレンジ (PWMピン) |
- |
GND |
サーボ1,2,3,4ブラウン(GNDピン) |
GND |
- |
サーボ1、2、3、4赤 (+ 5Vピン) |
+ 5V |
フレックスセンサーは、 二つのピンが含まれています。極性端子は含まれていません。したがって、ピン1のP1は10kのプルアップ抵抗でArduino NanoのアナログピンA0に接続され、ピン2のP2はArduinoに接地されます。
MPU6050とフレックスセンサーの手袋への取り付け
MPU6050とフレックスセンサーをハンドグローブに取り付けました。ここでは、グローブとロボットアームを接続するために有線接続が使用されていますが、RF接続またはBluetooth接続を使用してワイヤレスにすることができます。
すべての接続後、ジェスチャー制御ロボットアームの最終セットアップ は次の画像のようになります。
ロボットアーム用のArduinoNanoのプログラミング
いつものように、 このチュートリアルの最後に、作業ビデオとともに完全なコードが示されています。ここでは、いくつかの重要なコード行について説明します。
1.まず、必要なライブラリファイルを含めます。 Wire.h ライブラリは、Arduino Nano&MPU6050間のI2C通信に使用され、 servo.h はサーボモーターを制御するために使用され ます。
#include
2.次に、クラスサーボのオブジェクトが宣言されます。4つのサーボモーターを使用するため、servo_1、servo_2、servo_3、servo_4などの4つのオブジェクトが作成されます。
サーボservo_1; サーボサーボ_2; サーボservo_3; サーボservo_4;
3。次に、MPU6050のI2Cアドレスと使用する変数を宣言します。
const int MPU_addr = 0x68; // MPU6050I2Cアドレス int16_taxis_X、axis_Y、axis_Z; int minVal = 265; int maxVal = 402; ダブルx; ダブルy; ダブルZ;
4.次に、 ボイド設定 で、シリアル通信用に9600のボーレートが設定されます。
Serial.begin(9600);
そして、ArduinoNanoとMPU6050間のI2C通信が確立されます。
Wire.begin(); // I2C通信を 初期化しますWire.beginTransmission(MPU_addr); // MPU6050との通信を開始します Wire.write(0x6B); //レジスタ6Bに書き込み ますWire.write(0); // 0を6Bレジスタに 書き込んでWire.endTransmission(true);をリセットします。// I2C送信を終了します
また、サーボモーター接続用に4つのPWMピンが定義されています。
Servo_1.attach(2); // Forward / Reverse_Motorservo_2.attach (3); // Up / Down_Motorservo_3.attach (4); // Gripper_Motorservo_4.attach (5); // Left / Right_Motor
5.次に、 voidループ 関数で、MPU6050とArduino Nanoの間にI2C接続を再度確立し、MPU6050のレジスタからX、Y、Z軸データの読み取りを開始して、対応する変数に格納します。
Wire.beginTransmission(MPU_addr); Wire.write(0x3B); // regsiter 0x3Bで開始 Wire.endTransmission(false); Wire.requestFrom(MPU_addr、14、true); // 14個のレジスタを読み取ります axis_X = Wire.read()<< 8-Wire.read(); axis_Y = Wire.read()<< 8-Wire.read(); axis_Z = Wire.read()<< 8-Wire.read();
その後、MPU6050センサーからの軸データの最小値と最大値を-90から90の範囲でマッピングします。
int xAng = map(axis_X、minVal、maxVal、-90,90); int yAng = map(axis_Y、minVal、maxVal、-90,90); int zAng = map(axis_Z、minVal、maxVal、-90,90);
次に、次の式を使用して、0〜360でx、y、zの値を計算します。
x = RAD_TO_DEG *(atan2(-yAng、-zAng)+ PI); y = RAD_TO_DEG *(atan2(-xAng、-zAng)+ PI); z = RAD_TO_DEG *(atan2(-yAng、-xAng)+ PI);
次に、Arduino NanoのA0ピンでフレックスセンサーのアナログ出力データを読み取り、フレックスセンサーのデジタル値に従ってグリッパーのサーボ角度を設定します。したがって、フレックスセンサーのデータが750より大きい場合、グリッパーのサーボモーター角度は0度であり、750未満の場合は180度です。
intグリッパー; int flex_sensorip = analogRead(A0); if(flex_sensorip> 750) { グリッパー= 0; } else { グリッパー= 180; } サーボ_3.write(グリッパー);
次に、X軸上の0から60までのMPU6050の 動きが 、サーボモーターのロボットアームの正逆運動に対して0から90度でマッピングされます。
if(x> = 0 && x <= 60) { int mov1 = map(x、0,60,0,90); Serial.print( "F / Rの動き="); Serial.print(mov1); Serial.println((char)176); Servo_1.write(mov1); }
また、X軸上のMPU6050の250から360への 移動は 、サーボモーターのUP / DOWNモーションロボットアームに対して0から90度でマッピングされます。
else if(x> = 300 && x <= 360) { int mov2 = map(x、360,250,0,90); Serial.print( "上下の動き="); Serial.print(mov2); Serial.println((char)176); Servo_2.write(mov2); }
Y軸上の0から60までのMPU6050の動きは 、サーボモーターのロボットアームの左の動きに対して90から180度でマッピングされます。
if(y> = 0 && y <= 60) { int mov3 = map(y、0,60,90,180); Serial.print( "左の動き="); Serial.print(mov3); Serial.println((char)176); Servo_4.write(mov3); }
Y軸でのMPU6050の300から360 への移動は、サーボモーターのロボットアームの右移動に対して0から90度でマッピングされます。
else if(y> = 300 && y <= 360) { int mov3 = map(y、360,300,90,0); Serial.print( "Movement in Right ="); Serial.print(mov3); Serial.println((char)176); Servo_4.write(mov3); }
Arduinoを使用したジェスチャー制御ロボットアームの動作
最後に、コードをArduino Nanoにアップロードし、MPU6050とフレックスセンサーが取り付けられたハンドグローブを着用します。
1.次に、手を下に動かしてロボットアームを前方に動かし、上に動かしてロボットアームを上に動かします。
2.次に、手を左または右に傾けて、ロボットアームを左または右に回します。
3.ハンドグローブの指で取り付けたフレックスケーブルを曲げてグリッパーを開き、離して閉じます。
完全な動作は、以下のビデオで示されています。