diff --git a/arduino/hev_prototype_v1/src/BreathingLoop.cpp b/arduino/hev_prototype_v1/src/BreathingLoop.cpp index 43e19bdf7558e7e5d925665c5310480d81cae6b6..934f39fd3ddfc1dd2525faa5f11ec4a615eaadb4 100644 --- a/arduino/hev_prototype_v1/src/BreathingLoop.cpp +++ b/arduino/hev_prototype_v1/src/BreathingLoop.cpp @@ -82,6 +82,12 @@ BreathingLoop::BreathingLoop() _min_inhale_time = 150; _min_exhale_time = 300; _max_exhale_time = 30000; // for mandatory cycle - changed to 30s for the sponteneous breath testing + + _targets.respiratory_rate = 20.0; + _targets.ie_ratio = 0.5; + _targets.ie_selected = false; + _targets.pressure = 15; + _targets.volume = 400; } BreathingLoop::~BreathingLoop() @@ -738,6 +744,7 @@ void BreathingLoop::updateFromTargets() { _pid.target_final_pressure = _targets.pressure; //TODO - should fix this to one variable + logMsg("targets "+String(_targets.ie_ratio) +" "+String(_targets.ie_selected)); if (_targets.ie_selected == true) setIERatio(); updateIE(); @@ -905,7 +912,7 @@ void BreathingLoop::doPID(){ //Checking minium and maximum duty cycle - float minimum_open_frac = 0.52; //Minimum opening to avoid vibrations on the valve control + float minimum_open_frac = 0.53; //Minimum opening to avoid vibrations on the valve control float maximum_open_frac = 0.74; //Maximum opening for the PID control _pid.valve_duty_cycle = _pid.proportional + _pid.integral + (_pid.Kd * _pid.derivative) + minimum_open_frac; diff --git a/arduino/hev_prototype_v1/src/BreathingLoop.h b/arduino/hev_prototype_v1/src/BreathingLoop.h index caa1cd9df4ada15c50e868f6f2f74e7ae8f4880c..8a38b2d547d06db593918678e002c199f93626ef 100644 --- a/arduino/hev_prototype_v1/src/BreathingLoop.h +++ b/arduino/hev_prototype_v1/src/BreathingLoop.h @@ -51,7 +51,7 @@ public: float getVolume(); float getAirwayPressure(); pid_variables& getPIDVariables(); - target_variables &BreathingLoop::getTargetVariables(); + target_variables &getTargetVariables(); states_durations &getDurations(); cycle_readings &getCycleReadings(); diff --git a/arduino/hev_prototype_v1/src/UILoop.cpp b/arduino/hev_prototype_v1/src/UILoop.cpp index 50e8442498235c1365dceb0810e916f9ff116cf1..87915c6153f9c3b668810270bed3e5a709bdd62b 100644 --- a/arduino/hev_prototype_v1/src/UILoop.cpp +++ b/arduino/hev_prototype_v1/src/UILoop.cpp @@ -266,6 +266,9 @@ int UILoop::doCommand(cmd_format &cf) case CMD_TYPE::SET_PID: cmdSetPID(cf); break; + case CMD_TYPE::SET_TARGET: + cmdSetTarget(cf); + break; default: break; } diff --git a/arduino/hev_prototype_v1/src/ValvesController.cpp b/arduino/hev_prototype_v1/src/ValvesController.cpp index 1a17a95a1d150a5dc9171dbd04fabd3f59d8380b..f521ef91f228055139ffc1f80cdefc43d86ad56e 100644 --- a/arduino/hev_prototype_v1/src/ValvesController.cpp +++ b/arduino/hev_prototype_v1/src/ValvesController.cpp @@ -49,7 +49,7 @@ ValvesController::ValvesController() _valve_params.inhale_duty_cycle = 0; _valve_params.inhale_open_max = MAX_VALVE_FRAC_OPEN; - _valve_params.inhale_open_min = 0.52; + _valve_params.inhale_open_min = 0.53; _valve_params.valve_air_in_enable = 1; _valve_params.valve_o2_in_enable = 1; _valve_params.valve_purge_enable = 1; diff --git a/raspberry-dataserver/CommsDebug.py b/raspberry-dataserver/CommsDebug.py index 1adf4bed8d63eabaf8fc80ad4c9ecc189faaa92b..dddc90f3ab91f1e09e143f3beb711415e77332bb 100755 --- a/raspberry-dataserver/CommsDebug.py +++ b/raspberry-dataserver/CommsDebug.py @@ -35,7 +35,7 @@ class Dependant(object): def update_llipacket(self, payload): global fsm - logging.info(f"payload received: {payload}") + #logging.info(f"payload received: {payload}") #if payload.getType() == PAYLOAD_TYPE.ALARM.value: # logging.info(f"Alarm: {payload.alarm_code} of priority: {payload.alarm_type}") @@ -56,8 +56,8 @@ class Dependant(object): # logging.info(f"payload received: {payload} ") #if payload.getType() == PAYLOAD_TYPE.DEBUG.value: # logging.info(f" PID {payload.kp:3.6f} {payload.ki:3.6f} {payload.kd:3.6f} {payload.proportional:3.6f} {payload.integral:3.6f} {payload.derivative:3.6f} {payload.valve_duty_cycle:3.6f} {payload.target_pressure:3.6f} {payload.process_pressure:3.6f} fsm {fsm}") - #if payload.getType() == PAYLOAD_TYPE.LOGMSG.value: - # logging.info(f"LOGMSG {payload.timestamp}:{payload.message} {fsm}") + if payload.getType() == PAYLOAD_TYPE.LOGMSG.value: + logging.info(f"LOGMSG {payload.timestamp}:{payload.message} {fsm}") #if hasattr(payload, 'ventilation_mode'): # logging.info(f"payload received: {payload.ventilation_mode}") #if hasattr(payload, 'duration_inhale'): @@ -76,26 +76,26 @@ def send_cmd(cmd_type, cmd_code, param=0.0): # initialise as start command, automatically executes toByteArray() async def commsDebug(): - await asyncio.sleep(5) - cmd = send_cmd(cmd_type="SET_PID", cmd_code="KP", param=3.*0.001)#0.0108/5) # 108/4) # to set Kp=0.0002, param=200 i.e., micro_Kp - cmd = send_cmd(cmd_type="SET_PID", cmd_code="KI", param=3.*0.0003)#0.00162*0.4)#0.0054/2) # 0004)#0002) # to set Kp=0.0002, param=200 i.e., micro_Kp + await asyncio.sleep(1) + cmd = send_cmd(cmd_type="SET_PID", cmd_code="KP", param=2.5*0.001)#0.0108/5) # 108/4) # to set Kp=0.0002, param=200 i.e., micro_Kp + cmd = send_cmd(cmd_type="SET_PID", cmd_code="KI", param=2.5*0.0003)#0.00162*0.4)#0.0054/2) # 0004)#0002) # to set Kp=0.0002, param=200 i.e., micro_Kp cmd = send_cmd(cmd_type="SET_PID", cmd_code="KD", param=0.0)#0.00162*1.5)#0.0054/2) # to set Kp=0.0002, param=200 i.e., micro_Kp - cmd = send_cmd(cmd_type="SET_PID", cmd_code="TARGET_FINAL_PRESSURE", param=25.5)#set Kp=0.0002, param=200 i.e., micro_Kp + cmd = send_cmd(cmd_type="SET_PID", cmd_code="TARGET_FINAL_PRESSURE", param=15.0)#set Kp=0.0002, param=200 i.e., micro_Kp cmd = send_cmd(cmd_type="SET_PID", cmd_code="NSTEPS", param=3) # to set Kp=0.0002, param=200 i.e., micro_Kp # # Change TIMEOUT of breathing cycle (BUFF-PRE-INHALE) cmd = send_cmd(cmd_type="SET_DURATION", cmd_code="BUFF_PRE_INHALE", param=10.) # # Change TIMEOUT of breathing cycle (INHALE) - cmd = send_cmd(cmd_type="SET_DURATION", cmd_code="INHALE", param=2000.) # + cmd = send_cmd(cmd_type="SET_DURATION", cmd_code="INHALE", param=1000.) # # Change TIMEOUT of breathing cycle (PAUSE) cmd = send_cmd(cmd_type="SET_DURATION", cmd_code="PAUSE", param=10.) # # Change TIMEOUT of breathing cycle (EXHALE-FILL) cmd = send_cmd(cmd_type="SET_DURATION", cmd_code="EXHALE_FILL", param=1600.) # # Change TIMEOUT of breathing cycle (EXHALE) - cmd = send_cmd(cmd_type="SET_DURATION", cmd_code="EXHALE", param=25390.) # + cmd = send_cmd(cmd_type="SET_DURATION", cmd_code="EXHALE", param=8000.) # # Start the cycles - cmd = send_cmd(cmd_type="SET_VALVE", cmd_code="INHALE_TRIGGER_THRESHOLD", param=0.005) # to set Kp=0.0002, param=200 i.e., micro_Kp + cmd = send_cmd(cmd_type="SET_VALVE", cmd_code="INHALE_TRIGGER_THRESHOLD", param=0.0005) # to set Kp=0.0002, param=200 i.e., micro_Kp # Enable exhale trigger threshold - cmd = send_cmd(cmd_type="SET_VALVE", cmd_code="EXHALE_TRIGGER_THRESHOLD", param=0.1) # to set Kp=0.0002, param=200 i.e., micro_Kp + cmd = send_cmd(cmd_type="SET_VALVE", cmd_code="EXHALE_TRIGGER_THRESHOLD", param=0.25) # to set Kp=0.0002, param=200 i.e., micro_Kp # Start the cycles cmd = CommandFormat(cmd_type="SET_MODE", cmd_code="HEV_MODE_PC_AC", param=0) @@ -104,8 +104,10 @@ async def commsDebug(): #comms.writePayload(cmd) print('sent cmd start') await asyncio.sleep(1) - cmd = send_cmd(cmd_type="SET_VALVE", cmd_code="INHALE_TRIGGER_ENABLE", param=1) - cmd = send_cmd(cmd_type="SET_VALVE", cmd_code="EXHALE_TRIGGER_ENABLE", param=1) + cmd = send_cmd(cmd_type="SET_VALVE", cmd_code="INHALE_TRIGGER_ENABLE", param=0) + cmd = send_cmd(cmd_type="SET_VALVE", cmd_code="EXHALE_TRIGGER_ENABLE", param=0) + cmd = send_cmd(cmd_type="SET_TARGET", cmd_code="RESPIRATORY_RATE", param=10.0) + cmd = send_cmd(cmd_type="SET_TARGET", cmd_code="IE_RATIO", param=0.2) #print('sent inhale + exhale trigger -> 1') toggle = "STOP" while True: