こんばんは!
今回はarduinoを使ってサーボモータを制御したいと思います。
使用するもの
・Arduinoメインボード(https://amzn.to/2vkPIUH)
・USBケーブル(https://amzn.to/2UHhntl)
・ブレッドボード(https://amzn.to/38eNi8u)
・ジャンパワイヤ (https://amzn.to/39uBU8T)
・サーボモータSG-90(https://amzn.to/2D66wQK)
サーボモータについて
サーボモータは名前の通りサーボできるモータのことです。
サーボ(servo)の語源はラテン語で奴隷という意味のservusから来ており命令に対して忠実に素早く動作するということです。
つまりサーボモータは命令を素早く正確にモータを動作することができるということです。
サーボモータは値段や性能も様々ですが今回は初めての使用ですので安価なTowerPro製のSG-90を使用します。
サーボモータ購入時にはトルク、回転角度、駆動速度、定格電圧などを見て用途に合ったものを購入するのがいいと思います。
今回使用するサーボモータはTowerPro製のSG-90です。
3本ピンがあり、茶色がGND、赤色が電源、オレンジが制御信号の入力となっています。
手順
まずハード側からやっていきます。図のようにサーボモータのGND、電源、制御信号をそれぞれArduinoのGNDピン、5Vピン、D9ピンに接続します。
ハード側はこれで終了です。
次にソフト側をやっていきます。
サーボモータはPWMというパルス信号のON、OFFによって制御するとなめらかな動きが再現できるのですが、プログラムが複雑になってしまうので、今回は最初からarduinoに存在するservoライブラリを使っていこうと思います。
まず、servoライブラリをインクルードするためにArduino IDEの上部のバーから「スケッチ」→「ライブラリをインクルード」→「Servo」を選択します。
するとこのように一行目に#include <Servo.h>が追加されたと思います。
これでServoライブラリのインクルードが完了しました。
次にコードを書いていきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <Servo.h> Servo myservo;//Servoオブジェクトの宣言 void setup() { myservo.attach(9);//servo変数をピンに割り当てる、ここでは9番ピン myservo.write(90);//角度を指定、ここでは90度 } void loop() { myservo.write(0); delay(1000); myservo.write(90); delay(1000); myservo.write(180); delay(1000); myservo.write(90); delay(1000); } |
コードの説明をします。
まず、Servo myservoでServoオブジェクトの宣言をしています。簡単に言えばmyservoというものがサーボモータですよという意味です。
そしてServo.attach(9);で信号線を繋いだピンの番号を宣言しています。
Servo.write()はservoの角度を指定しています。0~180度の範囲で宣言します。
このコード全体は最初にサーボを90度の位置に移動させ、0度→90度→180度→90度→0度をループするような構造になっています。
メインボードに書き込むと下記の動画のようになるはずです。
まとめ
今回はサーボモータの制御を行いました。
サーボモータはラジコンやロボットアームなど色々なものに応用することができるので使い方を覚えておいた方がいいと思います。
今回はこれで終わります。
ではまた!
【追記】
私のブログを読んでくださった方が、Yahoo知恵袋で「モータが動かない」ということで困っているという質問をしていました
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12216561542?
ベストアンサーに選ばれている解答の通り、電圧や電流が足りていないのが原因です
その場合は、外部に電源を確保して、制御信号だけをArduinoから受信するというやり方をします
質問にある、電圧が9Vのモータであれば、下図のように外部電源から直接供給します
私の知識不足でご迷惑をおかけしました