예제 #1
0
def config_sensors():
    spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
    cs = [
        digitalio.DigitalInOut(board.D4),
        digitalio.DigitalInOut(board.D5),
        digitalio.DigitalInOut(board.D6),
        digitalio.DigitalInOut(board.D7)
    ]
    return [
        adafruit_max31855.MAX31855(spi, cs[0]),
        adafruit_max31855.MAX31855(spi, cs[1]),
        adafruit_max31855.MAX31855(spi, cs[2]),
        adafruit_max31855.MAX31855(spi, cs[3])
    ]
예제 #2
0
파일: oven.py 프로젝트: mngr0/picoReflow
    def __init__(self, time_step):
        TempSensor.__init__(self, time_step)

        log.info("init MAX31855-spi")
        cs1 = digitalio.DigitalInOut(config.gpio_sensor_cs1)
        cs1.direction = digitalio.Direction.OUTPUT
        cs1.value = True
        cs2 = digitalio.DigitalInOut(config.gpio_sensor_cs2)
        cs2.direction = digitalio.Direction.OUTPUT
        cs2.value = True
        self.thermocouple1 = adafruit_max31855.MAX31855(board.SPI(), cs1)
        self.thermocouple2 = adafruit_max31855.MAX31855(board.SPI(), cs2)
        self.t1 = None
        self.t2 = None
예제 #3
0
 def __init__(self):
     #setup stuff
     CLK = 25
     CS = 24
     DO = 18
     self.sensor = adafruit_max31855.MAX31855(CLK, CS, DO)
     self.tempC = 0
예제 #4
0
def get_temp():
    spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
    cs_pin_list = [board.D5,board.D6]
    output = [1,1]
    
    for i in range(0,2):
        
        cs_var = digitalio.DigitalInOut(cs_pin_list[i])
        max_var = adafruit_max31855.MAX31855(spi,cs_var)
        output[i] = max_var.temperature
        
    return output    
예제 #5
0
	def __init__(self,GUI_hvac_Ref):
		#init de sensores y dac
		self.GUI_hvac_Ref = GUI_hvac_Ref
		self.TaskControlTemp = threading.Thread(target = self.ControlTemp_Routine)
		
		self.spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
		self.cs = digitalio.DigitalInOut(board.D10)
		self.max31855 = adafruit_max31855.MAX31855(self.spi, self.cs)
		
		self.Relay = digitalio.DigitalInOut(board.D13)
		self.Relay.direction = digitalio.Direction.OUTPUT
		
		self.i2c = busio.I2C(board.SCL, board.SDA)
		self.dac = adafruit_mcp4725.MCP4725(self.i2c, address = 0x60)
		
		self.TaskControlTemp.start()
		pass
예제 #6
0
    def measure(self):
        '''熱電対の温度を測定
        '''

        self.args = self.parser.parse_args()
        pins = self.args.cs_pin
        verbose = self.args.verbose

        temps = []
        for i in range(len(pins)):
            spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
            cs = eval("digitalio.DigitalInOut(board.D%s)" % pins[i])
            max31855 = adafruit_max31855.MAX31855(spi, cs)

            temps.append(max31855.temperature)

        self.__output(pins, temps, verbose)
예제 #7
0
def get_temp(power_output,pwm_object,max_var,counter):
    spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
    cs_pin_list = [board.D4,board.D5,board.D6,board.D12,board.D13,board.D16,board.D17,board.D18,board.D19,board.D20,board.D21,board.D22,board.D23]
    output = [0,0,0,0,0,0,0,0,0,0]
    #pwm_object.duty_cycle = 0
    pwm_object.duty_cycle=power_output
    if counter == 0:
        max_var = []
        for i in range(0,1):
            
            cs_var = digitalio.DigitalInOut(cs_pin_list[i])
            max_var_single = adafruit_max31855.MAX31855(spi,cs_var)
            max_var = max_var + [max_var_single]
            output[i] = max_var_single.temperature
    else:
        #print(max_var)
        for i in range(0,1):
            output[i] = max_var[i].temperature
    print("gpio power output:",power_output)
    #pwm_object.duty_cycle=power_output
    #x=gpio_pwm(power_output)
    time.sleep(.1)
    
    return output,pwm_object,max_var    
예제 #8
0
    channel
):  # see: https://raspberrypihq.com/use-a-push-button-with-raspberry-pi-gpio/ connect gpioButtonPin to 3.3V, preferably through a resistor
    STOP_EVENT.set()


GPIO.setmode(GPIO.BCM)
GPIO.setup(gpioOvenPin, GPIO.OUT)
GPIO.setup(
    gpioButtonPin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN
)  # Set pin to be an input pin and set initial value to be pulled low (off)
GPIO.add_event_detect(gpioButtonPin, GPIO.RISING, callback=stopbutton)

#stuff needed for reading the temperature
spi = SPI(clock=board.SCK, MISO=board.MISO, MOSI=board.MOSI)
cs = DigitalInOut(board.D5)
sensor = adafruit_max31855.MAX31855(spi, cs)

#Create a fake sensor: TODO
#sensor = types.SimpleNamespace()
#sensor.temperature=110

ProgramRunning = False
CurrentProgramName = ''
CurrentStep = 0
thermocouplebroken = False

app = Flask(__name__)


@app.route("/home")
def gohome():
예제 #9
0
# the number of seconds between measurements
measurement_interval_seconds = 1

# creates channel to "speak" SPI
# tells which hardware pins on the USB bridge board help us speak SPI
spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)

# selects the USB bridge hardware pin to ask to talk with each board
chip_select_1 = digitalio.DigitalInOut(board.D4)
chip_select_2 = digitalio.DigitalInOut(board.D5)
chip_select_3 = digitalio.DigitalInOut(board.D6)
chip_select_4 = digitalio.DigitalInOut(board.D7)

# creates an object that speaks SPI, listens to a specific chip select pin, and measures temperature
temperature_sensor_1 = adafruit_max31855.MAX31855(spi, chip_select_1)
temperature_sensor_2 = adafruit_max31855.MAX31855(spi, chip_select_2)
temperature_sensor_3 = adafruit_max31855.MAX31855(spi, chip_select_3)
temperature_sensor_4 = adafruit_max31855.MAX31855(spi, chip_select_4)

# all the indented commands below run until the program is stopped by pressing ctrl-c
while True:

    # store temperature readings in memory for use by the computer
    temperature_1 = temperature_sensor_1.temperature
    temperature_2 = temperature_sensor_2.temperature
    temperature_3 = temperature_sensor_3.temperature
    temperature_4 = temperature_sensor_4.temperature

    # print the temperature readings to the screen
    print(datetime.datetime.now(), temperature_1, temperature_2, temperature_3, temperature_4)
예제 #10
0
import board
import busio
import digitalio
import adafruit_max31855
from time import sleep

import time
t0 = time.time()  #start time
print(t0)

spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
cs = digitalio.DigitalInOut(board.D5)
max31855 = adafruit_max31855.MAX31855(spi, cs)

spi_2 = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
cs_2 = digitalio.DigitalInOut(board.D6)
max31855_2 = adafruit_max31855.MAX31855(spi_2, cs_2)

print('Temp/K,time/s')
f = open('test.txt', mode='a')
f.write('Temp/K,time/s\n')
f.close()

import gspread
from oauth2client.service_account import ServiceAccountCredentials

#鍵
key_name = 'temperature-measurement60876-76ca5673b803.json'
sheet_name = '発表当日デモンストレーション'

#APIにログイン
import board
import digitalio
import adafruit_max31855
from google.oauth2.service_account import Credentials
from googleapiclient.discovery import build

#--| User Config |-----------------------------------------------
SERVICE_ACCOUNT_FILE = 'YOUR_CREDENTIALS_FILE.json'
SPREADSHEET_ID = 'YOUR_SHEET_ID'
DATA_LOCATION = 'A1'
UPDATE_RATE = 60
#--| User Config |-----------------------------------------------

