Project #12: Robotics - EasyDriver - Mk01

Project #12: Robotics - EasyDriver - Mk01 © CC BY-SA

Arduino UNO, Display, EasyDriver, Stepper Motor, Etc...

  • 250 views
  • 0 comments
  • 2 respects

Components and supplies

Adafruit RGB LCD Shield 16×2 Character Display
×1
A000066 iso both
Arduino UNO & Genuino UNO
×1
09729 01a
SparkFun ProtoScrewShield
×1
SparkFun EasyDriver - Stepper Motor Driver
×2
SparkFun Small Stepper Motor
×2
Pololu Mounting
×2
Adafruit Jumper Wires 3 M/M
×4
Adafruit Jumper Wires 6 M/M
×10
Adafruit industries ada64 image 75px
Solderless Breadboard Half Size
×2
12016 01
SparkFun Cerberus USB Cable - 6ft
×1

Apps and online services

About this project

Project #12: Robotics - EasyDriver - Mk01

http://www.donluc.com/?p=2010

Small Stepper Motor

Stepper motors are great motors for position control. They can be found in desktop printers, plotters, 3D printers, CNC milling machines, and anything else requiring precise position control. Steppers are a special segment of brushless motors. They are purposely built for high-holding torque. This high-holding torque gives the user the ability to incrementally "step" to the next position. This results in a simple positioning system that doesn't require an encoder. This makes stepper motor controllers very simple to build and use. These small steppers are a great way to get things moving, especially when positioning and repeatability is a concern. This is a Bipolar motor.

Pros

Excellent position accuracy

High holding torque

High reliability

Most steppers come in standard sizes

Cons

Small step distance limits top speed

It's possible to "skip" steps with high loads

Draws maximum current constantly

DL1911Mk04

1 x Adafruit RGB LCD Shield 16×2 Character Display

1 x Arduino UNO - R3

1 x ProtoScrewShield

2 x EasyDriver - Stepper Motor Driver

2 x Small Stepper Motor

2 x Pololu Mounting

4 x Jumper Wires 3" M/M

10 x Jumper Wires 6" M/M

2 x Half-Size Breadboard

1 x SparkFun Cerberus USB Cable

Arduino UNO

SP1 - Digital 3

DI1 - Digital 2

SP2 - Digital 5

DI2 - Digital 4

VIN - +5V

GND - GND

Follow Us

J. Luc Paquin – Curriculum Vitae

http://www.donluc.com/DLHackster/LucPaquinCVEngMk2020a.pdf

Web:http://www.donluc.com/

Web:http://www.jlpconsultants.com/

Web:http://www.donluc.com/DLHackster/

Web:https://www.hackster.io/neosteam-labs

Web:http://neosteamlabs.com/

YouTube:https://www.youtube.com/channel/UC5eRjrGn1CqkkGfZy0jxEdA

Facebook:https://www.facebook.com/neosteam.labs.9/

Instagram:https://www.instagram.com/neosteamlabs/

Pinterest:https://www.pinterest.com/NeoSteamLabs/

Twitter:https://twitter.com/labs_steam

Etsy:https://www.etsy.com/shop/NeoSteamLabs

Don Luc

Code

DL1911Mk04.inoArduino
// ***** Don Luc Electronics © *****
// Software Version Information
// Project #12: Robotics - EasyDriver - Mk01
// 11-04
// DL1911Mk04p.ino 12-01
// Arduino UNO
// Screw Shield
// Adafruit RGB LCD Shield
// 2 x Small Stepper Motor
// 2 x EasyDriver

// include the library code:
#include <Adafruit_RGBLCDShield.h>

// Adafruit RGB LCD Shield
Adafruit_RGBLCDShield RGBLCDShield = Adafruit_RGBLCDShield();

// These #defines make it easy to set the backlight color
#define OFF 0x0
#define RED 0x1
#define YELLOW 0x3
#define GREEN 0x2
#define TEAL 0x6
#define BLUE 0x4
#define VIOLET 0x5
#define WHITE 0x7

// Momentary Button
int yy = 0;
uint8_t momentaryButton = 0;

// 2 x EasyDriver
int dirPinR = 2;                           // EasyDriver Right
int stepPinR = 3;                          // stepPin Right
int dirPinL = 4;                           // EasyDriver Left
int stepPinL = 5;                          // stepPin Left
int i = 0;

