GitHub 加速计划中的ve/ventilator项目是一个低成本开源呼吸机解决方案,其核心控制逻辑集中在ventilator_control.ino文件中。本文将深入解析这个关键文件的功能实现、核心算法和使用方法,帮助开发者快速理解开源呼吸机的工作原理。
ventilator_control.ino作为项目的主控程序,实现了两种基本通气模式:
程序采用Arduino平台开发,通过控制伺服电机实现气道压力的精准调节,同时支持按键操作切换工作模式和压力等级。
程序开头定义了系统运行的核心参数:
#define version "20200316.2" // 固件版本
#define rate 16 // 呼吸频率(次/分钟)
#define enable_motor true // 电机使能标志
#define max_speed 180 // 电机最大速度
#define min_speed 0 // 电机最小速度
#define PEEP_speed 40 // PEEP基础压力(约5cmH2O)
这些参数决定了呼吸机的基本工作特性,其中PEEP_speed参数直接影响呼气末压力水平,是保证患者肺部氧合的关键设置。
setup()函数完成系统初始化,包括:
特别值得注意的是电机初始化过程:
myservo.write(max_speed);
delay(3000); // 等待ESC启动并采样最大值
myservo.write(min_speed);
delay(2000); // 等待ESC采样最小值
myservo.write(PEEP_speed); // 设置初始PEEP压力
这段代码通过向电子调速器(ESC)发送最大和最小信号,完成电机控制的校准过程,确保后续压力控制的准确性。
在CPAP模式下,系统维持恒定的气道压力:
if(mode == 0)
target_speed_low = target_speed_high;
通过将吸气和呼气阶段的目标速度设为相同值,实现持续正压通气。压力等级可通过按键调节,共分为5级(0-4),对应不同的目标速度:
if (speed_state == 0) // ~10cmH2O
if (speed_state == 1)
if (speed_state == 2)
if (speed_state == 3) // ~18cmH2O
if (speed_state == 4)
PEEP模式实现呼吸周期的压力变化:
cycle_phase = (cycle_phase+1)%2;
if(cycle_phase == 0) else
呼吸频率由rate参数控制,通过cycle_counter变量实现定时切换:
if( (30*100)/rate < cycle_counter){
cycle_phase = (cycle_phase+1)%2; // 切换呼吸阶段
cycle_counter = 0;
}
系统通过按键实现模式切换和参数调节:
按键检测代码:
if(buttonState == 0 && buttonStatePrev == 1){
click_loop_count = loop_count;
click_count += 1;
}
模式切换后,系统通过LED闪烁提供视觉反馈,并通过串口输出当前状态:
Serial.print(" set to CPAP level: ");
Serial.println(speed_state);

伺服电机控制是系统的核心硬件接口,通过Servo库实现:
Servo myservo;
myservo.attach(servo_pin,1000,2000); // 附加到指定引脚
myservo.write(target_speed); // 设置目标速度
这里的1000和2000参数指定了伺服电机的脉冲宽度范围,确保与电子调速器(ESC)的兼容性。
系统提供了丰富的调试功能:
// current = analogRead(current_pin);
// Serial.print(current);
// Serial.print(",");
// Serial.println(digitalRead(button_pin));
对于希望扩展功能的开发者,可以参考breathability_control/breathability_control.ino中的压力传感器和流量控制实现,该文件提供了更复杂的闭环控制逻辑:
float relative_pressure = mbar_to_cmh2o*(pressure_sensor.GetPres()-pressure_sensor_zero);
int p = target_flow - flow_smooth;
target_speed += p/10-d; // PID控制算法
要使用此代码,需按照以下步骤操作:
克隆项目仓库:
git clone https://gitcode.com/gh_mirrors/ve/ventilator
使用Arduino IDE打开ventilator_control/ventilator_control.ino文件
安装必要的库:Servo、Wire等
根据硬件配置调整引脚定义和参数设置
上传代码到Arduino控制器

ventilator_control.ino作为开源呼吸机项目的核心控制文件,通过简洁高效的代码实现了基本的通气功能。其模块化设计使得功能扩展和硬件适配变得简单,为低成本呼吸机的开发提供了良好基础。开发者可以基于此代码进一步实现更复杂的通气模式和安全监控功能,为医疗资源短缺地区提供可行的呼吸支持解决方案。
通过理解这段代码,我们不仅能掌握呼吸机的基本工作原理,还能学习到嵌入式系统在医疗设备中的应用实践,包括实时控制、人机交互和传感器数据处理等关键技术。