Arduino Modules - L298N Dual H-Bridge Motor Controller

848,842

336

121

Introduction: Arduino Modules - L298N Dual H-Bridge Motor Controller

About: Here I am!

Quick and simple start guide for using and exploring an L298N Dual H-Bridge Motor Controller module with an Arduino.

The model in the example I am using is from Ebay.

Materials needed:

  • L298N Dual H-Bridge Motor Controller module (various models will work)
  • Male to Female jumper wires
  • An Arduino, any flavor.
  • A DC power supply, 7-35v
  • A motor that is the correct voltage for your power supply used.

Step 1: Getting to Know Your L298N Dual H-Bridge Motor Controller Module:

Usage:

H-Bridge's are typically used in controlling motors speed and direction, but can be used for other projects such as driving the brightness of certain lighting projects such as high powered LED arrays.

How it works:

An H-Bridge is a circuit that can drive a current in either polarity and be controlled by *Pulse Width Modulation (PWM).

* Pulse Width Modulation is a means in controlling the duration of an electronic pulse. In motors try to imagine the brush as a water wheel and electrons as a the flowing droplets of water. The voltage would be the water flowing over the wheel at a constant rate, the more water flowing the higher the voltage. Motors are rated at certain voltages and can be damaged if the voltage is applied to heavily or if it is dropped quickly to slow the motor down. Thus PWM. Take the water wheel analogy and think of the water hitting it in pulses but at a constant flow. The longer the pulses the faster the wheel will turn, the shorter the pulses, the slower the water wheel will turn. Motors will last much longer and be more reliable if controlled through PWM.

Pins:

  • Out 1: Motor A lead out
  • Out 2: Motor A lead out
  • Out 3: Motor B lead out
  • Out 4: Mo (Can actually be from 5v-35v, just marked as 12v)
  • GND: Ground
  • 5v: 5v input (unnecessary if your power source is 7v-35v, if the power source is 7v-35v then it can act as a 5v out)
  • EnA: Enables PWM signal for Motor A (Please see the "Arduino Sketch Considerations" section)
  • In1: Enable Motor A
  • In2: Enable Motor A
  • In3: Enable Motor B
  • In4: Enable Motor B
  • EnB: Enables PWM signal for Motor B (Please see the "Arduino Sketch Considerations" section)

Specifications:

  • Double H bridge Drive Chip: L298N
  • Logical voltage: 5V Drive voltage: 5V-35V
  • Logical current: 0-36mA Drive current: 2A (MAX single bridge)
  • Max power: 25W
  • Dimensions: 43 x 43 x 26mm
  • Weight: 26g

*Built-in 5v power supply, when the driving voltage is 7v-35v

Step 2: Wiring to an Arduino:

There are several different models of these L298N Dual H-Bridge Motor Controllers. The generic wiring schematic above should do the trick for most.

Two things to mention;

  • Make sure you have all of your grounds tied together; Arduino, Power source, and the Motor controller.
  • The PWM Pins are unnecessary if you do not want to control PWM features.

Step 3: Arduino Sketch Considerations:

The Arduino code sketch is pretty straight forward. Since there isn’t a library for the L298N Dual H-Bridge Motor Controller you just have to declare which pins the controller is hooked to.

The “int dir(number)Pin(letter)”‘ pins can be connected to any available digital pin you have available, as long as you declare the correct pin in your sketch. This makes the L298N Dual H-Bridge Motor Controller very versatile if your project is using a lot of Arduino pins.

The int“speedPin(letter)” pins need to be connected to a PWM pin on the Arduino if you want to enable speed control through PWM.

As a quick cheat I have included a list of PWM pins for the main two types of Arduino's I use:

  • AT MEGA – PWM: 2 to 13 and 44 to 46. Provide 8-bit PWM output with the analogWrite() function.
  • UNO – PWM: 3, 5, 6, 9, 10, and 11. Provide 8-bit PWM output with the analogWrite() function.

Step 4: Arduino Sketch Example:

This code example I wrote to allow a serial monitor program such as Putty to control the L298N Dual H-Bridge Motor Controller via a keyboard with key presses.

Controls:

Key .......... Motor

1 ............... Motor 1 Forward

2 ............... Motor 1 Stop

3 ............... Motor 1 Reverse

4 ............... Motor 2 Forward

5 ............... Motor 2 Stop

6 ............... Motor 2 Reverse

Code:

  • Fixed the formatting issues (12/29/2014):

Download the attached L298N_Dual_H_Bridge_Keyboard_Control_Reichenstein7.ino

Alternate Download: http://www.mediafire.com/download/z654e8at1b21d7e/L298N_Dual_H_Bridge_Keyboard_Control_Reichenstein7.ino

Microcontroller Contest

Participated in the
Microcontroller Contest

2 People Made This Project!

Recommendations

  • The 1000th Contest

    The 1000th Contest
  • Battery Powered Contest

    Battery Powered Contest
  • Hand Tools Only Challenge

    Hand Tools Only Challenge

121 Discussions

0
Reichenstein7

I have added a link to the .ino file via Mediafire for those who are still seeing formatting errors.

