2020-06-21 02:44:29 +00:00
# MPU-6050 Six-Axis (Gyro + Accelerometer) Driver
2022-12-10 15:12:55 +00:00
v2 of this usermod enables connection of a MPU-6050 IMU sensor to
work with effects controlled by the orientation or motion of the WLED Device.
2020-06-21 02:44:29 +00:00
2022-12-10 15:12:55 +00:00
The MPU6050 has a built in "Digital Motion Processor" which does the "heavy lifting"
integrating the gyro and accelerometer measurements to get potentially more
2020-06-21 02:44:29 +00:00
useful gravity vector and orientation output.
2022-12-10 15:12:55 +00:00
It is fairly straightforward to comment out variables being read from the device if they're not needed. Saves CPU/Memory/Bandwidth.
2020-06-21 02:44:29 +00:00
_Story:_
2020-06-22 00:32:39 +00:00
As a memento to a long trip I was on, I built an icosahedron globe. I put lights inside to indicate cities I travelled to.
I wanted to integrate an IMU to allow either on-board, or off-board effects that would
react to the globes orientation. See the blog post on building it < https: / / www . robopenguins . com / icosahedron-travel-globe / > or a video demo < https: / / youtu . be / zYjybxHBsHM > .
2020-06-21 02:44:29 +00:00
## Adding Dependencies
I2Cdev and MPU6050 must be installed.
2024-01-07 19:32:22 +00:00
To install them, add electroniccats/MPU6050@1.0.1 to lib_deps in the platformio.ini file.
2020-06-21 02:44:29 +00:00
For example:
```
lib_deps =
FastLED@3.3.2
NeoPixelBus@2.5.7
ESPAsyncTCP@1.2.0
ESPAsyncUDP@697c75a025
AsyncTCP@1.0.3
Esp Async WebServer@1.2.0
IRremoteESP8266@2.7.3
2024-01-07 19:32:22 +00:00
electroniccats/MPU6050@1.0.1
2020-06-21 02:44:29 +00:00
```
## Wiring
The connections needed to the MPU6050 are as follows:
```
VCC VU (5V USB) Not available on all boards so use 3.3V if needed.
GND G Ground
SCL D1 (GPIO05) I2C clock
SDA D2 (GPIO04) I2C data
XDA not connected
XCL not connected
AD0 not connected
INT D8 (GPIO15) Interrupt pin
```
You could probably modify the code not to need an interrupt, but I used the
setup directly from the example.
## JSON API
This code adds:
```json
"u":{
"IMU":{
"Quat": [w, x, y, z],
"Euler": [psi, theta, phi],
"Gyro": [x, y, z],
"Accel": [x, y, z],
"RealAccel": [x, y, z],
"WorldAccel": [x, y, z],
"Gravity": [x, y, z],
"Orientation": [yaw, pitch, roll]
}
}
```
to the info object
## Usermod installation
1. Copy the file `usermod_mpu6050_imu.h` to the `wled00` directory.
2022-09-14 11:56:16 +00:00
2. Register the usermod by adding `#include "usermod_mpu6050_imu.h"` in the top and `registerUsermod(new MPU6050Driver());` in the bottom of `usermods_list.cpp` .
2020-06-21 02:44:29 +00:00
Example **usermods_list.cpp** :
```cpp
#include "wled.h"
#include "usermod_mpu6050_imu.h"
void registerUsermods()
{
2024-09-19 19:44:11 +00:00
UsermodManager::add(new MPU6050Driver());
2020-06-21 02:44:29 +00:00
}
```