ULN2003 Driver in official arduino robot

Hello,
I’m trying to control a stepper motor (diver ULN 2003) in a official robot arduino, but without result. The motor does not turn on.
Anyone know how to do?
I am using the motor control board conects
B_KT1, B_KT2, B_KT3, B_KT4

The scketch is:

/* 
 Stepper Motor Control - one revolution
 
 This program drives a unipolar or bipolar stepper motor. 
 The motor is attached to digital pins 8 - 11 of the Arduino.
 
 The motor should revolve one revolution in one direction, then
 one revolution in the other direction.  
 
Created 11 Mar. 2007
 Modified 30 Nov. 2009
 by Tom Igoe
 
 */
#include <ArduinoRobot.h>  // I include a arduino robot libary.

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
                                     // for your motor
// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, B_TK1,B_TK2 ,B_TK3 ,B_TK4); // pins in robot motor board         

void setup() {
  // set the speed at 60 rpm:
  myStepper.setSpeed(60);
  // initialize the serial port:
  Serial.begin(9600);
}

void loop() {
  // step one revolution  in one direction:
   Serial.println("clockwise");
  myStepper.step(stepsPerRevolution);
  delay(500);
  
   // step one revolution in the other direction:
  Serial.println("counterclockwise");
  myStepper.step(-stepsPerRevolution);
  delay(500); 
}

This is the conects:

Please, what’s wrong?
I am very inexperienced with arduino.

click the MODIFY button in the upper right of the post window.
Highlight all you code.
click the "#" CODE TAGS button on the toolbar above just to the left of the QUOTE button.
click SAVE (at the bottom).
When you post code on the forum, please make a habit of using the code tags "#" button.

The problem is not your code. I tested it using the stepper library (I don't need the ArduinoRobot library because I made all the connections myself)

I am very inexperienced with arduino.

Are you very experienced with the arduino forum ?
Do you see any benefit in posting a photo that has no pin connections of a ULN2003 DRIVER that we can't really see very well because of the pixelation when you zoom in ?

If your sketch is compiling then your problem is a hardware one.
I can't see much on the driver board because it is fuzzy when I zoom in.
Believe it or not, even today in 2014 it is probably more effective to just draw a schematic (assuming you know how to do this) and post a photo of it showing the driver connections to the arduino.

Your drawing shows the motor and driver but I can't tell much . I will assume everything is wired correctly.
Your battery shown is a 6V AA 4-pack . I don't know what the motor rated voltage is but I assume it is probably about 5V
and you allowed an extra volt for headroom. Did you verify somehow that the ENable pins (if there are any ) on the driver are High (or whatever they need to be to be enabled ?) Did you connect status leds (with resistors) to all the driver control signals to monitor them for activity ?
Did you measure the battery voltage for fluctuation that might indicate the driver is alive and trying to move the motor ?

Do you have any arduinos (other than the robot) you can use to test the motor driver ?

I found a sequence error in STEPPER.CPP for that motor control.
The motor and control you have I also have and could not get it to work.

Sequence was: 1010, 0110, 0101, 1001
Control needs: 1100, 0110, 0011, 1001

I have made the correction to the file STEPPER.CPP and will post it here if I can.
Rename you old file to STEPPER.OLD, then copy new file in its place.
Could not link file to this post but here is the code.
Copy below code and use text editor to “save as” “stepper.cpp” in same location as original.
Then close and reopen Arduino software, open your code, Upload to Arduino and try to operate motor.
Hope this fixes your problem, gave me some trouble but I slowed down the steps so I could see the sequence and found what the problem was and corrected it. I found the correct sequence for this motor and control from Google search.

/*
  Stepper.cpp - - Stepper library for Wiring/Arduino - Version 0.5
  
  Original library     (0.1) by Tom Igoe.
  Two-wire modifications   (0.2) by Sebastian Gassner
  Combination version   (0.3) by Tom Igoe and David Mellis
  Bug fix for four-wire   (0.4) by Tom Igoe, bug fix from Noah Shibley 
  Bug Fix for sequence    (0.5) by Jeff Evans 

  Drives a unipolar or bipolar stepper motor using  2 wires or 4 wires

  When wiring multiple stepper motors to a microcontroller,
  you quickly run out of output pins, with each motor requiring 4 connections. 

  By making use of the fact that at any time two of the four motor
  coils are the inverse  of the other two, the number of
  control connections can be reduced from 4 to 2. 

  A slightly modified circuit around a Darlington transistor array or an L293 H-bridge
  connects to only 2 microcontroler pins, inverts the signals received,
  and delivers the 4 (2 plus 2 inverted ones) output signals required
  for driving a stepper motor.

  The sequence of control signals for 4 control wires is as follows:

  Step C0 C1 C2 C3
     1  1  1  0  0
     2  0  1  1  0
     3  0  0  1  1
     4  1  0  0  1

  The sequence of controls signals for 2 control wires is as follows
  (columns C1 and C2 from above):

  Step C0 C1
     1  0  1
     2  1  1
     3  1  0
     4  0  0

  The circuits can be found at 
 
http://www.arduino.cc/en/Tutorial/Stepper
 
 
 */


#include "Arduino.h"
#include "Stepper.h"

/*
 * two-wire constructor.
 * Sets which wires should control the motor.
 */
Stepper::Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2)
{
  this->step_number = 0;      // which step the motor is on
  this->speed = 0;        // the motor speed, in revolutions per minute
  this->direction = 0;      // motor direction
  this->last_step_time = 0;    // time stamp in ms of the last step taken
  this->number_of_steps = number_of_steps;    // total number of steps for this motor
  
  // Arduino pins for the motor control connection:
  this->motor_pin_1 = motor_pin_1;
  this->motor_pin_2 = motor_pin_2;

  // setup the pins on the microcontroller:
  pinMode(this->motor_pin_1, OUTPUT);
  pinMode(this->motor_pin_2, OUTPUT);
  
  // When there are only 2 pins, set the other two to 0:
  this->motor_pin_3 = 0;
  this->motor_pin_4 = 0;
  
  // pin_count is used by the stepMotor() method:
  this->pin_count = 2;
}


