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!

Comments

author
mahmoudd0012 (author)2017-03-31

hi

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

how!!!!

author
DIYRoy made it! (author)2016-12-19

Thank you for this great tutorial, which was the basis for my project driving a small bipolar stepper motor using the PiFace (and a diy H-Bridge). I made a small modification to make it more precise though:The loop should start at 0 and not 1 :

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

or

for loop in range(int(512*float(rotations)))

This difference would not be noticeable in a motor which needs 512 steps for a full rotation but it was in my case (7.5 degrees steps => 30 degrees per loop iteration => 12 loop iterations for a full rotation) so my loop was like this:

for loop in range(int(12*float(rotations)))
20161220_090004.jpg20161219_211814.jpg
author
АнтонБ7 (author)2016-04-19

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

author
bertwert (author)АнтонБ72016-04-25

See page two here:

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

author
nuelma (author)2015-05-17

the motor is bipolar

author
TomRay17 (author)2015-04-25

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

author
wymand (author)2014-01-27

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()

author
wymand (author)wymand2014-01-27

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

Doug Wyman

author
bertwert (author)wymand2014-01-28

Nice :)

author
bappleby2 (author)2013-12-12

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

author
bertwert (author)bappleby22013-12-13

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)

author
danton721 (author)2013-12-09

Next thing to do is a Raspberry Pi as a CNC controller

author
danton721 (author)bertwert2013-12-09

Right like this! Nice!

author
Bongmaster (author)2013-11-11

ok too many pics of the same thing. where are the images of the actual project steps?
if its not complete, dont hit publish. it is still saved in your account.

author
bertwert (author)Bongmaster2013-11-11

I added better pics now

author
Bongmaster (author)bertwert2013-11-11

:)