クムクムロボットのアームを動かす | arduinoロボットプログラミング

2023年11月25日

クムクム入門モデル(R3J)のサーボモータコントロールのサンプルとして、ArduinoIDEを使いC言語でクムクムロボットのアームの動作プログラミングを行ってみます。ArduinoIDEのインストールや使い方は多くのネット記事があるので検索をしてください。

クムクムロボットArduinoプログラミングの準備

クムクムロボットとの接続と電力供給

まず、ArduinoIDEで作るプログラムをクムクムロボットに書き込むために、マイクロBタイプのUSBケーブルでパソコンとクムクムロボットを結びます。
次に、サーボモータを動かすプログラムを作る際にはサーボモータに電力が与えられなくてはならないため必ずクムクムロボットにニッケル水素充電電池を装着します。
最後にクムクムの背中の電源スイッチをON側にセットします。
※USBケーブルをロボットと結んだ時点でクムクムロボットのメイン基板の電源投入サインのLEDが点灯するので、ついついサーボモータはそのまま駆動できるものだと思いがちですが、サーボモータへの電力供給ラインとメイン基板への電力供給ラインは異なるため、必ず電池を装着し電源スイッチをONにします。

Arduino開発環境のセッティング

クムクム入門モデル(R3J)のメインCPUはATmega32U4で、これを使ったArduinoのボードはArduinoLeonardoです。
そのためArduinoIDEを起動したら、このボードを使うセッティングにします。
その方法は ArduinoIDEのメニューで Tools→Board→Arduino AVR Boards→ArduinoLeonardoを選択します。

クムクムの接続ポートを選択する

次にケーブルで結んだクムクムロボットのポートを選択します。
Tools→Port→COM@(ArduinoLeonardo)を選択します。@部分は使用しているパソコンによって異なりますが、ArduinoIDEが自動で表示してくれます。

クムクム入門モデル(R3J)のボードマニュアルを準備

Arduinoを使ってボードプログラムを組む際は、必ずボードの仕様書を手元に用意しておきます。
マニュアルは ここをクリック するとPDFで開くことができます。

プログラミング開始

準備はできましたのでそれではいよいよプログラミングを開始します。
今日はクムクムロボットのアーム部分のサーボモータを動かすプログラムなので、マニュアルP21 サーボモータ用インターフェース を開きます。

マニュアルには次のように記述されています。

サーボモータ用インターフェースは下記のようにアサインされています
サーボモータを使用するにはサーボモータ(別売り)およびサーボモータ用電源(別売り)が必要です。
Qumcum R3J メインボードにサーボモータを接続しておく必要があります。

が、クムクムロボットではすでに背中の電池ボックスにニッケル水素電池を装着しているためこのままプログラミングを進めることができます。

サーボモータの位置を確認

マニュアルの一部を抜粋し、そこにクムクムロボットのパーツ意思を書き込むと下記のようになります。

PWM 出力(MOTOR1) D4 右腕
PWM 出力(MOTOR2) D5 右太もも
PWM 出力(MOTOR3) D6 右足
PWM 出力(MOTOR4) D7
PWM 出力(MOTOR5) D8 左足
PWM 出力(MOTOR6) D9 左太もも
PWM 出力(MOTOR7) D10 左腕

またD11はサーボモータへの電源供給をコントロールする信号となっているため、この部分の制御を記述する必要があります。

サーボモータを動かすサンプルコードを試してみる

#include <Servo.h>
Servo sv;
void setup() {
  // モータ電源を ON にします
  pinMode(11, OUTPUT);
  digitalWrite(11, HIGH);
  // モータにアタッチする
  // このサンプルでは D4(MOTOR1)に接続したモータを動かします
  pinMode(7, OUTPUT);
  sv.attach(7);
}
void loop() {
  // 0 度の位置へ移動
  sv.write(0);
  // 500msec 待つ
  delay(500);
  // 180 度の位置へ移動
  sv.write(180);
  // 500msec 待つ
  delay(500);
}

このコードでは、D4に接続されたサーボモータ(顔)を0/180度に500msecごとに動かしています。

クムクムロボットのアームを動かす

次に、クムクムロボットの両アームを同時に同じように0/180度で動かしてみます。
このプログラムでは、せっかくなのでパルスによる制御で行ってみます。

#include <Servo.h>
Servo svR;
Servo svL;
void setup() {
  // モータ電源を ON にします
  pinMode(11, OUTPUT);
  digitalWrite(11, HIGH);
  // モータにアタッチする
  // このサンプルでは D4(MOTOR1)に接続したモータを動かします
  svR.attach(4, 500, 2500);
  svL.attach(10, 500, 2500);
}
void loop() {
  // 0 度の位置へ移動
  svL.writeMicroseconds(0);
  svR.writeMicroseconds(0);
  // 500msec 待つ
  delay(500);
  // 180 度の位置へ移動
  svL.writeMicroseconds(2500);
  svR.writeMicroseconds(2500);
// 500msec 
 delay(500);
}

これでクムクムロボットのサーボモータをコントロールしてアームを動かすロボットはできました。

ArduinoLeonardo

Leonardo は、ATmega32u4 に USB 通信が組み込まれており、セカンダリ プロセッサが不要であるという点で、これまでのすべてのボードと異なります。これにより、Leonardo は、仮想 (CDC) シリアル / COM ポートに加えて、接続されたコンピュータにマウスとキーボードとして表示されるようになります。

Arduino Leonardo は、ATmega32u4 をベースにしたマイクロコントローラー ボードです。20 個のデジタル入出力ピン (そのうち 7 個は PWM 出力として使用可能、12 個はアナログ入力として使用可能)、16 MHz 水晶発振器、マイクロ USB 接続、電源ジャック、ICSP ヘッダー、およびリセット ボタンを備えています。これには、マイクロコントローラーをサポートするために必要なものがすべて含まれています。USB ケーブルでコンピューターに接続するか、AC-DC アダプターまたはバッテリーで電力を供給するだけで使用を開始できます。

出典:https://docs.arduino.cc/hardware/leonardo