Controlling DC Motor With Drivemall

Introduction: Controlling DC Motor With Drivemall

A practical guide on how to control a DC motor using the Drivemall already prepared with the L298 driver.

This tutorial is valid both if we use the Arduino and both using the Drivemall Board
below the link to build the Drivemall.

The advantage of prefering the Drivemall over the classic Arduino board is that of reducing the complexity of the connections leading to a more tidy setup. However, this is optional: all the results are still valid with the arduino board, a breadboard and enough dupont jumpers for connections.

A DC motor driver is require If an Arduino board is adopted instead of the Drivemall.

Step 1: Bill of Materials

  1. Drivemall / Arduino Mega
  2. 4 button
  3. 4 Resistor1Kohm
  4. 1 Motor in DC
  5. (Optional) DC Driver (i.e. L298N)

Step 2: Wire Connections

We use the driver L298 for the following reasons

  • Motor direction control

  • Engine power control

  • Use of power greater than that which can be supplied by Arduino

The driver can be controlled via 3 pins

  • Enable for the power
  • IN1 and IN2 for the direction
    • IN1 and IN2 both high or low the motor is stopped

    • IN1 and IN2 discordant the motor turns in one direction or the other

Each motor is driven by three pins, In1,In2 to indicate the direction and EnableA for the engine power.

Let's start by preparing the breadboard with 4 buttons connected via 4 resistance to GND and the other pin to Vbat. We then connect the pins from A0 to A3 of the Drivemall to the 4 buttons as shown in photos (1 and two). Then we connect the motor as in photo 3.

Step 3: Firmware

Since the control pins for the DC motor are not mapped, we manage them directly at the register level

the instructions. The mask

DDRD = DDRD | B11110000

is used to define PINs PD7 to PD4 at the output.

To set the logical level of the PIINs we use two instructions

PORTD = PORTD | B10100000; PORTD = PORTD & B10101111;

the first to set level 1 the second to set level 0

the motor is connected to PIN PE4 so it can be controlled with PINs PD7 and PD6.

To prevent the board from detecting more than one press while pressing the button, the instruction helps us

unsigned long currentMillis = millis ();

Acc = analogRead (PinAcc);

if (currentMillis - previousMillis> 100 and Acc> 500)


Vel ++;

Serial.print (Vel);

previousMillis = currentMillis;


Step 4: Control

As a last step we connect the power supply of the board, in what we wanted to use the USB power supply for the logic part and the 12 volt for the motor, we have to connect the GND in common

for the control we have:

  • pin A0 to increase speed
  • pin A1 to decrease the speed
  • pin A2 to stop the motor
  • pin A3 to change direction of rotation

Step 5: Disclaim

This tutorial has been produced as part of the Makerspace for Inclusion project, co-financed by the Erasmus + Programme of the European commission.
The project aims to promote an informal form of education as a means to foster the social inclusion of young people, informal education as can be found within makerspaces. This tutorial reflects the views only of the authors, and the European Commission cannot be held responsible for any use which may be made of the information contained therein

Be the First to Share


    • Microcontroller Contest

      Microcontroller Contest
    • Automation Contest

      Automation Contest
    • Make it Glow Contest

      Make it Glow Contest