<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.element14.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Raspberry Pi Auto Etch A Sketch™︎ -- Episode 372</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/8497/raspberry-pi-auto-etch-a-sketch----episode-372</link><description /><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>Raspberry Pi Auto Etch A Sketch™︎ -- Episode 372</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/8497/raspberry-pi-auto-etch-a-sketch----episode-372</link><pubDate>Fri, 14 Dec 2018 08:24:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:30fdadc8-00e0-48f9-9538-f078db8af093</guid><dc:creator>Matt</dc:creator><comments>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/8497/raspberry-pi-auto-etch-a-sketch----episode-372#comments</comments><description>Current Revision posted to Documents by Matt on 12/14/2018 8:24:00 AM&lt;br /&gt;
&lt;div style="background:#ffffff;padding:14px 16px 16px 18px;margin:0;vertical-align:top;border:1px solid #dadada;"&gt;&lt;div style="float:left;display:inline-block;padding:0px 25px 8px 0px;"&gt;&lt;a href="/challengesprojects/element14-presents/" data-e14adj="t"&gt;&lt;img alt="image" src="/e14/assets/legacy/2018/e14PresentsJune818.png" width="180px"  /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="display:inline-block;vertical-align:top;width:70%;"&gt;&lt;span style="font-size:18px;font-weight:bold;"&gt; Raspberry Pi Auto Etch A Sketch&lt;span class="emoticon" data-url="https://community.element14.com/cfs-file/__key/system/emoji/2122.svg" title="Tm"&gt;&amp;#x2122;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin:0;"&gt;&lt;span&gt;&lt;a class="jivecontainerTT-hover-container jive-link-community-small" href="/challengesprojects/element14-presents/" data-e14adj="t"&gt;element14 presents&lt;/a&gt;&lt;/span&gt;&amp;nbsp; &lt;strong&gt;|&lt;/strong&gt;&amp;nbsp; &lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/vcp-program/w/documents/3721/vcp-biography-daftmike" data-e14adj="t"&gt;daftmike&amp;#39;s VCP Profile&lt;/a&gt;&amp;nbsp; &lt;strong&gt;|&lt;/strong&gt;&amp;nbsp; &lt;a class="jivecontainerTT-hover-container jive-link-community-small" href="/challengesprojects/element14-presents/project-videos/" data-e14adj="t"&gt;Project Videos&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;table style="width:80%;display:block;margin:0 auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="padding-bottom:12px;"&gt;&lt;span&gt;&lt;a href="https://www.youtube.com/watch?v=6tTF2i9Zns8"&gt;www.youtube.com/watch&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p style="margin:0;border:1px solid #b8d7e5;background-color:#e9f6fc;padding:8px;max-width:634px;"&gt;&lt;span style="color:#000000;font-family:&amp;#39;Open Sans&amp;#39;, Arial, sans-serif;text-align:justify;"&gt;In this video Mike builds an automatic Etch A Sketch&lt;span class="emoticon" data-url="https://community.element14.com/cfs-file/__key/system/emoji/2122.svg" title="Tm"&gt;&amp;#x2122;&lt;/span&gt; machine using stepper motors and 3D printed gears. &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;h2&gt;&lt;span style="color:#3334ca;"&gt;Bill of Material:&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;table border="1" class="jiveBorder" style="border:1px solid #000000;width:100%;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style="border:1px solid black;border:1px solid #000000;padding:2px;color:#ffffff;background-color:#6690bc;text-align:left;" valign="middle"&gt;&lt;strong&gt;Product Name&lt;/strong&gt;&lt;/th&gt;&lt;th style="border:1px solid black;border:1px solid #000000;padding:2px;color:#ffffff;background-color:#6690bc;text-align:left;" valign="middle"&gt;&lt;strong&gt;Manufacturer&lt;/strong&gt;&lt;/th&gt;&lt;th style="border:1px solid black;border:1px solid #000000;padding:2px;color:#ffffff;background-color:#6690bc;text-align:left;" valign="middle"&gt;&lt;strong&gt;Quantity&lt;br /&gt;&lt;/strong&gt;&lt;/th&gt;&lt;th style="border:1px solid black;border:1px solid #000000;padding:2px;color:#ffffff;background-color:#6690bc;text-align:left;" valign="middle"&gt;&lt;span&gt;&lt;a id="e14-product-link-51aae" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2842230,2816276,2845498,2507564~2,2816371&amp;nsku=49AC7641,31AC4597,50AC9538,72Y2013~2,47AC4177,85W1247&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_BUY_KIT" class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('51aae'));" data-farnell="2842230,2816276,2845498,2507564~2,2816371" data-newark="49AC7641,31AC4597,50AC9538,72Y2013~2,47AC4177,85W1247" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Kit&lt;/a&gt; &lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;p style="margin:0;"&gt;&lt;strong&gt;&lt;span&gt;Raspberry Pi 3 Model B+, BCM2837B0 SoC, IoT, PoE, NOOBS Included &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;RASPBERRY-PI&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span&gt;&lt;a id="e14-product-link-29139" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" href="https://referral.element14.com/OrderCodeView?fsku=2842230&amp;nsku=49AC7641&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-link" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('29139'));" data-farnell="2842230" data-newark="49AC7641" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;p style="margin:0;"&gt;&lt;strong&gt;&lt;span&gt;Raspberry Pi DC Stepper Motor Hat Develo &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;ADAFRUIT&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span&gt;&lt;a id="e14-product-link-4cf1e" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" href="https://referral.element14.com/OrderCodeView?fsku=2816276&amp;nsku=31AC4597&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-link" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('4cf1e'));" data-farnell="2816276" data-newark="31AC4597" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;3D Printer Filament, 1.75 mm, PLA, Red, 1 kg&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;MULTICOMP&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span&gt;&lt;a id="e14-product-link-68e3c" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" href="https://referral.element14.com/OrderCodeView?fsku=2845498&amp;nsku=50AC9538&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-link" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('68e3c'));" data-farnell="2845498" data-newark="50AC9538" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;&lt;span&gt;Stepper Motor, High Torque, DC, 0.5 N-m, 1.8 A, Two Phase, 1.75 ohm, 3.3 mH&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;NANOTEC&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span&gt;&lt;a id="e14-product-link-a6364" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" href="https://referral.element14.com/OrderCodeView?fsku=2507564~2&amp;nsku=72Y2013~2&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-link" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('a6364'));" data-farnell="2507564~2" data-newark="72Y2013~2" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;&lt;span&gt;CONTINUOUS ROTATION SERVO&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;ADAFRUIT&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span&gt;&lt;a id="e14-product-link-4540a" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" href="https://referral.element14.com/OrderCodeView?fsku=2816371&amp;nsku=85W1247&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-link" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('4540a'));" data-farnell="2816371" data-newark="85W1247" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;strong&gt;Arduino Flip Code:&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;/* ================================================================================


  GY-521 IMU test code for flipping the etch a sketch - daftmike 2018


  ================================================================================ */





