acceleromiter 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 CONTROL
// =====================================================

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 SETTINGS
// =====================================================

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

// =====================================================
// CONTROL LIMITS
// =====================================================

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

const float ROLL_PID_LIMIT  = 80.0;
const float PITCH_PID_LIMIT = 80.0;
const float YAW_PID_LIMIT   = 60.0;

// =====================================================
// SENSOR VARIABLES
// =====================================================

float accelX;
float accelY;
float accelZ;

float gyroX;
float gyroY;
float gyroZ;

// =====================================================
// ATTITUDE
// =====================================================

float roll = 0.0;
float pitch = 0.0;

// =====================================================
// GYROSCOPE OFFSETS
// =====================================================

float gyroOffsetX = 0.0;
float gyroOffsetY = 0.0;
float gyroOffsetZ = 0.0;

// =====================================================
// ACCELEROMETER OFFSETS
// =====================================================

float accelOffsetX = 0.0;
float accelOffsetY = 0.0;
float accelOffsetZ = 0.0;

// =====================================================
// SETPOINTS
// ===========================================

More projects by josephkinuthia541