Compare commits
8 Commits
Interrupts
...
main
Author | SHA1 | Date | |
---|---|---|---|
1bda6b2f52 | |||
c2690e2d5e | |||
1b3ee52ad2 | |||
cbd1750219 | |||
a348350474 | |||
bb36373b21 | |||
5353b36e01 | |||
16f2dacb04 |
BIN
MPU6050_datasheet.pdf
Normal file
BIN
MPU6050_datasheet.pdf
Normal file
Binary file not shown.
38
README.md
Normal file
38
README.md
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
Work yourself from the Main, to the rest of the branches step by step, as they build on each other. Follow the following steps in this README before doing the branches and Main though for a good setup.
|
||||||
|
|
||||||
|
Tutorial additions (Everything not present in the Git folder) (origin: docx file) Installing the PlatformIO IDE extension In Visual Studio Code, go to “Extensions”. Search for “PlatformIO“ and install said extension. A little Icon should appear on the left sidebar, click on it to initialize everything. And you’re good to go!
|
||||||
|
|
||||||
|
Basics of the PlatformIO IDE There are the 3 most important features it provides:
|
||||||
|
|
||||||
|
Building your project and flashing it to the Board of choice (example: ESP32)
|
||||||
|
A .ini file to manage everything you need for a setup (for example what framework to use, what board, library dependencies etc)
|
||||||
|
Practical inbuilt terminal
|
||||||
|
How do you build a project? You click on the little checkmark at the bottom bar. How do you flash / install your program on the board of choice? Right next to said little checkmark is an arrow pointing right. Click on it, and it builds your program and flashes it. How do you access the terminal quickly? You click on the cable-head symbol on the same bar.
|
||||||
|
|
||||||
|
“Oh no, none of those symbols are there?!” Do not worry. Check whether you initialized the extension by clicking on it and checking if
|
||||||
|
“PIO Home” -> “Open” opens a site or not. If the second is not the case, deinstall and reinstall the extension to see if that solves the issue.
|
||||||
|
|
||||||
|
Creating a new project in PlatformIO You have now successfully installed the extension. Well done! Now you can start the coding. Almost. Go to
|
||||||
|
“PlatformIO” -> “PIO Home” -> “Open” -> “New Project”
|
||||||
|
If you are working on the ESP32 S1, you can use the exact board selected in the picture. If not, you must check what other board selection works for your board.
|
||||||
|
|
||||||
|
Once that is all said and done, click Finish and your new project opens. You want to mainly work in “src”, “main.cpp” for now.
|
||||||
|
|
||||||
|
Installing the library you need for the MPU6050 This is one method as to how to include and install this library for your project, but I personally deem this method the best. Here are the steps:
|
||||||
|
|
||||||
|
Go to the little icon of the PlatformIO extension and click on it. Then go to the “Libraries” option.
|
||||||
|
Once there, search for “Adafruit MPU6050”, there should be 5 results.
|
||||||
|
Click on it, and then on “Add to Project”
|
||||||
|
Select your project and the version, then click “Add”.
|
||||||
|
This will take a little moment before it’s added, but once that’s done, you’re all good to go regarding including the .h files in your program.
|
||||||
|
|
||||||
|
The test and setup of the ESP32 itself. What do you need?
|
||||||
|
|
||||||
|
An esp32 (s1 optionally, mind the board selection in vs code)
|
||||||
|
An MPU6050 (Check datasheet if unsure)
|
||||||
|
A few cables of your choice (Jumpwires for example)
|
||||||
|
A USB cable to sustain the ESP
|
||||||
|
Here are the pins you need to connect to each other: (ESP Pin -> MPU6050 Pin)
|
||||||
|
3v3 -> VCC (IMPORTANT! Not 5V) | GND -> GND | G22 -> SCL | G21 -> SDA
|
||||||
|
|
||||||
|
The other pins can be used for other specific stuff if curious check the datasheet.
|
BIN
Tutorial additions.docx
Normal file
BIN
Tutorial additions.docx
Normal file
Binary file not shown.
96
src/Second_approach.txt
Normal file
96
src/Second_approach.txt
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
//--------------------------------------------------------------------------------------------------------------------------//
|
||||||
|
// This is the seconed way to use the MPU sensor:
|
||||||
|
//--------------------------------------------------------------------------------------------------------------------------//
|
||||||
|
|
||||||
|
// Include the library you want to use: //
|
||||||
|
#include "Wire.h"
|
||||||
|
|
||||||
|
// Define the address to the chip: //
|
||||||
|
#define MPU6050_ADDR 0x68 // Alternatively set AD0 to HIGH --> Address = 0x69
|
||||||
|
|
||||||
|
// Set up some variables //
|
||||||
|
int16_t _accX; // Acceleration
|
||||||
|
int16_t _accY;
|
||||||
|
int16_t _accZ;
|
||||||
|
int16_t _gyroX; // Gyro
|
||||||
|
int16_t _gyroY;
|
||||||
|
int16_t _gyroZ;
|
||||||
|
int16_t _tRaw; // Raw register values (accelaration, gyroscope, temperature)
|
||||||
|
|
||||||
|
// Another for specific use (in this case, convertion) //
|
||||||
|
char _result[7]; // Temporary variable used in convert function
|
||||||
|
|
||||||
|
// Prototype to function at the end //
|
||||||
|
char* toStr(int16_t _character);
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
Serial.begin(115200); // Mind the Bit per second rate you selected here if blindly copying!
|
||||||
|
|
||||||
|
// Start service //
|
||||||
|
Wire.begin();
|
||||||
|
Wire.beginTransmission(MPU6050_ADDR);
|
||||||
|
|
||||||
|
// Set up register //
|
||||||
|
Wire.write(0x6B); // PWR_MGMT_1 register
|
||||||
|
Wire.write(0); // wake up!
|
||||||
|
Wire.endTransmission(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
// Begin exchange with the sensor //
|
||||||
|
Wire.beginTransmission(MPU6050_ADDR);
|
||||||
|
|
||||||
|
Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
|
||||||
|
Wire.endTransmission(false); // The parameter indicates that the Arduino will send a restart.
|
||||||
|
// As a result, the connection is kept active.
|
||||||
|
Wire.requestFrom(MPU6050_ADDR, 14, true); // request a total of 7*2=14 registers
|
||||||
|
|
||||||
|
// "Wire.read()<<8 | Wire.read();" means two registers are read and stored in the same int16_t variable //
|
||||||
|
_accX = Wire.read()<<8 | Wire.read(); // reading registers: 0x3B (ACCEL_XOUT_H) and 0x3C (ACCEL_XOUT_L)
|
||||||
|
_accY = Wire.read()<<8 | Wire.read(); // reading registers: 0x3D (ACCEL_YOUT_H) and 0x3E (ACCEL_YOUT_L)
|
||||||
|
_accZ = Wire.read()<<8 | Wire.read(); // reading registers: 0x3F (ACCEL_ZOUT_H) and 0x40 (ACCEL_ZOUT_L)
|
||||||
|
_tRaw = Wire.read()<<8 | Wire.read(); // reading registers: 0x41 (TEMP_OUT_H) and 0x42 (TEMP_OUT_L)
|
||||||
|
_gyroX = Wire.read()<<8 | Wire.read(); // reading registers: 0x43 (GYRO_XOUT_H) and 0x44 (GYRO_XOUT_L)
|
||||||
|
_gyroY = Wire.read()<<8 | Wire.read(); // reading registers: 0x45 (GYRO_YOUT_H) and 0x46 (GYRO_YOUT_L)
|
||||||
|
_gyroZ = Wire.read()<<8 | Wire.read(); // reading registers: 0x47 (GYRO_ZOUT_H) and 0x48 (GYRO_ZOUT_L)
|
||||||
|
|
||||||
|
// Printing the read in values in a String fromat //
|
||||||
|
Serial.print("AcX = ");
|
||||||
|
Serial.print(toStr(accX));
|
||||||
|
|
||||||
|
Serial.print(" | AcY = ");
|
||||||
|
Serial.print(toStr(accY));
|
||||||
|
|
||||||
|
Serial.print(" | AcZ = ");
|
||||||
|
Serial.print(toStr(accZ));
|
||||||
|
|
||||||
|
// from data sheet: //
|
||||||
|
Serial.print(" | tmp = "); Serial.print((tRaw + 12412.0) / 340.0);
|
||||||
|
Serial.print(" | GyX = "); Serial.print(toStr(gyroX));
|
||||||
|
Serial.print(" | GyY = "); Serial.print(toStr(gyroY));
|
||||||
|
Serial.print(" | GyZ = "); Serial.print(toStr(gyroZ));
|
||||||
|
Serial.println();
|
||||||
|
|
||||||
|
delay(1000); // NOTE! This is just for demonstration purposes.
|
||||||
|
// The function "delay({insert wanted value in ms})" stops your ENTIRE programm,
|
||||||
|
// not allowing the ESP to do ANYTHING until the delay is canceled after the listed milliseconds have passed.
|
||||||
|
// If possible, avoid using it at all.
|
||||||
|
}
|
||||||
|
|
||||||
|
// Function to convert the incoming values to String (for printing purposes) //
|
||||||
|
char* toStr(int16_t _character)
|
||||||
|
{
|
||||||
|
// Formats "int16_t" to "String" (Attention! Not "std::string", the two are)
|
||||||
|
// (two seperate classes and are not the same.)
|
||||||
|
|
||||||
|
sprintf(_result, "%6d", _character);
|
||||||
|
return _result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Note that all the values are purely raw. Further computing is required for them to actually be of use.
|
||||||
|
// This is a more watered down version as to how to do this, but let's be real, you really won't need to make everything
|
||||||
|
// harder if this delivers all you need.
|
||||||
|
|
||||||
|
// If there is interest on how to do this on an even lower and detailed level, talk to me and I'll try to explain.
|
68
src/main.cpp
68
src/main.cpp
@ -114,28 +114,56 @@ float _calc = 0; // for calculations
|
|||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
// Save vals if you want to send them: //
|
// NOTICE! You might wonder why this looks different to the earlier commit.
|
||||||
sensors_event_t _a;
|
// This is a better example to understand what's going on, run it to find out how to read in the meassuremnts.
|
||||||
sensors_event_t _g;
|
|
||||||
sensors_event_t _temp; // Used as placeholder for now in the next function, even if you don't need temperature values.
|
|
||||||
|
|
||||||
mpu.getEvent(&_a, &_g, &_temp); // Reads in your values.
|
// Get new sensor events with the readings //
|
||||||
|
sensors_event_t _a, _g, _temp;
|
||||||
|
mpu.getEvent(&_a, &_g, &_temp);
|
||||||
|
// "_a" == acceleration
|
||||||
|
// "_g" == gyroscope values
|
||||||
|
// "_temp" == temperature
|
||||||
|
|
||||||
_x_accel = _a.acceleration.x; // acceleration in x.
|
// Reading acceleration //
|
||||||
_y_accel = _a.acceleration.y; // acceleration in y.
|
Serial.print("Acceleration X: "); // Note that all the values are in "m/s^2" for further calculations!
|
||||||
|
Serial.print(_a.acceleration.x);
|
||||||
|
Serial.print(", Y: ");
|
||||||
|
Serial.print(_a.acceleration.y);
|
||||||
|
Serial.print(", Z: ");
|
||||||
|
Serial.print(_a.acceleration.z);
|
||||||
|
Serial.println(" m/s^2");
|
||||||
|
// You can of course use those values to calculate the position in 3D if so needed.
|
||||||
|
// For that, please read into it and try to write it yourself.
|
||||||
|
|
||||||
// Basic example for use //
|
// Reading rotation from the gyroscope //
|
||||||
_calc = _y_accel * 12.5; // Calculate postion if you want to.
|
Serial.print("Rotation X: ");
|
||||||
if(_calc > 100) // reduce values if you only want values from (-100) - 100 for example
|
Serial.print(_g.gyro.x);
|
||||||
{
|
Serial.print(", Y: ");
|
||||||
_calc = 100;
|
Serial.print(_g.gyro.y);
|
||||||
}
|
Serial.print(", Z: ");
|
||||||
else if(_calc < (-100))
|
Serial.print(_g.gyro.z);
|
||||||
{
|
Serial.println(" rad/s");
|
||||||
_calc = (-100);
|
// Rotation in directions of x, y and z, as for acceleration as well as you can see.
|
||||||
}
|
// If you're getting confused as to what is what IRL, look at the top of
|
||||||
|
// the MPU sensor to see the small directions symboles for reorientation.
|
||||||
|
|
||||||
// And done! //
|
// Reading in temperature //'
|
||||||
// Mind that everything in this loop repeats itself over and over, only stopping until the programm fails to execute or //
|
Serial.print("Temperature: ");
|
||||||
// the current is cut. If you'd like to restart everything, press the little button titled "RST" or "BOOT" (if the first does nothing) on the ESP. //
|
Serial.print(_temp.temperature);
|
||||||
|
Serial.println(" degC");
|
||||||
|
// Mind that it's read in in Celcius, if needed for further calculations.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Little side information //
|
||||||
|
// If you are wondering why there are two pins called "XDA" and "XCL", educate yourself on it, but you
|
||||||
|
// won't need those most likely.
|
||||||
|
|
||||||
|
// Tecnically, you only need the library asset "Wire.h" for all of this and not the whole Adafruit library.
|
||||||
|
// But then again, that's a harder, and not exactly better way to use this sensor if not all too familiar with the
|
||||||
|
// syntax of C++, but if you'd want to, try it out!
|
||||||
|
// I've left a ".txt" file in this "src" folder that has the code tackling the second option.
|
||||||
|
// Try it out if you'd like, or go with the method described in here. Your choice.
|
||||||
|
|
||||||
|
// And done! //
|
||||||
|
// Mind that everything in this loop repeats itself over and over, only stopping until the programm fails to execute or
|
||||||
|
// the current is cut. If you'd like to restart everything, press the little button titled "RST" or "BOOT" (if the first does nothing) on the ESP.
|
Loading…
Reference in New Issue
Block a user