{"id":54,"date":"2014-03-15T14:38:37","date_gmt":"2014-03-15T13:38:37","guid":{"rendered":"https:\/\/pa3csg.nl\/?page_id=54"},"modified":"2016-06-23T10:42:52","modified_gmt":"2016-06-23T08:42:52","slug":"stepper-motor-controller","status":"publish","type":"page","link":"https:\/\/pa3csg.nl\/?page_id=54","title":{"rendered":"Stepper motor controller"},"content":{"rendered":"<p>My first attempt to write some arduino code for a simple stepper motor driver. This is used in combination with the L298 boards available from E bay for so little money that building makes no sense.<\/p>\n<p>Only 2 buttons were required to mover either right or left. A very simple speed control is used with a switch and 2 resistors. One could use a pot-meter instead to have it fully variable.<\/p>\n<p>&nbsp;<\/p>\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"xml plain\">\/\/ Stepper motor with 4 buttons for controlling my EME dish with 2 stepper motors. <\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"xml plain\">\/\/ It has a very simple speed control <\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"xml plain\">\/\/ And a powersaving so that it doesnot consume too much current when not in use<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"xml plain\">\/\/ 18 september 2013 Geert Stams PA3CSG http:\/\/pa3csg.hoeplakee.nl<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"xml plain\">#include &lt;<\/code><code class=\"xml keyword\">Stepper.h<\/code><code class=\"xml plain\">&gt;<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"xml plain\">const int stepsPerRevolution = 48;\u00a0 \/\/ change this to fit the number of steps per revolution<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"xml plain\">\/\/ for your motor<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"xml plain\">#define CW 2 \/\/CW switch on digital pin 2<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"xml plain\">#define CCW 3 \/\/CCW switch on digital pin 3<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"xml plain\">#define UP 8 \/\/UP switch on digital pin 8<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"xml plain\">#define DWN 13 \/\/DWN switch on digital pin 13<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"xml plain\">\/\/ create an instance of the stepper class, specifying<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"xml plain\">\/\/ the number of steps of the motor and the pins it's<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"xml plain\">\/\/ attached to<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"xml plain\">Stepper stepperA(stepsPerRevolution, 9, 10, 11, 12);<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"xml plain\">Stepper stepperE(stepsPerRevolution, 4, 5, 6, 7);<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"xml plain\">int stepCount = 0;\u00a0 \/\/ number of steps the motor has taken<\/code><\/div>\n<div class=\"line number24 index23 alt1\"><\/div>\n<div class=\"line number25 index24 alt2\"><code class=\"xml plain\">void setup(){<\/code><\/div>\n<div class=\"line number26 index25 alt1\"><code class=\"xml spaces\">\u00a0\u00a0<\/code><\/div>\n<div class=\"line number27 index26 alt2\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">pinMode(A0, INPUT);<\/code><\/div>\n<div class=\"line number28 index27 alt1\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">pinMode(CW, INPUT);<\/code><\/div>\n<div class=\"line number29 index28 alt2\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">pinMode(CCW, INPUT);<\/code><\/div>\n<div class=\"line number30 index29 alt1\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">pinMode(UP, INPUT);<\/code><\/div>\n<div class=\"line number31 index30 alt2\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">pinMode(DWN, INPUT);<\/code><\/div>\n<div class=\"line number32 index31 alt1\"><code class=\"xml spaces\">\u00a0<\/code><\/div>\n<div class=\"line number33 index32 alt2\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">digitalWrite(CW, 1); \/\/pullup high<\/code><\/div>\n<div class=\"line number34 index33 alt1\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">digitalWrite(CCW, 1); \/\/pullup high<\/code><\/div>\n<div class=\"line number35 index34 alt2\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">digitalWrite(UP, 1); \/\/pullup high<\/code><\/div>\n<div class=\"line number36 index35 alt1\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">digitalWrite(DWN, 1); \/\/pullup high<\/code><\/div>\n<div class=\"line number37 index36 alt2\"><code class=\"xml plain\">}<\/code><\/div>\n<div class=\"line number38 index37 alt1\"><\/div>\n<div class=\"line number39 index38 alt2\"><code class=\"xml plain\">void loop()<\/code><\/div>\n<div class=\"line number40 index39 alt1\"><\/div>\n<div class=\"line number41 index40 alt2\"><code class=\"xml plain\">{<\/code><\/div>\n<div class=\"line number42 index41 alt1\"><code class=\"xml spaces\">\u00a0\u00a0<\/code><code class=\"xml plain\">delay(2);<\/code><\/div>\n<div class=\"line number43 index42 alt2\"><code class=\"xml spaces\">\u00a0\u00a0<\/code><code class=\"xml plain\">int sensorReading = analogRead(A0); \/\/ read the sensor value:<\/code><\/div>\n<div class=\"line number44 index43 alt1\"><code class=\"xml spaces\">\u00a0\u00a0<\/code><code class=\"xml plain\">int motorSpeed = map(sensorReading, 0, 1023, 0, 100); \/\/ map it to a range from 0 to 100<\/code><\/div>\n<div class=\"line number45 index44 alt2\"><\/div>\n<div class=\"line number46 index45 alt1\"><code class=\"xml spaces\">\u00a0\u00a0<\/code><code class=\"xml plain\">\/\/ the following sets the motor speed:<\/code><\/div>\n<div class=\"line number47 index46 alt2\"><code class=\"xml spaces\">\u00a0\u00a0<\/code><code class=\"xml plain\">if (motorSpeed &gt; 0) <\/code><\/div>\n<div class=\"line number48 index47 alt1\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">stepperA.setSpeed(motorSpeed); \/\/set motorspeed for Az motor<\/code><\/div>\n<div class=\"line number49 index48 alt2\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">stepperE.setSpeed(motorSpeed); \/\/set motorspeed for EL motor<\/code><\/div>\n<div class=\"line number50 index49 alt1\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><\/div>\n<div class=\"line number51 index50 alt2\"><code class=\"xml plain\">if (!digitalRead(CW)) stepperA.step(10); \/\/reads button CW and moves stepperA 10 steps<\/code><\/div>\n<div class=\"line number52 index51 alt1\"><code class=\"xml plain\">delay(10);<\/code><\/div>\n<div class=\"line number53 index52 alt2\"><code class=\"xml plain\">if (!digitalRead(CCW)) stepperA.step(-10); \/\/reads button CCW and moves stepperA 10 steps<\/code><\/div>\n<div class=\"line number54 index53 alt1\"><code class=\"xml plain\">delay(10);<\/code><\/div>\n<div class=\"line number55 index54 alt2\"><\/div>\n<div class=\"line number56 index55 alt1\"><code class=\"xml plain\">digitalWrite(9, LOW); \/\/sets pin# to LOW for current saving<\/code><\/div>\n<div class=\"line number57 index56 alt2\"><code class=\"xml plain\">digitalWrite(10, LOW); \/\/sets pin# to LOW for current saving<\/code><\/div>\n<div class=\"line number58 index57 alt1\"><code class=\"xml plain\">digitalWrite(11, LOW); \/\/sets pin# to LOW for current saving<\/code><\/div>\n<div class=\"line number59 index58 alt2\"><code class=\"xml plain\">digitalWrite(12, LOW); \/\/sets pin# to LOW for current saving<\/code><\/div>\n<div class=\"line number60 index59 alt1\"><\/div>\n<div class=\"line number61 index60 alt2\"><code class=\"xml plain\">if (!digitalRead(UP)) stepperE.step(10); \/\/reads button UP and moves stepperE 10 steps<\/code><\/div>\n<div class=\"line number62 index61 alt1\"><code class=\"xml plain\">delay(10);<\/code><\/div>\n<div class=\"line number63 index62 alt2\"><code class=\"xml plain\">if (!digitalRead(DWN)) stepperE.step(-10); \/\/reads button DWN and moves stepperE 10 steps<\/code><\/div>\n<div class=\"line number64 index63 alt1\"><code class=\"xml plain\">delay(10);<\/code><\/div>\n<div class=\"line number65 index64 alt2\"><\/div>\n<div class=\"line number66 index65 alt1\"><code class=\"xml plain\">digitalWrite(4, LOW); \/\/sets pin# to LOW for current saving<\/code><\/div>\n<div class=\"line number67 index66 alt2\"><code class=\"xml plain\">digitalWrite(5, LOW); \/\/sets pin# to LOW for current saving<\/code><\/div>\n<div class=\"line number68 index67 alt1\"><code class=\"xml plain\">digitalWrite(6, LOW); \/\/sets pin# to LOW for current saving<\/code><\/div>\n<div class=\"line number69 index68 alt2\"><code class=\"xml plain\">digitalWrite(7, LOW); \/\/sets pin# to LOW for current saving<\/code><\/div>\n<div class=\"line number70 index69 alt1\"><code class=\"xml plain\">}<\/code><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>My first attempt to write some arduino code for a simple stepper motor driver. This is used in combination with the L298 boards available from <a class=\"mh-excerpt-more\" href=\"https:\/\/pa3csg.nl\/?page_id=54\" title=\"Stepper motor controller\">[&#8230;]<\/a><\/p>\n<\/div>","protected":false},"author":1,"featured_media":837,"parent":0,"menu_order":15,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"categories":[29],"tags":[],"_links":{"self":[{"href":"https:\/\/pa3csg.nl\/index.php?rest_route=\/wp\/v2\/pages\/54"}],"collection":[{"href":"https:\/\/pa3csg.nl\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/pa3csg.nl\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/pa3csg.nl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pa3csg.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=54"}],"version-history":[{"count":4,"href":"https:\/\/pa3csg.nl\/index.php?rest_route=\/wp\/v2\/pages\/54\/revisions"}],"predecessor-version":[{"id":921,"href":"https:\/\/pa3csg.nl\/index.php?rest_route=\/wp\/v2\/pages\/54\/revisions\/921"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pa3csg.nl\/index.php?rest_route=\/wp\/v2\/media\/837"}],"wp:attachment":[{"href":"https:\/\/pa3csg.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=54"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pa3csg.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=54"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pa3csg.nl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=54"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}