Pressure Sensor
Pressure Sensor Overview
Pressure sensors measure fluid/gas pressure for robotic gripper force feedback and control, depth sensing, altitude measurement, or system pressure monitoring. The system supports dual pressure sensor configuration for dual-pad gripper control with load distribution feedback.
Hardware Specifications
Parameter | Value |
|---|---|
Sensor Count | 2 (independent) |
Interface | Analog ADC or I2C |
Measurement Range | Variable (typically 0-300 kPa) |
Update Rate | Configurable |
Data Structure
typedef struct {
float pressure_kpa; // Pressure in kilopascals (kPa)
float temperature_c; // Temperature in Celsius (°C)
float voltage; // Sensor output voltage
bool is_calibrated; // Calibration status flag
} pressure_sensor_data_t;
Initialization
Initialize Pressure Sensors
pressure_sensor_data_t pressure_data[2]; // Support 2 sensors
for (size_t i = 0; i < 2; i++) {
pressure_sensor_init(&pressure_data[i]);
}
Poll Pressure Sensor
result_t ps_result = poll_pressure_sensor(&pressure_data[0]);
if (ps_result == RESULT_OK) {
float pressure_kpa = pressure_data[0].pressure_kpa;
float temperature_c = pressure_data[0].temperature_c;
}
Data Access Functions
// Get pressure in kilopascals
result_t pressure_sensor_get_pressure_kpa(
const pressure_sensor_data_t *data,
float *pressure_kpa
);
// Get temperature in Celsius
result_t pressure_sensor_get_temperature_c(
const pressure_sensor_data_t *data,
float *temperature_c
);
// Get raw sensor voltage
result_t pressure_sensor_get_voltage(
const pressure_sensor_data_t *data,
float *voltage
);
// Verify sensor validity
result_t pressure_sensor_is_valid(
const pressure_sensor_data_t *data,
bool *is_valid
);
Pressure Unit Conversions
Function-Based Conversions
// Convert pressure from bar to psi
result_t bar_to_psi(float bar, float *psi);
// Convert pressure from psi to bar
result_t psi_to_bar(float psi, float *bar);
Conversion Table
From | To | Multiply By |
|---|---|---|
bar | kPa | 100 |
psi | kPa | 6.895 |
atm | kPa | 101.325 |
kPa | bar | 0.01 |
kPa | psi | 0.145 |
kPa | atm | 0.00987 |
Examples
// 100 kPa = 1 bar
float kpa = 100.0f;
float bar = kpa * 0.01f; // Result: 1.0 bar
// 50 psi to bar
float psi = 50.0f;
float bar = psi / 14.504f; // Result: 3.45 bar
// Altitude from pressure (simplified)
// Altitude ≈ 44330 × (1 - (P/P0)^(1/5.255))
float altitude_m = 44330.0f * (1.0f - pow(pressure_kpa/101.325f, 1.0f/5.255f));
Protobuf Message Format
message SensorBoardPressureInfo {
uint32 sensor_index; // 0 or 1
float pressure_kpa;
float temperature_c;
SensorState state;
PressureErrorCode error_code;
}
Dual Sensor Management
Configuration Example
// Initialize both sensors
for (size_t i = 0; i < 2; i++) {
pressure_sensor_init(&pressure_data[i]);
}
// Poll both in sequence
poll_pressure_sensor(&pressure_data[0]);
poll_pressure_sensor(&pressure_data[1]);
// Access by index
float pressure_0_kpa = pressure_data[0].pressure_kpa;
float pressure_1_kpa = pressure_data[1].pressure_kpa;
Temperature Compensation
Pressure readings often need temperature compensation for accuracy:
// Simplified temperature compensation
float compensated_pressure = pressure_data[0].pressure_kpa *
(reference_temperature + 273.15f) /
(pressure_data[0].temperature_c + 273.15f);
Applications
Robotic Gripper Control (Primary Use Case)
// Gripper force feedback for adaptive grip strength
// Pressure reading controls servo/motor PWM to regulate grip force
#define GRIPPER_MIN_PRESSURE_KPA 20.0f // Minimum safe grip
#define GRIPPER_MAX_PRESSURE_KPA 150.0f // Maximum allowed grip
#define GRIPPER_TARGET_PRESSURE_KPA 80.0f // Desired grip force
// PID controller for gripper force regulation
typedef struct {
float kp, ki, kd; // PID coefficients
float integral_error;
float previous_error;
} gripper_pid_t;
// Adjust servo PWM based on pressure feedback
void adjust_gripper_force(float current_pressure_kpa, gripper_pid_t *pid) {
float error = GRIPPER_TARGET_PRESSURE_KPA - current_pressure_kpa;
pid->integral_error += error;
float derivative_error = error - pid->previous_error;
float pid_output = (pid->kp * error) +
(pid->ki * pid->integral_error) +
(pid->kd * derivative_error);
// Clamp servo PWM to valid range
uint16_t servo_pwm = (uint16_t)(GRIPPER_NEUTRAL_PWM + pid_output);
servo_pwm = (servo_pwm < GRIPPER_MIN_PWM) ? GRIPPER_MIN_PWM : servo_pwm;
servo_pwm = (servo_pwm > GRIPPER_MAX_PWM) ? GRIPPER_MAX_PWM : servo_pwm;
set_gripper_pwm(servo_pwm);
pid->previous_error = error;
}
Gripper Control Features:
- Grip force feedback for object handling
- Object presence detection (pressure spike threshold)
- Adaptive compliance for varying object sizes/materials
- Dual sensors support load sharing across gripper pads
Implemented but Not Primary
Depth Sensing (Water)
// Pressure to depth in water
// P = ρ × g × h
// where ρ = 1025 kg/m³ (seawater), g = 9.81 m/s²
float depth_meters = (pressure_kpa - atmospheric_pressure_kpa) / 10.0f;
Altitude Sensing (Air)
// Barometric formula (simplified)
float altitude_m = 44330.0f * (1.0f - pow(pressure_kpa/101.325f, 1.0f/5.255f));
System Pressure Monitoring
if (pressure_kpa > PRESSURE_WARNING_THRESHOLD) {
// High pressure detected - safety alert
}
Common Pressure Sensor Ranges
Application | Range | Typical Sensor |
|---|---|---|
Altitude (aviation) | 10-110 kPa | BMP280/BMP390 |
Depth (diving) | 0-300+ kPa | Custom depth sensor |
System pressure | 0-500+ kPa | Industrial pressure transducer |
Integration Notes
- Primary Application: Robotic gripper force feedback and control
- Supports up to 2 independent pressure sensors (dual gripper pads)
- Temperature measurement for compensation algorithms
- Hardware-specific ADC or I2C implementation
- Pressure-voltage conversion implemented internally
- Real-time depth/altitude sensing capability
- PID control loop integration for adaptive grip force
- Each sensor maintains independent calibration
- Temperature tracking for accuracy improvements
- Slip detection via pressure variance analysis