gyroscope calibration — ESP32 simulation

An interactive ESP32 circuit simulation you can run free in your browser on Velxio, by josephkinuthia541.

Components

Sketch code

#include <Wire.h>
#include <math.h>

// =====================================================
// MOTOR PINS
// =====================================================
#define M1 25
#define M2 26
#define M3 27
#define M4 14

// =====================================================
// JOYSTICK PINS
// =====================================================
#define THROTTLE_PIN 34
#define ROLL_PIN     35
#define PITCH_PIN    32
#define YAW_PIN      33

// =====================================================
// LSM6DS3
// =====================================================
#define IMU_ADDRESS 0x6A

#define WHO_AM_I     0x0F
#define CTRL1_XL     0x10
#define CTRL2_G      0x11
#define OUTX_L_G     0x22
#define OUTX_L_XL    0x28

// =====================================================
// ROLL PID
// =====================================================
float rollKp = 0.80;
float rollKi = 0.00;
float rollKd = 0.25;

// =====================================================
// PITCH PID
// =====================================================
float pitchKp = 0.80;
float pitchKi = 0.00;
float pitchKd = 0.25;

// =====================================================
// YAW RATE PID
// =====================================================
float yawKp = 0.50;
float yawKi = 0.00;
float yawKd = 0.00;

// =====================================================
// CONTROL SIGNS
// =====================================================
const float ROLL_CONTROL_SIGN  = -1.0;
const float PITCH_CONTROL_SIGN = -1.0;
const float YAW_CONTROL_SIGN   = 1.0;

// =====================================================
// JOYSTICK
// =====================================================
const int JOYSTICK_CENTER = 2047;
const int DEADZONE = 300;

const float MAX_ANGLE = 30.0;
const float MAX_YAW_RATE = 100.0;

// =====================================================
// PID LIMITS
// =====================================================
const float ROLL_PID_LIMIT  = 80.0;
const float PITCH_PID_LIMIT = 80.0;
const float YAW_PID_LIMIT   = 60.0;

// =====================================================
// IMU VARIABLES
// =====================================================
float accelX, accelY, accelZ;
float gyroX, gyroY, gyroZ;

float roll = 0.0;
float pitch = 0.0;

// =====================================================
// GYROSCOPE CALIBRATION
// =====================================================
float gyroOffsetX = 0.0;
float gyroOffsetY = 0.0;
float gyroOffsetZ = 0.0;

// =====================================================
// DESIRED ATTITUDE
// =====================================================
float desiredRoll = 0.0;
float desiredPitch = 0.0;
float desiredYawRate = 0.0;

// =====================================================
// PID OUTPUTS
// =====================================================
float rollPID = 0.0;
float pitchPID = 0.0;
float yawPID = 0.0;

// 

More projects by josephkinuthia541