배터리 출력이 약해서 서보 모터를 하나씩 동작시키면서 테스트하던 것을 배터리를 7.4V로 교체하여 테스트한 결과입니다. 이제 걷는 속도가 좀 더 나아졌습니다. 걷는 동작에 대한 알고리즘을 개선 할 일만 남았습니다. 현재는 수영하듯이 앞으로 나가도록 하였습니다 ^^;
소스는 아래와 같습니다.
#include <Servo.h> #define servo_count 8 #define delay_interval 100 Servo servos[servo_count]; int start_pos[servo_count] = { 90, 90, 90, 90, 40, 150, 155, 40 }; void setup() { Serial.begin(9600); for (int i=0; i<servo_count; i++) { servos[i].attach(i+2); servos[i].write(start_pos[i]); } delay(1000); } void loop() { go_forward(); // srand(millis()); // for (int i=0; i<servo_count; i++) { // servos[i].attach(i+2); // servos[i].write(rand() % 180); // // delay(100); // servos[i].detach(); // } } void set_angle(int no, float angle) { servos[no].write(angle); } void push_legs() { int positions[4] = {50, 130, 50, 130}; for (int j=1; j<=4; j++) { for (int i=0; i<4; i++) { if ((i % 2) == 0) { servos[i].write(positions[i] + 20 * j); Serial.println(positions[i] + 20 * j); } else { servos[i].write(positions[i] - 20 * j); Serial.println(positions[i] - 20 * j); } } delay(delay_interval); } } void right_front_forward() { set_angle(5, start_pos[5] - 40); set_angle(1, start_pos[1] + 40); delay(delay_interval); set_angle(5, start_pos[5]); } void right_back_forward() { set_angle(7, start_pos[7] + 40); set_angle(3, start_pos[3] + 40); delay(delay_interval); set_angle(7, start_pos[7]); } void left_front_forward() { set_angle(4, start_pos[4] + 40); set_angle(0, start_pos[0] - 40); delay(delay_interval); set_angle(4, start_pos[4]); } void left_back_forward() { set_angle(6, start_pos[6] - 40); set_angle(2, start_pos[2] - 40); delay(delay_interval); set_angle(6, start_pos[6]); } void go_forward() { right_front_forward(); left_front_forward(); delay(delay_interval); right_back_forward(); left_back_forward(); delay(delay_interval); push_legs(); }
저렴한 RC-Car 바디에 대한 시행착오 (0) | 2015.12.29 |
---|---|
RC Car #2 (0) | 2015.12.21 |
거미 로봇 만들기 #2 (0) | 2015.12.19 |
거미 로봇 만들기 #1 (0) | 2015.12.18 |
쿼드콥터 제작 #5 - IRL540 (0) | 2015.12.17 |