今回はSerial通信でモータの角度制御およびモータから,角度データを取得する方法について紹介したいと思います.汎用性が高いArduino のマイコンボードを使います.
http://kondo-robot.com/faq/ics3_5-command-reference
マイコンとサーボモータを接続するため,インターネットで検索すると3ステートバッファを採用した事例もありますが,私は今回3ステートバッファを使わない方法を紹介します.
接続回路は次の図のようになります.
Arduino Uno も使用できますが,送信データと受信データが混じらないようにarduino megaを使います.Serial3からパソコンにデータを送信するために,USB-serial変換モジュールを利用します.
Arduinoのプログラムは次のようになります.(マイコンに送信する時,rx0を外してください)
void setup() {
Serial.begin(115200,SERIAL_8E1);
Serial3.begin(115200);
delay(500);
}
int k=-5;
byte buf[3];
char buf_1[6];
int target_angle=9000;//-135 0 135 deg-> (3500 7500 11500)に相当する.
int incomingByte[6];
void loop() {
buf[0]=0b10000000;
buf[1]=(target_angle>>7)&0x7f;
buf[2]=target_angle&0x7f;
Serial.write(buf,3);//角度を指令する
Serial.flush();
if (Serial.available() > 0) {
for (int n=0;n<6;n++){
incomingByte[n]=Serial.read();
}
}
delay(1);
int angle =(incomingByte[4]<<7)|incomingByte[5];//受信したデータを角度に変換する.
Serial3.print(angle);
Serial3.print(“t”);
Serial3.print(target_angle);
Serial3.print(“n”);
target_angle+=k;
if(target_angle<3600){
k=5;
}
else if (target_angle>10000){
k=-5;
}
delay(20);
}