간단히 말해서 다른 곳에서 읽은 데이터를 기반으로 서보 (9g 마이크로 서보)를 제어하고 있습니다. 서보가 지속적으로 "흔들리는"것을 제외하고는 모든 것이 잘 작동합니다. 즉, 그들은 매우 미묘한 움직임 (1/2-> 1cm 정도의 간헐적 인 움직임)으로 진동합니다.
소프트웨어에서 다음과 같은 작업을 수행 하여이 문제를 해결하려고했습니다.
do{
delay(DTIME);
positionServo();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("X position: ");
lcd.print(xRead);
lcd.setCursor(0,1);
lcd.print("Y position: ");
lcd.print(yRead);
}while( readChange() ); //while there has been change
do-while이 필요한 경우 매핑 된 서보 값을 저장하는 변수를 초기화합니다 (arduino 서보 라이브러리 사용).
readChange () 함수는 다음과 같이 정의됩니다.
int readChange(){
int x_Temp, y_Temp;
x_Temp = map(analogRead(x_axisReadPin), 0, 1023, 0, 179);
y_Temp = map(analogRead(y_axisReadPin), 0, 1023, 0, 179);
if( abs(x_Temp - xRead) < DEG && abs(y_Temp - yRead) < DEG ) return 0; // no change
else return 1; //change
}
여기서 xRead는 초기화 된 값입니다 (첫 번째 매핑 된 서보 출력).
그러나 이것은 실제로 좋은 접근 방식이 아닙니다. BOTH 값이 DEG (~ 10도 또는 내 경우에는 ~ 0.28V)만큼 변경되어서는 안됩니다. OR이 DEG보다 작도록 함수를 작성하면 한 번에 하나의 서보 만 변경하면 어떻게됩니까? 그래서 딜림 마가 있습니다 ..
이것은 단순히 서보의 속성입니까 (아마도 저렴한 것입니까?) 해결 방법이 있습니까?
Pastie 링크를 포함시키는 것이 훨씬 간단합니다. 전체 코드는 다음과 같습니다. http://pastie.org/8191459
두 개의 자유도 (X, Y)를 허용하기 위해 레이저 포인터와 함께 두 개의 서보를 연결했습니다. 여러 버튼의 상태를 기반으로 다양한 방법으로 서보를 제어하는 옵션이 있습니다. 첫 번째는 "모션 (Motion)"인데, 여기서는 노광량에 따라 서보 위치에 영향을주는 두 개의 포토 레지스트가 있습니다. Xbox 컨트롤러에서 서보를 제어하는 코드를 아직 구현하지 않았습니다. 그리고 세 번째 옵션은 무작위 움직임입니다.