arduinoでマイクロサーボを動かしてみよう
これは
群馬大学電子計算機研究会 IGGG Advent Calendar 2017 - Adventar
の4日目の記事です。
アドベントカレンダー初参加で初記事です。
はてなブログの記事の書き方とか、ろくにわかってないです。スミマセン😣
なにするの?
arduinoを使ってマイクロサーボを動かしてみたいと思います。
なぜ?
自分で書いたプログラムを使って、目の前でガチャガチャ動くものを作るというのは楽しいです。
他の方もそれを体験してもらいたいので、
第一歩として、簡単に手に入り、
簡単に使えるマイクロサーボで遊ぶのが良いかなという。
どうやるの?
じゃあまず、
Arduino - Getting Started の "Install the Arduino Desktop IDE"から自分のOSにあったやつをインストールしてください。
起動するとこんな感じです。↓
では次、
必要なもの
- arduino nano
- USBケーブル(A オス to miniB オス)
- マイクロサーボSG90
- ブレッドボード
- ジャンパー線 3本くらい(今回は少なくとも3本必要で、あればあるほど便利です。)
自分が持ってるのは、arduino nanoが3つで1000円でした。
(あ、これ最初に、はんだづけ必要なやつじゃん...!!)
USBケーブルは、パソコンとarduino nanoを繋げるのに使います。
マイクロサーボ(SG90)も、amazonで買えます。
5個で1500円とか、それくらいだったと思います。
ブレッドボードも、amazonで買えます。
arduino nanoをブレッドボードにぶっ挿して、ジャンパー線でSG90とarduino nanoのピンを繋ぐので、はんだづけがいりません。楽です。
ジャンパー線は、arduinoのピンとsg90を繋ぐために使います。
ふう... アレ? 思ったより準備めんどくさっ
私は、ロボット作りを始めて半年ぐらい経ったので、意外と上記のものって家にあったりするんですよ....。
組み立て
さーっと組み立てましょう。
とりあえず、こんな感じでarduino nano をブレッドボードの上にぶっ挿します。
ポイントは、ブレッドボードの中心の溝をまたいで挿すことです。
次に、3つジャンパー線の、片方をそれぞれ arduino nanoの 5V、 GND、 D2と書かれたピンの横に挿します。 上の画像と同じようにすれば問題ないと思います。
色は特に関係ありません。
今、3つのジャンパー線の片方がarduino nanoのピンに繋がっている状態です。
もう片方をSG90につなげていきます。
SG90から、3本の線が出ています。↓
これに、ジャンパー線を以下のようにつなげていきます。
ここでは、SG90から出てる線にどのジャンパー線を繋げるか気をつけましょう。
arduino nano GND → SG90 茶色
arduino nano 5V → SG90 赤色
arduino nano D2 → SG90 オレンジ色
です。
あとは、arduino nanoとパソコンをつなげましょう。
USBケーブルでつなげてください。
(ロボアームの失敗作にくっついてるやつSG90を使っています。色々くっついていて見づらくなってしまってすいません)
arduino nanoについてるLEDが光ってますね。ちゃんと動きそうです。
あとはプログラム書いて、書き込めばマイクロサーボは動きます。
プログラムを書きます。
#include <Servo.h>
Servo servo;
void setup() {
// put your setup code here, to run once:
servo.attach(2);
}
void loop() {
// put your main code here, to run repeatedly:
servo.write(90);
delay(1000);
}
arduino IDEで、コードを上と同じにしてください。
はい、コードできました。
これをですね、arduino nanoに書き込みます。
メニューのツールから、
ボード:Arduino Nano
プロセッサ:ATmega328
シリアルボード:arduino nanoを指していると思われるやつを選んでください笑
これが設定できたら、書き込みです。
Arduino IDEの画面の左上にある、右矢印(→)を押してください。
はい、書き込めましたか?
書き込みがおわったあと、マイクロサーボが"ギョッ"と鳴って少しだけ回転します。
少しだけ、コードの説明です。
setup()の中は、arduino nano が起動したあとに一度だけ実行されます。
loop()の中は、setup()のあと、繰り返し実行されます。
servo.write(90);
の90という数字は、角度を表しています。
これでマイクロサーボのやつを90度にしてくれます。
0~180度に設定できますが、私の安物マイクロサーボは20~160度ぐらいにしておかないと"ガチガチ"鳴って壊れそうです。
delay(1000);
は1000ms秒待つ、という意味です。
つまり、
delay(50);
と書けば、50msだけ待ってくれます。
最後に、20度と160度を行き来させるコードを書いて、動かしてみましょう。
#include <Servo.h>
Servo servo;
void setup() {
// put your setup code here, to run once:
servo.attach(2);
}
void loop() {
// put your main code here, to run repeatedly:
servo.write(20);
delay(1000);
servo.write(160);
delay(1000);
}
上のコードを書き込んでみましょう。
できましたでしょうか?
今回の記事はこれでおしまいです。ありがとうございました。
ポテショメータなどを使うと、"つまみを回すとサーボの角度が変わる"というのも簡単にできます。
今回の話の注意点なんですが、本当はマイクロサーボを動かす電源は別にしたほうが良いです。 今の状態だと、PC→arduino nano →マイクロサーボ という給電のやり方をしています。
たしかPCのUSB給電では500mAほどしか流せないと思うので、それ以上流そうとすると、PCが急にシャットダウンしたり、再起動がかかったりします。
自分の場合、普段は単3電池と電池ボックスで、単3電池*4 を直列接続したものをつなげたりしてます。
おまけ話
私は、このマイクロサーボの使い方と、ポテショメータでマイクロサーボを制御するやり方を知ったあと、以下の動画を見つけました。
最初にみたとき、「簡単に作れるやん!!」
と思いました。
で、興奮して一気に作りました。
これです↓
俺天才とか思いながら作ってたけどそんなことなかった...(´・_・`)#arduino #RobotArm #MicroServo #3dprinter pic.twitter.com/aiPbXDh27V
— SmarterThanMonkey (@SmThMonkey) 2017年11月6日
どうやら、マイクロサーボ(SG90)ではトルクが足りないため、ある角度でしっかり止まることができずガタガタと震えてしまうようです。まったく動きが安定してません。
今は、強いトルクのサーボモータを手に入れたので、それでロボットアームを作ろうかと思っています。(まぁ、大学の授業に追いつくための勉強が大変すぎて特にこういったことやれてないんですけど...)
おわり。