robo8080のブログ

ロボット製作や電子工作など。

RCサーボモータをArduinoとProcessingでGUI制御(その1) 【Arduino編】

2010年10月01日 | 電子工作

【概要】

PC(Processing)からシリアル通信でコマンドを受けて、Arduino側でRCサーボモータを制御する。
RCサーボモータの電源+5VはArduinoからは取らずに、別途ACアダプターから供給する。

Processing側のプログラムはこちらを参照してください。(2012.3.11追記)





【シリアル通信コマンドのフォーマット】


【Arduino側のプログラム】

 //注意:事情により”<”が全角になっているのでコピペして使うときは半角に直してください。(2012.3.11修正)
#include Servo.h>

unsigned char incomingByte = 0; // for incoming serial data
unsigned char buff[30];
int RecvCount = 0;
int ParamLen = 0;
int ParamCount = 0;

Servo servo1;
Servo servo2;
Servo servo3;

void setup() {
  Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
  servo1.attach(9);
  servo2.attach(10);
  servo3.attach(11);
}

void loop() {

  // send data only when you receive data:
  if (Serial.available() > 0) {
    // read the incoming byte:
    incomingByte = Serial.read();
   
    switch(RecvCount)
    {
      case 0:
        ParamLen = 0;
        ParamCount = 0;
        if(incomingByte == 0xff) {  // Headder
          buff[RecvCount++] = incomingByte;
        }
        break;
      case 1:
        if(incomingByte == 0) {  // ID
          buff[RecvCount++] = incomingByte;
        }
        break;
      case 2:         // LENGTH
          buff[RecvCount++] = incomingByte;
          ParamLen = incomingByte;
        break;
      default:
        if(ParamLen > 0) {
          buff[RecvCount++] = incomingByte;
          ParamCount++;
          if(ParamCount >= ParamLen) {
            ServoCmdExec();
            RecvCount = 0;
          }
        } else {
          RecvCount = 0;
        }
        break;
    }

  }
}

//注意:以下のコードは、事情により”<”が全角になっているのでコピペして使うときは半角に直してください。(2012.3.11修正)
void ServoCmdExec()
{
//  buff[3]     //CMD (not used)
  if((buff[4] >= 0)&&(buff[4] = 180))
    servo1.write(buff[4]);
  if((buff[5] >= 0)&&(buff[5] = 180))
    servo2.write(buff[5]);
  if((buff[6] >= 0)&&(buff[6] = 180))
    servo3.write(buff[6]);
}

【参考回路】 (2013.6.20追記)

 


最新の画像もっと見る

2 コメント

コメント日が  古い順  |   新しい順
初心者です。ご教示お願いします。 (高田芳郎)
2013-06-20 08:24:58
Arduinoも、processingも初心者です。このブログ、興味深く拝見させてもらっています。
プログラムの内容は、ほぼ、理解してはおります。
この、rcサーボ回路についても、推測はつくのですが、自信持てません。回路結線についてご教示お願いできないでしょうか。実際に、作ってみたいのです。手描きの略図的なものでいいのですが。そのスキャンデータを公開いただくか、toraアットマークttst.comあてに、ご送付お願いできないでしょうか。よろしくお願いします。
返信する
re : 初心者です。ご教示お願いします。 (robo8080)
2013-06-20 15:44:17
ブログ見ていただいてありがとうございます。
参考回路を追記しましたのでそちらをご覧ください。
返信する

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。