0
YveG1
YveG1

Reply 5 years ago on Introduction

Why do you connect Pi's 5V to the 5V on the board??

This seems weird. Everywhere else I read that the board will supply 5V when running off 7-12V supply. But they never say you should put 5V from the Pi in it???!

0
Reichenstein7
Reichenstein7

Reply 5 years ago on Introduction

This step is not necessary, I like to tie together rails of equal v-value for stability of my projects (some components are heavier draw than others and v-droop is annoying). What is necessary is to make sure your projects components are always grounded together.

0
IgorS32
IgorS32

Reply 4 years ago

That's not a good idea. In the best case it won't do a thing, in the worst (most likely) case, you are shorting 2 voltage sources that are *not* identical, hence generating a voltage delta across a very small resistor.

0
samuelivor
samuelivor

5 months ago

Hello, I want to use this driver with a Raspberry Pi 3+ and the GPIO ports. However, the GPIO ports can only output up to 3.3V. Can I still connect them to the in1, in2, in3, in4, enA and enB ports ? Should I plug the Raspberry's 3.3V output to the driver's 5V input as a reference voltage or is that not how this port work?

0
TDpereczon
TDpereczon

1 year ago

Hi, I'm building a RC go-kart, and i would like to do the windshield wiper motor for steering, great idea, but I'm having a problem, i tried the L298N, didn't work and the 43A BTS7960B DC Motor Driver Drive Module H-Bridge PWM Control Fast Braking, and nothing is happening, I did it just like all the videos iv'e seen, i don't know what I'm doing wrong, what does the voltage need to be on in 1 & 2, can i use any servo, my receiver works on 5v or 9.3v , tried both no difference, do these things need to be programmed before use or are they plug and play, cause I'm not playing, LOL, please help if you can, I'm using a spectrum DX5C... THANK YOU, Danny........

0
Zah12345
Zah12345

Reply 6 months ago

I'm sure your windshield wiper motor draws more current than the 2 Amp this unit can supply. Check the current drawn by the windshield wiper motor when you connect it to your 12 Volt supply directly. You probably find it draws more that 10 Amp!!!

0
Ralphxyz
Ralphxyz

1 year ago

I am getting a "redefinition of 'void setup()'" error

0
alraed_engs
alraed_engs

Question 2 years ago

how much voltage and electric current in Blue L298N Dual H Bridge Drive Controller Module?

0
shoikat
shoikat

Question 2 years ago on Introduction

How much motor use in L298N H Bridge motor driver

0
tiago.rodrigues.christovam
tiago.rodrigues.christovam

Answer 1 year ago

The engine itself does not use anything but forwards the load and gives a sense to the engines.

0
rubruble
rubruble

Answer 1 year ago

1,000,000

0
TDpereczon
TDpereczon

Question 1 year ago on Introduction

Hi, I'm building a RC go-kart, and i would like to do the windshield wiper motor for steering, great idea, but I'm having a problem, i tried the L298N, didn't work and the 43A BTS7960B DC Motor Driver Drive Module H-Bridge PWM Control Fast Braking, and nothing is happening, I did it just like all the videos iv'e seen, i don't know what I'm doing wrong, what does the voltage need to be on in 1 & 2, can i use any servo, my receiver works on 5v or 9.3v , tried both no difference, do these things need to be programmed before use or are they plug and play, cause I'm not playing, LOL, please help if you can, I'm using a spectrum DX5C... THANK YOU, Danny........

0
surajb26
surajb26

Question 2 years ago on Introduction

What is the current limit for this motor deriver module to run high amp motor e.i. more than 3 amp?

0
flocsy
flocsy

2 years ago

Hi,

I tried this with both of the modules you have in the instructions (one with the blue connectors for the motor on the opposite side, and the other with the yellow motor connectors on the same side). I am trying to control using PWM, so I use this:

// it's value is calculated in another function, where I read a rotary encoder.

// The value is [0-100] with steps of 10

int pwmSpeed;

void setPWM() {

digitalWrite(LOCO_LEFT_PIN, direction == 1 ? HIGH : LOW);

digitalWrite(LOCO_RIGHT_PIN, direction == -1 ? HIGH : LOW);

analogWrite(LOCO_SPEED_PWM_PIN, pwmSpeed);

}

When I test the code "dry" it all looks good. I turn the rotary encoder 1 click to either side and the values of direction and pwmSpeed are printed out and are correct.

However when I put a loco (model train) on the rails, then whenever I output anything but 0 to the pwm pin, then I just hear a buzz sound from the loco's engine. Any idea why?

0
flocsy
flocsy

Reply 2 years ago

it turned out that it works, it's just the nature of low frequency PWM. On higher duty cycles the motor starts to spin. On higher frequency you don't hear the buzz.

0
Champarl
Champarl

3 years ago

Hello,
According to the L298n'datasheet, their is current sensors on this chip. We can see the output on the "wiring picture" (CSA and CSB pins).
I bought this chip but in the configuration of your first picture .
Any ideas to have an acces to current sensor ?

0
flocsy
flocsy

Reply 2 years ago

did you figure out how to use CSA,CSB with arduino?