#include &amp;lt;Wire.h&amp;gt;


#include &amp;lt;Servo.h&amp;gt;





// Servo is attached to pin 5


Servo servo;


const int servoPin = 5;





// Variables used for the IMU readings


long accelX, accelY, accelZ;


float gForceX, gForceY, gForceZ;


long gyroXCali = 0, gyroYCali = 0, gyroZCali = 0;


long gyroXPresent = 0, gyroYPresent = 0, gyroZPresent = 0;


long gyroXPast = 0, gyroYPast = 0, gyroZPast = 0;


float rotX, rotY, rotZ;


float angleX = 0, angleY = 0, angleZ = 0;


long timePast = 0;


long timePresent = 0;





// Variables used to keep track of the &amp;#39;flip&amp;#39;


bool flipStarted = 0;


bool flipFinished = 0;


int flips = 0;


int servoDir = 90;





// String to hold the serial data from the Pi


String piMsg;





// Speed, angle and number of &amp;#39;flips&amp;#39;


const int forwardSpeed = 60;


const int backwardSpeed = 180;


const int numFlips = 5;


const int lowAngle = -140;


const int midAngle = -120;








/*================================================================================*/





void setup() {


  Serial.begin(9600);  // start the serial port


  Wire.begin();  // start i2c


  setUpMPU();  // start IMU coms


  calibrateGyroValues();  


  timePresent = millis();  // time reference for IMU readings


}





/*================================================================================*/





void loop() {


  readAndProcessAccelData();


  readAndProcessGyroData();


  readPi();


}





/*================================================================================*/





void servoFlip() {  


  if (servoDir == 90) {


  servo.attach(servoPin);


  servoDir = forwardSpeed;


  servo.write(servoDir);


  Serial.println(&amp;quot;flip started, servo moving forward...&amp;quot;);


  flipStarted = 1;


  }





  if (flipStarted == 1) {





   if (servoDir == forwardSpeed &amp;amp;&amp;amp; angleX &amp;lt; lowAngle &amp;amp;&amp;amp; flips &amp;lt; numFlips) {


  servoDir = backwardSpeed;


  servo.write(servoDir);


  Serial.println(&amp;quot;servo backward...&amp;quot;);


  flips++;


  Serial.print(&amp;quot;flip number: &amp;quot;);


  Serial.println(flips);


  }


   if (servoDir == backwardSpeed &amp;amp;&amp;amp; angleX &amp;gt; midAngle &amp;amp;&amp;amp; flips &amp;lt; numFlips) {


  servoDir = forwardSpeed;


  servo.write(servoDir);


  Serial.println(&amp;quot;servo forward...&amp;quot;);


  flips++;


  Serial.print(&amp;quot;flip number: &amp;quot;);


  Serial.println(flips);


  }


   if (servoDir == backwardSpeed &amp;amp;&amp;amp; -2 &amp;lt; angleX) {


  Serial.println(&amp;quot;turning servo OFF...&amp;quot;);


  servo.detach();


  servoDir = 90;


  flips = 0;


  flipStarted = 0;


   delay(2000);


   setUpMPU();


   calibrateGyroValues();


  }


  }


}





void readPi() {  // read data from the serial port into a string to check for messages





  if (Serial.available()) {


  piMsg = Serial.readString();





   if (piMsg == &amp;quot;flip&amp;quot;) {


   servoFlip();


  }


   else if (piMsg == &amp;quot;cali&amp;quot;) {


  Serial.println(&amp;quot;calibrating gyro values...&amp;quot;);


   setUpMPU();


   calibrateGyroValues();


  }


  }


}








void setUpMPU() {


  // power management


  Wire.beginTransmission(0b1101000);  // Start the communication by using address of MPU


  Wire.write(0x6B);  // Access the power management register


  Wire.write(0b00000000);  // Set sleep = 0


  Wire.endTransmission();  // End the communication





  // configure gyro


  Wire.beginTransmission(0b1101000);


  Wire.write(0x1B);  // Access the gyro configuration register


  Wire.write(0b00000000);


  Wire.endTransmission();





  // configure accelerometer


  Wire.beginTransmission(0b1101000);


  Wire.write(0x1C);  // Access the accelerometer configuration register


  Wire.write(0b00000000);


  Wire.endTransmission();


}





void calibrateGyroValues() {


  for (int i = 0; i &amp;lt; 5000; i++) {


   getGyroValues();


  gyroXCali = gyroXCali + gyroXPresent;


  gyroYCali = gyroYCali + gyroYPresent;


  gyroZCali = gyroZCali + gyroZPresent;


  }


  gyroXCali = gyroXCali / 5000;


  gyroYCali = gyroYCali / 5000;


  gyroZCali = gyroZCali / 5000;


}





void readAndProcessAccelData() {


  Wire.beginTransmission(0b1101000);


  Wire.write(0x3B);


  Wire.endTransmission();


  Wire.requestFrom(0b1101000, 6);


  while (Wire.available() &amp;lt; 6);


  accelX = Wire.read() &amp;lt;&amp;lt; 8 | Wire.read();


  accelY = Wire.read() &amp;lt;&amp;lt; 8 | Wire.read();


  accelZ = Wire.read() &amp;lt;&amp;lt; 8 | Wire.read();


  processAccelData();


}





void processAccelData() {


  gForceX = accelX / 16384.0;


  gForceY = accelY / 16384.0;


  gForceZ = accelZ / 16384.0;


}





void readAndProcessGyroData() {


  gyroXPast = gyroXPresent;  // Assign Present gyro reaging to past gyro reading


  gyroYPast = gyroYPresent;  // Assign Present gyro reaging to past gyro reading


  gyroZPast = gyroZPresent;  // Assign Present gyro reaging to past gyro reading


  timePast = timePresent;  // Assign Present time to past time


  timePresent = millis();  // get the current time in milli seconds, it is the present time





  getGyroValues();  // get gyro readings


  getAngularVelocity();  // get angular velocity


  calculateAngle();  // calculate the angle


}





