モータードライバL298Nを使う。
こんにちは、こんばんは
モータードライバをarduinoで使っていきたいと思います。
必要な部品
・Arduino Uno
・モータードライバー(L298N)
・モーター(DC0~12Vの間までで駆動するもの)
・外部電源(DC0~12Vまで)
・ジャンパ線とミノムシクリップ、ワニ口クリップ
部品の解説
このブログを書くにあたってL298Nのブログを調べました。
fritzingで分かりやすく解説しているブログがあまりなかった印象だったのでfriztingの図を使っていきたいと思います。
そしてここではL298Nのモジュールの解説をします。
手っ取り早くスペックを知りたい人はデータシートを読んでください。
まず下の図がL298Nのモジュールの図になります。
そして図の下にある表がピンアサイン(ピンの役割と配置)になります。
- 5Vと5Vs(小さいピンのほう)はL298Nから電源を取り出してArduinoで使いたいときに使用します。ですが外部電源を入力する必要があります。
- モーターA、Bは回路の図に記入してあります。
-
PWMで制御したい場合はENAとENBの結線を外してPWM信号を入力します。
- PWMを使わない場合は5VsとENA、ENBを結線します。
- 12Vピンは最大12Vと書いてありますがカタログスペック上は50Vが最大です。
- ピーク100μ秒以下であれば3Aまでそれ以上は2A、電力最大は25W
回路
モーターを一つ使うか2つ使うかによってケーブルのつなげ方が変わります。
モーター1つの場合↓
プログラム
モーター一つ(PWMあり)
#include <Arduino.h>
#define ENA 26
#define IN1 25
#define IN2 33
void setup(){
pinMode(ENA, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
}
void loop(){
//Aモーター正転 徐々に加速
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
for(int i = 0; i<255; i++){
analogWrite(ENA, i);
delay(10);
}
//Aモーター ブレーキ 両極をLOWにすることによって惰性(ニュートラル)になる
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
//ENAをLOWにすることによって回転に対する抵抗する電圧を与えない
digitalWrite(ENA, LOW);
delay(2000);
//Aモーター正転 徐々に減速
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
for(int i = 255; i>0; i--){
analogWrite(ENA, i);
delay(10);
}
//Aモーター ブレーキ 両極をHIGHにすることによってブレーキになる
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
//ENAをHIGHにすることによって回転に対する抵抗する電圧を与える
digitalWrite(ENA, HIGH);
delay(2000);
}
モーター二つ(PWMあり)
#include <Arduino.h>
#define ENA 26
#define IN1 25
#define IN2 33
#define ENB 32
#define IN3 35
#define IN4 34
void setup(){
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop(){
//Aモーター正転 徐々に加速
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
for(int i = 0; i<255; i++){
analogWrite(ENA, i);
delay(10);
}
//Aモーター ブレーキ 両極をLOWにすることによって惰性(ニュートラル)になる
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
//ENAをLOWにすることによって回転に対する抵抗する電圧を与えない
digitalWrite(ENA, LOW);
delay(2000);
//Aモーター正転 徐々に減速
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
for(int i = 255; i>0; i--){
analogWrite(ENA, i);
delay(10);
}
//Aモーター ブレーキ 両極をHIGHにすることによってブレーキになる
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
//ENAをHIGHにすることによって回転に対する抵抗する電圧を与える
digitalWrite(ENA, HIGH);
delay(2000);
//Bモーター正転 徐々に加速
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
for(int i = 0; i<255; i++){
analogWrite(ENB, i);
delay(10);
}
//Bモーター ブレーキ 両極をLOWにすることによって惰性(ニュートラル)になる
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
//ENBをLOWにすることによって回転に対する抵抗する電圧を与えない
digitalWrite(ENA, LOW);
delay(2000);
//Bモーター正転 徐々に減速
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
for(int i = 255; i>0; i--){
analogWrite(ENB, i);
delay(10);
}
//Bモーター ブレーキ 両極をHIGHにすることによってブレーキになる
digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH);
//ENAをHIGHにすることによって回転に対する抵抗する電圧を与える
digitalWrite(ENB, HIGH);
delay(2000);
}
このプログラムたちにはわざと関数を使わないで書いています。
関数を使えば快適なプログラムになります。



コメント
コメントを投稿