作成:栁澤研究室 Robo-BE用
この章では,DCモータの制御の制御を勉強していきます.
マイコンから直接モータを動作させるのに十分な電流を流すことはできません.そこでモータドライバを使用します.
モータドライバを使えば,回転方向や回転速度を制御することができます.
今回は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にする前にもう一度確認してください.
まずは単純にモータを回転させるプログラムを試してみましょう.
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章で学んだPWM信号を使います.
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")
※オシロスコープを使うときはTAに声をかけてください.
今度は別の書き方を試してみましょう.GPIOZEROにはMotorというモータを制御するためのモジュールが用意されていますので,これを使ってみましょう.
まずは,正転,逆転,停止の命令の書き方を覚えましょう.なお,配線はこれまでと同じです.
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
2個のDCモータを制御する場合は,GPIOZEROでは「Robot」という便利な関数があります.
https://gpiozero.readthedocs.io/en/stable/api_boards.html#gpiozero.Robot