気の向くままに辿るIT/ICT/IoT
webzoit.net
IoT・電子工作

Arduinoとジョイスティックでサーボモータ2軸制御

ウェブ造ホーム前へ次へ
サイト内検索
カスタム検索
Arduinoって?

Arduinoとジョイスティックでサーボモータ2軸制御

Arduinoとジョイスティックでサーボモータ2軸制御

2018/04/01
Arduinoとジョイスティックで2軸のサーボモータを操作

 Arduinoとジョイスティックでサーボモーター2個を操作してみるページ。

 ただサーボモータを並べただけでは余りにつまらないので何かないかと探した結果、何かのオマケのようなLR44電池駆動の超小型LEDサーチライト?マグライトっぽいやつ?で縦横無尽に照らしてみることにした。

[追記]100均にもある「5LEDミニライト」なるものらしい。

 土台にしたのは、100均のミニバイス、そこに一方のサーボを固定、このサーボのホーンに他方のサーボをビニールテープで留め、後者のホーンはサーボにビス留めの上、このホーンにサーチライトをビニールテープで固定しただけ。

 1軸のサーボモーターについては、光センサ(CdSセル)を使ったものだが、昨日、後段リンクにもあるソーラートラッカーのデモでやってみた。

回路

 スケッチは後述するとして、機嫌が良い時は、この動画のようにサクサク、キビキビ動作し、ちょっと感動。

 結構前に先走って10個入りのサーボを買って動作確認もしていたものの、実用品を思いつかず、あまり興味のなかった自身でも、なんですぐにやってみなかったんだろ?、今すぐにでも何かロボット作ってみちゃう...?って気分にさせられそうなほど。

 1軸と2軸でこんなにも違いある...んじゃなくて、そっか、ソーラートラッカーと違ってジョイスティック操作だと機敏だからね...。

 必要となるのは、Arduinoボード、ジョイスティックモジュール、ブレッドボード、サーチライト、ミニバイス各1個とサーボモータ、コンデンサを各2個、ジャンパワイヤ適量。

 今回、Arduinoボードには、Nano互換機、サーボモータには、プラスチック製ギアSG-90、ジョイスティックは、37センサーキットに入っていたジョイスティックモジュール、コンデンサには、電解コンデンサ47μFを使った。

 サーチライトと(108円の)ミニバイスを除くとAmazon、Amazonマーケットプレイス価格で単価割すれば、1200〜1300円前後かと。

EasyWordMall Arduino UNO R3互換ボード(USBケーブル付属)

EasyWordMall Arduino Pro Mini互換ボード Atmega328 5V 16MHz

Rasbeeオリジナル FT232RL互換 3.3V/5V FTDI/USB/TTL変換アダプタ

KKHMF Arduino Nano Ver 3.0互換ボード ATmega328P CH340G 5V 16MHz

OSOYOO(オソヨー) SG90 9g マイクロサーボ (10個セット)

Rasbee ジョイスティック ブレークアウト シールドモジュール PS2 ジョイスティック ゲーム コントローラ モジュール 5P Arduino用 1個 [並行輸入品]

HiLetgo® 5個セット ジョイスティック ブレークアウト シールドモジュール ジョイスティック ゲーム コントローラ モジュール PS2 arduinoに対応

KKHMF 10個ジョイスティック ブレークアウト シールドモジュール ジョイスティック ゲーム コントローラ モジュール PS2に対応

HiLetgo コンデンサ 0.22uf-470uf(12種x各10個 計120個)

KKHMF 電解コンデンサ 0.22uf-470uf 12種類 各10個 計120個

Rasbee 400穴 ブレッドボード 8.5*5.5cm 1個

HiLetgo 400穴 ブレッドボード 8.5*5.5cm 5個セット

HiLetgo 400穴 ブレッドボード 8.5*5.5cm 10個セット

Rasbee SY-170 ミニブレッドボード カラフルブレッドボード 5個

HiLetgo ジャンパーワイヤー(オス-オス) 20cmx40本 5セット

Rasbee ジャンパーワイヤー(オス-オス) 各種長さx65本

KKHMF PCA9685 16チャンネル 12-ビット PWM Servo モーター ドライバー IIC モジュール Arduinoに対応 ロボット

HiLetgo PCA9685 16チャンネル 12ビット PWM Servoモータードライバー IIC ロボット用

HiLetgo 37センサーアソートキット

スケッチ

#include <Servo.h>
 
Servo tilt, pan;
 
int joystickX = A0;
int joystickY = A1;
int x, y;
 
void setup()
{
 pan.attach(9);
 tilt.attach(10);
}
 
void loop()
{
 x = analogRead(joystickX);
 y = analogRead(joystickY);
 x = map(x, 0, 1023, 0, 255);
 y = map(y, 0, 1023, 0, 255);
 pan.write(x);
 tilt.write(y);
 delay(10);
}

 スケッチは、これだけ。

備考

 本来は、別電源としたいところだが、横着してArduinoボードの5Vから入力、手持ちのサーボモータドライバPCA9685も使わなかった。

 よって今回は、ジョイスティックもサーボも電源とGNDは、Arduinoボードの5V/GNDからだが、サーボのVCCとGNDの間にコンデンサを噛まし(たが、ノイズ対策として、あってるよね?)、2個のサーボの信号線は、それぞれD9/D10、ジョイスティックのVRx/VRyは、A0/A1に接続。

 ただ、別電源にしなかったからか、操作できるまで10〜20秒ほど(時には、それ以上)かかったり、ジョイスティックモジュールに起因するのか、操作時、反応が鈍いことがある。

 こうした症状の一方、電圧が不安定なのか、コンセント+USB充電器から直だとうまく動かないが、PCから(USB)電源を取ると、よりマシというか、比較的安定した。

 また、一方のサーボのみ、他方のサーボがビビり(ブレ)つつ、連動して振動したりしながら、動いたりと動作不安定だったため、ノイズか?とコンデンサを入れてみたら、完全に解消したわけではないものの、だいぶ改善はしたように見受けられた気はするが、もしかして、これも、別電源にすれば解消する?

 微妙な結果だったため、別電源で電圧を安定させてみることにした。

 つまり、Arduinoボードまとめて(NanoなのでUSBではなくVinピンから、ジョイスティックのみArduinoボードの5Vから電源をとるものとして)ACコンセントにDC19V出力ACアダプタ〜可変安定化電源から電源をとり、調整してみたところ、利用した安定化電源のボリュームの関係で微調整は難しいが、6.58Vあたりでブレもなく、電源投入後、即機能し、全くストレスなく、動作が安定した。

 よって、やはり、電圧・電流不足だった模様。

 ただ、Arduinoボードはともかく、SG90の仕様を改めて確認してみると、操作電圧が、3.0〜7.2Vとか、4.8V〜5.0Vとか、4.8V〜6.0Vとかいろんな情報が錯綜しているが...、4.8V程度が無難らしい。

 安定した4.8Vだからその他諸々が加わるArduinoボードの5Vからでは、厳しく、今回、外部電源から安定した電圧6.58V供給したからこそ、Arduinoボード+オンボードチップ+ジョイスティックに加え、サーボ2個分の電圧を安定して与えることができたと考えて良さそう。

 ちなみにジョイスティックの方がリアルタイムでより楽しいが、シリアルモニタから入力を要するものの、サーボドライバの動作確認で参照させて頂いたライブラリも面白い。

 エイプリルフールだからって嘘だよんなんてオチはない。

ウェブ造ホーム前へ次へ