{"id":17267,"date":"2022-01-10T10:31:35","date_gmt":"2022-01-10T13:31:35","guid":{"rendered":"https:\/\/arduxop.com.br\/loja\/?p=17267"},"modified":"2022-01-10T10:31:35","modified_gmt":"2022-01-10T13:31:35","slug":"arduino-self-balancing-robot","status":"publish","type":"post","link":"https:\/\/arduxop.com.br\/loja\/arduino-self-balancing-robot\/","title":{"rendered":"Arduino Self Balancing Robot"},"content":{"rendered":"<p><a class=\"screen-reader-text skip-link\" title=\"Skip to content\" href=\"https:\/\/circuitdiagrams.in\/self-balancing-robot-using-arduino\/#content\">Skip to content<\/a><\/p>\n<header id=\"masthead\" class=\"site-header has-inline-mobile-toggle\" aria-label=\"Site\">\n<div class=\"inside-header grid-container\">\n<div class=\"site-branding\">\n<p class=\"main-title\"><a href=\"https:\/\/circuitdiagrams.in\/\" rel=\"home\"> Electro Gadget <\/a><\/p>\n<\/div>\n<nav id=\"site-navigation\" class=\"main-navigation has-menu-bar-items sub-menu-right\" aria-label=\"Primary\">\n<div class=\"inside-navigation grid-container\">\n<form class=\"search-form navigation-search\" action=\"https:\/\/circuitdiagrams.in\/\" method=\"get\"><input class=\"search-field\" title=\"Search\" name=\"s\" type=\"search\" value=\"\" \/><\/form>\n<div id=\"primary-menu\" class=\"main-nav\">\n<ul id=\"menu-primary-marketer\" class=\" menu sf-menu\">\n<li id=\"menu-item-143\" class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-143\"><a href=\"https:\/\/circuitdiagrams.in\/self-balancing-robot-using-arduino\/#\">Project<\/a><\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/nav>\n<\/div>\n<\/header>\n<div class=\"page-hero\">\n<div class=\"inside-page-hero grid-container grid-parent\">\n<h1>Arduino Self Balancing Robot Using MPU6050 Accelerometer<\/h1>\n<\/div>\n<\/div>\n<div id=\"page\" class=\"site grid-container container hfeed\">\n<div id=\"content\" class=\"site-content\">\n<div id=\"primary\" class=\"content-area\"><main id=\"main\" class=\"site-main\"><\/p>\n<article id=\"post-650\" class=\"post-650 post type-post status-publish format-standard has-post-thumbnail category-arduino category-robotics no-featured-image-padding\">\n<div class=\"inside-article\">\n<header class=\"entry-header\" aria-label=\"Content\">\n<div class=\"entry-meta\"><\/div>\n<\/header>\n<div class=\"entry-content\">\n<p>In this <a href=\"https:\/\/circuitdiagrams.in\/robotics-projects\/\"><strong>robotics project<\/strong><\/a>, we are going to make a self balancing robot using Arduino. In this, we can learn the balancing concept and how to control the motors. Its working is too simple.<\/p>\n<div class=\"code-block code-block-3\"><\/div>\n<p>Once I started to build this project, I realized that it is quite a bit challenging to build. There are so many things to consider for building this project like choosing motors, wheels, chassis, battery position and gyroscope sensor. After researching all criteria I chose some easy parts for building this project easily.<\/p>\n<p>Here we use the MPU6050 accelerometer which interfaces with Arduino and sends some analog signals to the Arduino on the x-axis, y-axis, and z-axis.<\/p>\n<\/div>\n<\/div>\n<\/article>\n<p><\/main><\/div>\n<\/div>\n<\/div>\n<h2><span id=\"What_is_Self_Balancing_Robot\" class=\"ez-toc-section\"><\/span>What is Self Balancing Robot?<\/h2>\n<p>Self Balancing Robot is a two-wheeler automated robot that can balance itself from falling to the ground. This is similar to other typical two-wheeled self balancing robots, such as the Segway. Its function is to maintain balance using the motor\u2019s axis movement of the wheels and body.<\/p>\n<h2><span id=\"Project\" class=\"ez-toc-section\"><\/span>Project<\/h2>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img fetchpriority=\"high\" decoding=\"async\" class=\"wp-image-3210 litespeed-loaded\" src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/07\/Self-Balancing-Robot-Using-Arduino-e1624261555302.jpeg\" alt=\"Arduino Self Balancing Robot Using MPU6050\" width=\"640\" height=\"331\" data-lazyloaded=\"1\" data-attachment-id=\"3210\" data-permalink=\"https:\/\/circuitdiagrams.in\/self-balancing-robot-using-arduino\/self-balancing-robot-using-arduino-2\/#main\" data-orig-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/07\/Self-Balancing-Robot-Using-Arduino-e1624261555302.jpeg\" data-orig-size=\"640,331\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1623845647&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"Self Balancing Robot Using Arduino\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/07\/Self-Balancing-Robot-Using-Arduino-300x155.jpeg\" data-large-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/07\/Self-Balancing-Robot-Using-Arduino-e1624261555302.jpeg\" data-src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/07\/Self-Balancing-Robot-Using-Arduino-e1624261555302.jpeg\" data-was-processed=\"true\" \/><\/figure>\n<\/div>\n<h2 id=\"0-circuit-diagram\"><span id=\"Circuit_Diagram\" class=\"ez-toc-section\"><\/span>Circuit Diagram<\/h2>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" class=\"wp-image-670 litespeed-loaded\" src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/07\/self-balancing-robot-1024x576.jpg\" sizes=\"(max-width: 512px) 100vw, 512px\" srcset=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/07\/self-balancing-robot-1024x576.jpg 1024w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/07\/self-balancing-robot-300x169.jpg 300w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/07\/self-balancing-robot-768x432.jpg 768w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/07\/self-balancing-robot.jpg 1280w\" alt=\"self balancing robot circuit diagram\" width=\"512\" height=\"288\" data-lazyloaded=\"1\" data-attachment-id=\"670\" data-permalink=\"https:\/\/circuitdiagrams.in\/self-balancing-robot-using-arduino\/self-balancing-robot\/#main\" data-orig-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/07\/self-balancing-robot.jpg\" data-orig-size=\"1280,720\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"self-balancing-robot-using arduino-circuit\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/07\/self-balancing-robot-300x169.jpg\" data-large-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/07\/self-balancing-robot-1024x576.jpg\" data-src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/07\/self-balancing-robot-1024x576.jpg\" data-srcset=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/07\/self-balancing-robot-1024x576.jpg 1024w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/07\/self-balancing-robot-300x169.jpg 300w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/07\/self-balancing-robot-768x432.jpg 768w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/07\/self-balancing-robot.jpg 1280w\" data-sizes=\"(max-width: 512px) 100vw, 512px\" data-was-processed=\"true\" \/><\/figure>\n<\/div>\n<h2 id=\"1-components-required\"><span id=\"Components_Required\" class=\"ez-toc-section\"><\/span>Components Required<\/h2>\n<ul>\n<li>Arduino<\/li>\n<li>Geared DC motors (x2)<\/li>\n<li>L298N Motor Driver Module<\/li>\n<li>MPU6050 Accelerometer<\/li>\n<li>Two Wheels (x2)<\/li>\n<li>3.7V Lithium-Ion Battery (x4)<\/li>\n<li>Connecting Wires<\/li>\n<li>Foam Sheet<\/li>\n<\/ul>\n<h2 id=\"2-about-parts\"><span id=\"About_Self_Balancing_Robot_Project_Parts\" class=\"ez-toc-section\"><\/span>About Self Balancing Robot Project Parts<\/h2>\n<h3><span id=\"Arduino\" class=\"ez-toc-section\"><\/span>Arduino<\/h3>\n<p>The microcontroller that I have used here is Arduino Uno because it is simple to use. You can also use an Arduino Nano or Arduino Mini but I would recommend you stick with Arduino Uno since it need not any breadboard for connection setup, so it can easily fit in a small chassis.<\/p>\n<div class=\"code-block code-block-1\"><\/div>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" class=\"wp-image-1073 litespeed-loaded\" src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/09\/arduino-nano-1024x576.jpg\" alt=\"\" width=\"256\" height=\"144\" data-lazyloaded=\"1\" data-attachment-id=\"1073\" data-permalink=\"https:\/\/circuitdiagrams.in\/line-follower-robot\/arduino-nano\/#main\" data-orig-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/09\/arduino-nano-e1620894139891.jpg\" data-orig-size=\"640,360\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"arduino-nano\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/09\/arduino-nano-300x169.jpg\" data-large-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/09\/arduino-nano-1024x576.jpg\" data-src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/09\/arduino-nano-1024x576.jpg\" data-was-processed=\"true\" \/><\/figure>\n<\/div>\n<h3><span id=\"Motors\" class=\"ez-toc-section\"><\/span>Motors<\/h3>\n<p>The best choice of motor that you can use for a self balancing robot, without a doubt will be a stepper motor. But To keep things simple I have used a DC geared motor. Yes, it is not mandatory to have a stepper motor; the bot works fine with these cheap yellow-coloured DC geared motors as well.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1080 litespeed-loaded\" src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/09\/bo-motors-1024x576.jpg\" alt=\"geared motor\" width=\"256\" height=\"144\" data-lazyloaded=\"1\" data-attachment-id=\"1080\" data-permalink=\"https:\/\/circuitdiagrams.in\/line-follower-robot\/bo-motors\/#main\" data-orig-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/09\/bo-motors-e1620891552755.jpg\" data-orig-size=\"640,360\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"geared motors\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/09\/bo-motors-300x169.jpg\" data-large-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/09\/bo-motors-1024x576.jpg\" data-src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/09\/bo-motors-1024x576.jpg\" data-was-processed=\"true\" \/><\/figure>\n<\/div>\n<h3><span id=\"Motor_Driver\" class=\"ez-toc-section\"><\/span>Motor Driver<\/h3>\n<p>If you have selected the DC geared motors then you can either use the L298N driver module or an L293D driver module. Both are similar in work. The Difference is that L298N is more powerful than L293D. But in that case, we can use any of them. I chose the L298N motor driver.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1079 litespeed-loaded\" src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/09\/l298n-motor-driver-1024x576.jpg\" alt=\"l298n motor driver\" width=\"256\" height=\"144\" data-lazyloaded=\"1\" data-attachment-id=\"1079\" data-permalink=\"https:\/\/circuitdiagrams.in\/line-follower-robot\/l298n-motor-driver\/#main\" data-orig-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/09\/l298n-motor-driver-e1620891428227.jpg\" data-orig-size=\"640,360\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"l298n motor driver\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/09\/l298n-motor-driver-300x169.jpg\" data-large-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/09\/l298n-motor-driver-1024x576.jpg\" data-src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/09\/l298n-motor-driver-1024x576.jpg\" data-was-processed=\"true\" \/><\/figure>\n<\/div>\n<h3 id=\"3-wheels-\"><span id=\"Wheels\" class=\"ez-toc-section\"><\/span>Wheels<\/h3>\n<p>I had a tough time figuring out that the problem was with my wheels. So make sure your wheels have a good grip over the floor you are using. Watch closely, your grip should never allow your wheels to skit on the floor.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1081 litespeed-loaded\" src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/09\/bo-motor-wheels-1024x576.jpg\" alt=\"robot wheel\" width=\"256\" height=\"144\" data-lazyloaded=\"1\" data-attachment-id=\"1081\" data-permalink=\"https:\/\/circuitdiagrams.in\/line-follower-robot\/bo-motor-wheels\/#main\" data-orig-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/09\/bo-motor-wheels-e1620891595974.jpg\" data-orig-size=\"640,360\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"bo-motor-wheels\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/09\/bo-motor-wheels-300x169.jpg\" data-large-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/09\/bo-motor-wheels-1024x576.jpg\" data-src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2020\/09\/bo-motor-wheels-1024x576.jpg\" data-was-processed=\"true\" \/><\/figure>\n<\/div>\n<h3 id=\"4-accelerometer-\"><span id=\"Accelerometer\" class=\"ez-toc-section\"><\/span>Accelerometer<\/h3>\n<p>The best choice of accelerometer and gyroscope sensor for this project is the <strong><a href=\"https:\/\/circuitdigest.com\/microcontroller-projects\/mpu6050-gyro-sensor-interfacing-with-arduino\" rel=\"nofollow\">MPU6050<\/a><\/strong>.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2750 litespeed-loaded\" src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/05\/MPU6050-Module.jpg\" sizes=\"(max-width: 175px) 100vw, 175px\" srcset=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/05\/MPU6050-Module.jpg 701w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/05\/MPU6050-Module-300x257.jpg 300w\" alt=\"mpu6050 sensor\" width=\"175\" height=\"150\" data-lazyloaded=\"1\" data-attachment-id=\"2750\" data-permalink=\"https:\/\/circuitdiagrams.in\/self-balancing-robot-using-arduino\/mpu6050-module\/#main\" data-orig-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/05\/MPU6050-Module.jpg\" data-orig-size=\"701,600\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"MPU6050 Gyro Sensor Module\" data-image-description=\"&lt;p&gt;MPU6050 Gyro Sensor Module&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;MPU6050 Gyro Sensor Module&lt;\/p&gt;\n\" data-medium-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/05\/MPU6050-Module-300x257.jpg\" data-large-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/05\/MPU6050-Module.jpg\" data-src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/05\/MPU6050-Module.jpg\" data-srcset=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/05\/MPU6050-Module.jpg 701w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/05\/MPU6050-Module-300x257.jpg 300w\" data-sizes=\"(max-width: 175px) 100vw, 175px\" data-was-processed=\"true\" \/><\/figure>\n<\/div>\n<h2><span id=\"Self_Balancing_Robot_Parts_Assembly\" class=\"ez-toc-section\"><\/span>Self Balancing Robot Parts Assembly<\/h2>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3205 litespeed-loaded\" src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-1.jpeg\" sizes=\"(max-width: 475px) 100vw, 475px\" srcset=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-1.jpeg 949w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-1-300x170.jpeg 300w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-1-768x436.jpeg 768w\" alt=\"\" width=\"475\" height=\"270\" data-lazyloaded=\"1\" data-attachment-id=\"3205\" data-permalink=\"https:\/\/circuitdiagrams.in\/self-balancing-robot-using-arduino\/part-1\/#main\" data-orig-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-1.jpeg\" data-orig-size=\"949,539\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1623845614&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"part-1\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-1-300x170.jpeg\" data-large-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-1.jpeg\" data-src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-1.jpeg\" data-srcset=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-1.jpeg 949w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-1-300x170.jpeg 300w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-1-768x436.jpeg 768w\" data-sizes=\"(max-width: 475px) 100vw, 475px\" data-was-processed=\"true\" \/><\/figure>\n<\/div>\n<p class=\"has-text-align-center\">First, we need a foam sheet for making the chassis of the robot.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3206 litespeed-loaded\" src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-2.jpeg\" sizes=\"(max-width: 473px) 100vw, 473px\" srcset=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-2.jpeg 945w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-2-300x171.jpeg 300w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-2-768x438.jpeg 768w\" alt=\"self balancing robot motor attachment\" width=\"473\" height=\"270\" data-lazyloaded=\"1\" data-attachment-id=\"3206\" data-permalink=\"https:\/\/circuitdiagrams.in\/self-balancing-robot-using-arduino\/part-2\/#main\" data-orig-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-2.jpeg\" data-orig-size=\"945,539\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1623845621&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"part-2\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-2-300x171.jpeg\" data-large-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-2.jpeg\" data-src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-2.jpeg\" data-srcset=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-2.jpeg 945w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-2-300x171.jpeg 300w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-2-768x438.jpeg 768w\" data-sizes=\"(max-width: 473px) 100vw, 473px\" data-was-processed=\"true\" \/><\/figure>\n<\/div>\n<p class=\"has-text-align-center\">Next, we need to attach both the DC geared motors with the foam sheet.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3207 litespeed-loaded\" src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-3.jpeg\" sizes=\"(max-width: 476px) 100vw, 476px\" srcset=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-3.jpeg 951w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-3-300x170.jpeg 300w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-3-768x436.jpeg 768w\" alt=\"self balancing robot l298n motor driver\" width=\"476\" height=\"270\" data-lazyloaded=\"1\" data-attachment-id=\"3207\" data-permalink=\"https:\/\/circuitdiagrams.in\/self-balancing-robot-using-arduino\/part-3\/#main\" data-orig-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-3.jpeg\" data-orig-size=\"951,540\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1623845636&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"part-3\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-3-300x170.jpeg\" data-large-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-3.jpeg\" data-src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-3.jpeg\" data-srcset=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-3.jpeg 951w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-3-300x170.jpeg 300w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-3-768x436.jpeg 768w\" data-sizes=\"(max-width: 476px) 100vw, 476px\" data-was-processed=\"true\" \/><\/figure>\n<\/div>\n<p class=\"has-text-align-center\">Connect all the motors with the L298N motor driver and set it in the chassis.<\/p>\n<div class=\"code-block code-block-1\"><\/div>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3208 litespeed-loaded\" src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-4.jpeg\" sizes=\"(max-width: 474px) 100vw, 474px\" srcset=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-4.jpeg 948w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-4-300x171.jpeg 300w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-4-768x437.jpeg 768w\" alt=\"self balancing robot arduino uno\" width=\"474\" height=\"270\" data-lazyloaded=\"1\" data-attachment-id=\"3208\" data-permalink=\"https:\/\/circuitdiagrams.in\/self-balancing-robot-using-arduino\/part-4\/#main\" data-orig-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-4.jpeg\" data-orig-size=\"948,540\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1623845642&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"part-4\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-4-300x171.jpeg\" data-large-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-4.jpeg\" data-src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-4.jpeg\" data-srcset=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-4.jpeg 948w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-4-300x171.jpeg 300w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-4-768x437.jpeg 768w\" data-sizes=\"(max-width: 474px) 100vw, 474px\" data-was-processed=\"true\" \/><\/figure>\n<\/div>\n<p class=\"has-text-align-center\">Next, connect the Arduino board to the chassis.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3209 litespeed-loaded\" src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-5.jpeg\" sizes=\"(max-width: 473px) 100vw, 473px\" srcset=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-5.jpeg 946w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-5-300x171.jpeg 300w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-5-768x438.jpeg 768w\" alt=\"self balancing robot mpu6050\" width=\"473\" height=\"270\" data-lazyloaded=\"1\" data-attachment-id=\"3209\" data-permalink=\"https:\/\/circuitdiagrams.in\/self-balancing-robot-using-arduino\/part-5\/#main\" data-orig-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-5.jpeg\" data-orig-size=\"946,539\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1623845630&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"part-5\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-5-300x171.jpeg\" data-large-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-5.jpeg\" data-src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-5.jpeg\" data-srcset=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-5.jpeg 946w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-5-300x171.jpeg 300w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/part-5-768x438.jpeg 768w\" data-sizes=\"(max-width: 473px) 100vw, 473px\" data-was-processed=\"true\" \/><\/figure>\n<\/div>\n<p class=\"has-text-align-center\">Finally, attach the MPU6050 accelerometer to the top of the chassis. And also attach both wheels to the chassis.<\/p>\n<h2 id=\"7-circuit-connection\"><span id=\"Circuit_Connection\" class=\"ez-toc-section\"><\/span>Circuit Connection<\/h2>\n<p>Making the connections for this Self Balancing Robot using Arduino is pretty simple. We just have to interface the MPU6050 accelerometer with Arduino and connect the motors through the Motor Driver Module. The whole set-up is powered by the 9V battery.<\/p>\n<p>The Arduino and the L298N Motor Driver Module are directly powered through the Vin pin and the 12V terminal respectively. The onboard regulator on the Arduino board will convert the input 9V to 5V and the ATmega IC and MPU6050 will be powered by it. The DC motors can run from voltage 5V to 12V. But we will be connecting the 9V positive wire from the battery to the 12V input terminal of the Motor Driver Module. This will make the motors operate with 9V.<\/p>\n<p>The following connection chart of the self balancing robot will list how the MPU6050 and L298N Motor Driver Module is connected with Arduino.<\/p>\n<ul>\n<li>MPU6050 Vcc pin to +5V pin of Arduino Nano<\/li>\n<li>GND pin of Arduino Nano to MPU6050 ground pin<\/li>\n<li>Arduino Nano A5 pin to MPU6050 SCL pin<\/li>\n<li>MPU6050 SDA pin to A4 pin of Arduino Nano<\/li>\n<li>MPU6050 INT pin to D2 pin of Arduino Nano<\/li>\n<li>L298N IN1 pin to D6 pin of Arduino Nano<\/li>\n<li>IN2 pin to D9 pin of Arduino Nano<\/li>\n<li>IN3 pin to D10 pin of Arduino Nano<\/li>\n<li>IN4 pin to D11 pin of Arduino Nano<\/li>\n<\/ul>\n<h2><span id=\"Circuit_Design_Using_PCB_Software\" class=\"ez-toc-section\"><\/span>Circuit Design Using PCB Software<\/h2>\n<p>To make the circuit compact and give a professional look, I have designed the PCB after testing all the features of the self balancing robot on the breadboard. For that PCB purpose, I use Arduino Nano for a compact build. I will explain in detail how we can design and order PCB for our project.<\/p>\n<div class=\"code-block code-block-1\"><\/div>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3218 litespeed-loaded\" src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/Self-Balancing-Robot-PCB.png\" sizes=\"(max-width: 432px) 100vw, 432px\" srcset=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/Self-Balancing-Robot-PCB.png 864w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/Self-Balancing-Robot-PCB-300x204.png 300w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/Self-Balancing-Robot-PCB-768x522.png 768w\" alt=\"self balancing robot pcb\" width=\"432\" height=\"294\" data-lazyloaded=\"1\" data-attachment-id=\"3218\" data-permalink=\"https:\/\/circuitdiagrams.in\/self-balancing-robot-using-arduino\/self-balancing-robot-pcb\/#main\" data-orig-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/Self-Balancing-Robot-PCB.png\" data-orig-size=\"864,587\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Self-Balancing-Robot-PCB\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/Self-Balancing-Robot-PCB-300x204.png\" data-large-file=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/Self-Balancing-Robot-PCB.png\" data-src=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/Self-Balancing-Robot-PCB.png\" data-srcset=\"https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/Self-Balancing-Robot-PCB.png 864w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/Self-Balancing-Robot-PCB-300x204.png 300w, https:\/\/circuitdiagrams.in\/wp-content\/uploads\/2021\/06\/Self-Balancing-Robot-PCB-768x522.png 768w\" data-sizes=\"(max-width: 432px) 100vw, 432px\" data-was-processed=\"true\" \/><\/figure>\n<\/div>\n<p>Check out this link for <strong><a href=\"https:\/\/drive.google.com\/file\/d\/19XQtUv8TJnRsfwipt5o3MbFq9pbduKf4\/view?usp=sharing\">Gerber file Self Balancing Robot Gerber File<\/a><\/strong>.<\/p>\n<p>&nbsp;<\/p>\n<h2 id=\"8-working-of-self-balancing-robot\"><span id=\"Working_Principle_of_Self_Balancing_Robot\" class=\"ez-toc-section\"><\/span>Working Principle of Self Balancing Robot<\/h2>\n<p>In this self balancing robot project, once you are ready with the hardware, you can upload the code to your Arduino board. Make sure the connections are proper since we are using a 9V battery, extreme caution is needed. So double-check for short circuits and ensure that the terminals won\u2019t come into contact even if your robot experiences some small impacts. Power up your module and open your serial monitor, if your Arduino could communicate with MPU6050 successfully and if everything is working as expected you should see the following screen. If the robot is perfectly balanced, the value of output will be 0. The input value is the current value from the MPU6050 sensor.<\/p>\n<div class=\"code-block code-block-1\"><\/div>\n<p>During the initial stages of PID, I recommend leaving your Arduino cable connected to the robot, so that you can easily monitor the values of input and output and also it will be easy to correct and upload your program for Kp, Ki and Kd values.<\/p>\n<p>Hope this helps to build your own self balancing robot.<\/p>\n<h2 id=\"9-arduino-code\"><span id=\"Arduino_Code\" class=\"ez-toc-section\"><\/span>Arduino Code<\/h2>\n<p>For establishing this code of self balancing robot, we need two libraries. The library is developed by <strong>Br3ttb<\/strong> and <strong>Jrowberg<\/strong> respectively. Before proceeding download their libraries from the following link and add them to your Arduino lib directory.<\/p>\n<blockquote class=\"wp-block-quote\"><p><a href=\"https:\/\/github.com\/br3ttb\/Arduino-PID-Library\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><strong>Arduino-PID-Library<\/strong><\/a><\/p>\n<p><a href=\"https:\/\/github.com\/jrowberg\/i2cdevlib\/tree\/master\/Arduino\/MPU6050\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><strong>MPU6050 Library<\/strong><\/a><\/p><\/blockquote>\n<p>Next for the Arduino code for the self balancing robot<\/p>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"urvanov-syntax-highlighter-plain-wrap\"><\/div>\n<div class=\"urvanov-syntax-highlighter-main\"><\/div>\n<\/div>\n<article id=\"post-650\" class=\"post-650 post type-post status-publish format-standard has-post-thumbnail category-arduino category-robotics no-featured-image-padding\">\n<div class=\"inside-article\">\n<div class=\"entry-content\">\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"urvanov-syntax-highlighter-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"urvanov-syntax-highlighter-row\">\n<td class=\"urvanov-syntax-highlighter-code\">\n<div class=\"crayon-pre\">\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-1\" class=\"crayon-line\"><span class=\"crayon-c\">\/\/Electro Gadget &#8211; circuitdiagrams.in<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-p\">#include &#8220;I2Cdev.h&#8221;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-3\" class=\"crayon-line\"><span class=\"crayon-p\">#include &amp;lt;PID_v1.h&amp;gt; \/\/From https:\/\/github.com\/br3ttb\/Arduino-PID-Library\/blob\/master\/PID_v1.h<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-4\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-p\">#include &#8220;MPU6050_6Axis_MotionApps20.h&#8221; \/\/https:\/\/github.com\/jrowberg\/i2cdevlib\/tree\/master\/Arduino\/MPU6050<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-5\" class=\"crayon-line\"><span class=\"crayon-e\">MPU6050 <\/span><span class=\"crayon-v\">mpu<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-6\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-c\">\/\/ MPU control\/status vars<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-7\" class=\"crayon-line\"><span class=\"crayon-t\">bool<\/span> <span class=\"crayon-v\">dmpReady<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-t\">false<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ set true if DMP init was successful<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-8\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-e\">uint8_t <\/span><span class=\"crayon-v\">mpuIntStatus<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-c\">\/\/ holds actual interrupt status byte from MPU<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-9\" class=\"crayon-line\"><span class=\"crayon-e\">uint8_t <\/span><span class=\"crayon-v\">devStatus<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ return status after each device operation (0 = success, !0 = error)<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-10\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-e\">uint16_t <\/span><span class=\"crayon-v\">packetSize<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ expected DMP packet size (default is 42 bytes)<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-11\" class=\"crayon-line\"><span class=\"crayon-e\">uint16_t <\/span><span class=\"crayon-v\">fifoCount<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-c\">\/\/ count of all bytes currently in FIFO<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-12\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-e\">uint8_t <\/span><span class=\"crayon-v\">fifoBuffer<\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-p\">#91;64]; \/\/ FIFO storage buffer<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-13\" class=\"crayon-line\"><span class=\"crayon-c\">\/\/ orientation\/motion vars<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-14\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-i\">Quaternion<\/span> <span class=\"crayon-v\">q<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-c\">\/\/ &amp;#91;w, x, y, z]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 quaternion container<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-15\" class=\"crayon-line\"><span class=\"crayon-e\">VectorFloat <\/span><span class=\"crayon-v\">gravity<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ &amp;#91;x, y, z]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0gravity vector<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-16\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-t\">float<\/span> <span class=\"crayon-v\">ypr<\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-p\">#91;3];\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ &amp;#91;yaw, pitch, roll]\u00a0\u00a0 yaw\/pitch\/roll container and gravity vector<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-17\" class=\"crayon-line\"><span class=\"crayon-c\">\/*****Tune these 4 values for your ROBOT*****\/<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-18\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-t\">double<\/span> <span class=\"crayon-v\">setpoint<\/span><span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">176<\/span><span class=\"crayon-sy\">;<\/span> <span class=\"crayon-c\">\/\/set the value when the robot is perpendicular to ground using serial monitor. <\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-19\" class=\"crayon-line\"><span class=\"crayon-c\">\/\/Read the project documentation on circuitdiagrams.in to learn how to set these values<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-20\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-t\">double<\/span> <span class=\"crayon-v\">Kp<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">21<\/span><span class=\"crayon-sy\">;<\/span> <span class=\"crayon-c\">\/\/Set this first<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-21\" class=\"crayon-line\"><span class=\"crayon-t\">double<\/span> <span class=\"crayon-v\">Kd<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">0.8<\/span><span class=\"crayon-sy\">;<\/span> <span class=\"crayon-c\">\/\/Set this secound<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-22\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-t\">double<\/span> <span class=\"crayon-v\">Ki<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-cn\">140<\/span><span class=\"crayon-sy\">;<\/span> <span class=\"crayon-c\">\/\/Set this third <\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-23\" class=\"crayon-line\"><span class=\"crayon-c\">\/******End of values setting*********\/<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-24\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-t\">double<\/span> <span class=\"crayon-v\">input<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">output<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-25\" class=\"crayon-line\"><span class=\"crayon-e\">PID <\/span><span class=\"crayon-e\">pid<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">amp<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-v\">input<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">amp<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-v\">output<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">amp<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-v\">setpoint<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">Kp<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">Ki<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">Kd<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">DIRECT<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-26\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-e\">volatile <\/span><span class=\"crayon-t\">bool<\/span> <span class=\"crayon-v\">mpuInterrupt<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-t\">false<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-c\">\/\/ indicates whether MPU interrupt pin has gone high<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-27\" class=\"crayon-line\"><span class=\"crayon-t\">void<\/span> <span class=\"crayon-e\">dmpDataReady<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-28\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-sy\">{<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-29\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">mpuInterrupt<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-t\">true<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-30\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-sy\">}<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-31\" class=\"crayon-line\"><span class=\"crayon-t\">void<\/span> <span class=\"crayon-e\">setup<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span> <span class=\"crayon-sy\">{<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-32\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-v\">Serial<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">begin<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">115200<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-33\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ initialize device<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-34\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">Serial<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">println<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">F<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;Initializing I2C devices&#8230;&#8221;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-35\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">mpu<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">initialize<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-36\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-c\">\/\/ verify connection<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-37\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">Serial<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">println<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">F<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;Testing device connections&#8230;&#8221;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-38\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">Serial<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">println<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">mpu<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">testConnection<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span> <span class=\"crayon-sy\">?<\/span> <span class=\"crayon-e\">F<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;MPU6050 connection successful&#8221;<\/span><span class=\"crayon-sy\">)<\/span> <span class=\"crayon-o\">:<\/span> <span class=\"crayon-e\">F<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;MPU6050 connection failed&#8221;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-39\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ load and configure the DMP<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-40\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">devStatus<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-v\">mpu<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">dmpInitialize<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-41\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-42\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ supply your own gyro offsets here, scaled for min sensitivity<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-43\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">mpu<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">setXGyroOffset<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">220<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-44\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">mpu<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">setYGyroOffset<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">76<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-45\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">mpu<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">setZGyroOffset<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-cn\">85<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-46\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">mpu<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">setZAccelOffset<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">1688<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-47\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ make sure it worked (returns 0 if so)<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-48\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-st\">if<\/span> <span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">devStatus<\/span> <span class=\"crayon-o\">==<\/span> <span class=\"crayon-cn\">0<\/span><span class=\"crayon-sy\">)<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-49\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-sy\">{<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-50\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ turn on the DMP, now that it&#8217;s ready<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-51\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">Serial<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">println<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">F<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;Enabling DMP&#8230;&#8221;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-52\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">mpu<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">setDMPEnabled<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-t\">true<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-53\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ enable Arduino interrupt detection<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-54\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">Serial<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">println<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">F<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;Enabling interrupt detection (Arduino external interrupt 0)&#8230;&#8221;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-55\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">attachInterrupt<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">dmpDataReady<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">RISING<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-56\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">mpuIntStatus<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-v\">mpu<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">getIntStatus<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-57\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ set our DMP Ready flag so the main loop() function knows it&#8217;s okay to use it<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-58\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">Serial<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">println<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">F<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;DMP ready! Waiting for first interrupt&#8230;&#8221;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-59\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">dmpReady<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-t\">true<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-60\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ get expected DMP packet size for later comparison<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-61\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">packetSize<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-v\">mpu<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">dmpGetFIFOPacketSize<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-62\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-63\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/setup PID<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-64\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">pid<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">SetMode<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">AUTOMATIC<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-65\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">pid<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">SetSampleTime<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">10<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-66\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">pid<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">SetOutputLimits<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-cn\">255<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-cn\">255<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">\u00a0\u00a0<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-67\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-sy\">}<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-68\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-st\">else<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-69\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-sy\">{<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-70\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ ERROR!<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-71\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ 1 = initial memory load failed<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-72\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ 2 = DMP configuration updates failed<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-73\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ (if it&#8217;s going to break, usually the code will be 1)<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-74\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">Serial<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">print<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">F<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;DMP Initialization failed (code &#8220;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-75\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">Serial<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">print<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">devStatus<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-76\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">Serial<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">println<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">F<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;)&#8221;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-77\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-sy\">}<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-78\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-c\">\/\/Initialise the Motor outpu pins<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-79\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">pinMode<\/span> <span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">6<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">OUTPUT<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-80\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">pinMode<\/span> <span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">9<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">OUTPUT<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-81\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">pinMode<\/span> <span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">10<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">OUTPUT<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-82\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">pinMode<\/span> <span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">11<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">OUTPUT<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-83\" class=\"crayon-line\"><span class=\"crayon-c\">\/\/By default turn off both the motors<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-84\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">analogWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">6<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-v\">LOW<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-85\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">analogWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">9<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-v\">LOW<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-86\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">analogWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">10<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-v\">LOW<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-87\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">analogWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">11<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-v\">LOW<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-88\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-sy\">}<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-89\" class=\"crayon-line\"><span class=\"crayon-t\">void<\/span> <span class=\"crayon-e\">loop<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span> <span class=\"crayon-sy\">{<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-90\" class=\"crayon-line crayon-striped-line\"><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-91\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ if programming failed, don&#8217;t try to do anything<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-92\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-st\">if<\/span> <span class=\"crayon-sy\">(<\/span><span class=\"crayon-o\">!<\/span><span class=\"crayon-v\">dmpReady<\/span><span class=\"crayon-sy\">)<\/span> <span class=\"crayon-st\">return<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-93\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ wait for MPU interrupt or extra packet(s) available<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-94\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-st\">while<\/span> <span class=\"crayon-sy\">(<\/span><span class=\"crayon-o\">!<\/span><span class=\"crayon-v\">mpuInterrupt<\/span> <span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">amp<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">amp<\/span><span class=\"crayon-sy\">;<\/span> <span class=\"crayon-v\">fifoCount<\/span> <span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">lt<\/span><span class=\"crayon-sy\">;<\/span> <span class=\"crayon-v\">packetSize<\/span><span class=\"crayon-sy\">)<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-95\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-sy\">{<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-96\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/no mpu data &#8211; performing PID calculations and output to motors\u00a0\u00a0\u00a0\u00a0 <\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-97\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">pid<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">Compute<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-98\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-99\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/Print the value of Input and Output on serial monitor to check how it is working.<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-100\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">Serial<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">print<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">input<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span> <span class=\"crayon-v\">Serial<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">print<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8221; =&amp;gt;&#8221;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span> <span class=\"crayon-v\">Serial<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">println<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">output<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-101\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-102\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-st\">if<\/span> <span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">input<\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">gt<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-cn\">150<\/span> <span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">amp<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">amp<\/span><span class=\"crayon-sy\">;<\/span> <span class=\"crayon-v\">input<\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">lt<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-cn\">200<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-c\">\/\/If the Bot is falling <\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-103\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-104\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-st\">if<\/span> <span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">output<\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">gt<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-sy\">)<\/span> <span class=\"crayon-c\">\/\/Falling towards front <\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-105\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">Forward<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span> <span class=\"crayon-c\">\/\/Rotate the wheels forward <\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-106\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-st\">else<\/span> <span class=\"crayon-st\">if<\/span> <span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">output<\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">lt<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-sy\">)<\/span> <span class=\"crayon-c\">\/\/Falling towards back<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-107\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">Reverse<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span> <span class=\"crayon-c\">\/\/Rotate the wheels backward <\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-108\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-sy\">}<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-109\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-st\">else<\/span> <span class=\"crayon-c\">\/\/If Robot not falling<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-110\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">Stop<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span> <span class=\"crayon-c\">\/\/Hold the wheels still<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-111\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-112\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-sy\">}<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-113\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ reset interrupt flag and get INT_STATUS byte<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-114\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">mpuInterrupt<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-t\">false<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-115\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">mpuIntStatus<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-v\">mpu<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">getIntStatus<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-116\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ get current FIFO count<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-117\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">fifoCount<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-v\">mpu<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">getFIFOCount<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-118\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ check for overflow (this should never happen unless our code is too inefficient)<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-119\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-st\">if<\/span> <span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">mpuIntStatus<\/span> <span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">amp<\/span><span class=\"crayon-sy\">;<\/span> <span class=\"crayon-cn\">0x10<\/span><span class=\"crayon-sy\">)<\/span> <span class=\"crayon-o\">||<\/span> <span class=\"crayon-v\">fifoCount<\/span> <span class=\"crayon-o\">==<\/span> <span class=\"crayon-cn\">1024<\/span><span class=\"crayon-sy\">)<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-120\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-sy\">{<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-121\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ reset so we can continue cleanly<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-122\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">mpu<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">resetFIFO<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-123\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">Serial<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">println<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">F<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;FIFO overflow!&#8221;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-124\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ otherwise, check for DMP data ready interrupt (this should happen frequently)<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-125\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-sy\">}<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-126\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-st\">else<\/span> <span class=\"crayon-st\">if<\/span> <span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">mpuIntStatus<\/span> <span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">amp<\/span><span class=\"crayon-sy\">;<\/span> <span class=\"crayon-cn\">0x02<\/span><span class=\"crayon-sy\">)<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-127\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-sy\">{<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-128\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ wait for correct available data length, should be a VERY short wait<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-129\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-st\">while<\/span> <span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">fifoCount<\/span> <span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">lt<\/span><span class=\"crayon-sy\">;<\/span> <span class=\"crayon-v\">packetSize<\/span><span class=\"crayon-sy\">)<\/span> <span class=\"crayon-v\">fifoCount<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-v\">mpu<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">getFIFOCount<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-130\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ read a packet from FIFO<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-131\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">mpu<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">getFIFOBytes<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">fifoBuffer<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">packetSize<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-132\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-133\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ track FIFO count here in case there is &amp;gt; 1 packet available<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-134\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-c\">\/\/ (this lets us immediately read more without waiting for an interrupt)<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-135\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">fifoCount<\/span> <span class=\"crayon-o\">-=<\/span> <span class=\"crayon-v\">packetSize<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-136\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">mpu<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">dmpGetQuaternion<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">amp<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-v\">q<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">fifoBuffer<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span> <span class=\"crayon-c\">\/\/get value for q<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-137\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">mpu<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">dmpGetGravity<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">amp<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-v\">gravity<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">amp<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-v\">q<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span> <span class=\"crayon-c\">\/\/get value for gravity<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-138\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">mpu<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">dmpGetYawPitchRoll<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">ypr<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">amp<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-v\">q<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-v\">amp<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-v\">gravity<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span> <span class=\"crayon-c\">\/\/get value for ypr<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-139\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">input<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-v\">ypr<\/span><span class=\"crayon-o\">&amp;<\/span><span class=\"crayon-p\">#91;1] * 180\/M_PI + 180;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-140\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-sy\">}<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-141\" class=\"crayon-line\"><span class=\"crayon-sy\">}<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-142\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-t\">void<\/span> <span class=\"crayon-e\">Forward<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span> <span class=\"crayon-c\">\/\/Code to rotate the wheel forward <\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-143\" class=\"crayon-line\"><span class=\"crayon-sy\">{<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-144\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">analogWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">6<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-v\">output<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-145\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">analogWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">9<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-146\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">analogWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">10<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-v\">output<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-147\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">analogWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">11<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-148\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">Serial<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">print<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;F&#8221;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span> <span class=\"crayon-c\">\/\/Debugging information <\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-149\" class=\"crayon-line\"><span class=\"crayon-sy\">}<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-150\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-t\">void<\/span> <span class=\"crayon-e\">Reverse<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span> <span class=\"crayon-c\">\/\/Code to rotate the wheel Backward\u00a0\u00a0<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-151\" class=\"crayon-line\"><span class=\"crayon-sy\">{<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-152\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">analogWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">6<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-153\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">analogWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">9<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-e \">output*<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-cn\">1<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-154\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">analogWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">10<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-155\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">analogWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">11<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-e \">output*<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-cn\">1<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-156\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">Serial<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">print<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;R&#8221;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-157\" class=\"crayon-line\"><span class=\"crayon-sy\">}<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-158\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-t\">void<\/span> <span class=\"crayon-e\">Stop<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span> <span class=\"crayon-c\">\/\/Code to stop both the wheels<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-159\" class=\"crayon-line\"><span class=\"crayon-sy\">{<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-160\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">analogWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">6<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-161\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">analogWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">9<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-162\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">analogWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">10<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-163\" class=\"crayon-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">analogWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">11<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-164\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">Serial<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">print<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;S&#8221;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div id=\"urvanov-syntax-highlighter-61dc038bdf922759583122-165\" class=\"crayon-line\"><span class=\"crayon-sy\">}<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<\/article>\n<div class=\"comments-area\">\n<div id=\"comments\">\n<div id=\"respond\" class=\"comment-respond\"><\/div>\n<\/div>\n<\/div>\n<div id=\"page\" class=\"site grid-container container hfeed\">\n<div id=\"content\" class=\"site-content\">\n<div id=\"right-sidebar\" class=\"widget-area sidebar is-right-sidebar\">\n<div class=\"inside-right-sidebar\">\n<aside id=\"custom_html-2\" class=\"widget_text widget inner-padding widget_custom_html\">\n<div class=\"textwidget custom-html-widget\"><\/div>\n<\/aside>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"site-footer footer-bar-active footer-bar-align-center\">\n<footer class=\"site-info\" aria-label=\"Site\">\n<div class=\"inside-site-info grid-container\">\n<div class=\"copyright-bar\"><\/div>\n<\/div>\n<\/footer>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Skip to content Electro Gadget Project Arduino Self Balancing Robot Using MPU6050 Accelerometer In this robotics project, we are going to make a self balancing robot using Arduino. In this, we can learn the balancing concept and how to control the motors. Its working is too simple. Once I started to build this project, I [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":17268,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[569,207],"tags":[],"class_list":["post-17267","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artigos","category-blog","entry","has-media","owp-thumbs-layout-horizontal","owp-btn-normal","owp-tabs-layout-horizontal","has-no-thumbnails","has-product-nav"],"_links":{"self":[{"href":"https:\/\/arduxop.com.br\/loja\/wp-json\/wp\/v2\/posts\/17267","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/arduxop.com.br\/loja\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/arduxop.com.br\/loja\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/arduxop.com.br\/loja\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/arduxop.com.br\/loja\/wp-json\/wp\/v2\/comments?post=17267"}],"version-history":[{"count":0,"href":"https:\/\/arduxop.com.br\/loja\/wp-json\/wp\/v2\/posts\/17267\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/arduxop.com.br\/loja\/wp-json\/wp\/v2\/media\/17268"}],"wp:attachment":[{"href":"https:\/\/arduxop.com.br\/loja\/wp-json\/wp\/v2\/media?parent=17267"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/arduxop.com.br\/loja\/wp-json\/wp\/v2\/categories?post=17267"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/arduxop.com.br\/loja\/wp-json\/wp\/v2\/tags?post=17267"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}