def ShutAllBatteryHeaters(): """ shut all heaters off """ heaterIdentifers = (PSS_HTR_EN_1_GPIO, PSS_HTR_EN_2_GPIO,\ PSS_HTR_EN_3_GPIO, PSS_HTR_EN_4_GPIO) SensorManager.gpio_output(PSS_HTR_MUX_SEL_GPIO, OFF) for iden in heaterIdentifers: SensorManager.gpio_output(heaterIdentifers[i], OFF)
def main(): ds1624 = [TEMP_PAYLOAD_A, TEMP_BAT_1] ds18b20 = [PANEL0, PANEL1] for temp_sensor in ds1624: SensorManager.init_temp_sensor(temp_sensor) SensorManager.gpio_output(PSS_HTR_EN_1_GPIO, ON) with open("/root/csdc3/src/sensors/temp_log.txt", "a") as f: for i in range(1): start = time.time() temperatures = [] for temp_sensor in ds1624: value = SensorManager.read_temp_sensor(temp_sensor) temperatures.append(value) for temp_sensor in ds18b20: value = SensorManager.get_panel_data(temp_sensor) temperatures.append(value) readtime = time.time() - start temperatures.append(readtime) f.write(str(temperatures) + '\n') SensorManager.gpio_output(PSS_HTR_EN_1_GPIO, OFF) for temp_sensor in ds1624: SensorManager.stop_temp_sensor(temp_sensor)
def test_gpio(self): for i in range(5): SensorManager.gpio_output(PAYLOAD_HTR_A_GPIO, ON) time.sleep(0.2) retval = SensorManager.gpio_output(PAYLOAD_HTR_A_GPIO, OFF) time.sleep(0.2) self.assertEqual(True, retval)
def set_heaters(self, experiment=0, state=False): if state == False: SensorManager.gpio_output(self.heater, OFF) else: SensorManager.gpio_output(self.heater, ON) return True
def test_magnetometer(self): hmc5883 = [MAG_0, MAG_1, MAG_2] for sensor in hmc5883: SensorManager.init_magnetometer(sensor) value = SensorManager.read_magnetometer(sensor) self.assertNotEqual(value, -1) SensorManager.stop_magnetometer(sensor)
def main(): parser = argparse.ArgumentParser(description="Deployment script", formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument("-t", "--time", type=int, default=5, help="Time deployment switch is on") args = parser.parse_args() deploy_time = args.time SensorManager.gpio_output(DEPLOYMENT_SW_A_GPIO, ON) sleep(deploy_time) SensorManager.gpio_output(DEPLOYMENT_SW_A_GPIO, OFF)
def end(self): print("Payload ending...") insertDebugLog(NOTICE, "Ending", PAYLOAD, int(time.time())) SensorManager.stop_temp_sensor(self.temp_sensor) SensorManager.stop_adc_sensor(ADC) self.set_heaters(self.experiment, False) self.set_power(False)
def main(): hmc5883 = [MAG_0, MAG_1, MAG_2] for sensor in hmc5883: SensorManager.init_magnetometer(sensor) while True: for sensor in hmc5883: value = SensorManager.read_magnetometer(sensor) print(value) print sleep(1)
def set_power(self, isOn=False): insertDebugLog(NOTICE, "Power to %d" % (isOn), PAYLOAD, int(time.time())) print("Setting power for payload: ", isOn) if isOn == False: SensorManager.gpio_output(PAYLOAD_EN_GPIO, OFF) SensorManager.gpio_output(OLD_PAYLOAD_EN_GPIO, OFF) else: SensorManager.gpio_output(PAYLOAD_EN_GPIO, ON) SensorManager.gpio_output(OLD_PAYLOAD_EN_GPIO, ON) SensorManager.gpio_output(SENSORS_EN_GPIO, ON) return True
def start(self): insertDebugLog(NOTICE, "Starting. Runtime: %ds, Actuate time: %ds, Max strain: %d, Sampling Freq: %d." % \ (self.max_time, self.actuate_time, self.max_loadcell, \ self.heater_period), PAYLOAD, int(time.time())) print("Starting payload...") print("Runtime: %ds, Actuate time: %ds, Max strain: %d, Sampling period: %ds" % \ (self.max_time, self.actuate_time, self.max_loadcell, \ self.heater_period)) if not self.check_initial_conditions(): return False self.lock.acquire() self.set_power(True) self.init_sensors() start_time = time.time() elapsed = 0 while True: heater_temp = 0 if elapsed <= self.actuate_time or heater_temp < self.max_temp: self.set_heaters(self.experiment, True) time.sleep(self.heater_period) else: print("No longer turning heaters on") time.sleep(self.heater_period) self.set_heaters(self.experiment, False) self.set_heaters(self.experiment, False) elapsed = time.time() - start_time off_time = time.time() print("[" + str(round(elapsed, 3)) + " s] ", end='') strain, force, adc_temp = SensorManager.read_adc(self.experiment, ADC) heater_temp = SensorManager.read_temp_sensor(self.temp_sensor) print(strain, force, adc_temp, heater_temp) sleep_time = time.time() - off_time elapsed = time.time() - start_time time.sleep(abs(self.heater_period - sleep_time)) elapsed = time.time() - start_time strain, force, adc_temp = SensorManager.read_adc(self.experiment, ADC) heater_temp = SensorManager.read_temp_sensor(self.temp_sensor) print("[" + str(round(elapsed, 3)) + " s] ", end='') print(strain, force, adc_temp, heater_temp) if self.is_end_condition(strain, elapsed): break if self.experiment: exp = 'B' else: exp = 'A' insertPayloadLog(int(start_time), int(time.time()), exp) self.end() self.lock.release() return True
def test_pss_gpio(self): gpios = [PSS_HTR_EN_1_GPIO, PSS_HTR_EN_2_GPIO, PSS_HTR_EN_3_GPIO, \ PSS_HTR_EN_4_GPIO, PSS_HTR_MUX_SEL_GPIO] for gpio in gpios: retval = SensorManager.gpio_output(gpio, self.gpioState) self.assertEqual(True, retval)
def main(): ds18b20 = [PANEL0, PANEL1, PANEL2, PANEL3] while True: for temp_sensor in ds18b20: value = SensorManager.get_panel_data(temp_sensor) print value, print
def check_initial_conditions(self): # Check battery voltage SensorManager.init_power_sensor(POWER) power = SensorManager.read_power_sensor(POWER) vbat = power[0] / 1000. # Check available memory free_space = utility.get_disk_usage('/') #print("Free space", free_space) if free_space >= self.PAYLOAD_MIN_SPACE and vbat >= self.PAYLOAD_MIN_VBAT: return True else: print("Experiment cancelled") print(free_space, vbat) insertDebugLog(NOTICE, "Cancelled. Free space: %d, vbat: %.2f" % \ (free_space, vbat, PAYLOAD, int(time.time()))) return False
def main(): ser = init_transceiver() SensorManager.gpio_output(RADIO_EN_GPIO, ON) time.sleep(5) if ser.isOpen(): for i in range(5): curr_time = int(time.time()) power_tuple = selectTelemetryLog(POWER) cdh_brd_temp = selectTelemetryLog(TEMP_CDH_BRD) power = power_tuple[0][1] temp = cdh_brd_temp[0][1] print(temp) SC_writeCallback(SC_transmit("POWER:%s| CDH_TEMP:%s | %d" % (power, temp, curr_time)), ser) time.sleep(5) else: ser.open() SensorManager.gpio_output(RADIO_EN_GPIO, OFF)
def main(): SensorManager.gpio_output(PAYLOAD_EN_GPIO, ON) SensorManager.init_adc(ADC) start_time = time.time() try: while True: strain, force, adc_temp = SensorManager.read_adc(0, ADC) elapsed = time.time() - start_time print("[" + str(round(elapsed, 3)) + " s] ") print(strain, force, adc_temp) time.sleep(2) except KeyboardInterrupt: SensorManager.stop_adc_sensor(ADC) SensorManager.gpio_output(PAYLOAD_EN_GPIO, OFF)
def test_adc_init(self): SensorManager.mux_select(ADC) SensorManager.init_adc(ADC) addr = SensorEntropy.addr(ADC) adc_reg = SensorEntropy.reg(ADC) bus = SensorManager.bus config = bus.read_byte_data(addr, adc_reg['CONFIG_REG']) mode = bus.read_byte_data(addr, adc_reg['ADV_CONFIG_REG']) conv = bus.read_byte_data(addr, adc_reg['CONV_RATE_REG']) ch = bus.read_byte_data(addr, adc_reg['CHANNEL_DISABLE_REG']) limits = bus.read_byte_data(addr, adc_reg['LIMIT_REG_BASE']) self.assertEqual(config, 0x01) self.assertEqual(mode, 0x04) self.assertEqual(conv, 0x01) self.assertEqual(ch, 0x00) self.assertEqual(limits, 0x05)
def test_adc_stop(self): SensorManager.mux_select(ADC) SensorManager.stop_adc_sensor(ADC) SensorManager.mux_select(ADC) SensorManager.init_adc(ADC) addr = SensorEntropy.addr(ADC) adc_reg = SensorEntropy.reg(ADC) bus = SensorManager.bus config = bus.read_byte_data(addr, adc_reg['CONFIG_REG']) self.assertEqual(config, 0x00)
def main(): bat_temp = [TEMP_BAT_1,TEMP_BAT_2,TEMP_BAT_3,TEMP_BAT_4] brd_temp = [TEMP_EPS_BRD, TEMP_CDH_BRD, TEMP_PAYLOAD_BRD] payload_temp = [TEMP_PAYLOAD_A, TEMP_PAYLOAD_B] chassis_temp = [TEMP_PAYLOAD_CHASSIS, TEMP_END_CAP] for sensor in (bat_temp + brd_temp + payload_temp + chassis_temp): SensorManager.init_temp_sensor(sensor) while True: print "\nBattery temperature" for sensor in bat_temp: print(SensorManager.read_temp_sensor(sensor)), print "\nBoard temperatures" for sensor in brd_temp: print(SensorManager.read_temp_sensor(sensor)), """ print "Chassis temperatures" for sensor in brd_temp: print(SensorManager.read_temp_sensor(sensor)), print "Payload temperatures" for sensor in brd_temp: print(SensorManager.read_temp_sensor(sensor)), """ print sleep(1) for sensor in bat_temp: SensorManager.stop_temp_sensor(sensor)
def __init__(self): rospy.init_node('pf') self.particle_publisher = rospy.Publisher("particlecloud", PoseArray, queue_size=10) self.occupancy_field = OccupancyField() self.transform_helper = TFHelper() self.particle_manager = ParticleManager() self.sensor_manager = SensorManager() self.particle_manager.init_particles(self.occupancy_field) self.scanDistance = 0.2 self.scanAngle = 0.5 self.moved = (0, 0)
def main(): magSensorList= [MAG_0, MAG_1, MAG_2] SensorManager.mux_select(magSensorList[0]) bus = smbus.SMBus(0) address = 0x1e write_byte(0, 0b01110000) # Set to 8 samples @ 15Hz write_byte(1, 0b00100000) # 1.3 gain LSb / Gauss 1090 (default) write_byte(2, 0b00000000) # Continuous sampling scale = 0.92 """ ***************** """ # for i in range(0,500): # x_out = read_word_2c(3) # y_out = read_word_2c(7) # z_out = read_word_2c(5) # # bearing = math.atan2(y_out, x_out) # if (bearing < 0): # bearing += 2 * math.pi # # print x_out, y_out, (x_out * scale), (y_out * scale) # time.sleep(0.1) """ ***************** """ x_out = read_word_2c(3) * scale y_out = read_word_2c(7) * scale z_out = read_word_2c(5) * scale bearing = math.atan2(y_out, x_out) if (bearing < 0): bearing += 2 * math.pi print("Bearing: {}".format(math.degrees(bearing))) """ ***************** """
def adc_driver_test(): SensorManager.gpio_output(PAYLOAD_EN_GPIO, ON) SensorManager.init_adc_driver() try: while True: for i in range(7): value = SensorManager.read_adc_driver(i) print value, print time.sleep(1) except KeyboardInterrupt: SensorManager.gpio_output(PAYLOAD_EN_GPIO, OFF)
def check_health(self): """ Determines whether battery chargers must be set manually """ # Check if sensors are reading data in the system # if areSensorsAcquiringData(): # return # Check if ShutAllBatteryHeaters is running if self.heaterShutDownLock.isLocked(): # Shut all battery heaters off print('Battery heaters must remain shut off') self.controlStatus = True SensorManager.gpio_output(PSS_HTR_MUX_SEL_GPIO, OFF) for heater in heaterIdentifers: SensorManager.gpio_output(heater, OFF) return # # Get temperature inputs # tempIdentifiers = (TEMP_BAT_1,) # TEMP_BAT_2, TEMP_BAT_3, TEMP_BAT_4) # tempValues = [] # for iden in tempIdentifiers: # SensorManager.init_temp_sensor(iden) # valueList = [] # # Get median of 5 value readings to remove outliers # for i in range(0,5): # valueList.append(SensorManager.read_temp_sensor(iden)) # tempValue = median(valueList) # print(tempValue) # SensorManager.stop_temp_sensor(iden) # # Keep final value of sensor # tempValues.append(tempValue) # # # Get status identifiers # statusIdentifiers = (PSS_HTR_STAT_1_GPIO, PSS_HTR_STAT_2_GPIO,\ # PSS_HTR_STAT_3_GPIO, PSS_HTR_STAT_4_GPIO) # statusValues = [] # for iden in statusIdentifiers: # statusValues.append(SensorManager.gpio_input(iden,0)) batteryTempAndStatusDict = BatteryHeatersReader() tempValues = [item["temp"] for item in batteryTempAndStatusDict] statusValues = [item["heaters"] for item in batteryTempAndStatusDict] # Define manual heater identifiers heaterIdentifers = (PSS_HTR_EN_1_GPIO, PSS_HTR_EN_2_GPIO,\ PSS_HTR_EN_3_GPIO, PSS_HTR_EN_4_GPIO) print('Status value: ' + str(statusValues[0])) print('Is analog:', SensorManager.gpio_input(PSS_HTR_MUX_SEL_GPIO, time.time())) # Check if payload is running if self.isPayloadAcquiringData(): # Shut all battery heaters off print('Payload is running... shutting off all battery heaters') self.controlStatus = True SensorManager.gpio_output(PSS_HTR_MUX_SEL_GPIO, OFF) for heater in heaterIdentifers: SensorManager.gpio_output(heater, OFF) return # Find out if analog or OBC is in control for i in range(0,len(tempValues)): if (self.temp_threshold(tempValues[i], 'GT') and statusValues[i] == 1)\ or (self.temp_threshold(tempValues[i], 'LT') and statusValues[i] == 0): # OBC will take control self.controlStatus = True SensorManager.gpio_output(PSS_HTR_MUX_SEL_GPIO, OFF) break else: # Analog will take control self.controlStatus = False SensorManager.gpio_output(PSS_HTR_MUX_SEL_GPIO, ON) # Perform OBC control if required if self.controlStatus == True: for i in range(0,len(tempValues)): if tempValues[i] != None: if self.temp_threshold(tempValues[i], 'GT') and statusValues[i] == 0: print('Case 1: Temp > threshold, heaters off, no action required') elif self.temp_threshold(tempValues[i], 'GT') and statusValues[i] == 1: print('Case 2: Temp > threshold, heaters on, OBC must shut off heater') SensorManager.gpio_output(heaterIdentifers[i], OFF) elif self.temp_threshold(tempValues[i], 'LT') and statusValues[i] == 0: print('Case 3: Temp < threshold, heaters off, OBC must activate heater') if self.is_battery_safe(): SensorManager.gpio_output(heaterIdentifers[i], ON) elif self.temp_threshold(tempValues[i], 'LT') and statusValues[i] == 1: print('Case 4: Temp < threshold, heaters on, no action required')
def test_ds1624(self): ds1624 = [TEMP_PAYLOAD_A, TEMP_BAT_1] for sensor in ds1624: SensorManager.init_temp_sensor(sensor) value = SensorManager.read_temp_sensor(sensor) self.assertNotEqual(value, -1)
def main(): while True: SensorManager.gpio_output(PAYLOAD_EN_GPIO, ON) time.sleep(2) SensorManager.gpio_output(PAYLOAD_EN_GPIO, OFF) time.sleep(2)
def main(): while True: payload_current = SensorManager.read_switch_current(PAYLOAD_SWITCH_ADC_ID, True) radio_current = SensorManager.read_switch_current(RADIO_SWITCH_ADC_ID, True) print(payload_current, radio_current) sleep(1)
def test_ds18b20(self): ds18b20 = [PANEL0, PANEL1] for sensor in ds18b20: value = SensorManager.get_panel_data(sensor) self.assertNotEqual(value, -1)
#!/usr/bin/env python3 from sensor_manager import SensorManager from ble_controller import BleController, BleDelegate from mqtt import MqttBroker import json import time SENSOR_ADDR = "F0:C7:7F:94:7D:D1" SENSOR_UUID = "0000ffe1-0000-1000-8000-00805f9b34fb" SENSOR_HANDLE = 0x12 TOPIC_ENVIRONMENT = "home/env/" TOPIC_DATASET = "dataset" TOPIC_GET = "/raw" sensor_manager = SensorManager() ble = BleController() mqtt = MqttBroker() def on_ble_data(data): sensor_manager.receive_raw_data(data) def on_valid_data(data): print("New dataset received -> {}".format(data)) mqtt.publish(TOPIC_ENVIRONMENT + TOPIC_DATASET, json.dumps(data)) def on_sensor_data(sensor, data): mqtt.publish(TOPIC_ENVIRONMENT + sensor + TOPIC_GET, data)
def check_health(self): """ Determines whether battery chargers must be set manually """ # Check if sensors are reading data in the system # if areSensorsAcquiringData(): # return print('Threshold voltage:', self.thresholdVoltage) # Get temperature inputs tempIdentifiers = (TEMP_BAT_1) #, TEMP_BAT_2, TEMP_BAT_3, TEMP_BAT_4) tempValues = [] for iden in tempIdentifiers: SensorManager.init_temp_sensor(iden) valueList = [] # Get median of 5 value readings to remove outliers for i in range(0,5): valueList.append(SensorManager.read_temp_sensor(iden)) tempValue = median(valueList) print('Current temperature:', tempValue) SensorManager.stop_temp_sensor(iden) # Keep final value of sensor tempValues.append(tempValue) # Get status identifiers statusIdentifiers = (PSS_HTR_STAT_1_GPIO, PSS_HTR_STAT_2_GPIO,\ PSS_HTR_STAT_3_GPIO, PSS_HTR_STAT_4_GPIO) statusValues = [] for iden in statusIdentifiers: statusValues.append(SensorManager.gpio_input(iden,0)) # Define manual heater identifiers heaterIdentifiers = (PSS_HTR_EN_1_GPIO, PSS_HTR_EN_2_GPIO,\ PSS_HTR_EN_3_GPIO, PSS_HTR_EN_4_GPIO) # Check if ShutAllBatteryHeaters is running if self.heaterShutDownLock.isLocked(): # Shut all battery heaters off print('Battery heaters must remain shut off') self.controlStatus = True SensorManager.gpio_output(PSS_HTR_MUX_SEL_GPIO, OFF) for heater in heaterIdentifiers: SensorManager.gpio_output(heater, OFF) return # Check if payload is running if self.isPayloadAcquiringData(): # Shut all battery heaters off print('Payload is running... shutting off all battery heaters') self.controlStatus = True SensorManager.gpio_output(PSS_HTR_MUX_SEL_GPIO, OFF) for heater in heaterIdentifiers: SensorManager.gpio_output(heater, OFF) return # Take control if required for i in range(0,len(tempValues)): if self.temp_threshold(tempValues[i], 'GT') and statusValues[i] == 0: print('Case 1: [Analog] Heaters are turned on') self.controlStatus = False SensorManager.gpio_output(PSS_HTR_MUX_SEL_GPIO, ON) return elif self.temp_threshold(tempValues[i], 'GT') and statusValues[i] == 1: print('Case 2: [Digital] Heaters are turned off') self.controlStatus = True SensorManager.gpio_output(PSS_HTR_MUX_SEL_GPIO, OFF) SensorManager.gpio_output(heaterIdentifiers[i], OFF) return elif self.temp_threshold(tempValues[i], 'LT') and statusValues[i] == 0: print('Case 3: [Digital] Heaters are turned on') self.controlStatus = True SensorManager.gpio_output(PSS_HTR_MUX_SEL_GPIO, OFF) if self.is_battery_safe(): SensorManager.gpio_output(heaterIdentifiers[i], ON) return elif self.temp_threshold(tempValues[i], 'LT') and statusValues[i] == 1: print('Case 4: [Analog] Heaters are turned off') self.controlStatus = False SensorManager.gpio_output(PSS_HTR_MUX_SEL_GPIO, ON) return
def test_deployment_gpio(self): gpios = [DEPLOYMENT_SW_A_GPIO, DEPLOYMENT_SW_B_GPIO] for gpio in gpios: retval = SensorManager.gpio_output(gpio, self.gpioState) self.assertEqual(True, retval)
def test_cdh_gpio(self): gpios = [WATCHDOG_GPIO, SENSORS_EN_GPIO, RADIO_EN_GPIO, I2C_MUX_RESET_GPIO] for gpio in gpios: retval = SensorManager.gpio_output(gpio, self.gpioState) self.assertEqual(True, retval)
def test_payload_gpio(self): gpios = [PAYLOAD_HTR_A_GPIO, PAYLOAD_HTR_B_GPIO, PAYLOAD_EN_GPIO] for gpio in gpios: retval = SensorManager.gpio_output(gpio, self.gpioState) self.assertEqual(True, retval)
def test_ds1624(self): ds1624 = [TEMP_CDH_BRD] for sensor in ds1624: SensorManager.init_temp_sensor(sensor) value = SensorManager.read_temp_sensor(sensor) self.assertNotEqual(value, -1)