【Arduino初級】ロボットの速度調整!analogWriteの使い方を解説!
Arduino入門編で車輪型ロボットを作った人や、教材などで車輪型ロボットを持っているという人は、ぜひ、これから始まる初級編でスキルを磨いて、ロボットの改造を楽しんでいきましょう!
これまで、動く/止まるの動作の組み合わせしかできなかったのが、この記事を読むことで、速く動く/ゆっくり動く/おそ〜く動くなど、速さを調整することができるようになります!
機体の改造をしなくても、プログラミングのスキルが向上することで、その機体の性能を最大限に引き出すことができるようになります!
- ロボットの速度を調整できるanalogWriteの紹介
- デジタルとアナログの違い
- analogWriteを使ったロボットの速度調整が可能なプログラム
解説動画
今回の記事はこちらの動画を解説したものです。
analogWriteの紹介
これまで主に使っていたdigitalWriteはHIGHとLOWの2パターンしか出力できませんでしたが、今回紹介するanalogWriteは、なんと、、、HIGHとLOWの間のパワーを出力することができるんです!
使い方は、下の図のように、digitalWriteにすごく似ています。
カッコの中に、ピン番号と、出力の強さ(パワー)を書くようになっています。
パワーの最大値は255で、この場合はdigitalWriteでHIGHを出力したのと同じ状態になります。また、最小値は0(ゼロ)で、この場合はdigitalWroteでLOWを出力したのと同じ状態になります。
デジタルとアナログの違い
せっかくdigital(デジタル)とanalog(アナログ)というキーワードがそろったので、それぞれについて、解説したいと思います!
まずはイメージしやすいように、下の図を作りましたので、それを見ながら、ものすごく簡単に表現すると、
デジタルはON/OFF、5V/0V、光る/消える、動く/止まるなどの2つの状態で表現できるもの、
アナログは強〜弱のような強さを自在に調整できるものと考えておけばArduinoで使い分けることができると思います!
※正確にはanalogWriteで出力される信号は、アナログ電圧ではなくPWM(Pulse Width Modulation)信号です。気になる人は、調べてみて下さい。
analogWriteを使ったロボットの速度調整が可能なプログラム
Arduinoと市販のパーツで作る車輪型ロボットNR-02を使って、移動速度を調整するプログラムを作ってみましょう!
- スタートボタンを押すと1秒後に動き始める
- 前進と後退を高速(255)、中速(160)、低速(80)の3パターンで繰り返す
- 動作の間に停止を入れる
- スイッチは8番につながっている
- 左モータは6番(A)と9番(B)でコントロール
- 右モータは5番(A)と3番(B)でコントロール
ピン番号に要注意!!
実は、analogWriteは全てのピンで使えるわけではないんです。。。
下の図のように、番号の横に「〜」が付いているピンだけがanalogWriteを使うことができます!
ソースコード
ソースコード全文です。
行数は多いですが、同じ動作の繰り返しで、パワーの数値が違うだけなので、コピペを活用して簡単に作れます(^^)
1void setup() {
2 //ピンの出力(Output)or入力(Input)設定
3 pinMode(6, OUTPUT); //左モータA
4 pinMode(9, OUTPUT); //左モータB
5 pinMode(5, OUTPUT); //右モータA
6 pinMode(3, OUTPUT); //右モータB
7 pinMode(8, INPUT); //スイッチ
8
9 //スタートボタンを押されるのを待つ
10 while(digitalRead(8)==0);
11 delay(1000); //1秒待つ
12}
13
14void loop() {
15 //高速前進
16 analogWrite(6, 255); //左A
17 analogWrite(9, 0); //左B
18 analogWrite(5, 255); //右A
19 analogWrite(3, 0); //右B
20 delay(1000);
21
22 //ブレーキ
23 digitalWrite(6, LOW); //左A
24 digitalWrite(9, LOW); //左B
25 digitalWrite(5, LOW); //右A
26 digitalWrite(3, LOW); //右B
27 delay(1000);
28
29 //高速後退
30 analogWrite(6, 0); //左A
31 analogWrite(9, 255); //左B
32 analogWrite(5, 0); //右A
33 analogWrite(3, 255); //右B
34 delay(1000);
35
36 //ブレーキ
37 digitalWrite(6, LOW); //左A
38 digitalWrite(9, LOW); //左B
39 digitalWrite(5, LOW); //右A
40 digitalWrite(3, LOW); //右B
41 delay(1000);
42
43 //中速前進
44 analogWrite(6, 160); //左A
45 analogWrite(9, 0); //左B
46 analogWrite(5, 160); //右A
47 analogWrite(3, 0); //右B
48 delay(1000);
49
50 //ブレーキ
51 digitalWrite(6, LOW); //左A
52 digitalWrite(9, LOW); //左B
53 digitalWrite(5, LOW); //右A
54 digitalWrite(3, LOW); //右B
55 delay(1000);
56
57 //中速後退
58 analogWrite(6, 0); //左A
59 analogWrite(9, 160); //左B
60 analogWrite(5, 0); //右A
61 analogWrite(3, 160); //右B
62 delay(1000);
63
64 //ブレーキ
65 digitalWrite(6, LOW); //左A
66 digitalWrite(9, LOW); //左B
67 digitalWrite(5, LOW); //右A
68 digitalWrite(3, LOW); //右B
69 delay(1000);
70
71 //低速前進
72 analogWrite(6, 80); //左A
73 analogWrite(9, 0); //左B
74 analogWrite(5, 80); //右A
75 analogWrite(3, 0); //右B
76 delay(1000);
77
78 //ブレーキ
79 digitalWrite(6, LOW); //左A
80 digitalWrite(9, LOW); //左B
81 digitalWrite(5, LOW); //右A
82 digitalWrite(3, LOW); //右B
83 delay(1000);
84
85 //低速後退
86 analogWrite(6, 0); //左A
87 analogWrite(9, 80); //左B
88 analogWrite(5, 0); //右A
89 analogWrite(3, 80); //右B
90 delay(1000);
91
92 //ブレーキ
93 digitalWrite(6, LOW); //左A
94 digitalWrite(9, LOW); //左B
95 digitalWrite(5, LOW); //右A
96 digitalWrite(3, LOW); //右B
97 delay(1000);
98}
動作確認
このプログラムでロボットを動かすと、こんな感じで動くと思います!
(↓動作確認のところから再生されます)
まとめ: 【Arduino初級】ロボットの速度調整!analogWriteの使い方を解説!
今回の記事では、車輪型ロボットの移動速度を調整する方法として、analogWriteを紹介して、それを使ったプログラムと動作確認までを解説しました!
ON/OFFだけでなく、強〜弱を扱うことができるようになり、これまでより細かい動作を実現できるようになりますね!!
- ロボットの速度を調整できるanalogWriteの紹介
- デジタルとアナログの違い
- analogWriteを使ったロボットの速度調整が可能なプログラム
最後まで読んでいただき、ありがとうございました!
以上、CHAでした!