{"id":52366,"date":"2026-11-01T10:51:01","date_gmt":"2026-11-01T10:51:01","guid":{"rendered":"http:\/\/siratek.net\/index.php\/tutorials\/stepper-uln2003\/"},"modified":"2026-11-01T10:51:01","modified_gmt":"2026-11-01T10:51:01","slug":"stepper-uln2003","status":"publish","type":"siratek_tutorial","link":"https:\/\/siratek.net\/index.php\/tutorials\/stepper-uln2003\/","title":{"rendered":"Precise Movement with a Stepper Motor"},"content":{"rendered":"<body><p><\/p>\n<h2>What it does<\/h2>\n<p>A motor that moves in counted steps instead of simply turning. Tell it to go four thousand and ninety-six steps and it goes exactly once round \u2014 no encoder, no feedback, no trim.<\/p>\n<p>That is the thing a DC motor cannot do and a servo can only do across 180 degrees. A stepper turns continuously <strong>and<\/strong> knows where it is, which is why they are in printers, scanners and anything that has to return to the same place repeatedly.<\/p>\n<p>The catch is in that word \u201cexactly\u201d, and most of this page is about when it stops being true.<\/p>\n<h2>Before you begin<\/h2>\n<h3>Required parts and tools<\/h3>\n<ul>\n<li>An Arduino Uno or compatible board.<\/li>\n<li>One stepper motor and ULN2003 driver board. This is Siratek product 2745; the motor and the driver come together.<\/li>\n<li><strong>A separate 5 V supply<\/strong> capable of a few hundred milliamps.<\/li>\n<li>Five jumper wires.<\/li>\n<\/ul>\n<h3>What the listing says<\/h3>\n<table>\n<thead>\n<tr>\n<th><\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Type<\/td>\n<td>4 phase, 5 wire<\/td>\n<\/tr>\n<tr>\n<td>Voltage<\/td>\n<td>5 V<\/td>\n<\/tr>\n<tr>\n<td>Diameter<\/td>\n<td>27 mm<\/td>\n<\/tr>\n<tr>\n<td>Step angle<\/td>\n<td>5.625 degrees x 1\/64<\/td>\n<\/tr>\n<tr>\n<td>Reduction ratio<\/td>\n<td>1\/64<\/td>\n<\/tr>\n<tr>\n<td>Driver<\/td>\n<td>ULN2003<\/td>\n<\/tr>\n<tr>\n<td>Also usable<\/td>\n<td>As 2 phase<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>That step angle line is the whole specification compressed into eight characters, and it is worth unpacking properly.<\/p>\n<h3>Working out the steps per revolution<\/h3>\n<p><strong>5.625 degrees is the step angle of the motor inside<\/strong>, before the gearbox. So the internal rotor takes<\/p>\n<pre><code>360 \/ 5.625 = 64 steps per internal revolution<\/code><\/pre>\n<p>and the gearbox then divides that by 64 again, so the output shaft needs<\/p>\n<pre><code>64 x 64 = 4096 steps per revolution<\/code><\/pre>\n<p>in the half-step sequence the ULN2003 boards are normally driven with. In full steps it is half that, <strong>2048<\/strong>, and each step is about 0.176 degrees.<\/p>\n<p>You will find both numbers quoted for this motor, and now you know why: they are the same motor counted two ways. <strong>What matters is that your sketch and your driving mode agree<\/strong>, and the way to be certain is the counting test further down rather than trusting either number.<\/p>\n<h3>The gear ratio is not exactly 64<\/h3>\n<p>This is the detail that explains a whole class of frustration.<\/p>\n<p>The listing says 1\/64, and the gearbox inside is <strong>widely reported from teardowns to be about 63.684 to 1<\/strong> rather than a round 64. On one revolution the difference is invisible. Over fifty, a sketch that assumes exactly 64 drifts visibly \u2014 and if your project returns to a home position by counting steps, it will slowly stop arriving in the same place.<\/p>\n<p>Two honest responses:<\/p>\n<ul>\n<li><strong>Do not count on absolute position over many revolutions.<\/strong> Return to a known point using a limit switch or an optical sensor, and count steps only between those references.<\/li>\n<li><strong>Measure your own ratio.<\/strong> Mark the shaft, run a large known number of steps, count the revolutions, and divide. Ten minutes, and it replaces a disputed number with yours.<\/li>\n<\/ul>\n<h3>The driver board<\/h3>\n<p>The red board carries a <strong>ULN2003<\/strong>, which is seven Darlington transistors in one package. Each one switches a coil to ground when its input goes high.<\/p>\n<p>Four things follow from that:<\/p>\n<ul>\n<li><strong>It sinks current; it does not source it.<\/strong> The coils are fed from the board\u2019s own <code>+<\/code> terminal and the chip only completes the path to ground. That is why the board needs a supply of its own and not just four signal wires.<\/li>\n<li><strong>Four LEDs<\/strong> on the board show which coils are energised. They are genuinely useful: a slow sketch makes the stepping sequence visible, and a motor that is not turning while the LEDs chase in order is a mechanical problem, not an electrical one.<\/li>\n<li><strong>It is one-way.<\/strong> The ULN2003 cannot reverse current through a coil, which is fine here because this motor is unipolar \u2014 the fifth wire is the centre tap that makes that possible.<\/li>\n<li><strong>The white connector only fits one way.<\/strong> One less thing to get wrong.<\/li>\n<\/ul>\n<h3>Current, and why not the Arduino\u2019s 5 V pin<\/h3>\n<p>This motor draws a couple of hundred milliamps while it runs, and \u2014 unlike a DC motor \u2014 <strong>it keeps drawing it while holding still<\/strong>, because holding position means keeping a coil energised.<\/p>\n<p>So it is a continuous load, not an occasional one. Run it from a separate 5 V supply with the grounds joined. <em>Powering Your Project<\/em> has the reasoning; the symptom of ignoring it is the Uno resetting or behaving erratically whenever the motor is energised.<\/p>\n<p><strong>It also gets warm while holding<\/strong>, which is normal, and is why the sketches below release the coils when the motor is not being asked to do anything.<\/p>\n<h3>What you give up compared with a servo<\/h3>\n<p>A servo has a potentiometer inside and corrects itself. <strong>A stepper has nothing.<\/strong> If the load is too heavy, or you ask for a speed it cannot reach, it silently misses steps and your count is wrong from then on, with nothing to tell you.<\/p>\n<p>That is the trade: a servo knows where it is but only moves 180 degrees; a stepper turns forever but only believes it knows where it is.<\/p>\n<h2>Pin reference<\/h2>\n<table>\n<thead>\n<tr>\n<th>Board<\/th>\n<th>Connect to<\/th>\n<th>Purpose<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>IN1<\/code><\/td>\n<td>Uno <code>D8<\/code><\/td>\n<td>Coil 1<\/td>\n<\/tr>\n<tr>\n<td><code>IN2<\/code><\/td>\n<td>Uno <code>D9<\/code><\/td>\n<td>Coil 2<\/td>\n<\/tr>\n<tr>\n<td><code>IN3<\/code><\/td>\n<td>Uno <code>D10<\/code><\/td>\n<td>Coil 3<\/td>\n<\/tr>\n<tr>\n<td><code>IN4<\/code><\/td>\n<td>Uno <code>D11<\/code><\/td>\n<td>Coil 4<\/td>\n<\/tr>\n<tr>\n<td><code>-<\/code><\/td>\n<td>Supply negative, <strong>and Uno <code>GND<\/code><\/strong><\/td>\n<td>Shared reference<\/td>\n<\/tr>\n<tr>\n<td><code>+<\/code><\/td>\n<td>Separate 5 V supply positive<\/td>\n<td>Coil current<\/td>\n<\/tr>\n<tr>\n<td>White connector<\/td>\n<td>The motor<\/td>\n<td>Only fits one way<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<figure class=\"siratek-tutorial-figure\"><img decoding=\"async\" src=\"http:\/\/siratek.net\/wp-content\/uploads\/2026\/11\/stepper-uln2003-steps.svg\" alt=\"A 28BYJ-48 type stepper motor on a ULN2003 driver board with four inputs on pins 8 to 11, its own 5 volt supply, grounds joined, and the step arithmetic that gives 4096 steps per output revolution\" loading=\"lazy\"><figcaption>It counts steps rather than measuring position, so a missed step is wrong for ever and nothing reports it.<\/figcaption><\/figure>\n<h2>Wiring steps<\/h2>\n<ol>\n<li>Unplug the USB cable and the 5 V supply.<\/li>\n<li>Motor into the white connector on the driver board.<\/li>\n<li><code>IN1<\/code> to <code>IN4<\/code> to Uno pins <code>D8<\/code> to <code>D11<\/code>, in that order.<\/li>\n<li>Driver <code>+<\/code> to the 5 V supply positive, driver <code>-<\/code> to its negative.<\/li>\n<li><strong>Join the supply\u2019s negative to the Uno\u2019s <code>GND<\/code>.<\/strong><\/li>\n<li>Plug in the USB cable, then the supply.<\/li>\n<\/ol>\n<h2>Software and libraries<\/h2>\n<p><code>Stepper<\/code> ships with the Arduino IDE. Nothing to install.<\/p>\n<p><strong>The pin order you pass it is not 8, 9, 10, 11.<\/strong> The library expects the pins in the order the coils must be energised, and on these boards that is <code>IN1, IN3, IN2, IN4<\/code> \u2014 so <code>8, 10, 9, 11<\/code>.<\/p>\n<p>Get it wrong and the motor buzzes, vibrates, or turns weakly in a direction you did not ask for. It is the single most common problem with this part, it looks exactly like a broken motor, and it is a transposition of two numbers.<\/p>\n<h2>Minimal working example<\/h2>\n<pre><code>\/\/ Siratek: one revolution one way, one revolution back.\n\n#include &lt;Stepper.h&gt;\n\n\/\/ Full steps per output revolution. See the arithmetic on this page,\n\/\/ and confirm it with the counting test.\nconst int STEPS_PER_REV = 2048;\n\n\/\/ Note the order: IN1, IN3, IN2, IN4.\nStepper motor(STEPS_PER_REV, 8, 10, 9, 11);\n\nvoid releaseCoils() {\n  \/\/ Stop holding position, so nothing is left warm.\n  digitalWrite(8, LOW);\n  digitalWrite(9, LOW);\n  digitalWrite(10, LOW);\n  digitalWrite(11, LOW);\n}\n\nvoid setup() {\n  motor.setSpeed(10);            \/\/ rev\/min at the output shaft\n  Serial.begin(9600);\n  Serial.println(F(\"Siratek: one turn each way.\"));\n}\n\nvoid loop() {\n  Serial.println(F(\"clockwise\"));\n  motor.step(STEPS_PER_REV);\n  releaseCoils();\n  delay(1000);\n\n  Serial.println(F(\"anticlockwise\"));\n  motor.step(-STEPS_PER_REV);\n  releaseCoils();\n  delay(1000);\n}<\/code><\/pre>\n<p><strong><code>setSpeed(10)<\/code> is not a suggestion you can raise freely.<\/strong> This motor has a modest top speed \u2014 somewhere around 15 revolutions per minute at the output is typical \u2014 and asking for more makes it buzz and sit still, or turn erratically while missing steps. Start at 10 and raise it until it misbehaves, then come back.<\/p>\n<p><strong><code>step()<\/code> blocks.<\/strong> It returns when the movement is finished, so a sketch doing anything else at the same time needs either very small <code>step()<\/code> calls inside a <code>millis()<\/code> pattern, or a library built for the job such as AccelStepper. <em>Timing Without delay()<\/em> is the page that explains why this matters.<\/p>\n<h3>The counting test, which settles the arithmetic<\/h3>\n<pre><code>\/\/ Siratek: mark the shaft, run ten revolutions by the sketch's reckoning,\n\/\/ and count what actually happened.\n\n#include &lt;Stepper.h&gt;\n\nconst int STEPS_PER_REV = 2048;\nStepper motor(STEPS_PER_REV, 8, 10, 9, 11);\n\nvoid setup() {\n  motor.setSpeed(10);\n  Serial.begin(9600);\n  Serial.println(F(\"Siratek: ten revolutions. Count them.\"));\n\n  for (int i = 0; i &lt; 10; i++) {\n    motor.step(STEPS_PER_REV);\n    Serial.print(F(\"revolution \"));\n    Serial.println(i + 1);\n  }\n\n  digitalWrite(8, LOW);\n  digitalWrite(9, LOW);\n  digitalWrite(10, LOW);\n  digitalWrite(11, LOW);\n  Serial.println(F(\"done. Is the mark where it started?\"));\n}\n\nvoid loop() {\n}<\/code><\/pre>\n<p>Put a strip of tape on the shaft, line it up with a fixed mark, and run it.<\/p>\n<p><strong>If the mark comes back to where it started<\/strong>, your <code>STEPS_PER_REV<\/code> is right for your motor and your driving mode.<\/p>\n<p><strong>If it is consistently short or long<\/strong>, adjust the constant by the proportion you observed. That is your motor measured, which beats any number on a listing or on this page.<\/p>\n<p><strong>If it is different every time<\/strong>, you are missing steps \u2014 lower the speed, or check the supply.<\/p>\n<h3>Moving to a position rather than by an amount<\/h3>\n<pre><code>\/\/ Siratek: keep track of where we think we are.\n\nlong position = 0;               \/\/ in steps from the start\n\nvoid goTo(long target) {\n  long move = target - position;\n  motor.step(move);\n  position = target;\n}\n\n\/\/ A quarter turn, from wherever we are:\n\/\/   goTo(STEPS_PER_REV \/ 4);<\/code><\/pre>\n<p>The word doing the work in that comment is <strong>think<\/strong>. This is an open loop: <code>position<\/code> is what the sketch believes, and nothing checks it. A missed step makes it wrong permanently and silently.<\/p>\n<p>Which is why anything that must be reliable gets a <strong>home position<\/strong>: a limit switch, or an optical sensor, that the motor drives towards at startup until it triggers. Then <code>position = 0<\/code> is a measured fact rather than an assumption. Any project that runs for hours needs one.<\/p>\n<h2>Expected result<\/h2>\n<p>A smooth, quiet, deliberate rotation, slower than you expect, with the four LEDs chasing in sequence. One revolution should take about six seconds at speed 10.<\/p>\n<p>The motor should be cool after a run that releases the coils, and noticeably warm after one that does not.<\/p>\n<h2>Troubleshooting<\/h2>\n<table>\n<thead>\n<tr>\n<th>Symptom<\/th>\n<th>Likely cause<\/th>\n<th>Check or fix<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Buzzes, vibrates, will not turn<\/td>\n<td>Pin order<\/td>\n<td><code>IN1, IN3, IN2, IN4<\/code> is <code>8, 10, 9, 11<\/code><\/td>\n<\/tr>\n<tr>\n<td>Turns the wrong way<\/td>\n<td>Pin order, or sign<\/td>\n<td>Negate the step count<\/td>\n<\/tr>\n<tr>\n<td>Turns weakly, skips<\/td>\n<td>Speed too high<\/td>\n<td>Lower <code>setSpeed()<\/code> until it is reliable<\/td>\n<\/tr>\n<tr>\n<td>Turns weakly, skips<\/td>\n<td>Supply too weak<\/td>\n<td>Its own 5 V, grounds joined<\/td>\n<\/tr>\n<tr>\n<td>Arduino resets when it runs<\/td>\n<td>Powered from the Uno\u2019s <code>5V<\/code><\/td>\n<td>Separate supply<\/td>\n<\/tr>\n<tr>\n<td>Motor hot after stopping<\/td>\n<td>Coils left energised<\/td>\n<td>Drive the four pins LOW when idle<\/td>\n<\/tr>\n<tr>\n<td>Half a revolution per \u201crevolution\u201d<\/td>\n<td>2048 against 4096<\/td>\n<td>Run the counting test<\/td>\n<\/tr>\n<tr>\n<td>Drifts over many revolutions<\/td>\n<td>Gear ratio is not exactly 64<\/td>\n<td>Home against a switch; measure your ratio<\/td>\n<\/tr>\n<tr>\n<td>Position wrong after a jam<\/td>\n<td>Missed steps, nothing noticed<\/td>\n<td>That is open loop; add a home sensor<\/td>\n<\/tr>\n<tr>\n<td>LEDs chase but nothing moves<\/td>\n<td>Mechanical, or the connector<\/td>\n<td>The LEDs prove the electrical side<\/td>\n<\/tr>\n<tr>\n<td>Nothing at all<\/td>\n<td>Supply, or the white connector<\/td>\n<td>It only fits one way; check it is seated<\/td>\n<\/tr>\n<tr>\n<td>Sketch unresponsive while moving<\/td>\n<td><code>step()<\/code> blocks until done<\/td>\n<td>Small steps in a <code>millis()<\/code> loop<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Next steps<\/h2>\n<ul>\n<li><strong>Easier first:<\/strong> <em>Controlling an SG90 Servo<\/em>, for position without counting.<\/li>\n<li><strong>Related products:<\/strong> the L298N for DC motors, and the limit switch or IR sensor you will want for a home position.<\/li>\n<li><strong>Next project:<\/strong> anything that must return to the same place \u2014 a small turntable, a dial, a camera mount \u2014 where the home sensor is what makes the counting trustworthy.<\/li>\n<\/ul>\n<h2>Sources and attribution<\/h2>\n<p>All text, wiring guidance and code in this tutorial are original Siratek work.<\/p>\n<ul>\n<li>The 4 phase 5 wire construction, 5 V supply, 27 mm diameter, the <code>5.625 degrees x 1\/64<\/code> step angle, the 1\/64 reduction and the ULN2003 driver are from the Siratek product information for item 2745.<\/li>\n<li>The steps-per-revolution arithmetic is worked from those figures on this page rather than quoted.<\/li>\n<li>The ULN2003 being a Darlington array that sinks rather than sources current is from that chip\u2019s datasheet.<\/li>\n<\/ul>\n<p><strong>The 63.684 gear ratio is widely reported rather than measured here<\/strong>, which is why the page gives a counting procedure to settle it on your own motor. Current draw and top speed are described by direction and order of magnitude rather than asserted, because the listing gives neither. <strong>This tutorial has not yet been built and run on hardware.<\/strong> No third-party tutorial text, diagrams, photographs or code has been reproduced here.<\/p>\n<p><\/p>\n<\/body>","protected":false},"excerpt":{"rendered":"<p>A motor that moves in counted steps instead of simply turning. Tell it to go four thousand and ninety-six steps and it goes exactly once round \u2014 no encoder, no feedback, no trim.<\/p>\n","protected":false},"featured_media":0,"template":"","siratek_tutorial_level":[],"class_list":["post-52366","siratek_tutorial","type-siratek_tutorial","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Precise Movement with a Stepper Motor - siratek<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/siratek.net\/index.php\/tutorials\/stepper-uln2003\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Precise Movement with a Stepper Motor - siratek\" \/>\n<meta property=\"og:description\" content=\"A motor that moves in counted steps instead of simply turning. Tell it to go four thousand and ninety-six steps and it goes exactly once round \u2014 no encoder, no feedback, no trim.\" \/>\n<meta property=\"og:url\" content=\"http:\/\/siratek.net\/index.php\/tutorials\/stepper-uln2003\/\" \/>\n<meta property=\"og:site_name\" content=\"siratek\" \/>\n<meta property=\"og:image\" content=\"http:\/\/siratek.net\/wp-content\/uploads\/2026\/11\/stepper-uln2003-steps.svg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"http:\\\/\\\/siratek.net\\\/index.php\\\/tutorials\\\/stepper-uln2003\\\/\",\"url\":\"http:\\\/\\\/siratek.net\\\/index.php\\\/tutorials\\\/stepper-uln2003\\\/\",\"name\":\"Precise Movement with a Stepper Motor - siratek\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/siratek.net\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\\\/\\\/siratek.net\\\/index.php\\\/tutorials\\\/stepper-uln2003\\\/#primaryimage\"},\"image\":{\"@id\":\"http:\\\/\\\/siratek.net\\\/index.php\\\/tutorials\\\/stepper-uln2003\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/siratek.net\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/stepper-uln2003-steps.svg\",\"datePublished\":\"2026-11-01T10:51:01+00:00\",\"breadcrumb\":{\"@id\":\"http:\\\/\\\/siratek.net\\\/index.php\\\/tutorials\\\/stepper-uln2003\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\\\/\\\/siratek.net\\\/index.php\\\/tutorials\\\/stepper-uln2003\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\\\/\\\/siratek.net\\\/index.php\\\/tutorials\\\/stepper-uln2003\\\/#primaryimage\",\"url\":\"https:\\\/\\\/siratek.net\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/stepper-uln2003-steps.svg\",\"contentUrl\":\"https:\\\/\\\/siratek.net\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/stepper-uln2003-steps.svg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\\\/\\\/siratek.net\\\/index.php\\\/tutorials\\\/stepper-uln2003\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/siratek.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorials\",\"item\":\"https:\\\/\\\/siratek.net\\\/index.php\\\/tutorials\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Precise Movement with a Stepper Motor\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/siratek.net\\\/#website\",\"url\":\"https:\\\/\\\/siratek.net\\\/\",\"name\":\"siratek\",\"description\":\"Your Best Electronic Retail Shop\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/siratek.net\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Precise Movement with a Stepper Motor - siratek","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/siratek.net\/index.php\/tutorials\/stepper-uln2003\/","og_locale":"en_US","og_type":"article","og_title":"Precise Movement with a Stepper Motor - siratek","og_description":"A motor that moves in counted steps instead of simply turning. Tell it to go four thousand and ninety-six steps and it goes exactly once round \u2014 no encoder, no feedback, no trim.","og_url":"http:\/\/siratek.net\/index.php\/tutorials\/stepper-uln2003\/","og_site_name":"siratek","og_image":[{"url":"http:\/\/siratek.net\/wp-content\/uploads\/2026\/11\/stepper-uln2003-steps.svg","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"http:\/\/siratek.net\/index.php\/tutorials\/stepper-uln2003\/","url":"http:\/\/siratek.net\/index.php\/tutorials\/stepper-uln2003\/","name":"Precise Movement with a Stepper Motor - siratek","isPartOf":{"@id":"https:\/\/siratek.net\/#website"},"primaryImageOfPage":{"@id":"http:\/\/siratek.net\/index.php\/tutorials\/stepper-uln2003\/#primaryimage"},"image":{"@id":"http:\/\/siratek.net\/index.php\/tutorials\/stepper-uln2003\/#primaryimage"},"thumbnailUrl":"http:\/\/siratek.net\/wp-content\/uploads\/2026\/11\/stepper-uln2003-steps.svg","datePublished":"2026-11-01T10:51:01+00:00","breadcrumb":{"@id":"http:\/\/siratek.net\/index.php\/tutorials\/stepper-uln2003\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["http:\/\/siratek.net\/index.php\/tutorials\/stepper-uln2003\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/siratek.net\/index.php\/tutorials\/stepper-uln2003\/#primaryimage","url":"https:\/\/siratek.net\/wp-content\/uploads\/2026\/11\/stepper-uln2003-steps.svg","contentUrl":"https:\/\/siratek.net\/wp-content\/uploads\/2026\/11\/stepper-uln2003-steps.svg"},{"@type":"BreadcrumbList","@id":"http:\/\/siratek.net\/index.php\/tutorials\/stepper-uln2003\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/siratek.net\/"},{"@type":"ListItem","position":2,"name":"Tutorials","item":"https:\/\/siratek.net\/index.php\/tutorials\/"},{"@type":"ListItem","position":3,"name":"Precise Movement with a Stepper Motor"}]},{"@type":"WebSite","@id":"https:\/\/siratek.net\/#website","url":"https:\/\/siratek.net\/","name":"siratek","description":"Your Best Electronic Retail Shop","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/siratek.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/siratek.net\/index.php\/wp-json\/wp\/v2\/siratek_tutorial\/52366","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/siratek.net\/index.php\/wp-json\/wp\/v2\/siratek_tutorial"}],"about":[{"href":"https:\/\/siratek.net\/index.php\/wp-json\/wp\/v2\/types\/siratek_tutorial"}],"version-history":[{"count":0,"href":"https:\/\/siratek.net\/index.php\/wp-json\/wp\/v2\/siratek_tutorial\/52366\/revisions"}],"wp:attachment":[{"href":"https:\/\/siratek.net\/index.php\/wp-json\/wp\/v2\/media?parent=52366"}],"wp:term":[{"taxonomy":"siratek_tutorial_level","embeddable":true,"href":"https:\/\/siratek.net\/index.php\/wp-json\/wp\/v2\/siratek_tutorial_level?post=52366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}