261 lines
11 KiB
Markdown
261 lines
11 KiB
Markdown
# Breath-Synchronized Fan & Bag Inflation System
|
|
|
|
## Project Overview
|
|
|
|
A biofeedback system that detects a user's breathing pattern via sensors and synchronizes computer tower fans to inflate a bag during inhalation phases.
|
|
|
|
---
|
|
|
|
## System Architecture
|
|
|
|
```
|
|
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
|
|
│ Breath Sensor │────▶│ Microcontroller │────▶│ Fan Controller │
|
|
│ (on chest/nose)│ │ (Arduino/ESP32) │ │ (PWM/MOSFET) │
|
|
└─────────────────┘ └──────────────────┘ └─────────────────┘
|
|
│
|
|
▼
|
|
┌─────────────────┐
|
|
│ PC Tower Fans │
|
|
│ (12V, 3-4 pin) │
|
|
└────────┬────────┘
|
|
│
|
|
▼
|
|
┌─────────────────┐
|
|
│ Inflation Bag │
|
|
│ (sealed inlet) │
|
|
└─────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## Component Options
|
|
|
|
### 1. Breath Sensors (Choose One)
|
|
|
|
| Sensor Type | Pros | Cons | Est. Cost |
|
|
|-------------|------|------|-----------|
|
|
| **Chest Strap Stretch Sensor** | Non-invasive, comfortable | Requires calibration per user | $15-30 |
|
|
| **Nasal Airflow Thermistor** | Very accurate, medical-grade | Intrusive, needs cleaning | $5-15 |
|
|
| **Piezoelectric Belt** | Simple, reliable | Can slip, position-sensitive | $10-20 |
|
|
| **BioImpedance (AD8232)** | Multi-signal (breath + heart) | Complex setup, needs electrodes | $10-25 |
|
|
| **Microphone/Sound Sensor** | No contact required | Ambient noise interference | $5-10 |
|
|
| **Pressure Sensor (BMP280)** | Very sensitive | Needs sealed enclosure | $5-10 |
|
|
|
|
**Recommendation:** Chest strap with conductive rubber stretch sensor or piezoelectric element - balances accuracy with comfort for seated use.
|
|
|
|
### 2. Microcontroller
|
|
|
|
| Option | Pros | Cons | Est. Cost |
|
|
|--------|------|------|-----------|
|
|
| **Arduino Nano** | Simple, lots of tutorials | Limited processing | $5-15 |
|
|
| **ESP32** | WiFi/BLE, dual-core, more pins | Overkill for basic version | $8-15 |
|
|
| **Raspberry Pi Pico** | Powerful, cheap, PIO for precise timing | Less community support | $4-8 |
|
|
|
|
**Recommendation:** Arduino Nano for simplicity, ESP32 if you want wireless monitoring/control later.
|
|
|
|
### 3. Fan Control
|
|
|
|
| Method | Description | Components Needed |
|
|
|--------|-------------|-------------------|
|
|
| **PWM via MOSFET** | Speed control 0-100% | IRLZ44N MOSFET, flyback diode |
|
|
| **Relay (On/Off)** | Simple binary control | 5V relay module |
|
|
| **Fan Controller IC** | Dedicated chip | EMC2301 or similar |
|
|
|
|
**Recommendation:** PWM via MOSFET - allows smooth ramping that mirrors breath intensity.
|
|
|
|
### 4. Fans
|
|
|
|
- Standard 120mm PC tower fans (12V, 0.2-0.5A each)
|
|
- 4-pin PWM fans allow direct speed control
|
|
- 3-pin fans need external PWM circuit
|
|
- Consider 2-4 fans for adequate airflow
|
|
|
|
### 5. Inflation Bag
|
|
|
|
- Medical ventilator bags (Ambu-style) - designed for this
|
|
- Weather balloon material with one-way valve
|
|
- Custom sewn ripstop nylon with inlet fitting
|
|
- Volume: 2-5 liters typical for breath visualization
|
|
|
|
---
|
|
|
|
## Bill of Materials (Estimated)
|
|
|
|
| Component | Quantity | Est. Cost |
|
|
|-----------|----------|-----------|
|
|
| Stretch sensor (chest strap) | 1 | $20 |
|
|
| Arduino Nano | 1 | $10 |
|
|
| IRLZ44N MOSFET | 2-4 | $5 |
|
|
| 1N4007 Diodes (flyback) | 2-4 | $2 |
|
|
| 120mm PC Fans | 2-4 | $20-40 |
|
|
| 12V 2A Power Supply | 1 | $10 |
|
|
| Breadboard + Jumpers | 1 set | $10 |
|
|
| Inflation bag + fitting | 1 | $15-30 |
|
|
| Enclosure/mounting | - | $10-20 |
|
|
| **Total** | | **$100-150** |
|
|
|
|
---
|
|
|
|
## Software Architecture
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ Main Loop │
|
|
├─────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ 1. READ sensor value (analog 0-1023) │
|
|
│ │ │
|
|
│ ▼ │
|
|
│ 2. FILTER noise (moving average, 5-10 samples) │
|
|
│ │ │
|
|
│ ▼ │
|
|
│ 3. DETECT breath phase │
|
|
│ ├── Rising signal = INHALE │
|
|
│ ├── Falling signal = EXHALE │
|
|
│ └── Stable = PAUSE │
|
|
│ │ │
|
|
│ ▼ │
|
|
│ 4. MAP breath intensity to fan speed (0-255 PWM) │
|
|
│ │ │
|
|
│ ▼ │
|
|
│ 5. RAMP fan speed (smooth transitions) │
|
|
│ │ │
|
|
│ ▼ │
|
|
│ 6. OUTPUT PWM to MOSFET gate │
|
|
│ │
|
|
│ Loop rate: 50-100 Hz │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### Key Algorithm: Breath Detection
|
|
|
|
```cpp
|
|
// Pseudocode
|
|
float baseline = calibrate(); // 5-second calm breathing average
|
|
float threshold = baseline * 0.1; // 10% deviation triggers
|
|
|
|
void loop() {
|
|
float current = readSensor();
|
|
float filtered = movingAverage(current, 10);
|
|
|
|
if (filtered > baseline + threshold) {
|
|
// INHALING - ramp fans up proportionally
|
|
int intensity = map(filtered, baseline, maxInhale, 0, 255);
|
|
setFanSpeed(intensity);
|
|
} else {
|
|
// EXHALING or PAUSE - fans off, bag deflates passively
|
|
setFanSpeed(0);
|
|
}
|
|
|
|
// Adaptive baseline (slow drift compensation)
|
|
baseline = baseline * 0.999 + filtered * 0.001;
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Wiring Diagram
|
|
|
|
```
|
|
+12V (Fan Power)
|
|
│
|
|
│
|
|
Arduino Nano ┌────┴────┐
|
|
┌───────────┐ │ │
|
|
│ D9 │───────┬──────────▶│G FAN │
|
|
│ (PWM) │ │ │ 120mm │
|
|
│ │ ┌──┴──┐ │ │
|
|
│ GND │────┤IRLZ │ └────┬────┘
|
|
│ │ │44N │ │
|
|
│ A0 │◀───┤ ├─────────────┘
|
|
│ (Sensor) │ └──┬──┘ GND
|
|
│ │ │
|
|
│ 5V │───────┼──────▶ Sensor VCC
|
|
│ GND │───────┼──────▶ Sensor GND
|
|
└───────────┘ │
|
|
│
|
|
┌──┴──┐
|
|
│1N4007│ (Flyback diode)
|
|
└──┬──┘
|
|
│
|
|
GND
|
|
```
|
|
|
|
---
|
|
|
|
## Implementation Phases
|
|
|
|
### Phase 1: Sensor Validation
|
|
- [ ] Select and acquire breath sensor
|
|
- [ ] Wire sensor to Arduino
|
|
- [ ] Write basic serial plotter sketch
|
|
- [ ] Verify clean breath signal on serial plotter
|
|
- [ ] Tune filtering parameters
|
|
|
|
### Phase 2: Fan Control
|
|
- [ ] Wire MOSFET circuit on breadboard
|
|
- [ ] Test PWM control with potentiometer
|
|
- [ ] Verify fan speed varies 0-100%
|
|
- [ ] Add flyback diode protection
|
|
- [ ] Test with multiple fans if needed
|
|
|
|
### Phase 3: Integration
|
|
- [ ] Combine sensor input with fan output
|
|
- [ ] Implement breath detection algorithm
|
|
- [ ] Add calibration routine (button-triggered)
|
|
- [ ] Tune response curve (linear vs. exponential)
|
|
- [ ] Test full loop with user breathing
|
|
|
|
### Phase 4: Bag System
|
|
- [ ] Design or acquire inflation bag
|
|
- [ ] Create sealed inlet with fan output
|
|
- [ ] Add one-way valve (prevents backflow on exhale)
|
|
- [ ] Test bag inflation matches breath cycle
|
|
- [ ] Adjust fan power for bag volume
|
|
|
|
### Phase 5: Enclosure & Polish
|
|
- [ ] Design mounting for fans and bag
|
|
- [ ] Create comfortable sensor wearable
|
|
- [ ] Add status LEDs (power, breathing, calibrating)
|
|
- [ ] Optional: Add OLED display for breath rate
|
|
- [ ] Optional: Add WiFi for remote monitoring
|
|
|
|
---
|
|
|
|
## Testing Checklist
|
|
|
|
- [ ] Sensor responds to chest expansion (not just movement)
|
|
- [ ] No false triggers from ambient noise/vibration
|
|
- [ ] Fan ramps smoothly (no jerky motion)
|
|
- [ ] Bag inflates during inhale, deflates during exhale
|
|
- [ ] System works for different breathing rates (8-20 breaths/min)
|
|
- [ ] Calibration works for different users
|
|
- [ ] Safe shutdown if sensor disconnected
|
|
- [ ] No overheating after 30+ min operation
|
|
|
|
---
|
|
|
|
## Safety Considerations
|
|
|
|
1. **Electrical**: Use proper flyback diodes - fan motors create back-EMF
|
|
2. **Ventilation**: Ensure fans don't overheat in enclosure
|
|
3. **Bag Material**: Don't use latex (allergy risk) - use medical silicone or nylon
|
|
4. **Power**: Fuse the 12V supply line
|
|
5. **User Comfort**: Sensor shouldn't restrict breathing or movement
|
|
|
|
---
|
|
|
|
## Optional Enhancements
|
|
|
|
| Feature | Complexity | Description |
|
|
|---------|------------|-------------|
|
|
| Breath rate display | Low | Count peaks per minute, show on OLED |
|
|
| Guided breathing mode | Medium | LEDs/display guide user to target breath rate |
|
|
| Data logging | Medium | SD card or WiFi upload of session data |
|
|
| Multiple bags | Medium | Different bags for inhale vs exhale |
|
|
| Haptic feedback | Medium | Vibration motor mirrors breath |
|
|
| Sound sync | High | Audio tones follow breath pattern |
|
|
| VR integration | High | Breath controls virtual environment |
|