Arduino と モーター
Arduino
Arduino とは2005年にイタリアで生まれたマイコンボードで,電子工作やロボット性を学ぶ学生に向けた安価なボードとして開発されました.
Arduino は様々な互換ボードが作成されました.この授業では多くのI/Oポートを備えた Arduino Mega の互換ボードを使います.
Arduino のプログラムは Sketch(スケッチ) とよばれ,統合開発環境 Arduino IDEでプログラムを作成し,それを Arduino ボードに送ります.
LED1
それでは,以下のプログラムを Arduino IDE で作成してください.
void setup() {
pinMode (LED_BUILTIN,, OUTPUT); // 13番ピンをデジタル出力に設定する
}
void loop() {
digitalWrite(LED_BUILTIN,, HIGH); // LEDを点灯する
delay(1000); // 1秒待機する(1000ミリ秒)
digitalWrite(LED_BUILTIN,, LOW); // LEDを消灯する
delay(1000); // 1秒待機する
}
上記のプログラムで,setup
, loop
の2つの関数がありますが,
* setup
関数:ボードの電源が入った時に1回だけ実行される
* loop
関数:setup
関数のあと,繰り返し実行される.
となります.
つまり,上記のプログラムでは,最初に出力に使うピンを設定し,そのあと,そのピンに電圧をかけては消すループが繰り返されます.13番はボード上のLEDです.
プログラムを書き終わったらボードに書き込みます. 書き込む時にメニューのツールから適切なボードの設定を行います.
LED2
次に配布したLEDを光らせましょう. Arduino Mega のピン配置は以下のようになっています.
13番のピンとGND(グランド)にLED を指します(向きに注意).
上記のプログラムを以下のようにしてください.
#define LED_PIN 13
void setup() {
pinMode (LED_PIN, OUTPUT); // 13番ピンをデジタル出力に設定する
}
void loop() {
digitalWrite(LED_PIN, HIGH); // LEDを点灯する
delay(1000); // 1秒待機する(1000ミリ秒)
digitalWrite(LED_PIN, LOW); // LEDを消灯する
delay(1000); // 1秒待機する
}
LED3
上記ではデジタル的にLEDを光らせましたが,アナログ的に光らせてみましょう
上記のように Arduino Mega とLEDを接続してください. ただし,上記の図では7番にさしていますが,9番に指してください.
#define LED_PIN 9
void setup() {
pinMode (LED_PIN, OUTPUT); // 9番ピンをデジタル出力に設定する
}
void loop() {
int i = 0;
int WAIT_TIME = 10; // 待ち時間を指定
int STEP = 1; // デューティー比の変化(ステップ数)
while(i <= 255){ // 変数iが255より小さい時繰り返し以下を実行
analogWrite(LED_PIN, i); // iの値をデューティー比としてPWM出力
delay(WAIT_TIME); // 指定時間停止
i = i + STEP; // 変数iをSTEP分増加させる
}
i = 255;
while(i >= 0){ // 変数iが0より大きい時繰り返し以下を実行
analogWrite(LED_PIN, i); // iの値をデューティー比としてPWM出力
delay(WAIT_TIME); // 指定時間停止
i = i - STEP; // 変数iをSTEP分減少させる
}
}
モーターを動かす
まずは電池にプラス・マイナスにモーターの線を当ててモーターが動くことを確かめてください.
Arduino でモーターを制御する
モーターの速度を変更するためには,モーターにかける電圧を強くしたり,弱くしたりする必要があります.
デジタル的に出力する電圧を制御する方法は PWM 制御を使うことです.PWM制御とは,電圧のオンとオフを周期的に切り替えるのですが,そのオンとオフの割合を変えることで電圧を変えるほう方法です.
Arduino では,PWM 制御が可能なピンがいくつかありますが,そのピンから出力される電圧は5Vです.また出力できる電流に制限がありますので,そのピンだけでモーターを回すことはできません.
そこで,モータードライバを使います. モータードライバーは入力された弱い電圧のPWMの信号に基づいて,高い電圧のPWMを作ります.
モータードライバーへの入力は * 出力したい電圧レベルのPWM信号(スピードに相当する) * モーターを回転させる方向の信号 * 電源電圧 となり,出力は * モーター電圧 となります.
OSOYOO Model-X Motor Driver Module
モータードライバとモーターが以下の図のように接続されていることを確認してください.
それでは以下の前輪だけ動かしてみるプログラムを書いてください.
//ピンの名前付け
#define speedPinR 9 // Front Wheel PWM pin connect Right MODEL-X ENA
#define RightMotorDirPin1 22 //Front Right Motor direction pin 1 to Right MODEL-X IN1 (K1)
#define RightMotorDirPin2 24 //Front Right Motor direction pin 2 to Right MODEL-X IN2 (K1)
#define LeftMotorDirPin1 26 //Front Left Motor direction pin 1 to Right MODEL-X IN3 (K3)
#define LeftMotorDirPin2 28 //Front Left Motor direction pin 2 to Right MODEL-X IN4 (K3)
#define speedPinL 10 // Front Wheel PWM pin connect Right MODEL-X ENB
void setup()
{
//右側モーター用のピンの設定
pinMode(RightMotorDirPin1, OUTPUT);
pinMode(RightMotorDirPin2, OUTPUT);
pinMode(speedPinL, OUTPUT);
//左側モーター用のピンの設定
pinMode(LeftMotorDirPin1, OUTPUT);
pinMode(LeftMotorDirPin2, OUTPUT);
pinMode(speedPinR, OUTPUT);
}
void loop(){
//右側モーターを前に回転させる
digitalWrite(RightMotorDirPin1,LOW);
digitalWrite(RightMotorDirPin2,HIGH);
analogWrite(speedPinR, 100);
//左側モーターを前に回転させる
digitalWrite(LeftMotorDirPin1,LOW);
digitalWrite(LeftMotorDirPin2,HIGH);
analogWrite(speedPinL, 100);
delay(100)
}
上記プログラムで analogWrite でPWM信号が
練習
-
上記のプログラムを改変して,モーターの速さをだんだん早くする/遅くするプログラムを作成してみてください.
-
上記のプログラムを改変して,前輪のモーターを逆方向に動かしてみてください.