こんにちは、タクト工房へようこそ!今回は、L298Nモータドライバを使って、Raspberry Piでモータを制御する方法を紹介します。L298Nは、2つのDCモータを簡単に制御できる便利なモジュールです。今回はPWMを使用せず、基本的なモータの回転制御を学びます。
使用した材料と道具
Raspberry Pi
モータドライバ(L298N)
DCモータ
ジャンパーワイヤー
バッテリーまたは外部電源
ブレッドボード
- XHコネクタ

今後エンコーダを使って車輪の回転速度を計測したいので、今回エンコーダ付きのモータを使用しました。別のモータでも動かすことができるので同じモータでもなくても大丈夫です。
買い物リスト
- モータ
今回500RPMのものを使いましたが、トルクが小さいため、車両ロボットなどトルクが必要なものを製作する場合は50~100RPMがいいかもしれません。

- 外部電源
・電池ボックス
・モータドライバ

・RaspberryPi

・XHコネクタ

・ワイヤーストリッパー
・ブレッドボード

・RaspberryPiキッド(もしまだ購入していない方は)

モータドライバとは?
モータドライバとは、モータを制御するための部品です。Raspberry Piは小さな信号しか出せませんが、モータは動かすためにもっと大きな電圧と電流が必要です。モータドライバを使用することで、Raspberry Piの信号を使って、モータに必要な電力を供給し、モータを動かすことができます。

L298Nモータドライバの概要
L298Nモータドライバは、DCモータの正転・逆転を簡単に制御できるHブリッジ回路を持つデバイスです。
Hブリッジ回路とは
Hブリッジ回路は、DCモータの回転方向を制御するために使われる回路構成の一つです。Hブリッジ回路では、4つのスイッチ(トランジスタやMOSFET)が使用され、これらを適切に切り替えることでモータへの電流の流れを制御します。
Hブリッジには4つのスイッチ(S1, S2, S3, S4)があり、それらの組み合わせによって以下のように動作します。
正転:スイッチS1とS4をオンにして、S2とS3をオフにすると、電流がモータを一方向に流れます。これによりモータは正転します。
逆転:スイッチS2とS3をオンにして、S1とS4をオフにすると、電流が逆方向に流れ、モータは逆転します。

ピン配置
次に、L298Nモジュールの各ピンの役割を説明します。ピンの役割については以下のサイトを参考にしました。また、もっと詳しく知りたい方は参考にしてください。


IN1, IN2(モータ1用): モータ1の回転方向を制御します。
IN1をHIGH、IN2をLOWにするとモータが正転します。
IN1をLOW、IN2をHIGHにするとモータが逆転します。
IN3, IN4(モータ2用): モータ2の回転方向を制御します(同様の方法で制御します)。
ENA, ENB: モータ1(ENA)、モータ2(ENB)のPWM信号を有効にします。
OUT1, OUT2: モータ1への出力。
OUT3, OUT4: モータ2への出力。
12V: モータに電源を供給するためのピンです。
5V: モジュール内のレギュレータによって生成される5V電源です。Raspberry Piの5Vピンに接続してロジック電源として使用できます。
GND: 共通のGNDを接続する。
モータを動かそう
HXコネクタの取り付け
今回使用したモータは以下の写真のようになっており、はんだ付けはしたくないので、ブレッドボードで簡単に扱えるようにHXコネクタを取り付けます。



配線
以下のように配線します。

※今回使用したモータのプラスが赤線、マイナスが白線になっています。
raspberrypiの拡張コネクタの位置が分からない人は以下の記事を参考にしてください。
プログラム
次に、Raspberry Piを使ってモータを動かすための簡単なプログラムを紹介します。このプログラムでは、モータを前進(正転)、後進(逆転)、停止させる基本的な動作を実行します。
#include <wiringPi.h>
#include <stdio.h>
#define IN1 23 // GPIO 23
#define IN2 24 // GPIO 24
void setup() {
wiringPiSetupGpio(); // GPIOモードを使用
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
}
void forward() {
digitalWrite(IN1, HIGH); // IN1をHIGHに設定
digitalWrite(IN2, LOW); // IN2をLOWに設定
printf("モータが正転しています\n");
}
void backward() {
digitalWrite(IN1, LOW); // IN1をLOWに設定
digitalWrite(IN2, HIGH); // IN2をHIGHに設定
printf("モータが逆転しています\n");
}
void stop() {
digitalWrite(IN1, LOW); // 両方をLOWにしてモータを停止
digitalWrite(IN2, LOW);
printf("モータが停止しました\n");
}
int main(void) {
setup();
while (1) {
forward(); // モータを正転させる
delay(2000); // 2秒待機
backward(); // モータを逆転させる
delay(2000); // 2秒待機
stop(); // モータを停止させる
delay(2000); // 2秒待機
}
return 0;
}
setup: GPIOピンを出力モードに設定します。
forward: モータを前進(正転)させます。
backward: モータを後進(逆転)させます。
stop: モータを停止させます。
main: モータを2秒ごとに前進、後進、停止させる動作を繰り返します。
実行
実行すると下の動画のようにモータが回転します。
まとめ
今回は、L298Nモータドライバを使ってRaspberry Piからモータを制御する方法を学びました。次回は、PWMを使ってモータの速度を調整する方法に挑戦しましょう!
コメント