void loop() {

  // Clear
  RGBLCDShield.clear();
   
  // Momentary Button
  momentaryButton = RGBLCDShield.readButtons();

  switch ( yy ) {
    case 1:
    
      // Up
      isSwitch1();
      
      break;
    case 2:
    
      // Down
      isSwitch2();
      
      break;
    case 3:

      // Right
      isSwitch3();
      
      break;
    case 4:

      // Left
      isSwitch4();
      
      break;
    case 5:

      // Stop
      isSwitch5();
      
      break;
    default:

      // Stop
      yy = 5;
      RGBLCDShield.setBacklight(RED);
      isSwitch5();

   }
   
   if ( momentaryButton ) {
    
    if ( momentaryButton & BUTTON_UP ) {
      
      yy = 1;
      // Up
      RGBLCDShield.setBacklight(GREEN);
      
    }
    
    if ( momentaryButton & BUTTON_DOWN ) {
      
      yy = 2;
      // Down
      RGBLCDShield.setBacklight(VIOLET);
      
    }
    
    if ( momentaryButton & BUTTON_LEFT ) {
      
      yy = 3;
      // Right
      RGBLCDShield.setBacklight(TEAL);
      
    }
    
    if ( momentaryButton & BUTTON_RIGHT ) {

      yy = 4;
      // Left
      RGBLCDShield.setBacklight(YELLOW);
    }
    
    if ( momentaryButton & BUTTON_SELECT ) {

      yy = 5;
      // Stop
      RGBLCDShield.setBacklight(RED);
   
    }
    
  }
  
}
getSwitch.inoArduino
// Switch
// Switch 1
void isSwitch1(){

   // Up
   yy = 1;

   // set the cursor to column 0, line 0
   RGBLCDShield.setCursor(0,0);
   RGBLCDShield.print("EasyDriver");        // EasyDriver  
   RGBLCDShield.setCursor(0,1);    
   RGBLCDShield.print("Up");

   // 2 x EasyDriver
   digitalWrite(dirPinR, LOW);              // Set the direction.
   delay(100);
   digitalWrite(dirPinL, LOW);              // Set the direction.
   delay(100);

   for (i = 0; i<1000; i++)                 // Iterate for 1000 microsteps.
   { 
     digitalWrite(stepPinR, LOW);           // This LOW to HIGH change is what creates the
     digitalWrite(stepPinR, HIGH);          // "Rising Edge" so the easydriver knows to when to step.
     delayMicroseconds(170);                // This delay time is close to top speed.
     digitalWrite(stepPinL, LOW);           // This LOW to HIGH change is what creates the
     digitalWrite(stepPinL, HIGH);          // "Rising Edge" so the easydriver knows to when to step.
     delayMicroseconds(170);                // This delay time is close to top speed.
   }  

}
// Switch 2
void isSwitch2(){

   // Down
   yy = 2;

   // set the cursor to column 0, line 0
   RGBLCDShield.setCursor(0,0);
   RGBLCDShield.print("EasyDriver");         // EasyDriver  
   RGBLCDShield.setCursor(0,1);    
   RGBLCDShield.print("Down");

   // 2 x EasyDriver
   digitalWrite(dirPinR, HIGH);              // Set the direction.
   delay(100);
   digitalWrite(dirPinL, HIGH);              // Set the direction.
   delay(100);

   for (i = 0; i<1000; i++)                 // Iterate for 1000 microsteps.
   {
     digitalWrite(stepPinR, LOW);           // This LOW to HIGH change is what creates the
     digitalWrite(stepPinR, HIGH);          // "Rising Edge" so the easydriver knows to when to step.
     delayMicroseconds(170);                // This delay time is close to top speed.
     digitalWrite(stepPinL, LOW);           // This LOW to HIGH change is what creates the
     digitalWrite(stepPinL, HIGH);          // "Rising Edge" so the easydriver knows to when to step.
     delayMicroseconds(170);                // This delay time is close to top speed.
   } 

}
// Switch 3
void isSwitch3(){

   // Right
   yy = 3;

   // set the cursor to column 0, line 0
   RGBLCDShield.setCursor(0,0);
   RGBLCDShield.print("EasyDriver");        // EasyDriver  
   RGBLCDShield.setCursor(0,1);    
   RGBLCDShield.print("Hight");

   // 2 x EasyDriver
   digitalWrite(dirPinR, LOW);               // Set the direction.
   delay(100);
   digitalWrite(dirPinL, HIGH);              // Set the direction.
   delay(100);

   for (i = 0; i<1000; i++)                 // Iterate for 1000 microsteps.
   {
     digitalWrite(stepPinR, LOW);           // This LOW to HIGH change is what creates the
     digitalWrite(stepPinR, HIGH);          // "Rising Edge" so the easydriver knows to when to step.
     delayMicroseconds(170);                // This delay time is close to top speed.
     digitalWrite(stepPinL, LOW);           // This LOW to HIGH change is what creates the
     digitalWrite(stepPinL, HIGH);          // "Rising Edge" so the easydriver knows to when to step.
     delayMicroseconds(170);                // This delay time is close to top speed.
   }    
  
}
// Switch 4
void isSwitch4(){

   // Left
   yy = 4;

   // set the cursor to column 0, line 0
   RGBLCDShield.setCursor(0,0);
   RGBLCDShield.print("EasyDriver");        // EasyDriver  
   RGBLCDShield.setCursor(0,1);    
   RGBLCDShield.print("Left");

   // 2 x EasyDriver
   digitalWrite(dirPinR, HIGH);             // Set the direction.
   delay(100);
   digitalWrite(dirPinL, LOW);              // Set the direction.
   delay(100);

   for (i = 0; i<1000; i++)                 // Iterate for 1000 microsteps.
   {
     digitalWrite(stepPinR, LOW);           // This LOW to HIGH change is what creates the
     digitalWrite(stepPinR, HIGH);          // "Rising Edge" so the easydriver knows to when to step.
     delayMicroseconds(170);                // This delay time is close to top speed.
     digitalWrite(stepPinL, LOW);           // This LOW to HIGH change is what creates the
     digitalWrite(stepPinL, HIGH);          // "Rising Edge" so the easydriver knows to when to step.
     delayMicroseconds(170);                // This delay time is close to top speed.
   }    
    
}
// Switch 5
void isSwitch5(){

   // Stop
   yy = 5;

   // set the cursor to column 0, line 0
   RGBLCDShield.setCursor(0,0);
   RGBLCDShield.print("EasyDriver");        // EasyDriver  
   RGBLCDShield.setCursor(0,1);    
   RGBLCDShield.print("Stop");

   delay( 1000 );

   // 2 x EasyDriver
   digitalWrite(dirPinR, LOW);              // Set the direction.
   delay(100);
   digitalWrite(dirPinL, LOW);              // Set the direction.
   delay(100);
   digitalWrite(stepPinR, LOW);             // This LOW to HIGH change is what creates the
   digitalWrite(stepPinL, LOW);             // This LOW to HIGH change is what creates the 
    
}
setup.inoArduino
// Setup
void setup() {

  // Adafruit RGB LCD Shield
  // Set up the LCD's number of columns and rows: 
  RGBLCDShield.begin(16, 2);
  RGBLCDShield.setBacklight(GREEN);
  
  // Display
  // Set the cursor to column 0, line 0  
  RGBLCDShield.setCursor(0,0);  
  RGBLCDShield.print("Don Luc Electron");         // Don luc Electron
  // Set the cursor to column 0, line 1
  RGBLCDShield.setCursor(0, 1);
  RGBLCDShield.print("EasyDriver");               // EasyDriver

  delay(5000);

  // Clear
  RGBLCDShield.clear();

  // 2 x EasyDriver
  pinMode(dirPinR, OUTPUT);
  pinMode(stepPinR, OUTPUT);
  pinMode(dirPinL, OUTPUT);
  pinMode(stepPinL, OUTPUT);

}

Schematics

Fritzing
Dl1911mk04b jnkdl5tl9o

Comments

Similar projects you might like

Mega Bread - Atari Joystick Linking for Robotics Control

Project in progress by Pigeon-Kicker

  • 2,180 views
  • 3 comments
  • 10 respects

Arduino Game By LCD

Project tutorial by Mohammed Magdy

  • 63,394 views
  • 56 comments
  • 200 respects

LCD (Liquid Crystal Display)

by MicroBob

  • 55,724 views
  • 70 comments
  • 170 respects

PlayStation Remote Controlled Wireless Car

Project showcase by Jasmeet Singh

  • 7,489 views
  • 5 comments
  • 15 respects

Obstale Avoiding Robot Using l298d

Project showcase by xxx1997

  • 7,415 views
  • 3 comments
  • 21 respects

Ternary Digital Clock with Arduino

Project tutorial by LAGSILVA

  • 5,998 views
  • 6 comments
  • 15 respects
Add projectSign up / Login