각 서보모터 아두이노로 연결해서 소스 코드 통해서 업로드 했으나
PWM 제어가 전혀 안 되는 것 같습니다. 파형의 시간을 측정해야 하는데
그게 아니라 on만 되면 전류가 흘러서 한 쪽방향으로 계속해서 돌아갑니다.
아래에 미니멈과 맥시멈의 포지션 값을 조절해도 똑같은 방향으로만 계속 돌아가며 노이즈 생깁니다.
#include <Servo.h>
Servo servo;
int servoPin = 9;
int current_angle = 0; // current servo position in degrees
int centerServo = 90; // center servo position
int min_angle = 55; // minimum servo position
int max_angle = 125; // maximum servo position
int turnRate = 5; // servo turn rate increment (larger value, faster rate)
void setup() {
Serial.begin(9600);
Serial.println("Robot Arm Control");
Serial.println("Press a or s to move, spacebar to center");
Serial.println();
servo.attach(servoPin);
current_angle = centerServo;
servo.write(current_angle);
}
void loop()
{
int angle = current_angle;
if (Serial.available() > 0) {
char command = Serial.read();
// User contro: ASCII 'a' == 97, ASCII 's' == 115
if (command == 97) { angle -= turnRate; }
if (command == 115) { angle += turnRate; }
if (command == 32) { angle = centerServo; }
// Check min, max
if (angle > max_angle) { angle = max_angle; }
else if (angle < min_angle) { angle = min_angle; }
Serial.print("Angle = ");
Serial.print(angle);
Serial.println();
}
if(angle != current_angle) {
moveServo(angle);
}
}
// Move servo to target angle
void moveServo(int target_angle) {
int step_angle = 1;
if(target_angle < current_angle) { step_angle = -1; }
// This code makes smooth movement
for(int i = current_angle; i != target_angle; i+=step_angle) {
//if((target_angle - i) < step_angle && (target_angle - i) > step_angle * -1) // close to target position, break this loop
// break;
servo.write(i);
delay(15);
}
current_angle = target_angle;
}