Arduinoでロボットアーム製作06

肩の暴走が止まらないのですが一旦完了してあとはポテンショメータの交換と抵抗をかますなどで調整を続けたいと思います。


肩が逆方向に回るので修正しました。ベースもカクカクだったので作り直し。フィラメントを黄色にしたのでツギハギになってます。




コントローラもポテンショメータから外れてしまうため部品を作り直しました。



穴がストレートでガバガバだったので他のポテンショメータハンドルのギザギザを移植。




接続は前記事と同じです。



ソースです。手首(wrist)を定義していますが試作ロボットアームには手首がないので何も動作しません。

// Include Wire Library for I2C Communications
#include <Wire.h>
// Include Adafruit PWM Library
#include <Adafruit_PWMServoDriver.h>

#define FREQUENCY 50
#define MIN_SERVO 110
#define MAX_SERVO 480
#define MIN_PULSE 0
#define MAX_PULSE 1023
#define MIN_ANGLE 0
#define MAX_ANGLE 180

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

//Arduinoのデジタル入力の定義
int intCtrl0 = 13;
//Arduinoのアナログ入力の定義
int intCtrl1 = A0; //wrist
int intCtrl2 = A1; //elbo
int intCtrl3 = A2; //shoulde
int intCtrl4 = A3; //base

//PCA9685のモーター出力を定義
int intMotr0 = 0; //hand
int intMotr1 = 1; //wrist
int intMotr2 = 2; //elbo
int intMotr3 = 3; //shoulder 
int intMotr4 = 4; //base

void setup() {
  delay(3000);
  pwm.begin();
  pwm.setPWMFreq(FREQUENCY); 
  pinMode(intCtrl0, INPUT_PULLUP);
  Serial.begin(9600);
}

void moveMotor(int intIn, int intOut, int intStart, int intEnd)
{
  int intVal;
  int intAngle;
  //ポテンショメータから値を読み取る
  intVal = analogRead(intIn);
  //パルスを角度に変換
  intAngle = map(intVal, MIN_PULSE, MAX_PULSE, intStart, intEnd);
  //モーター制御
  intAngle = map(intAngle, MIN_ANGLE, MAX_ANGLE, MIN_SERVO, MAX_SERVO);
  pwm.setPWM(intOut, 0, intAngle);

}

void moveHand(int intAngle)
{
  intAngle = map(intAngle, MIN_ANGLE, MAX_ANGLE, MIN_SERVO, MAX_SERVO);
  pwm.setPWM(intMotr0, 0, intAngle);
}

void loop() {
 
  moveMotor(intCtrl1, intMotr1, MIN_ANGLE, MAX_ANGLE);
  moveMotor(intCtrl2, intMotr2, MIN_ANGLE, MAX_ANGLE);
  moveMotor(intCtrl3, intMotr3, MIN_ANGLE, MAX_ANGLE);
  moveMotor(intCtrl4, intMotr4, MIN_ANGLE, MAX_ANGLE);
  int intAngle = 0;
  int intPushButton = digitalRead(13);
  if(intPushButton == HIGH) intAngle = 68;
  moveHand(intAngle);

}



結果
肩が暴走するのであまり動かせていません。先端のハサミはボタンを押すと開き離すと閉じます。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です