Mira
つまみを回せばモーターも回る。
サーボモータを自在に動かそう。
私、サーボモータを動かすのってもっと難しいと思ってた。
だってつまみを回せばその通りにモーターを回せるのよ。ロボットアームなんかもこれで動かせちゃう。前回はサーボモータの動きをあらかじめプログラムに入れて動かしたんだけど(前回の記事)、自在に動くようにするにはきっと難しいプログラムとかが必要なんだろうなぁって思ってました。
でもでも、やってみたらとっても簡単だった。
だってArduinoIDEに、サーボをコントロールするライブラリがあらかじめあったんだもん。 → ライブラリ?
だから簡単なプログラムで動かすことができた。
用意する物はサーボとArduinoの他には「可変抵抗(ボリューム)」だけ。
可変抵抗(ボリューム)
写真のものは「2連」だけど、今回は2連である必要はありません。
🎀 接続例
🎀 サーボモータをコントロールする原理を説明します。
<その1.可変抵抗の値をアナログピンで読み取る。>
Arduinoにはデジタルピンとアナログピンがあります。デジタルピンは「0」か「1」、「ON」か「OFF」、「+」か「-」といった2択の入出力を扱うピン。それに対してアナログピンは0~5vの電圧の大きさを読んだり出力したりできるの。今回はこのアナログピンに可変抵抗をつないで、その値を読み取ります。つまり、つまみを回した分だけ値が変わってくるわけ。値は電圧の数値をそのまま表すのではなくて、0~1023まで変化する値として読み取ります。
<その2.読み取った値の分だけサーボモータを回転させる。>
今回使うサーボモータは180°だけ回転できるモータなの。ぐるぐる回転はしない。この可動域である0~180を、アナログピンで読み取れる値の0~1023に相当させれば、アナログピンの値が0のときにサーボモータは0°の位置に回転して、アナログピンの値が1023のときにはサーボモータは180°の位置に回転するようにできる。
仕組みは以上です。簡単そうでしょ?
🎀 プログラムスケッチ 🎀
//tugai
#include <Servo.h>Servo zilan; // サーボに名前を付ける
int linne = A0; // ボリューム抵抗をつなぐピン
int kasige; // ボリューム抵抗をアナログで読んだ値void setup() {
zilan.attach(6); // サーボをつなぐピン
}void loop() {
kasige = analogRead(linne); // ボリューム抵抗を読む(0~1023)
kasige = map(kasige, 0, 1023, 0, 180); // サーボの角度(0~180)
zilan.write(kasige); // 読んだ値によってサーボを動かす
delay(15); // サーボが動くのを待つ
}
つまみを回すとペンギン(リンク:ペンギンの記事)も同じように動くから、つがいの鳥をイメージして「tugai」というプログラムにしたの。「kasige(傾げ)」は角度を決める値を表してる。角度を決定する可変抵抗がもちろんメス(linne・リンネ)で、それに合わせて動くサーボモータがオス(zilan・ジラン)よ。
プログラムの解説
2行目:まず<Servo.h>がサーボモータ用のライブラリ。ArduinoIDEにあらかじめ用意されているわ。
4行目:可変抵抗(ボリューム抵抗)を「A0」ピンにつなぎます。可変抵抗は普通つまみを上にして、右が入力、左がGND、真ん中が出力よ。だから右から順にArduinoの「5v」「A0」「GND」につなぎます。
7行目:サーボモーターの信号線を6番ピンにつなぎます。
左から「6番ピン」「5v」「GND」へ
サーボモータはPWMという制御方法なので、PWM制御のピンにつなぎます。Arduino UNO のPWMピンは、3,5,6,9,10,11。そのどれかを指定すればいいので、今回は6番にしました。
10行目:リンネ(可変抵抗)の値を読みます。
11行目:読んだ値をサーボモータの角度に変えます。
12行目:角度(傾げ)の分だけジラン(サーボモータ)を回転させます。
13行目:リンネの意志にジランの動きがついてこれるよう、ほんのちょっと(0.015秒)待ちます。
◆ リンネを回せばジランが動く
さあ、準備ができたらさっそく動かしてみましょう。
🎀 サーボモータを動かす動画 🎀
サーボモータを自在に動かす
ボリュームを回せばその分モーターが回る。
おもしろい(∂_<🎀/
これでサーボモータを自在に動かせるようになりました。やったね。