Sensor and Actuator Systems
Sensor Types
Temperature Sensors
| Sensor | Type | Range | Accuracy | Interface | |---|---|---|---|---| | DS18B20 | Digital (1-Wire) | -55 to +125C | +/-0.5C | 1-Wire | | LM35 | Analog (voltage) | -55 to +150C | +/-0.5C | Analog | | BME280 | Digital (I2C/SPI) | -40 to +85C | +/-1C | I2C/SPI | | Thermistor (NTC) | Analog (resistance) | -40 to +300C | 1-5% | Analog + divider | | Thermocouple (K) | Analog (voltage) | -200 to +1350C | +/-2C | Analog + amplifier |
Thermistors follow the Steinhart-Hart equation: 1/T = A + B*ln(R) + C*(ln(R))^3
Inertial Measurement Unit (IMU)
An IMU combines multiple motion sensors:
Accelerometer -- measures linear acceleration (including gravity)
- Principle: MEMS proof mass displacement
- Output: 3-axis acceleration in g (1g = 9.81 m/s^2)
- Used for: tilt detection, step counting, vibration monitoring
Gyroscope -- measures angular velocity
- Principle: Coriolis effect on vibrating MEMS structure
- Output: 3-axis rotation rate in degrees/second
- Used for: rotation tracking, stabilization, navigation
- Suffers from drift over time
Magnetometer -- measures magnetic field
- Principle: Hall effect or magnetoresistive
- Output: 3-axis magnetic field in microtesla
- Used for: compass heading, position sensing
- Affected by hard/soft iron distortion from nearby metals
Common IMU chips: MPU-6050 (6-axis), MPU-9250 (9-axis), BNO055 (9-axis with onboard fusion), LSM6DSO (6-axis).
Proximity and Distance Sensors
| Sensor | Technology | Range | Resolution | |---|---|---|---| | HC-SR04 | Ultrasonic | 2cm - 4m | ~3mm | | VL53L0X | Time-of-Flight laser | 3cm - 2m | 1mm | | Sharp GP2Y0A21 | Infrared triangulation | 10cm - 80cm | Variable | | LiDAR (TFMini) | Time-of-Flight laser | 0.3 - 12m | 1cm |
Gas Sensors
| Sensor | Detected Gas | Principle | |---|---|---| | MQ-2 | LPG, methane, smoke | Metal oxide semiconductor | | MQ-135 | Air quality (NH3, NOx, CO2) | Metal oxide semiconductor | | SGP30 | TVOC, eCO2 | MOX with I2C digital output | | SCD40 | CO2 (true) | Photoacoustic NDIR | | BME680 | VOC, temp, humidity, pressure | MOX + environmental combo |
MQ-series sensors require a burn-in period and calibration. Digital sensors like SGP30 and SCD40 provide factory-calibrated output.
Reading a Sensor in Embedded Rust
BME280_ADDR ← 0x76
STRUCTURE Bme280Reading
temperature: real // Celsius
pressure: real // hPa
humidity: real // %RH
PROCEDURE READ_BME280(i2c) → Bme280Reading or error
raw ← array of 8 bytes
I2C_WRITE_READ(i2c, BME280_ADDR, [0xF7], raw)
// Apply compensation formulas from datasheet
// (simplified here -- real code uses calibration data)
adc_t ← (raw[3] << 12) OR (raw[4] << 4) OR (raw[5] >> 4)
temperature ← COMPENSATE_TEMPERATURE(adc_t)
RETURN Bme280Reading(temperature, pressure ← 1013.25, humidity ← 50.0)
Sensor Fusion
Raw sensor data is noisy and incomplete. Sensor fusion combines multiple sensors to produce a more accurate estimate than any single sensor alone.
Complementary Filter
Combines high-frequency data (gyroscope) with low-frequency data (accelerometer) using a simple weighted blend:
angle = alpha * (angle + gyro_rate * dt) + (1 - alpha) * accel_angle
Where alpha is typically 0.95-0.98. The gyroscope provides short-term accuracy (no vibration noise) while the accelerometer prevents long-term drift.
STRUCTURE ComplementaryFilter
angle: real
alpha: real
PROCEDURE NEW_FILTER(alpha) → ComplementaryFilter
RETURN ComplementaryFilter(angle ← 0.0, alpha ← alpha)
PROCEDURE UPDATE(filter, gyro_rate, accel_angle, dt) → real
filter.angle ← filter.alpha * (filter.angle + gyro_rate * dt)
+ (1.0 - filter.alpha) * accel_angle
RETURN filter.angle
Kalman Filter
Optimal recursive estimator that predicts state, then corrects using measurements. Handles noise statistically.
Predict step:
x_pred = A * x + B * u (state prediction)
P_pred = A * P * A^T + Q (covariance prediction)
Update step:
K = P_pred * H^T * (H * P_pred * H^T + R)^-1 (Kalman gain)
x = x_pred + K * (z - H * x_pred) (state update)
P = (I - K * H) * P_pred (covariance update)
Where:
x= state vector,P= state covarianceA= state transition,B= control input,H= observation modelQ= process noise,R= measurement noise,K= Kalman gain
The Kalman filter is computationally expensive for embedded (matrix operations). For simple 1D cases, a scalar Kalman filter is practical on an MCU.
Madgwick Filter
An efficient orientation filter specifically designed for IMUs. Computes quaternion orientation using gradient descent optimization.
Advantages over Kalman:
- No matrix operations -- uses quaternion math
- Single tuning parameter (beta)
- Very efficient on Cortex-M (runs in ~300 us at 48 MHz)
- Handles magnetic distortion gracefully
Used in drones, robotics, motion capture, and VR controllers.
Actuators
Motor Types
| Motor | Control | Characteristics | Applications | |---|---|---|---| | DC Brushed | PWM voltage | Simple, bidirectional, moderate speed | Wheels, fans, pumps | | Stepper | Step/direction pulses | Precise positioning, no feedback needed | 3D printers, CNC | | Servo (RC) | PWM position signal | Built-in feedback, limited rotation | Robotics joints | | BLDC | Electronic commutation | High efficiency, long life, complex control | Drones, EV, hard drives |
H-Bridge Motor Driver
An H-bridge controls DC motor direction using four switches:
VCC VCC
| |
[S1]---+---Motor---+---[S3]
| |
[S2]---+ +---[S4]
| |
GND GND
Forward: S1=ON, S4=ON, S2=OFF, S3=OFF
Reverse: S2=ON, S3=ON, S1=OFF, S4=OFF
Brake: S1=ON, S2=ON (or S3+S4)
Coast: All OFF
Common H-bridge ICs: L298N, DRV8833, TB6612FNG. Never turn on S1+S2 or S3+S4 simultaneously (shoot-through destroys the bridge).
Stepper Motor Control
// Simple stepper driver using step/direction interface (e.g., A4988, DRV8825)
STRUCTURE StepperDriver
step_pin: output pin
dir_pin: output pin
ASYNC PROCEDURE STEP(driver, direction, steps, delay_us)
IF direction THEN
SET_HIGH(driver.dir_pin)
ELSE
SET_LOW(driver.dir_pin)
FOR i ← 1 TO steps DO
SET_HIGH(driver.step_pin)
AWAIT DELAY(delay_us microseconds)
SET_LOW(driver.step_pin)
AWAIT DELAY(delay_us microseconds)
Servo Motor Control
Standard RC servos accept a 50 Hz PWM signal:
- 1.0 ms pulse = 0 degrees
- 1.5 ms pulse = 90 degrees (center)
- 2.0 ms pulse = 180 degrees
PROCEDURE SET_SERVO_ANGLE(pwm, angle_deg)
// Map 0-180 degrees to 1.0-2.0 ms pulse at 50 Hz (20 ms period)
pulse_us ← 1000.0 + (angle_deg / 180.0) * 1000.0
duty ← (pulse_us / 20000.0) * GET_MAX_DUTY(pwm)
SET_DUTY(pwm, duty)
Motor Control Algorithms
PID Controller
Proportional-Integral-Derivative control is the workhorse of motor control:
output = Kp * error + Ki * integral(error) + Kd * derivative(error)
STRUCTURE PidController
kp, ki, kd: real
integral: real
prev_error: real
output_min, output_max: real
PROCEDURE UPDATE(pid, setpoint, measurement, dt) → real
error ← setpoint - measurement
// Proportional
p ← pid.kp * error
// Integral with anti-windup clamping
pid.integral ← pid.integral + error * dt
pid.integral ← CLAMP(pid.integral, pid.output_min / pid.ki,
pid.output_max / pid.ki)
i ← pid.ki * pid.integral
// Derivative (on measurement to avoid derivative kick)
d ← pid.kd * (error - pid.prev_error) / dt
pid.prev_error ← error
RETURN CLAMP(p + i + d, pid.output_min, pid.output_max)
Tuning Methods
| Method | Approach | |---|---| | Ziegler-Nichols | Increase Kp until oscillation, derive Ki/Kd from period | | Manual tuning | Set Ki=Kd=0, increase Kp, then add Ki, then Kd | | Cohen-Coon | Based on step response characterization | | Auto-tune | Relay oscillation method (automated) |
Field-Oriented Control (FOC)
Advanced BLDC/PMSM control that transforms 3-phase currents into a rotating reference frame (d-q transform), enabling independent control of torque and flux:
3-phase currents --> Clarke transform --> alpha-beta --> Park transform --> d-q
(ia, ib, ic) (stationary) (rotating)
FOC requires:
- Current sensing (shunt resistors + ADC)
- Rotor position (encoder or sensorless estimation)
- Fast control loop (10-20 kHz)
- Space Vector Modulation (SVM) for inverter switching
FOC delivers smooth, efficient motor operation and is standard in drones, EVs, and industrial drives.
Key Takeaways
- Sensor selection depends on the measurand, accuracy, interface, and power requirements.
- Complementary filters are simple and effective for combining gyro and accelerometer data.
- Kalman filters are optimal but computationally heavy; Madgwick is a practical alternative for orientation.
- H-bridges enable bidirectional DC motor control; stepper drivers provide open-loop precision.
- PID control with anti-windup is sufficient for most motor control; FOC is needed for BLDC efficiency.