作成:栁澤研究室 Robo-BE用

モータの制御

この章では,DCモータの制御の制御を勉強していきます.

注意:配線を間違えると電池ボックスから煙が出たり,最悪ラズベリーパイが壊れます.配線をよく確認してから実行してください.

1.モータドライバについて

マイコンから直接モータを動作させるのに十分な電流を流すことはできません.そこでモータドライバを使用します.
モータドライバを使えば,回転方向や回転速度を制御することができます.
今回は2個のモータを制御できるデュアルモータードライバDRV8835を使用します.配線については,こちらを確認してください.
最初はDCモータを1個制御してみましょう.

1. まずは, はんだ付けのやり方を調べて,モータドライバとピンヘッダをはんだづけしましょう.
2. モータドライバをブレッドボードに取り付けます.(中央部の溝をまたいで設置すること.以下ブレッドボードを利用して配線してください.)
3. 「AIN1」をラズベリーパイの21番,「AIN2」を16番に接続してみましょう.
4. 「AOUT1」にモータの接続端子を,「AOUT2」にはもう一方のモータの接続端子と接続します.
5. 「GND」とラズベリーパイのGNDを接続します.「VCC」にはラズベリーパイの5Vを接続します(Logic power).
6. モータ用の電源(単3電池×2の電池ボックス)の赤い線を「VIN」,黒い線を「GND」に接続します.

※1 はんだ付けのやり方もYouTubeなどに動画がありますので,一度見てから作業しましょう.
※2 モータドライバには2か所「GND」があります.どちらに繋いでも同じですが,上記HPの図に従って配線することを勧めます.
※3 電池ボックスの赤と黒の配線は逆にしてはいけません.電池ボックスをONにする前にもう一度確認してください.

2.DCモータの制御(パターン1)

まずは単純にモータを回転させるプログラムを試してみましょう.

In [ ]:
from gpiozero import LED
from time import sleep
 
m1 = LED(21)  ##方向制御1 (IN1)
m2 = LED(16)  ##方向制御2(IN2)

print("start")
m1.on()
m2.off()
sleep(2)
 
m1.off()
m2.off()
sleep(2)
 
print("end")

3.DCモータの制御(パターン2)

今度はモータの回転速度を制御するプログラムです.3章で学んだPWM信号を使います.

In [ ]:
from gpiozero import LED
from gpiozero import PWMLED
from time import sleep
 
m1 = LED(21)
m2 = PWMLED(16)
 
m1.off()
print("25%")
m2.value=0.25
sleep(2)

print("50%")
m2.value=0.5
sleep(2)

print("100%")
m2.value=1
sleep(2)

m1.off()
m2.off()
sleep(2)
 
print("end")

課題12:デューティ比0,25,50,100%のときのPWM波形をオシロスコープで確認し,グラフをまとめましょう.グラフを書く時は、ONとOFFの比率に注目して書きましょう.

※オシロスコープを使うときはTAに声をかけてください.

4.DCモータの制御(Motorの関数を使う場合)

今度は別の書き方を試してみましょう.GPIOZEROにはMotorというモータを制御するためのモジュールが用意されていますので,これを使ってみましょう.
まずは,正転,逆転,停止の命令の書き方を覚えましょう.なお,配線はこれまでと同じです.

In [ ]:
from gpiozero import Motor
from time import sleep
 
motor = Motor(forward=21, backward=16) ##IN1,IN2をそれぞれGPIO21,16番に接続

print("start")
motor.forward()
sleep(2)
 
motor.backward()
sleep(2)
 
motor.stop()
print("end")

ここまではこのページに記載されているサンプルコードを基に課題に取り組んできたと思いますが,
プログラムが書けるようになるには,自分でリファレンスマニュアルや資料を探して,プログラミングできる必要があります.
多くのリファレンスや資料は,英語書かれています.苦手意識がある人もいるかもしれませんが,まずは挑戦してみましょう.

まず最初は,モータの速度を変更する場合,どうしたらいいのかは以下を調べてみましょう.
https://gpiozero.readthedocs.io/en/stable/api_output.html#gpiozero.Motor

課題13:繰り返し分を使ってモータの回転速度が段階的に早くなるプログラムを作成しましょう.

課題14:モータを2個制御するプログラムを作成してみましょう.

5.DCモータの制御(Robotの関数を使う場合)

2個のDCモータを制御する場合は,GPIOZEROでは「Robot」という便利な関数があります.
https://gpiozero.readthedocs.io/en/stable/api_boards.html#gpiozero.Robot

レポート課題3: Robotの関数を使って,2つのDCモータの回転方向,回転速度を制御するプログラムを作成してください.完成したプログラムには適宜コメントを記入し,意味がわかるように整理してレポートとして提出してください.