def test_mode_pump(): p_volume = interfaces.read_user_value("Volume: ") while True: p_direction = interfaces.read_user_value("Direction (0/1):") if p_direction == 0 or p_direction == 1: interfaces.lcd_clear() interfaces.pump_volume(float(p_volume), int(p_direction)) break
def _calibrate_temperature(): """Routine for calibrating the temperature probe.""" expected_temperature = interfaces.read_user_value( "Ref solution temperature?") interfaces.lcd_out("Put probe in sol", style=constants.LCD_CENT_JUST, line=1) interfaces.lcd_out("", line=2) interfaces.lcd_out("Press 1 to", style=constants.LCD_CENT_JUST, line=3) interfaces.lcd_out("record value", style=constants.LCD_CENT_JUST, line=4) # Waits for user to press enter interfaces.read_user_input() expected_resistance = analysis.calculate_expected_resistance( expected_temperature) actual_temperature, actual_resistance = interfaces.read_temperature() interfaces.lcd_clear() interfaces.lcd_out( "Recorded temperature: {0:0.3f}".format(actual_temperature), line=1) diff = expected_resistance - actual_resistance new_ref_resistance = ( constants.TEMPERATURE_REF_RESISTANCE + diff * constants.TEMPERATURE_REF_RESISTANCE / expected_resistance) constants.TEMPERATURE_REF_RESISTANCE = float(new_ref_resistance) # reinitialize sensors with calibrated values interfaces.lcd_out("{}".format(new_ref_resistance), line=2) interfaces.setup_interfaces()
def _calibrate_pH(): """Routine for calibrating pH sensor.""" # get first buffer pH buffer1_actual_pH = interfaces.read_user_value("Enter buffer pH:") interfaces.lcd_out("Put sensor in buffer", style=constants.LCD_CENT_JUST, line=1) interfaces.lcd_out("", line=2) interfaces.lcd_out("Press 1 to", style=constants.LCD_CENT_JUST, line=3) interfaces.lcd_out("record value", style=constants.LCD_CENT_JUST, line=4) # Waits for user to press enter interfaces.read_user_input() buffer1_measured_volts = float(interfaces.read_raw_pH()) interfaces.lcd_clear() interfaces.lcd_out("Recorded pH and volts:", line=1) interfaces.lcd_out( "{0:>2.5f} pH, {1:>3.4f} V".format(buffer1_actual_pH, buffer1_measured_volts), line=2, ) interfaces.lcd_out("Press any button", style=constants.LCD_CENT_JUST, line=3) interfaces.lcd_out("to continue", style=constants.LCD_CENT_JUST, line=4) interfaces.read_user_input() # set calibration constants constants.PH_REF_VOLTAGE = buffer1_measured_volts constants.PH_REF_PH = buffer1_actual_pH
def edit_settings(): """Resets calibration constants to default""" interfaces.lcd_out("Reset calibration", line=1) interfaces.lcd_out("settings to default?", line=2) interfaces.lcd_out("1: Yes", line=3) interfaces.lcd_out("2: No", line=4) selection = interfaces.read_user_input() if selection != "n" or selection != "N": analysis.reset_calibration() analysis.save_calibration_data() interfaces.lcd_clear() interfaces.lcd_out("Default constants restored", 1) interfaces.lcd_out("Press any to cont.", 3) interfaces.read_user_input() interfaces.lcd_out("Set volume in pump? (Y/n)", 1) selection = interfaces.read_user_input() if selection != "n" or selection != "N": vol_in_pump = interfaces.read_user_value("Volume in pump: ") constants.volume_in_pump = vol_in_pump analysis.save_calibration_data() interfaces.lcd_out("Volume in pump set", 1) interfaces.lcd_out("Press any to cont.", 3) interfaces.read_user_input()
def total_alkalinity_titration(): """Runs through the full titration routine to find total alkalinity""" # pull in 1 ml of solution into pump for use in titration if constants.volume_in_pump < 1.0: p_volume = 1.0 - constants.volume_in_pump interfaces.pump_volume(float(p_volume), 0) # data object to hold recorded data data = [( "temperature", "pH V", "solution volume", "weight", "salinity", "Buffer pH", "Buffer pH V", )] # query user for initial solution weight initial_weight = interfaces.read_user_value("Sol. weight (g):") salinity = interfaces.read_user_value("Sol. salinity (ppt):") buffer_ph = constants.PH_REF_PH buffer_v = constants.PH_REF_VOLTAGE interfaces.lcd_clear() interfaces.lcd_out("Calibrate pH probe?", line=1) interfaces.lcd_out("Yes: 1", line=2) interfaces.lcd_out("No (use old): 0", line=3) interfaces.lcd_out("{0:>2.3f} pH: {1:>2.4f} V".format(buffer_ph, buffer_v), line=4) selection = interfaces.read_user_input() if selection == constants.KEY_1: _calibrate_pH() data.append( (None, None, None, initial_weight, salinity, buffer_ph, buffer_v)) # while not initial_weight.replace('.', '').isdigit(): # interfaces.lcd_out("Please enter a numeric value.", console=True) # initial_weight = interfaces.read_user_input() # initial titration (bring solution close to 3.5) # todo set stir speed slow total_sol = 0 interfaces.lcd_out("Bring pH to 3.5:", line=1) interfaces.lcd_out("Manual: 1", line=2) interfaces.lcd_out("Automatic: 2", line=3) interfaces.lcd_out("Stir speed: slow", line=4) user_choice = interfaces.read_user_input() # wait until solution is up to temperature interfaces.temperature_controller.activate() interfaces.lcd_clear() interfaces.lcd_out("Heating to 30 C...", line=1) interfaces.lcd_out("Please wait...", style=constants.LCD_CENT_JUST, line=3) if user_choice == "1": interfaces.lcd_out("MANUAL SELECTED", style=constants.LCD_CENT_JUST, line=4) else: interfaces.lcd_out("AUTO SELECTED", style=constants.LCD_CENT_JUST, line=4) while not interfaces.temperature_controller.at_temperature(): interfaces.temperature_controller.update() temperature = interfaces.temperature_controller.get_last_temperature() interfaces.lcd_out( "Temp: {0:>4.3f} C".format(temperature), style=constants.LCD_CENT_JUST, line=2, ) if user_choice == "1": # Manual while user_choice == "1": p_volume = interfaces.read_user_value("Volume: ") interfaces.lcd_clear() interfaces.lcd_out("Direction (0/1): ", line=1) p_direction = interfaces.read_user_input() p_volume = float(p_volume) p_direction = int(p_direction) if p_direction == 1: total_sol += p_volume if p_direction == 0 or p_direction == 1: interfaces.pump_volume(p_volume, p_direction) current_pH = wait_pH_stable(total_sol, data) interfaces.lcd_out("Current pH: {0:>4.5f}".format(current_pH), line=1) interfaces.lcd_out("Continue adding solution?", line=2) interfaces.lcd_out("(0 - No, 1 - Yes)", line=3) interfaces.lcd_out("", line=4) user_choice = interfaces.read_user_input() else: # Automatic total_sol = titration(constants.TARGET_PH_INIT, constants.INCREMENT_AMOUNT_INIT, data, 0, 0) total_sol = titration( constants.TARGET_PH_MID, constants.INCREMENT_AMOUNT_MID, data, total_sol, 600, ) # 3.5 -> 3.0 # todo set stir speed fast interfaces.lcd_out("Stir speed: fast", line=4) titration(constants.TARGET_PH_FINAL, constants.INCREMENT_AMOUNT_FINAL, data, total_sol) # save data to csv analysis.write_titration_data(data) interfaces.temperature_controller.deactivate()
def test_mode_set_volume(): constants.volume_in_pump = interfaces.read_user_value("Volume in pump: ")
def test_mode_set_volume(): new_volume = interfaces.read_user_value("Volume in pump: ") interfaces.set_pump_volume(new_volume)