{"id":237,"date":"2016-05-22T03:30:35","date_gmt":"2016-05-22T03:30:35","guid":{"rendered":"http:\/\/dmirpuri.com\/culmination\/?p=237"},"modified":"2016-05-23T02:52:16","modified_gmt":"2016-05-23T02:52:16","slug":"code","status":"publish","type":"post","link":"https:\/\/dmirpuri.com\/culmination\/2016\/05\/22\/code\/","title":{"rendered":"Code"},"content":{"rendered":"<h3 style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft wp-image-159 size-thumbnail\" src=\"http:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/orange_codeCode-150x150.png\" alt=\"\" width=\"150\" height=\"150\" srcset=\"https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/orange_codeCode-150x150.png 150w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/orange_codeCode-300x300.png 300w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/orange_codeCode-400x400.png 400w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/orange_codeCode.png 500w\" sizes=\"(max-width: 150px) 100vw, 150px\" \/><\/h3>\n<p>&nbsp;<\/p>\n<p>Here I will be explaining the Pixy camera vision sensor along with the PixyMon software, wiring the stepper motor drivers, and coding the Arduino to read the data from the Pixy and map it to run the stepper motors. I used an Arduino UNO, 2 NEMA 17 Stepper Motors, and 2 EasyDrivers by Sparkfun.<\/p>\n<p>&nbsp;<\/p>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\">Pixy CMUCam5<\/h3>\n<p>Pixy is a camera vision sensor and started out as a kickstarter product. <a href=\"http:\/\/www.cmucam.org\/projects\/cmucam5\" target=\"_blank\">More info here.<\/a><\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-242 alignleft\" src=\"http:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/pixy-cmucam5-300x300.png\" alt=\"pixy-cmucam5\" width=\"213\" height=\"213\" srcset=\"https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/pixy-cmucam5-300x300.png 300w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/pixy-cmucam5-150x150.png 150w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/pixy-cmucam5-400x400.png 400w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/pixy-cmucam5.png 800w\" sizes=\"(max-width: 213px) 100vw, 213px\" \/><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">The Pixy camera can process upto 50 frames per second.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Since image sensors output lots of data, the Pixy pairs a powerful dedicated processor with the image sensor and sends only useful information to the microprocessor, which makes it have plenty of processing power available for other tasks.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Connects to Arduino, Raspberry Pi, Beaglebone and supports C\/C++ and Python.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Pixy uses a color-based filtering algorithm to detect objects. It calculates the color (hue) and saturation of each RGB pixel from the image sensor and uses these as the primary filtering parameters. Pixy\u2019s filtering algorithm is robust when it comes to lighting and exposure changes.<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>First I downloaded the Pixymon software, firmware, and Arduino library. If a new firmware is available, the pixy needs to be updated. To update the firmware,<\/p>\n<ul>\n<li style=\"font-weight: 400;\">Open the Pixymon software,<\/li>\n<li style=\"font-weight: 400;\">Press and hold the white button located on the top of the Pixy while plugging in USB.<\/li>\n<li style=\"font-weight: 400;\">After plugging in, let go.<\/li>\n<li style=\"font-weight: 400;\">Pixy programming state detected.<\/li>\n<li style=\"font-weight: 400;\">A dialog box will appear, select the firmware.hex file downloaded earlier.<\/li>\n<li style=\"font-weight: 400;\">All done!!<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Next step is teaching the Pixy to track an object. Pixy can learn seven color signatures, numbered 1-7. Color signature 1 is the default signature. To teach Pixy the other signatures (2-7) requires a simple button pressing sequence.<\/p>\n<ul>\n<li style=\"font-weight: 400;\">Press and hold the white button and release when the LED turns red (first signature). Signature 1 &#8211; 7 LED color:<\/li>\n<\/ul>\n<ol>\n<li>Red<\/li>\n<li>Orange<\/li>\n<li>Yellow<\/li>\n<li>Green<\/li>\n<li>Cyan<\/li>\n<li>Blue<\/li>\n<li>Violet<\/li>\n<\/ol>\n<ul>\n<li style=\"font-weight: 400;\">Bring the object (hue) in front of the camera.<\/li>\n<li style=\"font-weight: 400;\">When the grid is perfect, press and release the white button once.<\/li>\n<li style=\"font-weight: 400;\">The object is then locked in place.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-140 aligncenter\" src=\"http:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/04\/PixyCam-300x169.jpg\" alt=\"PixyCam Arduino\" width=\"300\" height=\"169\" srcset=\"https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/04\/PixyCam-300x169.jpg 300w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/04\/PixyCam-1024x576.jpg 1024w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/04\/PixyCam-400x225.jpg 400w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Then hooking the Pixy with Arduino is very simple.<\/p>\n<ul>\n<li>Connect the 10pin to 6pin cable from the Pixy to the Arduino.<\/li>\n<li>Import the Pixy library to Arduino.<\/li>\n<li>Open example code and upload.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 120px;\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-252 alignleft\" src=\"http:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/Screen-Shot-2016-05-18-at-3.06.16-AM-300x287.png\" alt=\"Screen Shot 2016-05-18 at 3.06.16 AM\" width=\"300\" height=\"287\" srcset=\"https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/Screen-Shot-2016-05-18-at-3.06.16-AM-300x287.png 300w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/Screen-Shot-2016-05-18-at-3.06.16-AM.png 355w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/> <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-253\" src=\"http:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/serial_window-296x300.png\" alt=\"serial_window\" width=\"296\" height=\"300\" srcset=\"https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/serial_window-296x300.png 296w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/serial_window-400x405.png 400w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/serial_window.png 662w\" sizes=\"(max-width: 296px) 100vw, 296px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>So for my project, I 3D modeled a ring and printed with a bright orange PLA filament. This is for the user to wear when waving their hand on top of the tank filled with ferrofluid. The Pixy will track this ring because of its color and send information to the Arduino.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-254 aligncenter\" src=\"http:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/Screen-Shot-2016-05-21-at-8.47.53-PM-275x300.png\" alt=\"Screen Shot 2016-05-21 at 8.47.53 PM\" width=\"275\" height=\"300\" srcset=\"https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/Screen-Shot-2016-05-21-at-8.47.53-PM-275x300.png 275w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/Screen-Shot-2016-05-21-at-8.47.53-PM-400x437.png 400w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/Screen-Shot-2016-05-21-at-8.47.53-PM.png 478w\" sizes=\"(max-width: 275px) 100vw, 275px\" \/><\/p>\n<h3 style=\"text-align: center;\"><\/h3>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3 style=\"text-align: center;\">Stepper Motor &amp; EasyDriver<\/h3>\n<p>&nbsp;<\/p>\n<p>Stepper motors\u00a0are perfect for automation or any time you need a motor to turn to a specific point, at a specific speed, in a specific direction.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignleft wp-image-258 size-thumbnail\" src=\"http:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/easydriver-150x150.jpg\" alt=\"easydriver\" width=\"150\" height=\"150\" srcset=\"https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/easydriver-150x150.jpg 150w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/easydriver-300x300.jpg 300w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/easydriver-400x400.jpg 400w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/easydriver.jpg 600w\" sizes=\"(max-width: 150px) 100vw, 150px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>The EasyDriver does something called micro stepping. It breaks down that minimum step into smaller micro steps (in this case 8 micro steps per step). Microstepping allows for smoother and more accurate control, but that means that your 200 step stepper, connected to the EasyDriver needs 1600 ( 200 * 8 ) steps to make a full rotation. <a href=\"https:\/\/www.sparkfun.com\/products\/12779\" target=\"_blank\">More info on the EasyDriver here.<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Hooking it up with the Arduino (schematic below), I used a 12V 1A power adapter to run both motors.<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-255 size-full\" src=\"http:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/2stepperMotorWiring.png\" alt=\"2stepperMotorWiring\" width=\"611\" height=\"704\" srcset=\"https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/2stepperMotorWiring.png 611w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/2stepperMotorWiring-260x300.png 260w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/2stepperMotorWiring-400x461.png 400w\" sizes=\"(max-width: 611px) 100vw, 611px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>The Arduino code to run the stepper motors is pretty simple.\u00a0It sets up pin 8 and 9 as outputs. It sets them both low to begin with. Then in the main loop, it simply toggles pin 9 high and low, waiting 1ms between toggles. I used pin 9 as the <span style=\"color: #ff6600;\">STEP<\/span> control and pin 8 as the <span style=\"color: #ff6600;\">DIRECTION<\/span> control to the Easy Driver.<\/p>\n<p>&nbsp;<\/p>\n<blockquote>\n<h6><span style=\"font-weight: 400;\">void setup() { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/h6>\n<h6><span style=\"font-weight: 400;\"> \u00a0pinMode(8, OUTPUT); <\/span><\/h6>\n<h6><span style=\"font-weight: 400;\"> \u00a0pinMode(9, OUTPUT);<\/span><\/h6>\n<h6><span style=\"font-weight: 400;\"> \u00a0digitalWrite(8, LOW);<\/span><\/h6>\n<h6><span style=\"font-weight: 400;\"> \u00a0digitalWrite(9, LOW);<\/span><\/h6>\n<h6><span style=\"font-weight: 400;\">}<\/span><\/h6>\n<h6><\/h6>\n<h6><span style=\"font-weight: 400;\">void loop() {<\/span><\/h6>\n<h6><span style=\"font-weight: 400;\"> \u00a0digitalWrite(9, HIGH);<\/span><\/h6>\n<h6><span style=\"font-weight: 400;\"> \u00a0delay(1); \u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/h6>\n<h6><span style=\"font-weight: 400;\"> \u00a0digitalWrite(9, LOW);<\/span><\/h6>\n<h6><span style=\"font-weight: 400;\"> \u00a0delay(1); \u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/h6>\n<h6><span style=\"font-weight: 400;\">}<\/span><\/h6>\n<\/blockquote>\n<p>&nbsp;<\/p>\n<p>Then combining these two (Pixy and stepper motor) required some algorithm. Here is a working code I worked on for this project. I must say that it is not accurate, but it fairly works. You can see some of the videos on the <span style=\"color: #ff6600;\"><a style=\"color: #ff6600;\" href=\"http:\/\/dmirpuri.com\/culmination\/results\/\" target=\"_blank\">RESULTS<\/a><\/span>\u00a0and <span style=\"color: #ff6600;\"><a style=\"color: #ff6600;\" href=\"http:\/\/dmirpuri.com\/culmination\/2016\/05\/22\/test\/\" target=\"_blank\">TEST<\/a><\/span> page.<\/p>\n<p>I wrote some functions to run the motors in different directions and applied it to the data received from the Pixy.<\/p>\n<p>&nbsp;<\/p>\n<blockquote><p>#include &lt;SPI.h&gt;<br \/>\n#include &lt;Pixy.h&gt;<\/p>\n<p>\/\/ This is the main Pixy object<br \/>\nPixy pixy;<\/p>\n<p>int dirA = 8; \/\/x-axis<br \/>\nint stepA = 9; \/\/pwm<br \/>\nint dirB = 7; \/\/y-axis<br \/>\nint stepB = 6; \/\/pwm<\/p>\n<p>int new_posX = pixy.blocks[0].x; \/\/default<br \/>\nint old_posX = new_posX;<br \/>\nint cur_posX = 0;<br \/>\nint loopX = 0;<br \/>\nbool change_posX = false;<\/p>\n<p>int new_posY = pixy.blocks[0].y; \/\/default<br \/>\nint old_posY = new_posY;<br \/>\nint cur_posY = 0;<br \/>\nint loopY = 0;<br \/>\nbool change_posY = false;<\/p>\n<p>void setup() {<br \/>\npinMode(dirA, OUTPUT);<br \/>\npinMode(stepA, OUTPUT);<br \/>\npinMode(dirB, OUTPUT);<br \/>\npinMode(stepB, OUTPUT);<br \/>\ndigitalWrite(dirA, LOW);<br \/>\ndigitalWrite(stepA, LOW);<br \/>\ndigitalWrite(dirB, LOW);<br \/>\ndigitalWrite(stepB, LOW);<\/p>\n<p>pixy.init(); \/\/starts the Pixy<br \/>\n}<\/p>\n<p>void loop()<br \/>\n{<br \/>\nstatic int i = 0;<br \/>\nint j;<br \/>\nuint16_t blocks;<\/p>\n<p>\/\/ grab blocks!<br \/>\nblocks = pixy.getBlocks();<\/p>\n<p>if (blocks) \/\/if blocks are detected<br \/>\n{<br \/>\ni++;<br \/>\nif (i % 1 == 0) \/\/this prints data every frame<br \/>\n{<br \/>\nfor (j = 0; j &lt; blocks; j++)<br \/>\n{<br \/>\nold_posX = new_posX;<br \/>\nnew_posX = pixy.blocks[0].x;<br \/>\ncur_posX = new_posX &#8211; old_posX;<br \/>\nloopX = abs(cur_posX * 8);<\/p>\n<p>old_posY = new_posY;<br \/>\nnew_posY = pixy.blocks[0].y;<br \/>\ncur_posY = new_posY &#8211; old_posY;<br \/>\nloopY = abs(cur_posY * 15);<\/p>\n<p>if (new_posX != old_posX) {<br \/>\nchange_posX = true;<br \/>\n}<br \/>\nelse if (new_posX == old_posX) {<br \/>\nchange_posX = false;<br \/>\n}<br \/>\nelse if (new_posY != old_posY) {<br \/>\nchange_posY = true;<br \/>\n}<br \/>\nelse if (new_posY == old_posY) {<br \/>\nchange_posY = false;<br \/>\n}<\/p>\n<p>if (change_posX == true || change_posY == true) {<br \/>\nif (cur_posX &gt; 10 &amp;&amp; cur_posY &gt; 3 &amp;&amp; new_posX &gt; 0 &amp;&amp; new_posX &lt; 160 &amp;&amp; new_posY &gt; 0 &amp;&amp; new_posY &lt; 100)<br \/>\n{<br \/>\nrunBothMotorForw(loopX, dirA, stepA, loopY, dirB, stepB); \/\/left down<br \/>\nchange_posX = false;<br \/>\nchange_posY = false;<br \/>\n}<br \/>\nelse if (cur_posX &lt; -10 &amp;&amp; cur_posY &lt; -3 &amp;&amp; new_posX &gt; 160 &amp;&amp; new_posX &lt; 300 &amp;&amp; new_posY &gt; 100 &amp;&amp; new_posY &lt; 200)<br \/>\n{<br \/>\nrunBothMotorBack(loopX, dirA, stepA, loopY, dirB, stepB); \/\/right up<br \/>\nchange_posX = false;<br \/>\nchange_posY = false;<br \/>\n}<br \/>\nelse if (cur_posX &gt; 10 &amp;&amp; new_posX &gt; 0 &amp;&amp; new_posX &lt; 160 ) {<br \/>\nrunMotorForw(loopX, dirA, stepA); \/\/left<br \/>\n}<br \/>\nelse if (cur_posX &lt; -10 &amp;&amp; new_posX &gt; 160 &amp;&amp; new_posX &lt; 300) {<br \/>\nrunMotorBack(loopX, dirA, stepA); \/\/right<br \/>\n}<br \/>\nelse if (cur_posY &gt; 3 &amp;&amp; new_posY &gt; 0 &amp;&amp; new_posY &lt; 100) {<br \/>\nrunMotorForw(loopY, dirB, stepB); \/\/down<br \/>\n}<br \/>\nelse if (cur_posY &lt; -3 &amp;&amp; new_posY &gt; 100 &amp;&amp; new_posY &lt; 200) {<br \/>\nrunMotorBack(loopY, dirB, stepB); \/\/up<br \/>\n}<br \/>\nelse<br \/>\n{<br \/>\nchange_posX = false;<br \/>\nchange_posY = false;<br \/>\nstopMotor();<br \/>\n}<br \/>\n}<br \/>\nelse {<br \/>\nstopMotor();<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\nelse {<br \/>\nstopMotor();<br \/>\n}<br \/>\n}<\/p>\n<p>void runMotorForw(int _loop, int _dir, int _step) {<br \/>\nfor (int i = 0; i &lt; _loop; i++) { \/\/200 steps per revolution<br \/>\ndigitalWrite(_dir, HIGH);<br \/>\ndigitalWrite(_step, HIGH);<br \/>\ndelay(1);<br \/>\ndigitalWrite(_step, LOW);<br \/>\n}<br \/>\n}<br \/>\nvoid runMotorBack(int _loop, int _dir, int _step) {<br \/>\nfor (int i = 0; i &lt; _loop; i++) {<br \/>\ndigitalWrite(_dir, LOW);<br \/>\ndigitalWrite(_step, HIGH);<br \/>\ndelay(1);<br \/>\ndigitalWrite(_step, LOW);<br \/>\n}<br \/>\n}<\/p>\n<p>void runBothMotorForw(int _loop1, int _dir1, int _step1, int _loop2, int _dir2, int _step2) {<br \/>\nfor (int i = 0; i &lt; _loop1 &amp;&amp; i &lt; _loop2; i++) {<br \/>\ndigitalWrite(_dir1, HIGH);<br \/>\ndigitalWrite(_dir2, HIGH);<br \/>\ndigitalWrite(_step1, HIGH);<br \/>\ndigitalWrite(_step2, HIGH);<br \/>\ndelay(1);<br \/>\ndigitalWrite(_step1, LOW);<br \/>\ndigitalWrite(_step2, LOW);<br \/>\n}<br \/>\n}<\/p>\n<p>void runBothMotorBack(int _loop1, int _dir1, int _step1, int _loop2, int _dir2, int _step2) {<br \/>\nfor (int i = 0; i &lt; _loop1 &amp;&amp; i &lt; _loop2; i++) {<br \/>\ndigitalWrite(_dir1, LOW);<br \/>\ndigitalWrite(_dir2, LOW);<br \/>\ndigitalWrite(_step1, HIGH);<br \/>\ndigitalWrite(_step2, HIGH);<br \/>\ndelay(1);<br \/>\ndigitalWrite(_step1, LOW);<br \/>\ndigitalWrite(_step2, LOW);<br \/>\n}<br \/>\n}<\/p>\n<p>void stopMotor() {<br \/>\ndigitalWrite(dirA, LOW);<br \/>\ndigitalWrite(stepA, LOW);<br \/>\ndigitalWrite(dirB, LOW);<br \/>\ndigitalWrite(stepB, LOW);<br \/>\n}<\/p><\/blockquote>\n<p>&nbsp;<\/p>\n<div style=\"width: 945px;\" class=\"wp-video\"><!--[if lt IE 9]><script>document.createElement('video');<\/script><![endif]-->\n<video class=\"wp-video-shortcode\" id=\"video-237-1\" width=\"945\" height=\"532\" poster=\"http:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/20160428_230335.jpg\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"http:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/20160430_193417.mp4?_=1\" \/><a href=\"http:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/20160430_193417.mp4\">http:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/20160430_193417.mp4<\/a><\/video><\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 210px;\"><a href=\"http:\/\/dmirpuri.com\/culmination\/2016\/03\/30\/build\/\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft wp-image-160 size-thumbnail\" src=\"http:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/orange_gearBuild-150x150.png\" alt=\"\" width=\"150\" height=\"150\" srcset=\"https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/orange_gearBuild-150x150.png 150w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/orange_gearBuild-300x300.png 300w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/orange_gearBuild-400x400.png 400w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/orange_gearBuild.png 500w\" sizes=\"(max-width: 150px) 100vw, 150px\" \/><\/a> <a href=\"http:\/\/dmirpuri.com\/culmination\/2016\/05\/22\/test\/\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-161 size-thumbnail alignleft\" src=\"http:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/orange_listTest-150x150.png\" alt=\"orange_listTest\" width=\"150\" height=\"150\" srcset=\"https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/orange_listTest-150x150.png 150w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/orange_listTest-300x300.png 300w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/orange_listTest-400x400.png 400w, https:\/\/dmirpuri.com\/culmination\/wp-content\/uploads\/2016\/05\/orange_listTest.png 500w\" sizes=\"(max-width: 150px) 100vw, 150px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h3>\u00a0Back to <span style=\"color: #ff6600;\"><a href=\"http:\/\/dmirpuri.com\/culmination\/process\/\">Process<\/a><\/span><\/h3>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Here I will be explaining the Pixy camera vision sensor along with the PixyMon software, wiring the stepper motor drivers, and coding the Arduino to read the data from the Pixy and map it to run the stepper motors. I used an Arduino UNO, 2 NEMA 17 Stepper Motors, and 2 EasyDrivers by Sparkfun.&hellip; <\/p>\n<p class=\"more-link-p\"><a class=\"more-link\" href=\"https:\/\/dmirpuri.com\/culmination\/2016\/05\/22\/code\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":150,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"gallery","meta":{"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/dmirpuri.com\/culmination\/wp-json\/wp\/v2\/posts\/237"}],"collection":[{"href":"https:\/\/dmirpuri.com\/culmination\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dmirpuri.com\/culmination\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dmirpuri.com\/culmination\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dmirpuri.com\/culmination\/wp-json\/wp\/v2\/comments?post=237"}],"version-history":[{"count":12,"href":"https:\/\/dmirpuri.com\/culmination\/wp-json\/wp\/v2\/posts\/237\/revisions"}],"predecessor-version":[{"id":320,"href":"https:\/\/dmirpuri.com\/culmination\/wp-json\/wp\/v2\/posts\/237\/revisions\/320"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dmirpuri.com\/culmination\/wp-json\/wp\/v2\/media\/150"}],"wp:attachment":[{"href":"https:\/\/dmirpuri.com\/culmination\/wp-json\/wp\/v2\/media?parent=237"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dmirpuri.com\/culmination\/wp-json\/wp\/v2\/categories?post=237"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dmirpuri.com\/culmination\/wp-json\/wp\/v2\/tags?post=237"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}