정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

아두이노 엔코더모터 각도제어(조언부탁드립니다!)
짱꾸 | 2020-07-22

아두이노 서보모터와 초음파센서를 이용한 공균형잡는 로봇을 만들어보려고 합니다.

근데 서보모터가 없어서 엔코더모터를 이용해 각도제어를 하려고 하는데
엔코더값을 읽어오는데까지는 성공했지만, 그 값을 이용해 각도제어하는 부분에서 막혔습니다.
 
현재 IG32PGM 01TYPE 엔코더모터를 가지고 탐구하고 있습니다.
겨우 엔코더값 읽기에 성공했는데...그 다음단계인 각도제어로 넘어가기 힘드네요ㅠㅠ
조언 부탁드립니다.
 
현재 엔코더값 읽는 코드입니다.
// motor control pin
const int M1_F= 8; // L298 Input 1 // 엔코더 모터
const int M1_R= 9; // L298 Input 2
// encoder pin
const int encoderPinA=2;
const int encoderPinB=3;
long encoderPos1=0;
 
//
void M_STOP(){ digitalWrite(M1_F,0); digitalWrite(M1_R,0); }  //정지
void M_FWD() { digitalWrite(M1_F,1); digitalWrite(M1_R,0); }  //정회전
void M_BWD() { digitalWrite(M1_F,0); digitalWrite(M1_R,1); }  //역회전
//
void doEncoderA(){ encoderPos1+=(digitalRead(encoderPinA)==digitalRead(encoderPinB))? 1:-1; }
void doEncoderB(){ encoderPos1+=(digitalRead(encoderPinA)==digitalRead(encoderPinB))?-1: 1; }
//
void setup(){
  pinMode(M1_F,OUTPUT); pinMode(M1_R,OUTPUT);
  pinMode(encoderPinA,INPUT_PULLUP); attachInterrupt(0,doEncoderA,CHANGE);
  pinMode(encoderPinB,INPUT_PULLUP); attachInterrupt(1,doEncoderB,CHANGE);
  Serial.begin(9600);
}
//
void loop(){
  M_FWD();
  Serial.print("encoderPos1  : "); Serial.print(encoderPos1);
}
이전글   |    초보자입니다. 서보모터를 푸쉬 버튼으로 제어하고 싶은데 방법을 모르겠습니다.... 2020-07-22
다음글   |    아두이노 LCD 출력 오류 2020-07-25