AndroidアプリでArduinoロボットアームを制御する
コンポーネントと消耗品
このプロジェクトについて
このチュートリアルは、このページのリソースに基づいています。
LittleArmは、従来、WindowsおよびLinuxで実行される無料のデスクトップコンピューターアプリケーションを使用して制御されます。ただし、これには、LittleArmを制御対象のコンピューターに接続する必要があります。ついにLittleArmのアプリが完成し、BluetoothでArduinoをワイヤレスで制御できるようになりました。
このアプリを使用すると、LittleArmのすべてのDOFを制御できるだけでなく、コマンドのセットを記録して再生することもできます。 Arduinoのコードは、ここからのソフトウェアパッケージの従来のコードから変更されていません。
このプロジェクトのLittleArmアプリはここからダウンロードできます。
<図>
コード
Arduinoコード Arduino
このコードは、Bluetoothまたはusb #include // arduino library#include // standard c library#define PI 3.141Servo baseServo;を介して、デスクトップまたはAndroidアプリで使用できます。サーボshoulderServo;サーボelbowServo;サーボgripperServo; intコマンド; structjointAngle {int base; intショルダー; int elbow;}; intdesiredGrip; intgripperPos; intdesiredDelay; intservoSpeed =15; intready =0; structjointAngledesiredAngle; //サーボの望ましい角度// +++++++++++++++関数宣言++++++++++++++++++++++++ +++ intservoParallelControl(int thePos、Servo theServo); // +++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++ void setup(){Serial.begin(9600); baseServo.attach(9); //ピン9のサーボをサーボオブジェクトshoulderServo.attach(10);に接続します。 elbowServo.attach(11); GripperServo.attach(6); Serial.setTimeout(50); // arduinoが長すぎるシリアルを読み取らないようにしますSerial.println( "started"); baseServo.write(90); //サーボの初期位置shoulderServo.write(150); elbowServo.write(110); ready =0;} //プライマリarduinoloopvoid loop(){if(Serial.available()){ready =1; desiredAngle.base =Serial.parseInt(); desiredAngle.shoulder =Serial.parseInt(); desiredAngle.elbow =Serial.parseInt(); desiredGrip =Serial.parseInt(); desiredDelay =Serial.parseInt(); if(Serial.read()=='\ n'){//最後のバイトが 'd'の場合、読み取りを停止してコマンドを実行します 'd'は 'done'を表しますSerial.flush(); //バッファに蓄積されている他のすべてのコマンドをクリアします//コマンドの完了を送信しますSerial.print( 'd'); }} int status1 =0; int status2 =0; int status3 =0; int status4 =0; int done =0; while(done ==0 &&ready ==1){//サーボを目的の位置に移動しますstatus1 =servoParallelControl(desiredAngle.base、baseServo、desiredDelay); status2 =servoParallelControl(desiredAngle.shoulder、shoulderServo、desiredDelay); status3 =servoParallelControl(desiredAngle.elbow、elbowServo、desiredDelay); status4 =servoParallelControl(desiredGrip、gripperServo、desiredDelay); if(status1 ==1&status2 ==1&status3 ==1&status4 ==1){done =1; }} // whileの終わり} // ++++++++++++++++++++++++++++++関数の定義++++++++ ++++++++++++++++++++++++++++++++++ intservoParallelControl(int thePos、Servo theServo、int theSpeed){int startPos =theServo.read(); //現在の位置を読み取りますintnewPos =startPos; // int theSpeed =speed; //コマンドに対して位置がどこにあるかを定義します//現在の位置が実際の移動よりも小さい場合if(startPos <(thePos-5)){newPos =newPos + 1; theServo.write(newPos); delay(theSpeed); 0を返します。 } else if(newPos>(thePos + 5)){newPos =newPos-1; theServo.write(newPos); delay(theSpeed); 0を返します。 } else {1を返す; }}
回路図