こちらの記事でサーボモータをゆっくり動かすライブラリ(VarSpeedServo.h)と多数のサーボモータを動かすPCA9685 の併用が難しいことが分かったので,今回は2台のArduinoを使って,それぞれ2脚ずつ(サーボモータ6個ずつ)接続して動かしてみました。
スケッチは以下のとおり。
#include <VarSpeedServo.h>
VarSpeedServo myservo1;
VarSpeedServo myservo2;
VarSpeedServo myservo3;
VarSpeedServo myservo4;
VarSpeedServo myservo5;
VarSpeedServo myservo6;
servoSequencePoint seq1[] = {{45,10},{60,17},{75,28},{82,30},{90,28},{105,17},{120,10},{105,17},{90,28},{82,30},{75,28},{60,17},{45,10}}; // {x,v}:go to position x at speed of v
servoSequencePoint seq2[] = {{60,5},{68,12},{76,23},{80,25},{84,23},{92,11},{100,5},{92,11},{84,23},{80,25},{76,23},{68,12},{60,5}}; // {x,v}:go to position x at speed of v
servoSequencePoint seq3[] = {{90,5},{100,12},{110,23},{114,25},{120,23},{130,12},{140,5},{130,12},{120,23},{114,25},{110,23},{100,12},{90,5}}; // {x,v}:go to position x at speed of v
servoSequencePoint seq4[] = {{135,10},{120,17},{105,28},{98,30},{90,28},{75,17},{60,10},{75,17},{90,28},{98,30},{105,28},{120,17},{135,10}}; // {x,v}:go to position x at speed of v
servoSequencePoint seq5[] = {{120,5},{112,12},{104,23},{100,25},{96,23},{88,11},{80,5},{88,11},{96,23},{100,25},{104,23},{112,12},{120,5}}; // {x,v}:go to position x at speed of v
servoSequencePoint seq6[] = {{90,5},{80,12},{70,23},{66,25},{60,23},{50,12},{40,5},{50,12},{60,23},{66,25},{70,23},{80,12},{90,5}}; // {x,v}:go to position x at speed of v
void setup(){
myservo1.attach(5); //Root Joint(Front Left Leg) range(deg):45~120
myservo2.attach(6); //Middle Joint(Front Left Leg) range(deg):30~150
myservo3.attach(7); //Tip Joint(Front Left Leg) range(deg):0~170
myservo4.attach(8); //Root Joint(Hind Left Leg) range(deg):45~120
myservo5.attach(9); //Middle Joint(Hind Left Leg) range(deg):30~150
myservo6.attach(10); //Tip Joint(Hind Left Leg) range(deg):0~170
Serial.begin(9600);
}
void loop(){
myservo1.sequencePlay(seq1, 13, true, 0); // ("name", x, boolean, y):play sequence "name" that has x positions, loop, start at y position
myservo2.sequencePlay(seq2, 13, true, 0); // ("name", x, boolean, y):play sequence "name" that has x positions, loop, start at y position
myservo3.sequencePlay(seq3, 13, true, 0); // ("name", x, boolean, y):play sequence "name" that has x positions, loop, start at y position
//delay(500);
myservo3.stop();
//myservo3.wait(); //errorになる
//myservo3.sequenceStop();
myservo4.sequencePlay(seq4, 13, true, 0); // ("name", x, boolean, y):play sequence "name" that has x positions, loop, start at y position
myservo5.sequencePlay(seq5, 13, true, 0); // ("name", x, boolean, y):play sequence "name" that has x positions, loop, start at y position
myservo6.sequencePlay(seq6, 13, true, 0); // ("name", x, boolean, y):play sequence "name" that has x positions, loop, start at y position
//delay(500);
}
脚はこちらの記事で作ったものです。これを4脚作成し,タミヤのユニバーサルプレートに両面テープでくっつけました。両面テープだと流石に華奢なので,いずれ胴体部分も印刷してきちんと脚を固定したいと思います。
動かしてみた結果が以下です。前脚,後ろ脚で同期が取れていないので,ソフト面でも改良していきたいと思います。
今回の記事は以上です。



コメント