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)
Exemple #2
0
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)
Exemple #3
0
 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)
Exemple #4
0
    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
Exemple #5
0
 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)
Exemple #6
0
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)
Exemple #7
0
    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)
Exemple #9
0
 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
Exemple #10
0
    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
Exemple #11
0
    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)
Exemple #12
0
def main():
    ds18b20 = [PANEL0, PANEL1, PANEL2, PANEL3]
    while True:
        for temp_sensor in ds18b20:
            value = SensorManager.get_panel_data(temp_sensor)
            print value,
        print
Exemple #13
0
 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
Exemple #14
0
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)
Exemple #15
0
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)
Exemple #16
0
    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)
Exemple #17
0
    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)
Exemple #19
0
 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)))

    """ ***************** """
Exemple #21
0
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)
Exemple #22
0
    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')
Exemple #23
0
 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)
Exemple #24
0
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)
Exemple #26
0
 def test_ds18b20(self):
     ds18b20 = [PANEL0, PANEL1]
     for sensor in ds18b20:
         value = SensorManager.get_panel_data(sensor)
         self.assertNotEqual(value, -1)
Exemple #27
0
#!/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
Exemple #29
0
 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)
Exemple #30
0
 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)
Exemple #31
0
 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)
Exemple #32
0
 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)