void getGyroValues() {


  Wire.beginTransmission(0b1101000);  // Start the communication by using address of MPU


  Wire.write(0x43);  // Access the starting register of gyro readings


  Wire.endTransmission();


  Wire.requestFrom(0b1101000, 6);  // Request for 6 bytes from gyro registers (43 - 48)


  while (Wire.available() &amp;lt; 6);  // Wait untill all 6 bytes are available


  gyroXPresent = Wire.read() &amp;lt;&amp;lt; 8 | Wire.read();  // Store first two bytes into gyroXPresent


  gyroYPresent = Wire.read() &amp;lt;&amp;lt; 8 | Wire.read();  // Store next two bytes into gyroYPresent


  gyroZPresent = Wire.read() &amp;lt;&amp;lt; 8 | Wire.read();  // Store last two bytes into gyroZPresent


}





void getAngularVelocity() {


  rotX = gyroXPresent / 131.0;


  rotY = gyroYPresent / 131.0;


  rotZ = gyroZPresent / 131.0;


}





void calculateAngle() {


  // same equation can be written as


  // angleZ = angleZ + ((timePresentZ - timePastZ)*(gyroZPresent + gyroZPast - 2*gyroZCalli)) / (2*1000*131);


  // 1/(1000*2*131) = 0.00000382


  // 1000 --&amp;gt; convert milli seconds into seconds


  // 2 --&amp;gt; comes when calculation area of trapezium


  // substacted the callibated result two times because there are two gyro readings


  angleX = angleX + ((timePresent - timePast) * (gyroXPresent + gyroXPast - 2 * gyroXCali)) * 0.00000382;


  angleY = angleY + ((timePresent - timePast) * (gyroYPresent + gyroYPast - 2 * gyroYCali)) * 0.00000382;


  angleZ = angleZ + ((timePresent - timePast) * (gyroZPresent + gyroZPast - 2 * gyroZCali)) * 0.00000382;


}





