[Robot Arm Arduino Project] RAAP프로젝트 -테스트(2), 회전 값 출력

2024. 1. 26. 17:07Unity

728x90
반응형

지난 번에 연기난 서보 모터 드라이버는 새 드라이버로 바꿨고, 다시 테스트에 돌입했다...

 

수 많은 테스트 끝에 Base 서보 모터가 고장이 났고, Elbow를 담당하는 Potentiometer가 고장 난 것을 알아냈다. Potentiometer는 여유분이 있어서 바꾸고 잘 동작했지만, 서보 모터는 여유분이 없어서 다시 주문했다...

 

그리고 Elbow 서보 모터를 서보 모터 드라이버의 0번으로 옮겼다. 원래 위치가 잘 동작하지 않았기 때문이다.

 

아래의 코드는 수정된 코드이다.

#include <Wire.h>
 
#include <Adafruit_PWMServoDriver.h>

#define MIN_PULSE_WIDTH       650
#define MAX_PULSE_WIDTH       2350
#define FREQUENCY             60
 
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

int potWrist = A0; //첫 번째 포텐셜미터
int potElbow = A1; //두 번째 포텐셜미터    //Assign Potentiometers to pins on Arduino Uno
int potShoulder = A2; //세 번째 포텐셜미터
int potBase = A3; //네 번째 포텐셜미터

int hand = 11;
int wrist = 12;
int elbow = 0;                           //Assign Motors to pins on Servo Driver Board
int shoulder = 14;
int base = 15;

void setup() 
{
  delay(5000);                            // <-- So I have time to get controller to starting position
  Wire.begin();
  pwm.begin();
  pwm.setPWMFreq(FREQUENCY);
  
  pwm.setPWM(11, 0, 90);                  //Set Gripper to 90 degrees (Close Gripper)
  pinMode(13,INPUT_PULLUP);
  Serial.begin(9600);
}
 
 
void moveMotor(int controlIn, int motorOut)
{
  int pulse_wide, pulse_width, potVal;
  
  potVal = analogRead(controlIn);                                                   //Read value of Potentiometer
  
  pulse_wide = map(potVal, 800, 240, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);
  pulse_width = int(float(pulse_wide) / 1000000 * FREQUENCY * 4096);                //Map Potentiometer position to Motor
  
  Serial.println(pulse_wide);
  
  pwm.setPWM(motorOut, 0, pulse_width);
}
 
void loop() 
{
  moveMotor(potWrist, wrist);
  
  moveMotor(potElbow, elbow);
                                                            //Assign Motors to corresponding Potentiometers
  moveMotor(potShoulder, shoulder);
  
  moveMotor(potBase, base);


  
  int pushButton = digitalRead(13);
  if(pushButton == LOW)
  {
    pwm.setPWM(hand, 0, 180);                             //Keep Gripper closed when button is not pressed
    Serial.println("Grab");
  }
  else
  {
    pwm.setPWM(hand, 0, 90);                              //Open Gripper when button is pressed
    Serial.println("Release");
  }
  
}

 

 

MoveMotor() 함수에 넣어준 println 함수로 서보 모터의 회전값을 출력할 수 있게 되었다.

Serial.println(pulse_wide);

 

 

이제 Base 서보 모터만 새로 오면 된다!

다음 목표는 완전체로 조립한 후 일정 시간 간격으로 모터 회전 값을 받아오는 것이다.

 

 


 

 

추가로, 아래 글에 따르면, 외부 전원과 컴퓨터 전원을 함께 쓸 수 있으며, 외부 전원만 사용하기 위해서는 아두이노의 VIN에 최소 7.2V가 공급되어야 한다.

https://m.blog.naver.com/123gtf/221142841037

 

[Arduino] 외부전원(vin,dc잭)과 USB로 전원을 아두이노에 동시에 공급해도 될까요?

[Arduino] 외부전원(vin,dc잭)과 USB로 전원을 아두이노에 동시에 공급해도 될까요? 결론부터 말하자면...

blog.naver.com

728x90
반응형