みなさん,こんにちは
おかしょです.
電子工作を始めた方の中には,何かロボットを作りたいから始めたという方が多いと思います.
中でも二足歩行ロボットを作りたくて電子工作を始めたという方が大半を占めると思います.
そんな二足歩行ロボットを作るには,必ずサーボモータが必要になります.
この記事ではArduinoを使ってサーボモータを動かす方法を解説します.
この記事を読むと以下のようなことがわかる・できるようになります.
- サーボモータとは
- サーボモータの使い方
この記事を読む前に
この記事ではArduinoを使用します.
電子工作を始めたばかりでArduinoの使い方もよくわからないという方は以下の記事を先に読んでおくことをおすすめします.
サーボモータとは
サーボモータというのは,二足歩行ロボットの関節部分などに使用されます.
この記事ではSG90という型番のサーボを使用します.
サーボモータは中にモーターが入った本体(青い部分)とモーターの力を伝えるホーン(白い部分)の二つで構成されています.
このサーボを制御することでホーンの角度を制御できます.
そのため,二足歩行ロボットの膝を好きな角度に曲げたり,サーボの上に赤外線センサーを搭載して好きな向きに向けることもできます.
サーボにつながっている導線は3つです.
電源電圧・GND・信号線です.
特殊なものは角度を伝える導線も加えた4本のサーボもあります.
そのようなサーボの解説はこちらで行っています.
角度の制御
ここからはサーボモーターの角度を制御する方法を解説します.
サーボモータの角度は信号線にどのような電気を流すかによって決まります.
このとき,流す電気のことをPWM信号と言います.
PWM信号というのはある周期をもった信号のことで,左のようにHIGHとLOWを繰り返します.
左に示すようにHIGHの続く時間(赤い矢印)によってサーボの角度が決まります.
このような周期的な信号をサーボに与えるにはTimerと呼ばれる割り込み処理をしなければなりません.
しかし,このTimerについて理解するのは少し難しいです.(Timerついて知りたい方はこちら)
ですが,Arduinoにはそのような面倒な処理を勝手にやってくれるライブラリがあります.
このライブラリを使えば,だれでも簡単にサーボの角度を制御することができます.
以下では,そのライブラリの使い方を解説します.
プログラムの解説
まず,Arduinoのプログラムの先頭に以下を書きます.
#include <Servo.h>
これを書くことによってサーボのライブラリを使用できるようになります.
次にサーボのクラスを定義します.
Servo servo;
クラスについて知らない方は,ここではサーボのライブラリを使うための最初の呪文のようなものだと思ってください.
ここではservoとしたので,サーボのライブラリを使うときは必ず最初にservoという呪文を書かなければなりません.
ここのservoは好きなように変えても動作させることができます.
次にsetup関数では
servo.attach(3);
このように書きます.
これでサーボの制御を行うピンを設定します.
このピン設定はサーボのライブラリを使用します.
そのため,最初にservoを書いています.
今回は3番ピンを設定しました.
ここで注意してほしいのが,設定できるピンには決まりがあるということです.
ここで設定するピンは必ずPWM出力ができなければなりません.
使用したいピンがPWM出力に対応しているかどうかを必ず確認するようにしてください.
PWM出力に対応しているかどうかは簡単に確認できます.
Arduino基板上の数字の横に波線(~)が書いてあればPWM出力ができます.
今回使用するArduino Unoでは3番の横に波線がかかれているので,3番ピンを使用します.
ピンの設定ができたら,動かします.
動かし方は自由ですが,今回は以下のようなプログラムを作成しました.
#include <Servo.h>
Servo servo;
void setup() {
servo.attach(3);
}
void loop() {
servo.write(0);
delay(500);
servo.write(30);
delay(500);
servo.write(60);
delay(500);
servo.write(90);
delay(500);
servo.write(120);
delay(500);
servo.write(150);
delay(500);
servo.write(180);
delay(500);
}
loop関数内のservo.writeでは引数に書いた角度にサーボを制御することができます.
そのため,このプログラムでは0.5秒ごとに30度ずつサーボが回転するようになっています.
使用するもの
このプログラムを実際に使用するには以下のものが必要となります.
- Arduino Uno
- USBケーブル
- サーボ(SG90)
- ブレッドボード
- ジャンパーケーブル
ブレッドボードはArduinoに直接ピンを指せばいいのでなくても大丈夫です.
電子回路と実行結果
以下のような電子回路で先程のプログラムを実行すれば,問題なくサーボを動かすことができます.
サーボの確認をしました.今度は30°ずつ動きます.#Arduino pic.twitter.com/otHZnKTivp
— おかしょ (@okasho_engineer) August 19, 2020
タクトスイッチで制御
次はタクトスイッチを使ってサーボの角度を制御していきます.
タクトスイッチの使用方法についてはこちらを参照してください.
使用するもの
ここで使用するのは以下のものになります.
- Arduino Uno
- USBケーブル
- サーボ(SG90)
- タクトスイッチ
- 抵抗(10kΩ)
- ブレッドボード
- ジャンパーケーブル
タクトスイッチを3つ使ってサーボにいろいろな動きをさせてみます.
プログラムの解説
プログラムは以下のようなものを作成しました.
#include <Servo.h>
Servo servo;
void setup() {
servo.attach(5);
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
servo.write(0);
}
void loop() {
if(digitalRead(2))
{
servo.write(0);
}
if(digitalRead(3))
{
servo.write(90);
}
if(digitalRead(4))
{
servo.write(180);
}
}
サーボのライブラリについては先ほど解説したので,ここでは割愛します.
loop関数の中を見るとif文が3つあります.
この3つのif文によってサーボの動きを割り当てています.
ピンの2,3,4にタクトスイッチを接続することを想定して,2番ピンに接続されたスイッチが押されるとサーボの角度は0になり,3番を押すと90°,4番を押すと180°になるようになっています.
先程は3番ピンにサーボを割り当てましたが,今度は5番にサーボを割り当てます.
電子回路と実行結果
以下の電子回路で上記のプログラムを実行すると,以下のようになります.
久しぶりにサーボを触ったので、動作確認。スイッチによって角度を制御できます。一度だけ意図しない動きをしましたが、気にしません。#Arduino pic.twitter.com/rJRSBibZEK
— おかしょ (@okasho_engineer) August 16, 2020
まとめ
この記事ではサーボモータをArduinoで動かす方法について解説しました.
Arduinoではライブラリが充実しているので,電子工作が初心者の方にも簡単に動かすことができるようになっています.
プログラミングの方法さえ分かってしまえば,二足歩行ロボットも作れてしまいそうです.
続けて読む
この記事では一般的なサーボモータの使用方法を解説しましたが,サーボモータの中には現在の角度情報をフィードバックしてくれるものもあります.
以下の記事では角度をフィードバックするサーボの使用方法について解説しているので,興味のある方は読んでみてください.
Twitterでは記事の更新情報や活動の進捗などをつぶやいているので気が向いたらフォローしてください.
それでは最後まで読んでいただきありがとうございました.
コメント