.. note:: Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. **Why Join?** - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - **Special Discounts**: Enjoy exclusive discounts on our newest products. - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! 3.1.6 Motion Control ====================== Introduction ----------------- In this lesson, we will make a simple motion sensing and controlling device. The MPU6050 is used as a sensor and the stepper motor as a controlled device. With the MPU6050 mounted on the glove, you can control the stepper motor by rotating your wrist. Components --------------- .. image:: img/list_Motion_Control.png :align: center Schematic Diagram -------------------------- ============ ======== ======== === T-Board Name physical wiringPi BCM GPIO18 Pin 12 1 18 GPIO23 Pin 16 4 23 GPIO24 Pin 18 5 24 GPIO25 Pin 22 6 25 SDA1 Pin 3 SCL1 Pin 5 ============ ======== ======== === .. image:: img/Schematic_three_one6.png :align: center Experimental Procedures ------------------------------ **Step 1:** Build the circuit. .. image:: img/image251.png :width: 800 :align: center **Step 2**: Go to the folder of the code. .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/c/3.1.6/ **Step 3**: Compile the code. .. raw:: html .. code-block:: gcc 3.1.6_MotionControl.c -lwiringPi -lm **Step 4**: Run the executable file. .. raw:: html .. code-block:: sudo ./a.out As the code runs, if the tilt angle of **mpu6050** on the `Y `__-`axis `__ is larger than **45** ℃, the stepper motor rotates anticlockwise; if less than **-45** ℃, the stepper motor rotates clockwise. .. note:: If it does not work after running, or there is an error prompt: \"wiringPi.h: No such file or directory\", please refer to :ref:`install_wiringpi_pi5`. **Code Explanation** .. code-block:: c double mpu6050(){     acclX = read_word_2c(0x3B);     acclY = read_word_2c(0x3D);     acclZ = read_word_2c(0x3F);     acclX_scaled = acclX / 16384.0;     acclY_scaled = acclY / 16384.0;     acclZ_scaled = acclZ / 16384.0;     double angle=get_y_rotation(acclX_scaled, acclY_scaled, acclZ_scaled);     return angle; } mpu6050 gets the tilt angle in the direction of the Y-axis. .. code-block:: c void rotary(char direction){     if(direction == 'c'){         for(int j=0;j<4;j++){             for(int i=0;i<4;i++)                 {digitalWrite(motorPin[i],0x99>>j & (0x08>>i));}             delayMicroseconds(stepSpeed);         }             }     else if(direction =='a'){         for(int j=0;j<4;j++){             for(int i=0;i<4;i++)                 {digitalWrite(motorPin[i],0x99<>i));}             delayMicroseconds(stepSpeed);         }        } } If the received direction **key** is \'**c**\', the stepper motor rotates clockwise; if the **key** is \'**a**\', the motor rotates anticlockwise. Refer to :ref:`1.3.3_stepper_c_pi5` for more details about the calculation of the rotating direction of the stepper motor. .. code-block:: c int main() {     setup();     double angle;     while(1) {         angle = mpu6050();         if (angle >=45){rotary('a');}         else if (angle<=-45){rotary('c');}     }     return 0; } The tilt angle in the direction of the Y-axis is read from **mpu6050**, and if it’s larger than **45** ℃, the stepper motor rotates anticlockwise; if less than **-45** ℃, the stepper motor rotates clockwise.