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

Picture of 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

Picture of 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:

Picture of

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

Step 4:

Picture of

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

Step 5:

Picture of

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

Step 6:

Picture of

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

Step 7:

Picture of

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

Step 8:

Picture of
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:

Picture of

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

mahmoudd0012 (author)2017-03-31

hi

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

how!!!!

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)))
АнтонБ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

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

See page two here:

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

nuelma (author)2015-05-17

the motor is bipolar

TomRay17 (author)2015-04-25

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

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

wymand (author)wymand2014-01-27

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

Doug Wyman

bertwert (author)wymand2014-01-28

Nice :)

bappleby2 (author)2013-12-12

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

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)

danton721 (author)2013-12-09

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

danton721 (author)bertwert2013-12-09

Right like this! Nice!

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.

bertwert (author)Bongmaster2013-11-11

I added better pics now

Bongmaster (author)bertwert2013-11-11

:)

About This Instructable

100,820views

154favorites

More by bertwert:Choosing your first DSLRHomemade Camera Lensbertwert
Add instructable to: