Controlling a Stepper Motor With the Raspberry Pi and Piface

103,034

158

19

Posted

Introduction: Controlling a Stepper Motor With the Raspberry Pi and Piface

Updated April 2015

I have made this because I have found no projects using the PiFace.

Forum topic at www.raspberrypi.org:
http://www.raspberrypi.org/phpBB3/viewtopic.php?f=37&t=54314&p=413902
Here is a simple project that only needs a Raspberry Pi, PiFace, Python, jumper wires, and a stepper motor - that's it!

Step 1: Schematic

Step 2: Connect the PiFace to the Raspberry Pi

Put the PiFace breakout board onto the GPIO connectors pf the Raspberry Pi.

Simple ;-)

Step 3:

First connect a jumper wire from ' 5 v' to red wire on motor.

Step 4:

Second connect a jumper wire from 'output 4' to orange wire on motor.

Step 5:

Third connect a jumper wire from 'output 5' to yellow wire on motor.

Step 6:

Fourth connect a jumper wire from 'output 6' to pink wire on motor.

Step 7:

Fifth connect a jumper wire from 'output 7' to blue wire on motor.

Step 8:

Sixth type this into a python file (or copy-paste):
  #CONTROLLING A STEPPER MOTOR
  #Author: Robert Caldwell
  #Date: 14 August 2013
  
  from time import sleep
  import piface.pfio as pfio
  pfio.init()
  
  print"Type: direction(rotations, speed)"
  
  def anticlockwise(rotations, speed):
      sleep_time=0.1 / float(speed)
      for loop in range(1,int(512*float(rotations))):
          pfio.digital_write(4,1)
          sleep(sleep_time)
          pfio.digital_write(7,0)
          sleep(sleep_time)
          pfio.digital_write(5,1)
          sleep(sleep_time)
          pfio.digital_write(4,0)
          sleep(sleep_time)
          pfio.digital_write(6,1)
          sleep(sleep_time)
          pfio.digital_write(5,0)
          sleep(sleep_time);
          pfio.digital_write(7,1);
          sleep(sleep_time)
          pfio.digital_write(6,0)
          sleep(sleep_time)
      pfio.digital_write(7,0)
  
  def clockwise(rotations, speed)
      sleep_time=0.1 / float(speed)
      for loop in range(1,int(512*float(rotations)))
          pfio.digital_write(7,1)
          sleep(sleep_time)
          pfio.digital_write(4,0)
          sleep(sleep_time)
          pfio.digital_write(6,1)
          sleep(sleep_time)
          pfio.digital_write(7,0)
          sleep(sleep_time)
          pfio.digital_write(5,1)
          sleep(sleep_time)
          pfio.digital_write(6,0)
          sleep(sleep_time)
          pfio.digital_write(4,1)
          sleep(sleep_time)
          pfio.digital_write(5,0)
          sleep(sleep_time)
      pfio.digital_write(4,0)

Step 9:

Done!
The motor I used was 28BYJ48 5V DC
Your motor should now obey orders you type!
(make your speed 10-600)

If you have any problems, ask me!

Share

Recommendations

  • Science of Cooking

    Science of Cooking
  • Pocket-Sized Contest

    Pocket-Sized Contest
  • Trash to Treasure

    Trash to Treasure
user

We have a be nice policy.
Please be positive and constructive.

Tips

Questions

16 Comments

hi

i want to controler 2 stepper motor with rasbperry pi 3 (python)

how!!!!

My python shell tells me that there's a mistake in the line #6

import piface.pfio as pfio
ImportError: No module named piface.pfio

See page two here:

http://www.farnell.com/datasheets/1684425.pdf

the motor is bipolar

hey, can I use raspberry to make a CNC controller ?

I love it!!! I translated it for the PiFaceDigitalIO library:

Here is your code redone

#CONTROLLING A STEPPER MOTOR

#Author: Robert Caldwell

#Date: 14 August 2013

from time import sleep

import pifacedigitalio as p

p.init(False)

pfd = p.PiFaceDigital()

print("Type: direction(rotations, speed)")

def anticlockwise(rotations, speed):

sleep_time=0.1 / float(speed)

for loop in range(1,int(512*float(rotations))):

pfd.output_pins[4].turn_on()

sleep(sleep_time)

pfd.output_pins[7].turn_off()

sleep(sleep_time)

pfd.output_pins[5].turn_on()

sleep(sleep_time)

pfd.output_pins[4].turn_off()

sleep(sleep_time)

pfd.output_pins[6].turn_on()

sleep(sleep_time)

pfd.output_pins[5].turn_off()

sleep(sleep_time);

pfd.output_pins[7].turn_on();

sleep(sleep_time)

pfd.output_pins[6].turn_off()

sleep(sleep_time)

pfd.output_pins[7].turn_off()

def clockwise(rotations, speed):

sleep_time=0.1 / float(speed)

for loop in range(1,int(512*float(rotations))):

pfd.output_pins[7].turn_on()

sleep(sleep_time)

pfd.output_pins[4].turn_off()

sleep(sleep_time)

pfd.output_pins[6].turn_on()

sleep(sleep_time)

pfd.output_pins[7].turn_off()

sleep(sleep_time)

pfd.output_pins[5].turn_on()

sleep(sleep_time)

pfd.output_pins[6].turn_off()

sleep(sleep_time)

pfd.output_pins[4].turn_on()

sleep(sleep_time)

pfd.output_pins[5].turn_off()

sleep(sleep_time)

pfd.output_pins[4].turn_off()

Sorry It did not seem to import the indents which are very important

Doug Wyman

Does this leave a pi face output spare for an LED?

Yes it can I will post a guide for controlling an LED soon.
(PS you can use a breadboard to divide up which parts go where)