/*
 *   constructor for four-pin version
 *   Sets which wires should control the motor.
 */

Stepper::Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2, int motor_pin_3, int motor_pin_4)
{
  this->step_number = 0;      // which step the motor is on
  this->speed = 0;        // the motor speed, in revolutions per minute
  this->direction = 0;      // motor direction
  this->last_step_time = 0;    // time stamp in ms of the last step taken
  this->number_of_steps = number_of_steps;    // total number of steps for this motor
  
  // Arduino pins for the motor control connection:
  this->motor_pin_1 = motor_pin_1;
  this->motor_pin_2 = motor_pin_2;
  this->motor_pin_3 = motor_pin_3;
  this->motor_pin_4 = motor_pin_4;

  // setup the pins on the microcontroller:
  pinMode(this->motor_pin_1, OUTPUT);
  pinMode(this->motor_pin_2, OUTPUT);
  pinMode(this->motor_pin_3, OUTPUT);
  pinMode(this->motor_pin_4, OUTPUT);

  // pin_count is used by the stepMotor() method:  
  this->pin_count = 4;  
}

/*
  Sets the speed in revs per minute

*/
void Stepper::setSpeed(long whatSpeed)
{
  this->step_delay = 60L * 1000L / this->number_of_steps / whatSpeed;
}

/*
  Moves the motor steps_to_move steps.  If the number is negative, 
   the motor moves in the reverse direction.
 */
void Stepper::step(int steps_to_move)
{  
  int steps_left = abs(steps_to_move);  // how many steps to take
  
  // determine direction based on whether steps_to_mode is + or -:
  if (steps_to_move > 0) {this->direction = 1;}
  if (steps_to_move < 0) {this->direction = 0;}
    
    
  // decrement the number of steps, moving one step each time:
  while(steps_left > 0) {
  // move only if the appropriate delay has passed:
  if (millis() - this->last_step_time >= this->step_delay) {
      // get the timeStamp of when you stepped:
      this->last_step_time = millis();
      // increment or decrement the step number,
      // depending on direction:
      if (this->direction == 1) {
        this->step_number++;
        if (this->step_number == this->number_of_steps) {
          this->step_number = 0;
        }
      } 
      else { 
        if (this->step_number == 0) {
          this->step_number = this->number_of_steps;
        }
        this->step_number--;
      }
      // decrement the steps left:
      steps_left--;
      // step the motor to step number 0, 1, 2, or 3:
      stepMotor(this->step_number % 4);
    }
  }
}

/*
 * Moves the motor forward or backwards.
 */
void Stepper::stepMotor(int thisStep)
{
  if (this->pin_count == 2) {
    switch (thisStep) {
      case 0: /* 01 */
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, HIGH);
      break;
      case 1: /* 11 */
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, HIGH);
      break;
      case 2: /* 10 */
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, LOW);
      break;
      case 3: /* 00 */
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, LOW);
      break;
    } 
  }
  if (this->pin_count == 4) {
    switch (thisStep) {
      case 0:    // 1100
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, HIGH);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, LOW);
      break;
      case 1:    // 0110
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, HIGH);
      digitalWrite(motor_pin_3, HIGH);
      digitalWrite(motor_pin_4, LOW);
      break;
      case 2:    //0011
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, HIGH);
      digitalWrite(motor_pin_4, HIGH);
      break;
      case 3:    //1001
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, HIGH);
      break;
    } 
  }
}

/*
  version() returns the version of the library:
*/
int Stepper::version(void)
{
  return 4;
}

Stepper.cpp (6.43 KB)

There has to be another explanation. I ran your code as is with no problem.
I don' t know what's wrong with your setup but I had no problem with your code.

I tried changing the step sequence per your post and my motor would not move with the new sequence. It just vibrated but didn't turn. As soon as I replaced the library file with the original one my motor worked perfectly as it did the first time. For whatever reason, the sequence of the original file is correct for my motor .

Thank you very much for your help and patience.

I’ll do some tests and post the results!

Grateful.

Hi, looking at the picture you have 4 connections, one for each stepper connection, but where is the connection between the GND of the arduino and the GND of the stepper board?

Tom..... :slight_smile:

I don’t know… XD

Well ...
I connected the pins of the motor board into the digital outputs of the Control Board of the robot (TKD2, TKD3, TKD4, TKD5), what happens is "It just vibrated but didn't turn" as said Raschemmel.

Hi.
Again, have you connected the gnd of the two boards, the arduino and the stepper driver together?

Sorry but..

I don't know.... XD )

Doesn't give me a yes or no?

Tom.... :slight_smile: