From 0ca929ce968649d9a3dc31e6eee986d57a57f385 Mon Sep 17 00:00:00 2001 From: James Gao Date: Wed, 15 Oct 2014 23:18:47 -0700 Subject: [PATCH] Adding temp monitor code --- BOM.ods | Bin 0 -> 52134 bytes kiln/Adafruit_alphanumeric.py | 311 +++++++++++++++++----------------- kiln/thermo.py | 55 ++++++ 3 files changed, 210 insertions(+), 156 deletions(-) create mode 100644 BOM.ods create mode 100644 kiln/thermo.py diff --git a/BOM.ods b/BOM.ods new file mode 100644 index 0000000000000000000000000000000000000000..33eaddf009d27caa432e6a315cef3c7d51f4d464 GIT binary patch literal 52134 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 -0b0001000010000011, # ? -0b0000001010111011, # @ -0b0000000011110111, # A -0b0001001010001111, # B -0b0000000000111001, # C -0b0001001000001111, # D -0b0000000011111001, # E -0b0000000001110001, # F -0b0000000010111101, # G -0b0000000011110110, # H -0b0001001000000000, # I -0b0000000000011110, # J -0b0010010001110000, # K -0b0000000000111000, # L -0b0000010100110110, # M -0b0010000100110110, # N -0b0000000000111111, # O -0b0000000011110011, # P -0b0010000000111111, # Q -0b0010000011110011, # R -0b0000000011101101, # S -0b0001001000000001, # T -0b0000000000111110, # U -0b0000110000110000, # V -0b0010100000110110, # W -0b0010110100000000, # X -0b0001010100000000, # Y -0b0000110000001001, # Z -0b0000000000111001, # [ -0b0010000100000000, # -0b0000000000001111, # ] -0b0000110000000011, # ^ -0b0000000000001000, # _ -0b0000000100000000, # ` -0b0001000001011000, # a -0b0010000001111000, # b -0b0000000011011000, # c -0b0000100010001110, # d -0b0000100001011000, # e -0b0000000001110001, # f -0b0000010010001110, # g -0b0001000001110000, # h -0b0001000000000000, # i -0b0000000000001110, # j -0b0011011000000000, # k -0b0000000000110000, # l -0b0001000011010100, # m -0b0001000001010000, # n -0b0000000011011100, # o -0b0000000101110000, # p -0b0000010010000110, # q -0b0000000001010000, # r -0b0010000010001000, # s -0b0000000001111000, # t -0b0000000000011100, # u -0b0010000000000100, # v -0b0010100000010100, # w -0b0010100011000000, # x -0b0010000000001100, # y -0b0000100001001000, # z -0b0000100101001001, # { -0b0001001000000000, # | -0b0010010010001001, # } -0b0000010100100000, # ~ -0b0011111111111111] + # Hexadecimal character lookup table + lut = [ + 0b0000000000000001, + 0b0000000000000010, + 0b0000000000000100, + 0b0000000000001000, + 0b0000000000010000, + 0b0000000000100000, + 0b0000000001000000, + 0b0000000010000000, + 0b0000000100000000, + 0b0000001000000000, + 0b0000010000000000, + 0b0000100000000000, + 0b0001000000000000, + 0b0010000000000000, + 0b0100000000000000, + 0b1000000000000000, + 0b0000000000000000, + 0b0000000000000000, + 0b0000000000000000, + 0b0000000000000000, + 0b0000000000000000, + 0b0000000000000000, + 0b0000000000000000, + 0b0000000000000000, + 0b0001001011001001, + 0b0001010111000000, + 0b0001001011111001, + 0b0000000011100011, + 0b0000010100110000, + 0b0001001011001000, + 0b0011101000000000, + 0b0001011100000000, + 0b0000000000000000, # + 0b0000000000000110, # ! + 0b0000001000100000, # " + 0b0001001011001110, # # + 0b0001001011101101, # $ + 0b0000110000100100, # % + 0b0010001101011101, # & + 0b0000010000000000, # ' + 0b0010010000000000, # ( + 0b0000100100000000, # ) + 0b0011111111000000, # * + 0b0001001011000000, # + + 0b0000100000000000, # , + 0b0000000011000000, # - + 0b0000000000000000, # . + 0b0000110000000000, # / + 0b0000110000111111, # 0 + 0b0000000000000110, # 1 + 0b0000000011011011, # 2 + 0b0000000010001111, # 3 + 0b0000000011100110, # 4 + 0b0010000001101001, # 5 + 0b0000000011111101, # 6 + 0b0000000000000111, # 7 + 0b0000000011111111, # 8 + 0b0000000011101111, # 9 + 0b0001001000000000, # : + 0b0000101000000000, # ; + 0b0010010000000000, # < + 0b0000000011001000, # = + 0b0000100100000000, # > + 0b0001000010000011, # ? + 0b0000001010111011, # @ + 0b0000000011110111, # A + 0b0001001010001111, # B + 0b0000000000111001, # C + 0b0001001000001111, # D + 0b0000000011111001, # E + 0b0000000001110001, # F + 0b0000000010111101, # G + 0b0000000011110110, # H + 0b0001001000000000, # I + 0b0000000000011110, # J + 0b0010010001110000, # K + 0b0000000000111000, # L + 0b0000010100110110, # M + 0b0010000100110110, # N + 0b0000000000111111, # O + 0b0000000011110011, # P + 0b0010000000111111, # Q + 0b0010000011110011, # R + 0b0000000011101101, # S + 0b0001001000000001, # T + 0b0000000000111110, # U + 0b0000110000110000, # V + 0b0010100000110110, # W + 0b0010110100000000, # X + 0b0001010100000000, # Y + 0b0000110000001001, # Z + 0b0000000000111001, # [ + 0b0010000100000000, # + 0b0000000000001111, # ] + 0b0000110000000011, # ^ + 0b0000000000001000, # _ + 0b0000000100000000, # ` + 0b0001000001011000, # a + 0b0010000001111000, # b + 0b0000000011011000, # c + 0b0000100010001110, # d + 0b0000100001011000, # e + 0b0000000001110001, # f + 0b0000010010001110, # g + 0b0001000001110000, # h + 0b0001000000000000, # i + 0b0000000000001110, # j + 0b0011011000000000, # k + 0b0000000000110000, # l + 0b0001000011010100, # m + 0b0001000001010000, # n + 0b0000000011011100, # o + 0b0000000101110000, # p + 0b0000010010000110, # q + 0b0000000001010000, # r + 0b0010000010001000, # s + 0b0000000001111000, # t + 0b0000000000011100, # u + 0b0010000000000100, # v + 0b0010100000010100, # w + 0b0010100011000000, # x + 0b0010000000001100, # y + 0b0000100001001000, # z + 0b0000100101001001, # { + 0b0001001000000000, # | + 0b0010010010001001, # } + 0b0000010100100000, # ~ + 0b0011111111111111] + + special = dict(degree= 0b0000000011100011, cone=0b0010100000001000) - special = dict(degree= 0b0000000011100011, cone=0b0010100000001000) - - # Constructor - def __init__(self, address=0x70, debug=False): - self.disp = LEDBackpack(address=address, debug=debug) + def __init__(self, address=0x70, debug=False): + self.disp = LEDBackpack(address=address, debug=debug) - def writeCharRaw(self, charNumber, value): - "Sets a digit using the raw 16-bit value" - if (charNumber > 4): - return - # Set the appropriate digit - self.disp.setBufferRow(charNumber, value) + def writeCharRaw(self, charNumber, value): + "Sets a digit using the raw 16-bit value" + if (charNumber > 4): + return + # Set the appropriate digit + self.disp.setBufferRow(charNumber, value) + + def writeChar(self, charNumber, value, dot=False): + "Sets a single decimal or hexademical value (0..9 and A..F)" + if (charNumber > 4): + return + if value in special: + value = self.special[value] + else: + value = self.lut[ord(value)] + # Set the appropriate digit + self.disp.setBufferRow(charNumber, value | (dot << 14)) - def writeChar(self, charNumber, value, dot=False): - "Sets a single decimal or hexademical value (0..9 and A..F)" - if (charNumber > 4): - return - if value in special: - value = self.special[value] - else: - value = self.lut[ord(value)] - # Set the appropriate digit - self.disp.setBufferRow(charNumber, value | (dot << 14)) class AlphaScoller(threading.Thread): def __init__(self, address=0x70, interval=.25): @@ -175,6 +175,7 @@ class AlphaScoller(threading.Thread): self.disp = Alphanumeric(address) super(AlphaScroller, self).__init__() self.value = " " + self.counter = 0 def set_text(self, text, pad=True): self.text = text @@ -186,11 +187,9 @@ class AlphaScoller(threading.Thread): self.interval = interval def run(self): - counter = 0 while True: for i in range(4): - char = self.value[(counter+i) % len(self.value)] + char = self.value[(self.counter+i) % len(self.value)] self.disp.writeChar(i, char) time.sleep(interval) - counter += 1 - + self.counter += 1 diff --git a/kiln/thermo.py b/kiln/thermo.py new file mode 100644 index 0000000..4dd664c --- /dev/null +++ b/kiln/thermo.py @@ -0,0 +1,55 @@ +import time +import threading +import datetime +from collections import deque + +def temp_to_cone(temp): + """Convert the current temperature to cone value using linear interpolation""" + cones = [600,614,635,683,717,747,792,804,838,852,884,894,900,923,955,984,999,1046,1060,1101,1120,1137,1154,1162,1168,1186,1196,1222,1240,1263,1280,1305,1315,1326,1346] + names = [str(i).replace('-', '0') for i in range(-22,0)] + [str(i) for i in range(1, 14)] + for i in range(len(cones)-1): + low, high = cones[i], cones[i+1] + if low <= temp < high: + frac = (temp - low) / float(high - low) + return names[i]+'.%d'%int(frac*10) + return "13+" + +class Monitor(threading.Thread): + def __init__(self, name="3b-000000182b57"): + self.device = "/sys/bus/w1/devices/%s/w1_slave"%name + self.history = deque(maxlen=1024) + + from Adafruit_alphanumeric import AlphaScroller + self.display = AlphaScroller(interval=.4) + self.display.start() + + def _read_temp(self): + with open(self.device, 'r') as f: + lines = f.readlines() + + while lines[0].strip()[-3:] != 'YES': + time.sleep(0.2) + with open(self.device, 'r') as f: + lines = f.readlines() + + match = re.match(r'^[0-9a-f\s]{27}t=(\d+)$', lines[1]) + if match is not None: + return float(match.group(1)) / 1000.0 + + @property + def temperature(self): + return self.history[-1][1] + + def run(self): + while True: + temp = self._read_temp() + fahr = temp * 9. / 5. + 32. + now = datetime.datetime() + self.history.append((now, temp)) + + text = list('%0.0f'%temp) + ['degree'] + list('C %0.0f'%fahr)+['degree'] + list("F") + + if 600 <= temp: + text += [' ', ' ', 'cone']+list("%0.1f"%temp_to_cone(temp)) + text += ' ' + self.display.text = text