Overview
The Free Fall Timer firmware measures the time interval between two PIR (Passive Infrared) sensors detecting an object in free fall. It uses hardware interrupts for precise timing and supports both Arduino (ATmega328) and ESP32 platforms.Pin Configuration
Arduino Version
ESP32 Version
Hardware Timer Configuration
The Arduino version uses Timer1 configured for 1ms interrupts:Timer ISR
State Machine
The firmware uses a state-based approach with volatile flags:Interrupt Service Routines
Start Sensor ISR (Arduino)
End Sensor ISR (Arduino)
ESP32 ISRs with FreeRTOS
The ESP32 version uses FreeRTOS critical sections:Setup Function
Main Loop
Serial Output Format
Arduino Version
ESP32 Version
Three-Sensor Configuration
The firmware also supports a three-sensor configuration for measuring intermediate points:State Transitions
Gravity Calculation
The three-sensor version calculates gravitational acceleration:Key Features
- Hardware interrupts for precise edge detection
- Timer-based counting for accurate millisecond timing
- State machine prevents spurious triggers
- Critical sections ensure thread-safe access to shared variables
- Support for multiple sensors for intermediate measurements
- Gravity calculation in three-sensor configuration
Platform Support
- Arduino (ATmega328): Uses Timer1 with 1ms resolution
- ESP32: Uses FreeRTOS primitives and
millis()for timing
Timing Resolution
- Arduino: 1 millisecond (using Timer1)
- ESP32: 1 millisecond (using
millis()) - Alternative ESP32: Microsecond resolution available with
micros()