BASIC4MCU | 질문게시판 | 아두이노 질문 드립니다
페이지 정보
작성자 전재 작성일2020-04-20 12:34 조회27,706회 댓글4건본문
안녕하세요 아두이노 서보쉴드를 이용 , 3개의 서보모터를 이용해서 3자유도 로봇팔 조종을 계획하고 있습니다.
#include "HCPCA9685.h"
#define I2CAdd 0x40
HCPCA9685 HCPCA9685(I2CAdd);
void setup()
{
HCPCA9685.Init(SERVO_MODE);
HCPCA9685.Sleep(false);
}
void loop()
{
unsigned int Pos;
for(Pos = 10; Pos < 450; Pos++)
{
HCPCA9685.Servo(0, Pos);
delay(10);
}
for(Pos = 450; Pos >= 10; Pos--)
{
HCPCA9685.Servo(0, Pos);
delay(10);
}
}
0번에 꽂은 서보모터가 좌우로 반복적으로 회전하는건 확인을 했습니다.
0번 서보모터가 180도 회전후, 원상태로 다시 회전하기 전에 다른 서보모터의 움직임을 구현하고 싶은데
void loop()
{
unsigned int Pos;
for(Pos = 10; Pos < 450; Pos++)
{
HCPCA9685.Servo(0, Pos);
delay(10);
}
이 부분
for(Pos = 450; Pos >= 10; Pos--)
{
HCPCA9685.Servo(0, Pos);
delay(10);
}
}
표시된 부분에 다른 서보모터의 움직임을 입력하면 순서대로 진행이 되지 않고 두개의 서보모터가 같이 움직이는 모습을 보입니다.
아두이노를 처음 접해봐서 미숙한 부분이 많은데 3개의 서보모터를 순차적으로 움직이게 하려면 어떻게 해야할까요?
댓글 4
조회수 27,706master님의 댓글
master 작성일
https://forum.hobbycomponents.com/viewtopic.php?t=2034
이 글 제일 아래에보면 2개의 서보모터 예제가 있으니 참고하세요
전재님의 댓글
전재 작성일
#include "HCPCA9685.h"
#define I2CAdd_1 0x40
#define I2CAdd_2 0x41
HCPCA9685 HCPCA9685_1(I2CAdd_1);
HCPCA9685 HCPCA9685_2(I2CAdd_2);
void setup()
HCPCA9685_1.Init(SERVO_MODE);
HCPCA9685_2.Init(SERVO_MODE);
HCPCA9685_1.Sleep(false);
HCPCA9685_2.Sleep(false);
HCPCA9685_1.Servo(0, 350);
HCPCA9685_2.Servo(3, 350);
}
void loop()
{
}
서보모터 쉴드 0번과 3번에 각각 연결한뒤 소스코드 구동을 시켜봤는데 0번 모터는 잘 움직이지만 3번 모터는 움직임을 보이지 않습니다 ㅠㅠ 전력 문제일까요?
master님의 댓글
master 작성일
#include "PCA9685.h"
PCA9685 pwmController; // Library using default B000000 (A5-A0) i2c address, and default Wire @400kHz
//
void myServo(int ch,int angle){
pwmController.setChannelPWM(ch, pwmServo1.pwmForAngle(angle));
}
//
void setup(){
Wire1.begin();
pwmController.resetDevices();
pwmController.init();
pwmController.setPWMFreqServo(); // 50Hz 20ms
}
//
void loop(){
for(int i=0;i<=90;i++){ // 정지 -> 정회전 가속 후 최대속도
myServo(0,i); myServo(1,i); myServo(2,i); myServo(3,i); delay(15);
}
for(int i=90;i>=0;i--){ // 정회전최대속도 -> 감속 후 정지
myServo(0,i); myServo(1,i); myServo(2,i); myServo(3,i); delay(15);
}
for(int i=0;i>=-90;i--){ // 정지 -> 역회전 가속 후 최대속도
myServo(0,i); myServo(1,i); myServo(2,i); myServo(3,i); delay(15);
}
for(int i=-90;i<=0;i++){ // 역회전최대속도 -> 감속 후 정지
myServo(0,i); myServo(1,i); myServo(2,i); myServo(3,i); delay(15);
}
}
https://github.com/NachtRaveVL/PCA9685-Arduino/blob/master/examples/SimpleExample/SimpleExample.ino
라이브러리는 여기서 받으세요
master님의 댓글
master 작성일
#define I2CAdd_1 0x40
#define I2CAdd_2 0x41
HCPCA9685 HCPCA9685_1(I2CAdd_1);
HCPCA9685 HCPCA9685_2(I2CAdd_2);
이 건 모듈을 두 개 사용하는 예제로 보입니다.