# Sensor setup
cs = digitalio.DigitalInOut(board.C0)
max31855 = adafruit_max31855.MAX31855(board.SPI(), cs)

# Google Sheets API setup
SCOPES = [
    'https://spreadsheets.google.com/feeds',
    'https://www.googleapis.com/auth/drive'
]
CREDS = Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE,
                                              scopes=SCOPES)
SHEET = build('sheets', 'v4', credentials=CREDS).spreadsheets()

# Logging loop
print("Logging...")
while True:
    values = [[datetime.now().isoformat(), max31855.temperature]]
    SHEET.values().append(spreadsheetId=SPREADSHEET_ID,
예제 #12
0
def pid_loop(dummy,state):
  import sys
  from time import sleep, time
  from math import isnan
  import board, busio, digitalio, adafruit_max31855
  import PID as PID
  import config as conf
  from collections import deque

  sys.stdout = open("pid.log", "a")
  sys.stderr = open("pid.err.log", "a")

  def c_to_f(c):
    return c * 9.0 / 5.0 + 32.0

  spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
  cs = digitalio.DigitalInOut(board.D8)
  sensor = adafruit_max31855.MAX31855(spi=spi, cs=cs)

  pid = PID.PID(conf.Pc,conf.Ic,conf.Dc)
  pid.SetPoint = state['settemp']
  pid.setSampleTime(conf.sample_time*5)

  nanct=0
  i=0
  j=0
  pidhist = deque([0.]*10)
  avgpid = 0.
  temphist = deque([0.]*5)
  avgtemp = 0.
  lastsettemp = state['settemp']
  lasttime = time()
  sleeptime = 0
  iscold = True
  iswarm = False
  lastcold = 0
  lastwarm = 0

  with open('pid.log','a') as fpid:
    try:
      while True : # Loops 10x/second 
        temp = sensor.temperature
        if isnan(temp) :
          nanct += 1
          if nanct > 100000 :
            sys.exit
          continue
        else:
          nanct = 0

        temphist.popleft()
        temphist.append(temp)
        avgtemp = sum(temphist)/len(temphist)

        if avgtemp < 100 :
          lastcold = i

        if avgtemp > 200 :
          lastwarm = i

        if iscold and (i-lastcold)*conf.sample_time > 60*15 :
          pid = PID.PID(conf.Pw,conf.Iw,conf.Dw)
          pid.SetPoint = state['settemp']
          pid.setSampleTime(conf.sample_time*5)
          iscold = False

        if iswarm and (i-lastwarm)*conf.sample_time > 60*15 : 
          pid = PID.PID(conf.Pc,conf.Ic,conf.Dc)
          pid.SetPoint = state['settemp']
          pid.setSampleTime(conf.sample_time*5)
          iscold = True

        if state['settemp'] != lastsettemp :
          pid.SetPoint = state['settemp']
          lastsettemp = state['settemp']

        if i%10 == 0 :
          pid.update(avgtemp)
          pidout = pid.output
          pidhist.popleft()
          pidhist.append(pidout)
          avgpid = sum(pidhist)/len(pidhist)

        state['i'] = i
        state['temp'] = round(temp,2)
        state['avgtemp'] = round(avgtemp,2)
        state['pidval'] = round(pidout,2)
        state['avgpid'] = round(avgpid,2)
        state['pterm'] = round(pid.PTerm,2)
        if iscold :
          state['iterm'] = round(pid.ITerm * conf.Ic,2)
          state['dterm'] = round(pid.DTerm * conf.Dc,2)
        else :
          state['iterm'] = round(pid.ITerm * conf.Iw,2)
          state['dterm'] = round(pid.DTerm * conf.Dw,2)
        state['iscold'] = iscold

        print(time(), state, file=fpid)

        sleeptime = lasttime+conf.sample_time-time()
        if sleeptime < 0 :
          sleeptime = 0
        sleep(sleeptime)
        i += 1
        lasttime = time()

    finally:
      pid.clear
예제 #13
0
    def __init__(self,
        _wheelspeed=True,
        _rpm=True,
        _gps=True,
        _imu=True,
        _engTemp=True,
        _camera=True,
        influxUrl='http://192.168.254.40:8086',
        influxToken="rc0LjEy36DIyrb1CX6rnUDeMJ0-ldW5Mps1KOwkSRrRhbRWDsGzPlNn6BOiyg96vWEKRMZ3xwsfZVgIAxL2gCw==",
        race='test5',
        units='standard'):
        """_args enables sensor type, on by default"""
        #influx config
        self.org = "rammers"
        self.bucket = race
        self.client = InfluxDBClient(url=influxUrl, token=influxToken)
        self.write_api = self.client.write_api(write_options=SYNCHRONOUS)

        self.units = units
        # self.unitCalc_temp = lambda x : x*9/5+32 if self.units == 'standard' else x
        self.lap = 0
        self.distance = 0
        self.speed = 0 #mph
        self.rpm = 0 #int
        self.engineTemp= 0
        self.airTemp = 0
        self.rpm_elapse = time.monotonic()
        self.wheel_elapse = time.monotonic()

        #timing
        self.current_sector = 1
        self.lapTime = 0
        self.lastLap = 0
        self.bestLap = 0
        self.sessionTime = time.monotonic()
        self.rider = 'default'
        self.sectorTime = time.monotonic()
        self.mapData = 0
        self.s1Time=0
        self.s2Time=0
        self.s3Time=0

        if _wheelspeed == True or _rpm == True:
            self.GPIO = GPIO
            self.GPIO.setmode(GPIO.BCM)
            self.GPIO.setwarnings(False)

        if _wheelspeed == True:
            self.GPIO.setup(17,GPIO.IN,GPIO.PUD_UP)
            self.GPIO.add_event_detect(17,GPIO.FALLING,callback=self.speedCalc,bouncetime=20)

        if _rpm == True:
            self.GPIO.setup(27,GPIO.IN,GPIO.PUD_DOWN)
            self.GPIO.add_event_detect(27,GPIO.RISING,callback=self.rpmCalc,bouncetime=2)

        if _imu == True:#IMU
            self.imu = adafruit_bno055.BNO055_I2C(busio.I2C(board.SCL, board.SDA))

        if _gps == True:
            uart = serial.Serial("/dev/ttyS0", baudrate=9600, timeout=10)
            self.gps = adafruit_gps.GPS(uart, debug=False)
            self.gps.send_command(b"PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0")
            self.gps.send_command(b"PMTK220,10000")

        if _engTemp == True: #thermocouple
            self.spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
            self.cs = digitalio.DigitalInOut(board.D5)
            self.max31855 = adafruit_max31855.MAX31855(self.spi, self.cs)

        self.sensorDict=dict()
        self.sensorThread = threading.Thread(target=self.call_sensorDict)
        self.sensorThread.start()
예제 #14
0
#!/usr/bin/env python3

import board
import busio
import digitalio
import adafruit_max31855

temp1 = board.D5  # BBQ
temp2 = board.D19 # Meat

spi0 = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
spi1 = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
cs0 = digitalio.DigitalInOut(temp1)
cs1 = digitalio.DigitalInOut(temp2)
max318551 = adafruit_max31855.MAX31855(spi0, cs0)
max318552 = adafruit_max31855.MAX31855(spi1, cs1)

def get_temp():
    return (max318551.temperature, max318552.temperature)
예제 #15
0
파일: api.py 프로젝트: jtony123/pyserver
import adafruit_max31855
import time
from datetime import datetime, timedelta

app = Flask(__name__)
cors = CORS(app)
#app.config['CORS_HEADERS'] = 'Content-Type'
#api = Api(app)

spi_a = SPI(clock=board.SCK, MISO=board.MISO, MOSI=board.MOSI)
spi_b = SPI(clock=board.SCK, MISO=board.MISO, MOSI=board.MOSI)
cs_a = digitalio.DigitalInOut(board.D5)
cs_b = digitalio.DigitalInOut(board.D6)

sensorA = adafruit_max31855.MAX31855(
    spi_a,
    cs_a,
)
sensorB = adafruit_max31855.MAX31855(spi_b, cs_b)


@app.route('/', methods=['GET'])
def index():

    data = {
        "sensorA": str(round(sensorA.temperature, 1)),
        "sensorB": str(round(sensorB.temperature, 1))
    }
    return jsonify(data)


@app.route('/weather', methods=['GET'])
예제 #16
0
 def __init__(self):
     self.spi = busio.SPI(self.SCK, MOSI=self.MOSI, MISO=self.MISO)
     self.cs = digitalio.DigitalInOut(board.D5)
     self.max31855 = adafruit_max31855.MAX31855(self.spi, self.cs)
예제 #17
0
import time
import board
import busio
import digitalio
import adafruit_max31855

spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
cs = digitalio.DigitalInOut(board.D5)

max31855 = adafruit_max31855.MAX31855(spi, cs)
while True:
    tempC = max31855.temperature
    tempF = tempC * 9 / 5 + 32
    print("Temperature: {} C {} F ".format(tempC, tempF))
    time.sleep(2.0)
예제 #18
0
import adafruit_max31855
import RPi.GPIO as gpio

zones = np.array([17,27,23])   #pin number of each zone  (1,2,3)

gpio.setmode(gpio.BCM)
for z in zones:
    gpio.setup(int(z), gpio.OUT)

 
spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
cs1 = digitalio.DigitalInOut(board.D4)
cs2 = digitalio.DigitalInOut(board.D25)
cs3 = digitalio.DigitalInOut(board.D12)
 
thermo1 = adafruit_max31855.MAX31855(spi, cs1)
thermo2 = adafruit_max31855.MAX31855(spi, cs2)
thermo3 = adafruit_max31855.MAX31855(spi, cs3)

#################################################################################################
#imputs

setpoint = input("Enter setpoint(C)\n")
try:
    setpoint = float(setpoint)
except ValueError:
    print("Your input was not a number.")
    print("exiting")
    exit(1)

예제 #19
0
class ToasterController(object):

    loaded = False
    instructions = None
    timer = None
    cancel = False
    spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
    cs = digitalio.DigitalInOut(board.D5)
    max31855 = adafruit_max31855.MAX31855(spi, cs)
    main_time = 12
    cancel_time = 1
    #motor1 = Motor(forward = 2, backward = 4)

    CLK = 11
    CS = 8
    DO = 9
    sensor = MAX31855.MAX31855(CLK, CS, DO)

    btn = Button(27)
    button_1_channel = 22
    button_2_channel = 27
    button_3_channel = 17

    def c_to_f(c):
        return c * 9.0 / 5.0 + 32.0

    def __init__(self, instructions):
        self.instructions = instructions
        self.timer = CookTimer()

    def start(self, c, motor1):
        ''' Begin cooking '''
        self.timer.set(self.instructions.cook_time)
        self.lower_platform(c, motor1)

    def lower_platform(self, c, motor1):
        try:
            self.loaded = True
            for x in range(0, self.main_time, 1):
                motor1.backward()
                if self.cancel == True:
                    break
                note = 'Lowering food...'
                c.send(note.encode('utf-8'))
                print('Main: ', self.main_time)
                print('Cancel: ', self.cancel_time)
                self.cancel_time = self.cancel_time + 1
                time.sleep(1)
            if self.cancel == False:
                note = 'Food Lowered' + ' '
                c.sendall(note.encode('utf-8'))
                print("Platform is lowered")
                motor1.stop()
                self.timer.start()
                self.wait_time(c, self.instructions)
        except OSError:
            print("Error...")
            motor1.stop()

    def lower_platform_offline(self, motor1):
        try:
            self.loaded = True
            for x in range(0, self.main_time, 1):
                motor1.backward()
                if self.cancel == True:
                    break
                print('Main: ', self.main_time)
                print('Cancel: ', self.cancel_time)
                self.cancel_time = self.cancel_time + 1
                time.sleep(1)
            if self.cancel == False:
                print("Platform is lowered")
                motor1.stop()
                self.timer.start()
                self.wait_time_offline(self.instructions)
        except OSError:
            print("Error...")
            motor1.stop()

    def wait_time(self, c, instructions):
        '''Send data to app'''
        if int(self.timer.remaining_time) <= 0:
            self.timer.cook_time = instructions.cook_time
        try:
            for x in range(int(self.timer.remaining_time), -1, -1):
                if self.cancel == True:
                    break
                print(self.timer.remaining_time)
                time_split = str(round(self.timer.remaining_time))
                tempC = self.sensor.readTempC()
                tempF = str(tempC * 9 / 5 + 32)
                print('Temperature: {} C {} F '.format(tempC, tempF))
                total_data = time_split + ' ' + tempF + ' ' + 'Code'
                c.send(total_data.encode('utf-8'))
                instructions.stopped.wait(timeout=1)
        except OSError:
            print("Error...")

    def wait_time_offline(self, instructions):
        '''Send data to app'''
        if int(self.timer.remaining_time) <= 0:
            self.timer.cook_time = instructions.cook_time
        try:
            for x in range(int(self.timer.remaining_time), -1, -1):
                if self.cancel == True:
                    break
                print(self.timer.remaining_time)
                instructions.stopped.wait(timeout=1)
        except OSError:
            print("Error...")
            motor1.stop()

    def raise_platform(self, c, motor1):
        try:
            self.loaded = False
            raise_time = -1
            self.cancel_time = self.cancel_time - 1
            print('Main: ', self.main_time)
            print('Cancel: ', self.cancel_time)
            if self.main_time != self.cancel_time:
                raise_time = raise_time + self.cancel_time + 1
            else:
                raise_time = self.main_time
            for x in range(0, raise_time, 1):
                motor1.forward()
                note = 'Raising food...'
                c.send(note.encode('utf-8'))
                time.sleep(1)
            note = 'Raised'
            c.send(note.encode('utf-8'))
            print("Platform is raised")
            motor1.stop()
        except OSError:
            print("Error...")
            motor1.stop()

    def raise_platform_offline(self, motor1):
        try:
            self.loaded = False
            raise_time = -1
            print('Main: ', self.main_time)

            if self.main_time != self.cancel_time:
                raise_time = raise_time + self.cancel_time
            else:
                raise_time = self.main_time
            print('Raise: ', raise_time)
            for x in range(0, raise_time, 1):
                motor1.forward()
                time.sleep(1)
            print("Platform is raised")
            motor1.stop()
        except OSError:
            print("Error...")
            motor1.stop()

    def reset(self):
        '''reset timer mid cook'''
        self.cancel = False
        self.timer.clear()

    def end(self, c, motor1):
        ''' Cooking has finished '''
        self.cancel = False
        self.timer.clear()
        self.instructions.clear()
        self.raise_platform(c, motor1)
        self.cancel_time = 0

    def end_offline(self, motor1):
        ''' Cooking has finished '''
        self.cancel = False
        self.timer.clear()
        self.instructions.clear()
        self.raise_platform_offline(motor1)
        self.cancel_time = 0
예제 #20
0
파일: prova.py 프로젝트: mngr0/picoReflow
cs1.direction = digitalio.Direction.OUTPUT
cs1.value = True

cs2 = digitalio.DigitalInOut(config.gpio_sensor_cs2)
cs2.direction = digitalio.Direction.OUTPUT
cs2.value = True

spi = board.SPI()

#while not spi.try_lock():
#	pass
print("try")

#spi.configure(baudrate=50000, phase=0, polarity=0)

t1 = adafruit_max31855.MAX31855(spi, cs1)

t2 = adafruit_max31855.MAX31855(spi, cs2)
sd = SPIDevice(spi, cs1)

#while 1:
#	cs1.value = False
#	result = bytearray(4)
#	with sd as diocane:
#		diocane.readinto(result)
#	cs1.value = True
#	print(result)
#	time.sleep(1)

print("try2")
result = bytearray(4)