X-Git-Url: https://defiant.homedns.org/gitweb/?p=ros_wild_thumper.git;a=blobdiff_plain;f=scripts%2Fsensor_board.py;h=c8a0c0ce018c256f9f623c6b949958edf6b98b13;hp=c688ff9616c019d5f7b5c5c3b30cb1d8a54a6d3f;hb=2f194b3fe82009a77b79021f0c57e6ca55c1706f;hpb=3e393a12f0aea0302fefa4616dcd93c1b3bf6299 diff --git a/scripts/sensor_board.py b/scripts/sensor_board.py index c688ff9..c8a0c0c 100755 --- a/scripts/sensor_board.py +++ b/scripts/sensor_board.py @@ -5,22 +5,28 @@ import sys import rospy import struct import prctl +import logging from datetime import datetime from time import sleep +from math import * from pyshared.i2c import i2c from pyshared.humidity import * from wild_thumper.msg import Sensor # Board warming offset -TEMP_ERROR = 0 # -2.5 # -5 # degree celsius +TEMP_ERROR = -3.0 # -5 # degree celsius PRESSURE_ERROR = -2.5 +A_dew_point = 17.271 +B_dew_point = 237.7 """ LDR: -val = [100 285 321 515 636 758 940 1023] -lux = [95 34 31 12 11 8 5 0] +val = [1023, 396.8, 110.75, 28.1] +lux = [0, 13.8, 164.9, 1341] """ +logger = logging.getLogger(__name__) + def get_i2c(addr): dev = i2c(addr) dev.write(struct.pack(">BB", 0x00, 0x0f)) @@ -39,7 +45,7 @@ def get(addr=0x58): temp_mess/=10.0 humidity_mess/=10.0 - lux = -3.9338e-07*ldr**3 +0.00083596*ldr**2 -0.58608*ldr +144.96 + lux = exp(-8.1065e-08*ldr**3 +8.8678e-05*ldr**2 -0.03636*ldr +8.1547) pressure_v = pressure*2.56/1024 pressure_kpa = P = (pressure_v/5 + 0.04) / 0.004 + PRESSURE_ERROR # datasheet @@ -73,9 +79,13 @@ class SensorBoard: while not rospy.is_shutdown(): if self.pub.get_num_connections() > 0: ldr, temp, humidity, pressure, co = get() - if (datetime.now() - t_last_check).seconds > 900: - ventilate = check_ventilate(temp, humidity) - t_last_check = datetime.now() + ventilate = None + try: + if (datetime.now() - t_last_check).seconds > 900: + ventilate = check_ventilate(temp, humidity) + t_last_check = datetime.now() + except Exception as e: + logger.error(e) msg = Sensor() msg.header.stamp = rospy.Time.now() @@ -85,6 +95,8 @@ class SensorBoard: msg.pressure = pressure msg.co = co msg.ventilate = True if ventilate > 1.10 else False + tmp = ((A_dew_point * temp) / (B_dew_point + temp)) + log(humidity/100.0) + msg.dew_point = (B_dew_point * tmp) / (A_dew_point - tmp) self.pub.publish(msg)