LoginSignup
0
0

マイコンによる入出力実験2

Last updated at Posted at 2023-04-27

はじめに

ここでは、 Arduinoマイコンを使って、ロボットアームのプログラミングの基礎を学びます。

※本ページは実験のテキストです。

マイコンによる入出力実験1 へのリンクはこちらです.

概要

マイコンによる入出力実験1 では,Arduinoのデジタル入出力,アナログ入出力,ラジコンサーボの使い方を学びました.
今回は,その応用としてラジコンサーボを4個使うロボットアームをArduinoで動かします.

実験1で利用したServo.hを使ってラジコンサーボを動かすことも可能なのですが,
今回はスキルアップのためにサーボを動かすための専用シールドを使います.

シールドはI2C通信で利用するように作られているので,Arduinoを使ったI2C通信の学習も行います.

実験装置

実験1とは別の装置を使います.

以下の写真に示します.

image.png

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のネジ・ワッシャー・ナット
  • 中空 真鍮棒
  • サーボ延長ケーブル
    このハンドアームは,ラジコンサーボで動きます.
    それぞれのサーボの番号とハンドアームの関節との関係は,下の図のようになっています.
    image.png
    サーボ0:土台のヨー旋回
    サーボ1:第1リンク
    サーボ2:第2リンク
    サーボ3:ハンドの開閉
    それぞれのサーボとコネクタには,上記と同じ色の●シールが貼ってあります.
    サーボの番号が1から始まっていないのは,シールド基板の端子が0から始まっているからです.
    image.png

PCA9685 PWM & Servoシールド

入出力実験1の 10.ラジコンサーボを動かそう では,Servo.hを使ってラジコンサーボを動かしました.

ただし,Servo.hでは最大で12個までしか動かすことはできません.
(Arduino UNOでは12個もピンがありませんが)
 解説: Servo.h

例えば下記の写真のよう二足歩行ロボットでは,21個のラジコンサーボを使っているため,12個では足りなくなります.
image.png

12個以上の多くのサーボを動かしたい場合は,Arduinoの機能を拡張する シールド で対応します.
PCA9685 PWM & Servo シールド は,シールド1枚で16個のサーボを動かすことができます.
また,このシールドは複数枚重ねて使うこともできるので,16 x 2,16 x 3,,,というように16の倍数で使える個数が増えていきます.

今回のロボットアームには4個(あとで5個に増えますが)しか使わないので,正直Servo.hでも十分事足ります.
しかし, シールドの使い方を学ぶために,敢えてこちらにしました.

PCA9685

image.png
本シールドに使われている「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に対応したシールド基板で,機能を増設することが推奨されています.

実験手順

以下の手順に従って、実験を行ってください。

  1. I2Cの動作テスト
  2. PCA9685用のライブラリ
  3. EEZYbotARMを動かしてみる
  4. EEZYbotARMをキー入力で動かす
  5. EEZYbotARMにrampユニットとサーボを追加して動かす
  6. EEZYbotARMを教示/再生で動かす

おわりに

以上で マイコンによる入出力実験2 の作業は終了です.

この後は,担当の先生の指示に従って,課題に取り組んでください.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0