void printData() {


  Serial.print(&amp;quot;X : &amp;quot;);


  Serial.print(angleX);


  Serial.print(&amp;quot;&amp;#176; | Y : &amp;quot;);


  Serial.print(angleY);


  Serial.print(&amp;quot;&amp;#176; | Z : &amp;quot;);


  Serial.print(angleZ); Serial.println(&amp;quot;&amp;#176;&amp;quot;);





}&lt;/pre&gt;&lt;/p&gt;&lt;div style="display:none;"&gt;&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;span style="color:#3d3d3d;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, &amp;#39;Lucida Grande&amp;#39;, sans-serif;font-size:14px;"&gt;&lt;strong&gt;Supporting Files:&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;span class="e14-button-large e14-button-primary"&gt;&lt;a class="jive-link-external-small" href="https://github.com/imdaftmike/ROB_Reborn" title="Click Here" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;Click Here&lt;/a&gt;&lt;/span&gt; for access to all the supporting files you will need to replicate this build!&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;div class="migration-injected-attachments"&gt;&lt;div style="font-weight:bold;margin:15px 0 5px 0;"&gt;Attachments:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;table style="border:0;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;span class="_se_attachment" id="attid_https://www.element14.com/community/api/core/v3/attachments/272306"&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-03-81/Auto_2D00_Etch_2D00_A_2D00_Sketch_2D00_master.zip"&gt;community.element14.com/.../Auto_2D00_Etch_2D00_A_2D00_Sketch_2D00_master.zip&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: episode 372: raspberry pi auto etch a sketch™, raspberri pi, friday_release, e14presents_daftmike&lt;/div&gt;
</description></item><item><title>Episode 372: Raspberry Pi Auto Etch A Sketch™︎</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/8497/raspberry-pi-auto-etch-a-sketch----episode-372/revision/2</link><pubDate>Fri, 18 Mar 2022 09:08:34 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:30fdadc8-00e0-48f9-9538-f078db8af093</guid><dc:creator>Matt</dc:creator><comments>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/8497/raspberry-pi-auto-etch-a-sketch----episode-372#comments</comments><description>Revision 2 posted to Documents by Matt on 3/18/2022 9:08:34 AM&lt;br /&gt;
&lt;div style="background:#ffffff;padding:14px 16px 16px 18px;margin:0;vertical-align:top;border:1px solid #dadada;"&gt;&lt;div style="float:left;display:inline-block;padding:0px 25px 8px 0px;"&gt;&lt;a href="/challengesprojects/element14-presents/"&gt;&lt;img alt="image" src="/e14/assets/legacy/2018/e14PresentsJune818.png" width="180px"  /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="display:inline-block;vertical-align:top;width:70%;"&gt;&lt;span style="font-size:18px;font-weight:bold;"&gt; Raspberry Pi Auto Etch A Sketch&lt;span class="emoticon" data-url="https://community.element14.com/cfs-file/__key/system/emoji/2122.svg" title="Tm"&gt;&amp;#x2122;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin:0;"&gt;&lt;span&gt;&lt;a class="jivecontainerTT-hover-container jive-link-community-small" href="/challengesprojects/element14-presents/"&gt;element14 presents&lt;/a&gt;&lt;/span&gt;&amp;nbsp; &lt;strong&gt;|&lt;/strong&gt;&amp;nbsp; &lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/vcp-program/w/documents/3721/vcp-biography-daftmike"&gt;daftmike&amp;#39;s VCP Profile&lt;/a&gt;&amp;nbsp; &lt;strong&gt;|&lt;/strong&gt;&amp;nbsp; &lt;a class="jivecontainerTT-hover-container jive-link-community-small" href="/challengesprojects/element14-presents/project-videos/"&gt;Project Videos&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;table style="width:80%;display:block;margin:0 auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="padding-bottom:12px;"&gt;&lt;span&gt;&lt;a href="https://www.youtube.com/watch?v=6tTF2i9Zns8"&gt;www.youtube.com/watch&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p style="margin:0;border:1px solid #b8d7e5;background-color:#e9f6fc;padding:8px;max-width:634px;"&gt;&lt;span style="color:#000000;font-family:&amp;#39;Open Sans&amp;#39;, Arial, sans-serif;text-align:justify;"&gt;In this video Mike builds an automatic Etch A Sketch&lt;span class="emoticon" data-url="https://community.element14.com/cfs-file/__key/system/emoji/2122.svg" title="Tm"&gt;&amp;#x2122;&lt;/span&gt; machine using stepper motors and 3D printed gears. &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;h2&gt;&lt;span style="color:#3334ca;"&gt;Bill of Material:&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;table border="1" class="jiveBorder" style="border:1px solid #000000;width:100%;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style="border:1px solid black;border:1px solid #000000;padding:2px;color:#ffffff;background-color:#6690bc;text-align:left;" valign="middle"&gt;&lt;strong&gt;Product Name&lt;/strong&gt;&lt;/th&gt;&lt;th style="border:1px solid black;border:1px solid #000000;padding:2px;color:#ffffff;background-color:#6690bc;text-align:left;" valign="middle"&gt;&lt;strong&gt;Manufacturer&lt;/strong&gt;&lt;/th&gt;&lt;th style="border:1px solid black;border:1px solid #000000;padding:2px;color:#ffffff;background-color:#6690bc;text-align:left;" valign="middle"&gt;&lt;strong&gt;Quantity&lt;br /&gt;&lt;/strong&gt;&lt;/th&gt;&lt;th style="border:1px solid black;border:1px solid #000000;padding:2px;color:#ffffff;background-color:#6690bc;text-align:left;" valign="middle"&gt;&lt;span&gt;&lt;a id="e14-product-link-b9720" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2842230,2816276,2845498,2507564~2,2816371&amp;nsku=49AC7641,31AC4597,50AC9538,72Y2013~2,47AC4177,85W1247&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_BUY_KIT" class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('b9720'));" data-farnell="2842230,2816276,2845498,2507564~2,2816371" data-newark="49AC7641,31AC4597,50AC9538,72Y2013~2,47AC4177,85W1247" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Kit&lt;/a&gt; &lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;p style="margin:0;"&gt;&lt;strong&gt;&lt;span&gt;Raspberry Pi 3 Model B+, BCM2837B0 SoC, IoT, PoE, NOOBS Included &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;RASPBERRY-PI&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span&gt;&lt;a id="e14-product-link-c4631" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" href="https://referral.element14.com/OrderCodeView?fsku=2842230&amp;nsku=49AC7641&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-link" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('c4631'));" data-farnell="2842230" data-newark="49AC7641" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;p style="margin:0;"&gt;&lt;strong&gt;&lt;span&gt;Raspberry Pi DC Stepper Motor Hat Develo &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;ADAFRUIT&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span&gt;&lt;a id="e14-product-link-8cedb" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" href="https://referral.element14.com/OrderCodeView?fsku=2816276&amp;nsku=31AC4597&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-link" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('8cedb'));" data-farnell="2816276" data-newark="31AC4597" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;3D Printer Filament, 1.75 mm, PLA, Red, 1 kg&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;MULTICOMP&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span&gt;&lt;a id="e14-product-link-fe203" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" href="https://referral.element14.com/OrderCodeView?fsku=2845498&amp;nsku=50AC9538&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-link" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('fe203'));" data-farnell="2845498" data-newark="50AC9538" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;&lt;span&gt;Stepper Motor, High Torque, DC, 0.5 N-m, 1.8 A, Two Phase, 1.75 ohm, 3.3 mH&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;NANOTEC&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span&gt;&lt;a id="e14-product-link-2abad" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" href="https://referral.element14.com/OrderCodeView?fsku=2507564~2&amp;nsku=72Y2013~2&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-link" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('2abad'));" data-farnell="2507564~2" data-newark="72Y2013~2" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;&lt;span&gt;CONTINUOUS ROTATION SERVO&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;ADAFRUIT&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span&gt;&lt;a id="e14-product-link-df44f" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" href="https://referral.element14.com/OrderCodeView?fsku=2816371&amp;nsku=85W1247&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-link" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('df44f'));" data-farnell="2816371" data-newark="85W1247" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;strong&gt;Arduino Flip Code:&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;/* ================================================================================


  GY-521 IMU test code for flipping the etch a sketch - daftmike 2018


  ================================================================================ */





#include &amp;lt;Wire.h&amp;gt;


#include &amp;lt;Servo.h&amp;gt;





// Servo is attached to pin 5


Servo servo;


const int servoPin = 5;





// Variables used for the IMU readings


long accelX, accelY, accelZ;


float gForceX, gForceY, gForceZ;


long gyroXCali = 0, gyroYCali = 0, gyroZCali = 0;


long gyroXPresent = 0, gyroYPresent = 0, gyroZPresent = 0;


long gyroXPast = 0, gyroYPast = 0, gyroZPast = 0;


float rotX, rotY, rotZ;


float angleX = 0, angleY = 0, angleZ = 0;


long timePast = 0;


long timePresent = 0;





// Variables used to keep track of the &amp;#39;flip&amp;#39;


bool flipStarted = 0;


bool flipFinished = 0;


int flips = 0;


int servoDir = 90;





// String to hold the serial data from the Pi


String piMsg;





// Speed, angle and number of &amp;#39;flips&amp;#39;


const int forwardSpeed = 60;


const int backwardSpeed = 180;


const int numFlips = 5;


const int lowAngle = -140;


const int midAngle = -120;








/*================================================================================*/





void setup() {


  Serial.begin(9600);  // start the serial port


  Wire.begin();  // start i2c


  setUpMPU();  // start IMU coms


  calibrateGyroValues();  


  timePresent = millis();  // time reference for IMU readings


}





/*================================================================================*/





void loop() {


  readAndProcessAccelData();


  readAndProcessGyroData();


  readPi();


}





/*================================================================================*/





void servoFlip() {  


  if (servoDir == 90) {


  servo.attach(servoPin);


  servoDir = forwardSpeed;


  servo.write(servoDir);


  Serial.println(&amp;quot;flip started, servo moving forward...&amp;quot;);


  flipStarted = 1;


  }





  if (flipStarted == 1) {





   if (servoDir == forwardSpeed &amp;amp;&amp;amp; angleX &amp;lt; lowAngle &amp;amp;&amp;amp; flips &amp;lt; numFlips) {


  servoDir = backwardSpeed;


  servo.write(servoDir);


  Serial.println(&amp;quot;servo backward...&amp;quot;);


  flips++;


  Serial.print(&amp;quot;flip number: &amp;quot;);


  Serial.println(flips);


  }


   if (servoDir == backwardSpeed &amp;amp;&amp;amp; angleX &amp;gt; midAngle &amp;amp;&amp;amp; flips &amp;lt; numFlips) {


  servoDir = forwardSpeed;


  servo.write(servoDir);


  Serial.println(&amp;quot;servo forward...&amp;quot;);


  flips++;


  Serial.print(&amp;quot;flip number: &amp;quot;);


  Serial.println(flips);


  }


   if (servoDir == backwardSpeed &amp;amp;&amp;amp; -2 &amp;lt; angleX) {


  Serial.println(&amp;quot;turning servo OFF...&amp;quot;);


  servo.detach();


  servoDir = 90;


  flips = 0;


  flipStarted = 0;


   delay(2000);


   setUpMPU();


   calibrateGyroValues();


  }


  }


}





void readPi() {  // read data from the serial port into a string to check for messages





  if (Serial.available()) {


  piMsg = Serial.readString();





   if (piMsg == &amp;quot;flip&amp;quot;) {


   servoFlip();


  }


   else if (piMsg == &amp;quot;cali&amp;quot;) {


  Serial.println(&amp;quot;calibrating gyro values...&amp;quot;);


   setUpMPU();


   calibrateGyroValues();


  }


  }


}








void setUpMPU() {


  // power management


  Wire.beginTransmission(0b1101000);  // Start the communication by using address of MPU


  Wire.write(0x6B);  // Access the power management register


  Wire.write(0b00000000);  // Set sleep = 0


  Wire.endTransmission();  // End the communication





  // configure gyro


  Wire.beginTransmission(0b1101000);


  Wire.write(0x1B);  // Access the gyro configuration register


  Wire.write(0b00000000);


  Wire.endTransmission();





  // configure accelerometer


  Wire.beginTransmission(0b1101000);


  Wire.write(0x1C);  // Access the accelerometer configuration register


  Wire.write(0b00000000);


  Wire.endTransmission();


}





void calibrateGyroValues() {


  for (int i = 0; i &amp;lt; 5000; i++) {


   getGyroValues();


  gyroXCali = gyroXCali + gyroXPresent;


  gyroYCali = gyroYCali + gyroYPresent;


  gyroZCali = gyroZCali + gyroZPresent;


  }


  gyroXCali = gyroXCali / 5000;


  gyroYCali = gyroYCali / 5000;


  gyroZCali = gyroZCali / 5000;


}





void readAndProcessAccelData() {


  Wire.beginTransmission(0b1101000);


  Wire.write(0x3B);


  Wire.endTransmission();


  Wire.requestFrom(0b1101000, 6);


  while (Wire.available() &amp;lt; 6);


  accelX = Wire.read() &amp;lt;&amp;lt; 8 | Wire.read();


  accelY = Wire.read() &amp;lt;&amp;lt; 8 | Wire.read();


  accelZ = Wire.read() &amp;lt;&amp;lt; 8 | Wire.read();


  processAccelData();


}





void processAccelData() {


  gForceX = accelX / 16384.0;


  gForceY = accelY / 16384.0;


  gForceZ = accelZ / 16384.0;


}





void readAndProcessGyroData() {


  gyroXPast = gyroXPresent;  // Assign Present gyro reaging to past gyro reading


  gyroYPast = gyroYPresent;  // Assign Present gyro reaging to past gyro reading


  gyroZPast = gyroZPresent;  // Assign Present gyro reaging to past gyro reading


  timePast = timePresent;  // Assign Present time to past time


  timePresent = millis();  // get the current time in milli seconds, it is the present time





  getGyroValues();  // get gyro readings


  getAngularVelocity();  // get angular velocity


  calculateAngle();  // calculate the angle


}





void getGyroValues() {


  Wire.beginTransmission(0b1101000);  // Start the communication by using address of MPU


  Wire.write(0x43);  // Access the starting register of gyro readings


  Wire.endTransmission();


  Wire.requestFrom(0b1101000, 6);  // Request for 6 bytes from gyro registers (43 - 48)


  while (Wire.available() &amp;lt; 6);  // Wait untill all 6 bytes are available


  gyroXPresent = Wire.read() &amp;lt;&amp;lt; 8 | Wire.read();  // Store first two bytes into gyroXPresent


  gyroYPresent = Wire.read() &amp;lt;&amp;lt; 8 | Wire.read();  // Store next two bytes into gyroYPresent


  gyroZPresent = Wire.read() &amp;lt;&amp;lt; 8 | Wire.read();  // Store last two bytes into gyroZPresent


}





void getAngularVelocity() {


  rotX = gyroXPresent / 131.0;


  rotY = gyroYPresent / 131.0;


  rotZ = gyroZPresent / 131.0;


}





void calculateAngle() {


  // same equation can be written as


  // angleZ = angleZ + ((timePresentZ - timePastZ)*(gyroZPresent + gyroZPast - 2*gyroZCalli)) / (2*1000*131);


  // 1/(1000*2*131) = 0.00000382


  // 1000 --&amp;gt; convert milli seconds into seconds


  // 2 --&amp;gt; comes when calculation area of trapezium


  // substacted the callibated result two times because there are two gyro readings


  angleX = angleX + ((timePresent - timePast) * (gyroXPresent + gyroXPast - 2 * gyroXCali)) * 0.00000382;


  angleY = angleY + ((timePresent - timePast) * (gyroYPresent + gyroYPast - 2 * gyroYCali)) * 0.00000382;


  angleZ = angleZ + ((timePresent - timePast) * (gyroZPresent + gyroZPast - 2 * gyroZCali)) * 0.00000382;


}





void printData() {


  Serial.print(&amp;quot;X : &amp;quot;);


  Serial.print(angleX);


  Serial.print(&amp;quot;&amp;#176; | Y : &amp;quot;);


  Serial.print(angleY);


  Serial.print(&amp;quot;&amp;#176; | Z : &amp;quot;);


  Serial.print(angleZ); Serial.println(&amp;quot;&amp;#176;&amp;quot;);





}&lt;/pre&gt;&lt;/p&gt;&lt;div style="display:none;"&gt;&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;span style="color:#3d3d3d;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, &amp;#39;Lucida Grande&amp;#39;, sans-serif;font-size:14px;"&gt;&lt;strong&gt;Supporting Files:&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;span class="e14-button-large e14-button-primary"&gt;&lt;a class="jive-link-external-small" href="https://github.com/imdaftmike/ROB_Reborn" rel="nofollow ugc noopener" target="_blank" title="Click Here"&gt;Click Here&lt;/a&gt;&lt;/span&gt; for access to all the supporting files you will need to replicate this build!&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;div class="migration-injected-attachments"&gt;&lt;div style="font-weight:bold;margin:15px 0 5px 0;"&gt;Attachments:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;table style="border:0;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;span class="_se_attachment" id="attid_https://www.element14.com/community/api/core/v3/attachments/272306"&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-03-81/Auto_2D00_Etch_2D00_A_2D00_Sketch_2D00_master.zip"&gt;community.element14.com/.../Auto_2D00_Etch_2D00_A_2D00_Sketch_2D00_master.zip&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: episode 372: raspberry pi auto etch a sketch™, raspberri pi, friday_release, e14presents_daftmike&lt;/div&gt;
</description></item><item><title>Episode 372: Raspberry Pi Auto Etch A Sketch™︎</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/8497/raspberry-pi-auto-etch-a-sketch----episode-372/revision/1</link><pubDate>Fri, 04 Jan 2019 14:46:30 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:30fdadc8-00e0-48f9-9538-f078db8af093</guid><dc:creator>kellyhensen</dc:creator><comments>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/8497/raspberry-pi-auto-etch-a-sketch----episode-372#comments</comments><description>Revision 1 posted to Documents by kellyhensen on 1/4/2019 2:46:30 PM&lt;br /&gt;
&lt;div style="background:#ffffff;padding:14px 16px 16px 18px;margin:0;vertical-align:top;border:1px solid #dadada;"&gt;&lt;div style="float:left;display:inline-block;padding:0px 25px 8px 0px;"&gt;&lt;a href="/challengesprojects/element14-presents/"&gt;&lt;img alt="image" src="/e14/assets/legacy/2018/e14PresentsJune818.png" width="180px"  /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="display:inline-block;vertical-align:top;width:70%;"&gt;&lt;span style="font-size:18px;font-weight:bold;"&gt; Raspberry Pi Auto Etch A Sketch&lt;span class="emoticon" data-url="https://community.element14.com/cfs-file/__key/system/emoji/2122.svg" title="Tm"&gt;&amp;#x2122;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin:0;"&gt;&lt;span&gt;&lt;a class="jivecontainerTT-hover-container jive-link-community-small" href="/challengesprojects/element14-presents/"&gt;element14 presents&lt;/a&gt;&lt;/span&gt;&amp;nbsp; &lt;strong&gt;|&lt;/strong&gt;&amp;nbsp; &lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/vcp-program/w/documents/3721/vcp-biography-daftmike"&gt;daftmike&amp;#39;s VCP Profile&lt;/a&gt;&amp;nbsp; &lt;strong&gt;|&lt;/strong&gt;&amp;nbsp; &lt;a class="jivecontainerTT-hover-container jive-link-community-small" href="/challengesprojects/element14-presents/project-videos/"&gt;Project Videos&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;table style="width:80%;display:block;margin:0 auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="padding-bottom:12px;"&gt;&lt;span&gt;&lt;a href="https://www.youtube.com/watch?v=6tTF2i9Zns8"&gt;www.youtube.com/watch&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p style="margin:0;border:1px solid #b8d7e5;background-color:#e9f6fc;padding:8px;max-width:634px;"&gt;&lt;span style="color:#000000;font-family:&amp;#39;Open Sans&amp;#39;, Arial, sans-serif;text-align:justify;"&gt;In this video Mike builds an automatic Etch A Sketch&lt;span class="emoticon" data-url="https://community.element14.com/cfs-file/__key/system/emoji/2122.svg" title="Tm"&gt;&amp;#x2122;&lt;/span&gt; machine using stepper motors and 3D printed gears. &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;h2&gt;&lt;span style="color:#3334ca;"&gt;Bill of Material:&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;table border="1" class="jiveBorder" style="border:1px solid #000000;width:100%;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style="border:1px solid black;border:1px solid #000000;padding:2px;color:#ffffff;background-color:#6690bc;text-align:left;" valign="middle"&gt;&lt;strong&gt;Product Name&lt;/strong&gt;&lt;/th&gt;&lt;th style="border:1px solid black;border:1px solid #000000;padding:2px;color:#ffffff;background-color:#6690bc;text-align:left;" valign="middle"&gt;&lt;strong&gt;Manufacturer&lt;/strong&gt;&lt;/th&gt;&lt;th style="border:1px solid black;border:1px solid #000000;padding:2px;color:#ffffff;background-color:#6690bc;text-align:left;" valign="middle"&gt;&lt;strong&gt;Quantity&lt;br /&gt;&lt;/strong&gt;&lt;/th&gt;&lt;th style="border:1px solid black;border:1px solid #000000;padding:2px;color:#ffffff;background-color:#6690bc;text-align:left;" valign="middle"&gt;&lt;span&gt;&lt;span class="e14-init-shown e14-product-link-buynow" id="addProduct-H1U9kX0o-linked" style="white-space:nowrap;"&gt;&lt;a class="jive-link-product-addtolist" href="https://www.element14.com/community/view-product.jspa?fsku=2842230,2816276,2845498,2507564~2,2816371&amp;amp;nsku=49AC7641,31AC4597,50AC9538,72Y2013~2,47AC4177,85W1247&amp;amp;COM=noscript" target="_blank"&gt;&lt;span class="pf-widget-map pf-productlink-cart-icon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a class="jive-link-product pf-embedded-product-link" href="https://www.element14.com/community/view-product.jspa?fsku=2842230,2816276,2845498,2507564~2,2816371&amp;amp;nsku=49AC7641,31AC4597,50AC9538,72Y2013~2,47AC4177,85W1247&amp;amp;COM=noscript" target="_blank"&gt;Buy Kit&lt;/a&gt;&lt;/span&gt;&lt;span class="e14-init-hidden" id="addProduct-H1U9kX0o-unlinked"&gt;Buy Kit&lt;/span&gt;&lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;p style="margin:0;"&gt;&lt;strong&gt;&lt;span&gt;Raspberry Pi 3 Model B+, BCM2837B0 SoC, IoT, PoE, NOOBS Included &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;RASPBERRY-PI&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span&gt;&lt;span class="e14-init-shown e14-product-link-buynow" id="addProduct-yrJOv5sW-linked" style="white-space:nowrap;"&gt;&lt;a class="jive-link-product-addtolist" href="https://www.element14.com/community/view-product.jspa?fsku=2842230&amp;amp;nsku=49AC7641&amp;amp;COM=noscript" target="_blank"&gt;&lt;span class="pf-widget-map pf-productlink-cart-icon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a class="jive-link-product pf-embedded-product-link" href="https://www.element14.com/community/view-product.jspa?fsku=2842230&amp;amp;nsku=49AC7641&amp;amp;COM=noscript" target="_blank"&gt;Buy Now&lt;/a&gt;&lt;/span&gt;&lt;span class="e14-init-hidden" id="addProduct-yrJOv5sW-unlinked"&gt;Buy Now&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;p style="margin:0;"&gt;&lt;strong&gt;&lt;span&gt;Raspberry Pi DC Stepper Motor Hat Develo &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;ADAFRUIT&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span&gt;&lt;span class="e14-init-shown e14-product-link-buynow" id="addProduct-KJoe9A3I-linked" style="white-space:nowrap;"&gt;&lt;a class="jive-link-product-addtolist" href="https://www.element14.com/community/view-product.jspa?fsku=2816276&amp;amp;nsku=31AC4597&amp;amp;COM=noscript" target="_blank"&gt;&lt;span class="pf-widget-map pf-productlink-cart-icon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a class="jive-link-product pf-embedded-product-link" href="https://www.element14.com/community/view-product.jspa?fsku=2816276&amp;amp;nsku=31AC4597&amp;amp;COM=noscript" target="_blank"&gt;Buy Now&lt;/a&gt;&lt;/span&gt;&lt;span class="e14-init-hidden" id="addProduct-KJoe9A3I-unlinked"&gt;Buy Now&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;3D Printer Filament, 1.75 mm, PLA, Red, 1 kg&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;MULTICOMP&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span&gt;&lt;span class="e14-init-shown e14-product-link-buynow" id="addProduct-g0Lp8SaG-linked" style="white-space:nowrap;"&gt;&lt;a class="jive-link-product-addtolist" href="https://www.element14.com/community/view-product.jspa?fsku=2845498&amp;amp;nsku=50AC9538&amp;amp;COM=noscript" target="_blank"&gt;&lt;span class="pf-widget-map pf-productlink-cart-icon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a class="jive-link-product pf-embedded-product-link" href="https://www.element14.com/community/view-product.jspa?fsku=2845498&amp;amp;nsku=50AC9538&amp;amp;COM=noscript" target="_blank"&gt;Buy Now&lt;/a&gt;&lt;/span&gt;&lt;span class="e14-init-hidden" id="addProduct-g0Lp8SaG-unlinked"&gt;Buy Now&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;&lt;span&gt;Stepper Motor, High Torque, DC, 0.5 N-m, 1.8 A, Two Phase, 1.75 ohm, 3.3 mH&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;NANOTEC&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span&gt;&lt;span class="e14-init-shown e14-product-link-buynow" id="addProduct-1ILmb2oy-linked" style="white-space:nowrap;"&gt;&lt;a class="jive-link-product-addtolist" href="https://www.element14.com/community/view-product.jspa?fsku=2507564~2&amp;amp;nsku=72Y2013~2&amp;amp;COM=noscript" target="_blank"&gt;&lt;span class="pf-widget-map pf-productlink-cart-icon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a class="jive-link-product pf-embedded-product-link" href="https://www.element14.com/community/view-product.jspa?fsku=2507564~2&amp;amp;nsku=72Y2013~2&amp;amp;COM=noscript" target="_blank"&gt;Buy Now&lt;/a&gt;&lt;/span&gt;&lt;span class="e14-init-hidden" id="addProduct-1ILmb2oy-unlinked"&gt;Buy Now&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;&lt;span&gt;CONTINUOUS ROTATION SERVO&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;strong&gt;ADAFRUIT&lt;/strong&gt;&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;1&lt;/td&gt;&lt;td style="border:1px solid black;border:1px solid #000000;padding:2px;"&gt;&lt;span&gt;&lt;span class="e14-init-shown e14-product-link-buynow" id="addProduct-xUytrzbi-linked" style="white-space:nowrap;"&gt;&lt;a class="jive-link-product-addtolist" href="https://www.element14.com/community/view-product.jspa?fsku=2816371&amp;amp;nsku=85W1247&amp;amp;COM=noscript" target="_blank"&gt;&lt;span class="pf-widget-map pf-productlink-cart-icon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a class="jive-link-product pf-embedded-product-link" href="https://www.element14.com/community/view-product.jspa?fsku=2816371&amp;amp;nsku=85W1247&amp;amp;COM=noscript" target="_blank"&gt;Buy Now&lt;/a&gt;&lt;/span&gt;&lt;span class="e14-init-hidden" id="addProduct-xUytrzbi-unlinked"&gt;Buy Now&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;strong&gt;Arduino Flip Code:&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;/* ================================================================================


  GY-521 IMU test code for flipping the etch a sketch - daftmike 2018


  ================================================================================ */





#include &amp;lt;Wire.h&amp;gt;


#include &amp;lt;Servo.h&amp;gt;





// Servo is attached to pin 5


Servo servo;


const int servoPin = 5;





// Variables used for the IMU readings


long accelX, accelY, accelZ;


float gForceX, gForceY, gForceZ;


long gyroXCali = 0, gyroYCali = 0, gyroZCali = 0;


long gyroXPresent = 0, gyroYPresent = 0, gyroZPresent = 0;


long gyroXPast = 0, gyroYPast = 0, gyroZPast = 0;


float rotX, rotY, rotZ;


float angleX = 0, angleY = 0, angleZ = 0;


long timePast = 0;


long timePresent = 0;





// Variables used to keep track of the &amp;#39;flip&amp;#39;


bool flipStarted = 0;


bool flipFinished = 0;


int flips = 0;


int servoDir = 90;





// String to hold the serial data from the Pi


String piMsg;





// Speed, angle and number of &amp;#39;flips&amp;#39;


const int forwardSpeed = 60;


const int backwardSpeed = 180;


const int numFlips = 5;


const int lowAngle = -140;


const int midAngle = -120;








/*================================================================================*/





void setup() {


  Serial.begin(9600);  // start the serial port


  Wire.begin();  // start i2c


  setUpMPU();  // start IMU coms


  calibrateGyroValues();  


  timePresent = millis();  // time reference for IMU readings


}





/*================================================================================*/





void loop() {


  readAndProcessAccelData();


  readAndProcessGyroData();


  readPi();


}





/*================================================================================*/





void servoFlip() {  


  if (servoDir == 90) {


  servo.attach(servoPin);


  servoDir = forwardSpeed;


  servo.write(servoDir);


  Serial.println(&amp;quot;flip started, servo moving forward...&amp;quot;);


  flipStarted = 1;


  }





  if (flipStarted == 1) {





   if (servoDir == forwardSpeed &amp;amp;&amp;amp; angleX &amp;lt; lowAngle &amp;amp;&amp;amp; flips &amp;lt; numFlips) {


  servoDir = backwardSpeed;


  servo.write(servoDir);


  Serial.println(&amp;quot;servo backward...&amp;quot;);


  flips++;


  Serial.print(&amp;quot;flip number: &amp;quot;);


  Serial.println(flips);


  }


   if (servoDir == backwardSpeed &amp;amp;&amp;amp; angleX &amp;gt; midAngle &amp;amp;&amp;amp; flips &amp;lt; numFlips) {


  servoDir = forwardSpeed;


  servo.write(servoDir);


  Serial.println(&amp;quot;servo forward...&amp;quot;);


  flips++;


  Serial.print(&amp;quot;flip number: &amp;quot;);


  Serial.println(flips);


  }


   if (servoDir == backwardSpeed &amp;amp;&amp;amp; -2 &amp;lt; angleX) {


  Serial.println(&amp;quot;turning servo OFF...&amp;quot;);


  servo.detach();


  servoDir = 90;


  flips = 0;


  flipStarted = 0;


   delay(2000);


   setUpMPU();


   calibrateGyroValues();


  }


  }


}





void readPi() {  // read data from the serial port into a string to check for messages





  if (Serial.available()) {


  piMsg = Serial.readString();





   if (piMsg == &amp;quot;flip&amp;quot;) {


   servoFlip();


  }


   else if (piMsg == &amp;quot;cali&amp;quot;) {


  Serial.println(&amp;quot;calibrating gyro values...&amp;quot;);


   setUpMPU();


   calibrateGyroValues();


  }


  }


}








void setUpMPU() {


  // power management


  Wire.beginTransmission(0b1101000);  // Start the communication by using address of MPU


  Wire.write(0x6B);  // Access the power management register


  Wire.write(0b00000000);  // Set sleep = 0


  Wire.endTransmission();  // End the communication





  // configure gyro


  Wire.beginTransmission(0b1101000);


  Wire.write(0x1B);  // Access the gyro configuration register


  Wire.write(0b00000000);


  Wire.endTransmission();





  // configure accelerometer


  Wire.beginTransmission(0b1101000);


  Wire.write(0x1C);  // Access the accelerometer configuration register


  Wire.write(0b00000000);


  Wire.endTransmission();


}





void calibrateGyroValues() {


  for (int i = 0; i &amp;lt; 5000; i++) {


   getGyroValues();


  gyroXCali = gyroXCali + gyroXPresent;


  gyroYCali = gyroYCali + gyroYPresent;


  gyroZCali = gyroZCali + gyroZPresent;


  }


  gyroXCali = gyroXCali / 5000;


  gyroYCali = gyroYCali / 5000;


  gyroZCali = gyroZCali / 5000;


}





void readAndProcessAccelData() {


  Wire.beginTransmission(0b1101000);


  Wire.write(0x3B);


  Wire.endTransmission();


  Wire.requestFrom(0b1101000, 6);


  while (Wire.available() &amp;lt; 6);


  accelX = Wire.read() &amp;lt;&amp;lt; 8 | Wire.read();


  accelY = Wire.read() &amp;lt;&amp;lt; 8 | Wire.read();


  accelZ = Wire.read() &amp;lt;&amp;lt; 8 | Wire.read();


  processAccelData();


}





void processAccelData() {


  gForceX = accelX / 16384.0;


  gForceY = accelY / 16384.0;


  gForceZ = accelZ / 16384.0;


}





void readAndProcessGyroData() {


  gyroXPast = gyroXPresent;  // Assign Present gyro reaging to past gyro reading


  gyroYPast = gyroYPresent;  // Assign Present gyro reaging to past gyro reading


  gyroZPast = gyroZPresent;  // Assign Present gyro reaging to past gyro reading


  timePast = timePresent;  // Assign Present time to past time


  timePresent = millis();  // get the current time in milli seconds, it is the present time





  getGyroValues();  // get gyro readings


  getAngularVelocity();  // get angular velocity


  calculateAngle();  // calculate the angle


}





void getGyroValues() {


  Wire.beginTransmission(0b1101000);  // Start the communication by using address of MPU


  Wire.write(0x43);  // Access the starting register of gyro readings


  Wire.endTransmission();


  Wire.requestFrom(0b1101000, 6);  // Request for 6 bytes from gyro registers (43 - 48)


  while (Wire.available() &amp;lt; 6);  // Wait untill all 6 bytes are available


  gyroXPresent = Wire.read() &amp;lt;&amp;lt; 8 | Wire.read();  // Store first two bytes into gyroXPresent


  gyroYPresent = Wire.read() &amp;lt;&amp;lt; 8 | Wire.read();  // Store next two bytes into gyroYPresent


  gyroZPresent = Wire.read() &amp;lt;&amp;lt; 8 | Wire.read();  // Store last two bytes into gyroZPresent


}





void getAngularVelocity() {


  rotX = gyroXPresent / 131.0;


  rotY = gyroYPresent / 131.0;


  rotZ = gyroZPresent / 131.0;


}





void calculateAngle() {


  // same equation can be written as


  // angleZ = angleZ + ((timePresentZ - timePastZ)*(gyroZPresent + gyroZPast - 2*gyroZCalli)) / (2*1000*131);


  // 1/(1000*2*131) = 0.00000382


  // 1000 --&amp;gt; convert milli seconds into seconds


  // 2 --&amp;gt; comes when calculation area of trapezium


  // substacted the callibated result two times because there are two gyro readings


  angleX = angleX + ((timePresent - timePast) * (gyroXPresent + gyroXPast - 2 * gyroXCali)) * 0.00000382;


  angleY = angleY + ((timePresent - timePast) * (gyroYPresent + gyroYPast - 2 * gyroYCali)) * 0.00000382;


  angleZ = angleZ + ((timePresent - timePast) * (gyroZPresent + gyroZPast - 2 * gyroZCali)) * 0.00000382;


}





void printData() {


  Serial.print(&amp;quot;X : &amp;quot;);


  Serial.print(angleX);


  Serial.print(&amp;quot;&amp;#176; | Y : &amp;quot;);


  Serial.print(angleY);


  Serial.print(&amp;quot;&amp;#176; | Z : &amp;quot;);


  Serial.print(angleZ); Serial.println(&amp;quot;&amp;#176;&amp;quot;);





}&lt;/pre&gt;&lt;/p&gt;&lt;div style="display:none;"&gt;&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;span style="color:#3d3d3d;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, &amp;#39;Lucida Grande&amp;#39;, sans-serif;font-size:14px;"&gt;&lt;strong&gt;Supporting Files:&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;span class="e14-button-large e14-button-primary"&gt;&lt;a class="jive-link-external-small" href="https://github.com/imdaftmike/ROB_Reborn" rel="nofollow ugc noopener" target="_blank" title="Click Here"&gt;Click Here&lt;/a&gt;&lt;/span&gt; for access to all the supporting files you will need to replicate this build!&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;div class="migration-injected-attachments"&gt;&lt;div style="font-weight:bold;margin:15px 0 5px 0;"&gt;Attachments:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;table style="border:0;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;span class="_se_attachment" id="attid_https://www.element14.com/community/api/core/v3/attachments/272306"&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-03-81/Auto_2D00_Etch_2D00_A_2D00_Sketch_2D00_master.zip"&gt;community.element14.com/.../Auto_2D00_Etch_2D00_A_2D00_Sketch_2D00_master.zip&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: episode 372: raspberry pi auto etch a sketch™, raspberri pi, friday_release, e14presents_daftmike&lt;/div&gt;
</description></item></channel></rss>