はじめに
ここでは、 Arduinoマイコンを使って、ロボットアームのプログラミングの基礎を学びます。
※本ページは実験のテキストです。
マイコンによる入出力実験1 へのリンクはこちらです.
概要
マイコンによる入出力実験1 では,Arduinoのデジタル入出力,アナログ入出力,ラジコンサーボの使い方を学びました.
今回は,その応用としてラジコンサーボを4個使うロボットアームをArduinoで動かします.
実験1で利用したServo.hを使ってラジコンサーボを動かすことも可能なのですが,
今回はスキルアップのためにサーボを動かすための専用シールドを使います.
シールドはI2C通信で利用するように作られているので,Arduinoを使ったI2C通信の学習も行います.
実験装置
実験1とは別の装置を使います.
- Arduino UNO R3
- PCA9685 PWM & Servo シールド
- EEZYbotARM Mk1
- USBケーブル
- 5V ACアダプタ
以下の写真に示します.
Arduino UNO には,複数のラジコンサーボを動かすためのシールド基板が既に刺さっています.
また,シールド基板とロボットアームとの配線も済んでいます.
ラジコンサーボは瞬間的に大きな電流を消費することがあるため,USBケーブルからArduino UNOに供給されている5[V]では不足してしまう可能性があります.
そのため,5V大電流のACアダプタを別途電源として使用します.
解説
EEZYbot ARM Mk1
以前,この実験では,Arduino.org公式の Tinkerkit Braccioを使っていました.
しかし,壊れやすい,直しにくい,修理部品が入手できない,など問題が多かったため変更しました.
EEZYbot ARM Mk1は,フリーの3Dプリントデータの公開サイト「Thingiverse」でデータが公開されているロボットです.
https://www.thingiverse.com/thing:1015238
このサイトから部品データをダウンロードして,3Dプリンターで印刷すれば,作ることができます.
修理部品もすぐ作れます .
その他の部品も比較的安価に入手できます.
- アームのサーボ MG90S
- ハンドのサーボ SG90
- M4のネジ・ワッシャー・ナット
- M3のネジ・ワッシャー・ナット
- 中空 真鍮棒
- サーボ延長ケーブル
このハンドアームは,ラジコンサーボで動きます.
それぞれのサーボの番号とハンドアームの関節との関係は,下の図のようになっています.
サーボ0:土台のヨー旋回
サーボ1:第1リンク
サーボ2:第2リンク
サーボ3:ハンドの開閉
それぞれのサーボとコネクタには,上記と同じ色の●シールが貼ってあります.
サーボの番号が1から始まっていないのは,シールド基板の端子が0から始まっているからです.
PCA9685 PWM & Servoシールド
入出力実験1の 10.ラジコンサーボを動かそう では,Servo.h
を使ってラジコンサーボを動かしました.
ただし,Servo.h
では最大で12個までしか動かすことはできません.
(Arduino UNOでは12個もピンがありませんが)
解説: Servo.h
例えば下記の写真のよう二足歩行ロボットでは,21個のラジコンサーボを使っているため,12個では足りなくなります.
12個以上の多くのサーボを動かしたい場合は,Arduinoの機能を拡張する シールド で対応します.
PCA9685 PWM & Servo シールド は,シールド1枚で16個のサーボを動かすことができます.
また,このシールドは複数枚重ねて使うこともできるので,16 x 2,16 x 3,,,というように16の倍数で使える個数が増えていきます.
今回のロボットアームには4個(あとで5個に増えますが)しか使わないので,正直Servo.hでも十分事足ります.
しかし, シールドの使い方を学ぶために,敢えてこちらにしました.
PCA9685
本シールドに使われている「PCA9685」というICは,
メーカーの データシート を見てみると,
「16-channel, 12-bit PWM Fm+ I2C-bus LED controller」
と書いてあります.
実はこのIC,ラジコンサーボを動かすためのものではなくて,LEDの明るさを変化させるための製品なのです.
入出力実験1の 9.アナログ出力の解説 でPWMを使ってLEDの明るさを変化させたのと同様に,16個同時にLEDの明るさを制御するICなのです.
ラジコンサーボの信号 で解説したように,
「PWMのパルス幅は0~100%の全域で使うのに対して,PPMは20ミリ秒のうち4~11%の部分しか使いません.」です.
したがって,LEDの明るさコントロールのパルス幅をArduinoプログラムで調整すれば,ラジコンサーボ信号として使うことができます.
現在PCA9685は,ラジコンサーボ信号を作る目的で多用されているため,本来はLEDの調光用の製品であることを知らない人もいるくらいです(笑)
I2C
上記のPCA9685は,I2C-bus LED controllerと書いてあるように,基板内シリアル通信の規格「 I2C 」を使ってArduinoと通信を行います.
I2C は,2の部分がべき乗を意味するので,正しくは「アイ スクウェア シー」と読みます.
しかし,プログラムのテキストでは上付き文字は書けないので I2C になってしまうため,皆「アイ ツー シー」と呼んでいます.
参考:I2Cの基礎知識
「LANにつながったパソコン」が「IPアドレス」を使って区別されるのと同様に,
「I2Cバスにつながったスレーブ」は「I2Cアドレス」を使って区別されるのです.
I2Cを使うICには,今回のようなPWM出力だけでなく,様々な機能をもった製品があります.
モータ駆動IC,ジャイロセンサ,方位磁針センサ,気圧センサ...etc.
マイコン本体が色々な機能を持っていなくても,I2Cを使って機能を増設する ことができます.
Arduinoでは,I2Cに対応したシールド基板で,機能を増設することが推奨されています.
実験手順
以下の手順に従って、実験を行ってください。
- I2Cの動作テスト
- PCA9685用のライブラリ
- EEZYbotARMを動かしてみる
- EEZYbotARMをキー入力で動かす
- EEZYbotARMにrampユニットとサーボを追加して動かす
- EEZYbotARMを教示/再生で動かす
おわりに
以上で マイコンによる入出力実験2 の作業は終了です.
この後は,担当の先生の指示に従って,課題に取り組んでください.