def __init__(self, channel=0, bus=0, device=0): self.channel = channel self.BPM = 0 self.adc = Adafruit_MCP3008.MCP3008( spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE))
lcd_d5 = digitalio.DigitalInOut(board.D16) lcd_d6 = digitalio.DigitalInOut(board.D20) lcd_d7 = digitalio.DigitalInOut(board.D21) lcd_backlight = digitalio.DigitalInOut(board.D4) red = digitalio.DigitalInOut(board.D13) green = digitalio.DigitalInOut(board.D19) blue = digitalio.DigitalInOut(board.D26) lcd = characterlcd.Character_LCD_RGB(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns,lcd_rows, red, green, blue, lcd_backlight) lcd.color = [0, 100, 0] # green color # MCP3008 initialization CLK = 18 MISO = 23 MOSI = 24 CS = 27 mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI) # Node information Node_Name = socket.gethostname() Node_Name = Node_Name.replace(" ", "-") # Set logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) timeLog = time.strftime("%d-%m-%Y_%H-%M-%S") timeLog = timeLog.replace(" ", "-") logFilename = "/home/pi/Logs/" + Node_Name + "_ReadingsLog_" + timeLog + ".log" handler = logging.FileHandler(logFilename) logger.addHandler(handler) # Readings time
def __init__(self, spi_port=0, spi_device=0): self.mcp = Adafruit_MCP3008.MCP3008( spi=SPI.SpiDev(spi_port, spi_device))
#setup GPIO input pins GPIO.setup(reset, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(frequency_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(stop, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(display, GPIO.IN, pull_up_down=GPIO.PUD_UP) #setup GPIO io pins for SPI interface GPIO.setup(SPIMOSI, GPIO.OUT) GPIO.setup(SPIMISO, GPIO.IN) GPIO.setup(SPICLK, GPIO.OUT) GPIO.setup(SPICS, GPIO.OUT) #setup MCP3008 mcp = Adafruit_MCP3008.MCP3008(clk=SPICLK, cs=SPICS, mosi=SPIMOSI, miso=SPIMISO) #function declarations def reset_callback(pin): reset_func() def reset_func(): #get global variables global haveStartTime #reset variables haveStartTime = 0
def beginAcq(numChannels, duration, fileName): SPI_PORT = 0 SPI_DEVICE = 0 mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE)) gpio.setmode(gpio.BCM) gpio.setup(26, gpio.OUT) gpio.output(26, gpio.LOW) gpio.output(26, gpio.HIGH) t1 = time.time() + duration # print(t1) with open(fileName, 'w+') as f: f.write('') print('Reading ADS8668 values, press Ctrl-C to quit...') # Main Loop while (time.time() < t1): values = [] tempTime = [0] tempTime[0] = round(time.time() - t1 + duration, 4) if numChannels == 1: # Channel 1 mcp.read_all_ch(0xC0) values0 = mcp.read_all_ch(0xC0) values0[0] = ((float(values0[0]) - 2046) / 197) # ADC 1 values0[1] = ((float(values0[1]) - 2046) / 197) # ADC 2 # Append samples to array values.extend(values0[0:2]) values.extend(tempTime) elif (numChannels == 2): # Channel 1 mcp.read_all_ch(0xC0) values0 = mcp.read_all_ch(0xC0) values0[0] = ((float(values0[0]) - 2046) / 197) # ADC 1 values0[1] = ((float(values0[1]) - 2046) / 197) # ADC 2 # Channel 2 values0[2] = ((float(values0[2]) - 2046) / 197) # ADC 3 values0[3] = ((float(values0[3]) - 1535) / 195) # ADC 4 # Append samples to array values.extend(values0) values.extend(tempTime) elif numChannels == 3: # Channel 1 mcp.read_all_ch(0xC0) values0 = mcp.read_all_ch(0xC0) values0[0] = ((float(values0[0]) - 2046) / 197) # ADC 1 values0[1] = ((float(values0[1]) - 2046) / 197) # ADC 2 # Channel 2 values0[2] = ((float(values0[2]) - 2046) / 197) # ADC 3 values0[3] = ((float(values0[3]) - 1535) / 195) # ADC 4 # Channel 3 mcp.read_all_ch(0xC4) values1 = mcp.read_all_ch(0xC4) values1[0] = ((float(values1[0]) - 2046) / 200) values1[1] = ((float(values1[1]) - 2046) / 200) # Append Samples to array values.extend(values0) values.extend(values1[0:2]) values.extend(tempTime) elif numChannels == 4: # Channel 1 mcp.read_all_ch(0xC0) values0 = mcp.read_all_ch(0xC0) values0[0] = ((float(values0[0]) - 2046) / 197) # ADC 1 values0[1] = ((float(values0[1]) - 2046) / 197) # ADC 2 # Channel 2 values0[2] = ((float(values0[2]) - 2046) / 197) # ADC 3 values0[3] = ((float(values0[3]) - 1535) / 195) # ADC 4 # Channel 3 mcp.read_all_ch(0xC4) values1 = mcp.read_all_ch(0xC4) values1[0] = ((float(values1[0]) - 2046) / 200) values1[1] = ((float(values1[1]) - 2046) / 200) # Channel 4 values1[2] = ((float(values1[2]) - 1535) / 200) values1[3] = ((float(values1[3]) - 1535) / 200) # Append Samples to array values.extend(values0) values.extend(values1) values.extend(tempTime) elif numChannels == 5: # Channel 1 mcp.read_all_ch(0xC0) values0 = mcp.read_all_ch(0xC0) values0[0] = ((float(values0[0]) - 2046) / 197) # ADC 1 values0[1] = ((float(values0[1]) - 2046) / 197) # ADC 2 # Channel 2 values0[2] = ((float(values0[2]) - 2046) / 197) # ADC 3 values0[3] = ((float(values0[3]) - 1535) / 195) # ADC 4 # Channel 3 mcp.read_all_ch(0xC4) values1 = mcp.read_all_ch(0xC4) values1[0] = ((float(values1[0]) - 2046) / 200) values1[1] = ((float(values1[1]) - 2046) / 200) # Channel 4 values1[2] = ((float(values1[2]) - 1535) / 200) values1[3] = ((float(values1[3]) - 1535) / 200) # Channel 5 mcp.read_all_ch(0xC8) values2 = mcp.read_all_ch(0xC4) values2[0] = ((float(values2[0]) - 2046) / 200) values2[1] = ((float(values2[1]) - 2046) / 200) # Append Samples to array values.extend(values0) values.extend(values1) values.extend(values2[0:2]) values.extend(tempTime) elif numChannels == 6: mcp.read_all_ch(0xC0) values0 = mcp.read_all_ch(0xC0) # Channel 1 values0[0] = ((float(values0[0]) - 2046) / 197) # ADC 1 values0[1] = ((float(values0[1]) - 2046) / 197) # ADC 2 # Channel 2 values0[2] = ((float(values0[2]) - 2046) / 197) # ADC 3 values0[3] = ((float(values0[3]) - 1535) / 195) # ADC 4 mcp.read_all_ch(0xC4) values1 = mcp.read_all_ch(0xC4) # Channel 3 values1[0] = ((float(values1[0]) - 2046) / 200) values1[1] = ((float(values1[1]) - 2046) / 200) # Channel 4 values1[2] = ((float(values1[2]) - 1535) / 200) values1[3] = ((float(values1[3]) - 1535) / 200) mcp.read_all_ch(0xC8) values2 = mcp.read_all_ch(0xC4) # Channel 5 values2[0] = ((float(values2[0]) - 2046) / 200) values2[1] = ((float(values2[1]) - 2046) / 200) # Channel 6 values2[2] = ((float(values2[2]) - 1535) / 200) values2[3] = ((float(values2[3]) - 1535) / 200) # Append Samples to array values.extend(values0) values.extend(values1) values.extend(values2) values.extend(tempTime) elif numChannels == 7: mcp.read_all_ch(0xC0) values0 = mcp.read_all_ch(0xC0) # Channel 1 values0[0] = ((float(values0[0]) - 2046) / 197) # ADC 1 values0[1] = ((float(values0[1]) - 2046) / 197) # ADC 2 # Channel 2 values0[2] = ((float(values0[2]) - 2046) / 197) # ADC 3 values0[3] = ((float(values0[3]) - 1535) / 195) # ADC 4 mcp.read_all_ch(0xC4) values1 = mcp.read_all_ch(0xC4) # Channel 3 values1[0] = ((float(values1[0]) - 2046) / 200) values1[1] = ((float(values1[1]) - 2046) / 200) # Channel 4 values1[2] = ((float(values1[2]) - 1535) / 200) values1[3] = ((float(values1[3]) - 1535) / 200) mcp.read_all_ch(0xC8) values2 = mcp.read_all_ch(0xC4) # Channel 5 values2[0] = ((float(values2[0]) - 2046) / 200) values2[1] = ((float(values2[1]) - 2046) / 200) # Channel 6 values2[2] = ((float(values2[2]) - 1535) / 200) values2[3] = ((float(values2[3]) - 1535) / 200) mcp.read_all_ch(0xCC) values3 = mcp.read_all_ch(0xCC) # Channel 7 values3[0] = ((float(values3[0]) - 1520) / 205) values3[1] = ((float(values3[1]) - 1520) / 205) # Append Samples to array values.extend(values0) values.extend(values1) values.extend(values2) values.extend(values3[0:2]) values.extend(tempTime) elif numChannels == 8: mcp.read_all_ch(0xC0) values0 = mcp.read_all_ch(0xC0) # Channel 1 values0[0] = ((float(values0[0]) - 2046) / 197) # ADC 1 values0[1] = ((float(values0[1]) - 2046) / 197) # ADC 2 # Channel 2 values0[2] = ((float(values0[2]) - 2046) / 197) # ADC 3 values0[3] = ((float(values0[3]) - 1535) / 195) # ADC 4 mcp.read_all_ch(0xC4) values1 = mcp.read_all_ch(0xC4) # Channel 3 values1[0] = ((float(values1[0]) - 2046) / 200) values1[1] = ((float(values1[1]) - 2046) / 200) # Channel 4 values1[2] = ((float(values1[2]) - 1535) / 200) values1[3] = ((float(values1[3]) - 1535) / 200) mcp.read_all_ch(0xC8) values2 = mcp.read_all_ch(0xC4) # Channel 5 values2[0] = ((float(values2[0]) - 2046) / 200) values2[1] = ((float(values2[1]) - 2046) / 200) # Channel 6 values2[2] = ((float(values2[2]) - 1535) / 200) values2[3] = ((float(values2[3]) - 1535) / 200) mcp.read_all_ch(0xCC) values3 = mcp.read_all_ch(0xCC) # Channel 7 values3[0] = ((float(values3[0]) - 1520) / 205) values3[1] = ((float(values3[1]) - 1520) / 205) # Channel 8 values3[2] = ((float(values3[2]) - 2045) / 205) values3[3] = ((float(values3[3]) - 2045) / 205) # Append Samples to array values.extend(values0) values.extend(values1) values.extend(values2) values.extend(values3) values.extend(tempTime) elif numChannels == 9: mcp.read_all_ch(0xC0) values0 = mcp.read_all_ch(0xC0) # Channel 1 values0[0] = ((float(values0[0]) - 2046) / 197) # ADC 1 values0[1] = ((float(values0[1]) - 2046) / 197) # ADC 2 # Channel 2 values0[2] = ((float(values0[2]) - 2046) / 197) # ADC 3 values0[3] = ((float(values0[3]) - 1535) / 195) # ADC 4 mcp.read_all_ch(0xC4) values1 = mcp.read_all_ch(0xC4) # Channel 3 values1[0] = ((float(values1[0]) - 2046) / 200) values1[1] = ((float(values1[1]) - 2046) / 200) # Channel 4 values1[2] = ((float(values1[2]) - 1535) / 200) values1[3] = ((float(values1[3]) - 1535) / 200) mcp.read_all_ch(0xC8) values2 = mcp.read_all_ch(0xC4) # Channel 5 values2[0] = ((float(values2[0]) - 2046) / 200) values2[1] = ((float(values2[1]) - 2046) / 200) # Channel 6 values2[2] = ((float(values2[2]) - 1535) / 200) values2[3] = ((float(values2[3]) - 1535) / 200) mcp.read_all_ch(0xCC) values3 = mcp.read_all_ch(0xCC) # Channel 7 values3[0] = ((float(values3[0]) - 1520) / 205) values3[1] = ((float(values3[1]) - 1520) / 205) # Channel 8 values3[2] = ((float(values3[2]) - 2045) / 205) values3[3] = ((float(values3[3]) - 2045) / 205) mcp.read_all_ch(0xD0) values4 = mcp.read_all_ch(0xD0) # Channel 9 values4[0] = ((float(values4[0]) - 2045) / 205) values4[1] = ((float(values4[1]) - 2045) / 205) # Append Samples to array values.extend(values0) values.extend(values1) values.extend(values2) values.extend(values3) values.extend(values4[0:2]) values.extend(tempTime) elif numChannels == 10: mcp.read_all_ch(0xC0) values0 = mcp.read_all_ch(0xC0) # Channel 1 values0[0] = ((float(values0[0]) - 2046) / 197) # ADC 1 values0[1] = ((float(values0[1]) - 2046) / 197) # ADC 2 # Channel 2 values0[2] = ((float(values0[2]) - 2046) / 197) # ADC 3 values0[3] = ((float(values0[3]) - 1535) / 195) # ADC 4 mcp.read_all_ch(0xC4) values1 = mcp.read_all_ch(0xC4) # Channel 3 values1[0] = ((float(values1[0]) - 2046) / 200) values1[1] = ((float(values1[1]) - 2046) / 200) # Channel 4 values1[2] = ((float(values1[2]) - 1535) / 200) values1[3] = ((float(values1[3]) - 1535) / 200) mcp.read_all_ch(0xC8) values2 = mcp.read_all_ch(0xC4) # Channel 5 values2[0] = ((float(values2[0]) - 2046) / 200) values2[1] = ((float(values2[1]) - 2046) / 200) # Channel 6 values2[2] = ((float(values2[2]) - 1535) / 200) values2[3] = ((float(values2[3]) - 1535) / 200) mcp.read_all_ch(0xCC) values3 = mcp.read_all_ch(0xCC) # Channel 7 values3[0] = ((float(values3[0]) - 1520) / 205) values3[1] = ((float(values3[1]) - 1520) / 205) # Channel 8 values3[2] = ((float(values3[2]) - 2045) / 205) values3[3] = ((float(values3[3]) - 2045) / 205) mcp.read_all_ch(0xD0) values4 = mcp.read_all_ch(0xD0) # Channel 9 values4[0] = ((float(values4[0]) - 2045) / 205) values4[1] = ((float(values4[1]) - 2045) / 205) # Channel 10 values4[2] = ((float(values4[2]) - 2045) / 205) values4[3] = ((float(values4[3]) - 2045) / 205) # Append Samples to array values.extend(values0) values.extend(values1) values.extend(values2) values.extend(values3) values.extend(values4) values.extend(tempTime) elif numChannels == 11: mcp.read_all_ch(0xC0) values0 = mcp.read_all_ch(0xC0) # Channel 1 values0[0] = ((float(values0[0]) - 2046) / 197) # ADC 1 values0[1] = ((float(values0[1]) - 2046) / 197) # ADC 2 # Channel 2 values0[2] = ((float(values0[2]) - 2046) / 197) # ADC 3 values0[3] = ((float(values0[3]) - 1535) / 195) # ADC 4 mcp.read_all_ch(0xC4) values1 = mcp.read_all_ch(0xC4) # Channel 3 values1[0] = ((float(values1[0]) - 2046) / 200) values1[1] = ((float(values1[1]) - 2046) / 200) # Channel 4 values1[2] = ((float(values1[2]) - 1535) / 200) values1[3] = ((float(values1[3]) - 1535) / 200) mcp.read_all_ch(0xC8) values2 = mcp.read_all_ch(0xC4) # Channel 5 values2[0] = ((float(values2[0]) - 2046) / 200) values2[1] = ((float(values2[1]) - 2046) / 200) # Channel 6 values2[2] = ((float(values2[2]) - 1535) / 200) values2[3] = ((float(values2[3]) - 1535) / 200) mcp.read_all_ch(0xCC) values3 = mcp.read_all_ch(0xCC) # Channel 7 values3[0] = ((float(values3[0]) - 1520) / 205) values3[1] = ((float(values3[1]) - 1520) / 205) # Channel 8 values3[2] = ((float(values3[2]) - 2045) / 205) values3[3] = ((float(values3[3]) - 2045) / 205) mcp.read_all_ch(0xD0) values4 = mcp.read_all_ch(0xD0) # Channel 9 values4[0] = ((float(values4[0]) - 2045) / 205) values4[1] = ((float(values4[1]) - 2045) / 205) # Channel 10 values4[2] = ((float(values4[2]) - 2045) / 205) values4[3] = ((float(values4[3]) - 2045) / 205) mcp.read_all_ch(0xD4) values5 = mcp.read_all_ch(0xD4) # Channel 11 values5[0] = ((float(values5[0]) - 2045) / 205) values5[1] = ((float(values5[1]) - 2045) / 205) # Append Samples to array values.extend(values0) values.extend(values1) values.extend(values2) values.extend(values3) values.extend(values4) values.extend(values5[0:2]) values.extend(tempTime) elif numChannels == 12: mcp.read_all_ch(0xC0) values0 = mcp.read_all_ch(0xC0) # Channel 1 values0[0] = ((float(values0[0]) - 2046) / 197) # ADC 1 values0[1] = ((float(values0[1]) - 2046) / 197) # ADC 2 # Channel 2 values0[2] = ((float(values0[2]) - 2046) / 197) # ADC 3 values0[3] = ((float(values0[3]) - 1535) / 195) # ADC 4 mcp.read_all_ch(0xC4) values1 = mcp.read_all_ch(0xC4) # Channel 3 values1[0] = ((float(values1[0]) - 2046) / 200) values1[1] = ((float(values1[1]) - 2046) / 200) # Channel 4 values1[2] = ((float(values1[2]) - 1535) / 200) values1[3] = ((float(values1[3]) - 1535) / 200) mcp.read_all_ch(0xC8) values2 = mcp.read_all_ch(0xC4) # Channel 5 values2[0] = ((float(values2[0]) - 2046) / 200) values2[1] = ((float(values2[1]) - 2046) / 200) # Channel 6 values2[2] = ((float(values2[2]) - 1535) / 200) values2[3] = ((float(values2[3]) - 1535) / 200) mcp.read_all_ch(0xCC) values3 = mcp.read_all_ch(0xCC) # Channel 7 values3[0] = ((float(values3[0]) - 1520) / 205) values3[1] = ((float(values3[1]) - 1520) / 205) # Channel 8 values3[2] = ((float(values3[2]) - 2045) / 205) values3[3] = ((float(values3[3]) - 2045) / 205) mcp.read_all_ch(0xD0) values4 = mcp.read_all_ch(0xD0) # Channel 9 values4[0] = ((float(values4[0]) - 2045) / 205) values4[1] = ((float(values4[1]) - 2045) / 205) # Channel 10 values4[2] = ((float(values4[2]) - 2045) / 205) values4[3] = ((float(values4[3]) - 2045) / 205) mcp.read_all_ch(0xD4) values5 = mcp.read_all_ch(0xD4) # Channel 11 values5[0] = ((float(values5[0]) - 2045) / 205) values5[1] = ((float(values5[1]) - 2045) / 205) # Channel 12 values5[2] = ((float(values5[2]) - 2045) / 205) values5[3] = ((float(values5[3]) - 2045) / 205) # Append Samples to array values.extend(values0) values.extend(values1) values.extend(values2) values.extend(values3) values.extend(values4) values.extend(values5) values.extend(tempTime) elif numChannels ==13: mcp.read_all_ch(0xC0) values0 = mcp.read_all_ch(0xC0) # Channel 1 values0[0] = ((float(values0[0]) - 2046) / 197) # ADC 1 values0[1] = ((float(values0[1]) - 2046) / 197) # ADC 2 # Channel 2 values0[2] = ((float(values0[2]) - 2046) / 197) # ADC 3 values0[3] = ((float(values0[3]) - 1535) / 195) # ADC 4 mcp.read_all_ch(0xC4) values1 = mcp.read_all_ch(0xC4) # Channel 3 values1[0] = ((float(values1[0]) - 2046) / 200) values1[1] = ((float(values1[1]) - 2046) / 200) # Channel 4 values1[2] = ((float(values1[2]) - 1535) / 200) values1[3] = ((float(values1[3]) - 1535) / 200) mcp.read_all_ch(0xC8) values2 = mcp.read_all_ch(0xC4) # Channel 5 values2[0] = ((float(values2[0]) - 2046) / 200) values2[1] = ((float(values2[1]) - 2046) / 200) # Channel 6 values2[2] = ((float(values2[2]) - 1535) / 200) values2[3] = ((float(values2[3]) - 1535) / 200) mcp.read_all_ch(0xCC) values3 = mcp.read_all_ch(0xCC) # Channel 7 values3[0] = ((float(values3[0]) - 1520) / 205) values3[1] = ((float(values3[1]) - 1520) / 205) # Channel 8 values3[2] = ((float(values3[2]) - 2045) / 205) values3[3] = ((float(values3[3]) - 2045) / 205) mcp.read_all_ch(0xD0) values4 = mcp.read_all_ch(0xD0) # Channel 9 values4[0] = ((float(values4[0]) - 2045) / 205) values4[1] = ((float(values4[1]) - 2045) / 205) # Channel 10 values4[2] = ((float(values4[2]) - 2045) / 205) values4[3] = ((float(values4[3]) - 2045) / 205) mcp.read_all_ch(0xD4) values5 = mcp.read_all_ch(0xD4) # Channel 11 values5[0] = ((float(values5[0]) - 2045) / 205) values5[1] = ((float(values5[1]) - 2045) / 205) # Channel 12 values5[2] = ((float(values5[2]) - 2045) / 205) values5[3] = ((float(values5[3]) - 2045) / 205) mcp.read_all_ch(0xD8) values6 = mcp.read_all_ch(0xD8) # Channel 13 values6[0] = ((float(values6[0]) - 2045) / 205) values6[1] = ((float(values6[1]) - 2045) / 205) # Append Samples to array values.extend(values0) values.extend(values1) values.extend(values2) values.extend(values3) values.extend(values4) values.extend(values5) values.extend(values6[0:2]) values.extend(tempTime) elif numChannels == 14: mcp.read_all_ch(0xC0) values0 = mcp.read_all_ch(0xC0) # Channel 1 values0[0] = ((float(values0[0]) - 2046) / 197) # ADC 1 values0[1] = ((float(values0[1]) - 2046) / 197) # ADC 2 # Channel 2 values0[2] = ((float(values0[2]) - 2046) / 197) # ADC 3 values0[3] = ((float(values0[3]) - 1535) / 195) # ADC 4 mcp.read_all_ch(0xC4) values1 = mcp.read_all_ch(0xC4) # Channel 3 values1[0] = ((float(values1[0]) - 2046) / 200) values1[1] = ((float(values1[1]) - 2046) / 200) # Channel 4 values1[2] = ((float(values1[2]) - 1535) / 200) values1[3] = ((float(values1[3]) - 1535) / 200) mcp.read_all_ch(0xC8) values2 = mcp.read_all_ch(0xC4) # Channel 5 values2[0] = ((float(values2[0]) - 2046) / 200) values2[1] = ((float(values2[1]) - 2046) / 200) # Channel 6 values2[2] = ((float(values2[2]) - 1535) / 200) values2[3] = ((float(values2[3]) - 1535) / 200) mcp.read_all_ch(0xCC) values3 = mcp.read_all_ch(0xCC) # Channel 7 values3[0] = ((float(values3[0]) - 1520) / 205) values3[1] = ((float(values3[1]) - 1520) / 205) # Channel 8 values3[2] = ((float(values3[2]) - 2045) / 205) values3[3] = ((float(values3[3]) - 2045) / 205) mcp.read_all_ch(0xD0) values4 = mcp.read_all_ch(0xD0) # Channel 9 values4[0] = ((float(values4[0]) - 2045) / 205) values4[1] = ((float(values4[1]) - 2045) / 205) # Channel 10 values4[2] = ((float(values4[2]) - 2045) / 205) values4[3] = ((float(values4[3]) - 2045) / 205) mcp.read_all_ch(0xD4) values5 = mcp.read_all_ch(0xD4) # Channel 11 values5[0] = ((float(values5[0]) - 2045) / 205) values5[1] = ((float(values5[1]) - 2045) / 205) # Channel 12 values5[2] = ((float(values5[2]) - 2045) / 205) values5[3] = ((float(values5[3]) - 2045) / 205) mcp.read_all_ch(0xD8) values6 = mcp.read_all_ch(0xD8) # Channel 13 values6[0] = ((float(values6[0]) - 2045) / 205) values6[1] = ((float(values6[1]) - 2045) / 205) # Channel 14 values6[2] = ((float(values6[2]) - 2045) / 205) values6[3] = ((float(values6[3]) - 2045) / 205) # Append Samples to array values.extend(values0) values.extend(values1) values.extend(values2) values.extend(values3) values.extend(values4) values.extend(values5) values.extend(values6) values.extend(tempTime) elif numChannels == 15: mcp.read_all_ch(0xC0) values0 = mcp.read_all_ch(0xC0) # Channel 1 values0[0] = ((float(values0[0]) - 2046) / 197) # ADC 1 values0[1] = ((float(values0[1]) - 2046) / 197) # ADC 2 # Channel 2 values0[2] = ((float(values0[2]) - 2046) / 197) # ADC 3 values0[3] = ((float(values0[3]) - 1535) / 195) # ADC 4 mcp.read_all_ch(0xC4) values1 = mcp.read_all_ch(0xC4) # Channel 3 values1[0] = ((float(values1[0]) - 2046) / 200) values1[1] = ((float(values1[1]) - 2046) / 200) # Channel 4 values1[2] = ((float(values1[2]) - 1535) / 200) values1[3] = ((float(values1[3]) - 1535) / 200) mcp.read_all_ch(0xC8) values2 = mcp.read_all_ch(0xC4) # Channel 5 values2[0] = ((float(values2[0]) - 2046) / 200) values2[1] = ((float(values2[1]) - 2046) / 200) # Channel 6 values2[2] = ((float(values2[2]) - 1535) / 200) values2[3] = ((float(values2[3]) - 1535) / 200) mcp.read_all_ch(0xCC) values3 = mcp.read_all_ch(0xCC) # Channel 7 values3[0] = ((float(values3[0]) - 1520) / 205) values3[1] = ((float(values3[1]) - 1520) / 205) # Channel 8 values3[2] = ((float(values3[2]) - 2045) / 205) values3[3] = ((float(values3[3]) - 2045) / 205) mcp.read_all_ch(0xD0) values4 = mcp.read_all_ch(0xD0) # Channel 9 values4[0] = ((float(values4[0]) - 2045) / 205) values4[1] = ((float(values4[1]) - 2045) / 205) # Channel 10 values4[2] = ((float(values4[2]) - 2045) / 205) values4[3] = ((float(values4[3]) - 2045) / 205) mcp.read_all_ch(0xD4) values5 = mcp.read_all_ch(0xD4) # Channel 11 values5[0] = ((float(values5[0]) - 2045) / 205) values5[1] = ((float(values5[1]) - 2045) / 205) # Channel 12 values5[2] = ((float(values5[2]) - 2045) / 205) values5[3] = ((float(values5[3]) - 2045) / 205) mcp.read_all_ch(0xD8) values6 = mcp.read_all_ch(0xD8) # Channel 13 values6[0] = ((float(values6[0]) - 2045) / 205) values6[1] = ((float(values6[1]) - 2045) / 205) # Channel 14 values6[2] = ((float(values6[2]) - 2045) / 205) values6[3] = ((float(values6[3]) - 2045) / 205) mcp.read_all_ch(0xDC) values7 = mcp.read_all_ch(0xDC) # Channel 15 values7[0] = ((float(values7[0]) - 2045) / 205) values7[1] = ((float(values7[1]) - 2045) / 205) # Append Samples to array values.extend(values0) values.extend(values1) values.extend(values2) values.extend(values3) values.extend(values4) values.extend(values5) values.extend(values6) values.extend(values7[0:2]) values.extend(tempTime) elif numChannels == 16: mcp.read_all_ch(0xC0) values0 = mcp.read_all_ch(0xC0) # Channel 1 values0[0] = ((float(values0[0]) - 2046) / 197) # ADC 1 values0[1] = ((float(values0[1]) - 2046) / 197) # ADC 2 # Channel 2 values0[2] = ((float(values0[2]) - 2046) / 197) # ADC 3 values0[3] = ((float(values0[3]) - 1535) / 195) # ADC 4 mcp.read_all_ch(0xC4) values1 = mcp.read_all_ch(0xC4) # Channel 3 values1[0] = ((float(values1[0]) - 2046) / 200) values1[1] = ((float(values1[1]) - 2046) / 200) # Channel 4 values1[2] = ((float(values1[2]) - 1535) / 200) values1[3] = ((float(values1[3]) - 1535) / 200) mcp.read_all_ch(0xC8) values2 = mcp.read_all_ch(0xC4) # Channel 5 values2[0] = ((float(values2[0]) - 2046) / 200) values2[1] = ((float(values2[1]) - 2046) / 200) # Channel 6 values2[2] = ((float(values2[2]) - 1535) / 200) values2[3] = ((float(values2[3]) - 1535) / 200) mcp.read_all_ch(0xCC) values3 = mcp.read_all_ch(0xCC) # Channel 7 values3[0] = ((float(values3[0]) - 1520) / 205) values3[1] = ((float(values3[1]) - 1520) / 205) # Channel 8 values3[2] = ((float(values3[2]) - 2045) / 205) values3[3] = ((float(values3[3]) - 2045) / 205) mcp.read_all_ch(0xD0) values4 = mcp.read_all_ch(0xD0) # Channel 9 values4[0] = ((float(values4[0]) - 2045) / 205) values4[1] = ((float(values4[1]) - 2045) / 205) # Channel 10 values4[2] = ((float(values4[2]) - 2045) / 205) values4[3] = ((float(values4[3]) - 2045) / 205) mcp.read_all_ch(0xD4) values5 = mcp.read_all_ch(0xD4) # Channel 11 values5[0] = ((float(values5[0]) - 2045) / 205) values5[1] = ((float(values5[1]) - 2045) / 205) # Channel 12 values5[2] = ((float(values5[2]) - 2045) / 205) values5[3] = ((float(values5[3]) - 2045) / 205) mcp.read_all_ch(0xD8) values6 = mcp.read_all_ch(0xD8) # Channel 13 values6[0] = ((float(values6[0]) - 2045) / 205) values6[1] = ((float(values6[1]) - 2045) / 205) # Channel 14 values6[2] = ((float(values6[2]) - 2045) / 205) values6[3] = ((float(values6[3]) - 2045) / 205) mcp.read_all_ch(0xDC) values7 = mcp.read_all_ch(0xDC) # Channel 15 values7[0] = ((float(values7[0]) - 2045) / 205) values7[1] = ((float(values7[1]) - 2045) / 205) # Channel 16 values7[2] = ((float(values7[2]) - 2045) / 205) values7[3] = ((float(values7[3]) - 1520) / 205) # Append Samples to array values.extend(values0) values.extend(values1) values.extend(values2) values.extend(values3) values.extend(values4) values.extend(values5) values.extend(values6) values.extend(values7) values.extend(tempTime) with open(fileName, 'a+') as f: f.write((", ".join(str(x) for x in values))) f.write('\n') print('Test Complete') print(fileName)
def __init__(self, channel): self.curVal = 0.0 self.channel = channel self.mcp = Adafruit_MCP3008.MCP3008( spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE))
def __init__(self): self.mcp = Adafruit_MCP3008.MCP3008( spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE))
def Update_Battery(self): f = open('Ubidots_APIkey.txt', 'r') apikey = f.readline().strip() f.close() api = ApiClient(token=apikey) try: batt = api.get_variable("58d763aa762542260cf36f24") except ValueError: print('Value Error') # Raspberry Pi pin configuration: RST = 32 # 128x32 display with hardware I2C: disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST) # Import SPI library (for hardware SPI) and MCP3008 library. import Adafruit_GPIO.SPI as SPI import Adafruit_MCP3008 # Initialize library. disp.begin() time.sleep(5) width = disp.width height = disp.height # Clear display. disp.clear() disp.display() image = Image.new('1', (width, height)) # Get drawing object to draw on image. draw = ImageDraw.Draw(image) # Load default font. font = ImageFont.load_default() # Alternatively load a TTF font. Make sure the .ttf font file is in the same directory as the python script! # Some other nice fonts to try: http://www.dafont.com/bitmap.php #font = ImageFont.truetype('Minecraftia.ttf', 8) # Hardware SPI configuration: SPI_PORT = 0 SPI_DEVICE = 0 mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE)) # Main program loop. time.sleep(3) # Draw a black filled box to clear the image. draw.rectangle((0, 0, width, height), outline=0, fill=0) value = mcp.read_adc(0) volts = ((value * 3.3)) / float(1023) #voltage divider voltage volts = volts * 5.7 #actual voltage volts = round(volts, 2) if (volts >= 13.6): batt = 100 print('100% Battery') draw.text((0, 0), 'Battery percent at: ', font=font, fill=255) draw.text((50, 20), str(batt), font=font, fill=255) disp.image(image) disp.display() time.sleep(1) elif (volts > 11.6): batt = round((volts - 11.6) * 50, 1) print(batt, '% Battery') draw.text((10, 0), 'Battery percent at: ', font=font, fill=255) draw.text((45, 20), str(batt), font=font, fill=255) disp.image(image) disp.display() time.sleep(1) else: print('Connection Error') draw.text((55, 10), ':(', font=font, fill=255) disp.image(image) disp.display() # Print the ADC values. # Pause time. time.sleep(1) battery = volts try: batt.save_value({'value': battery}) time.sleep(1) except: print('Unable to connect to Ubidots batt') self.avg_batt.setText('{}%'.format(battery))
def main() -> None: LOG.info("Setting up BME280...") i2c_dev = smbus2.SMBus(1) bme280_device_internal = bme280.BME280(i2c_dev=i2c_dev) bme280_device_external = bme280.BME280(i2c_dev=i2c_dev, i2c_addr=0x77) t_bme280_internal = sensors.BME280_T(name="t_bme280", bme280_device=bme280_device_internal) pressure_internal = sensors.BME280_P(name="pressure", bme280_device=bme280_device_internal) humidity_internal = sensors.BME280_H(name="humidity", bme280_device=bme280_device_internal) t_bme280_external = sensors.BME280_T(name="t_bme280_external", bme280_device=bme280_device_external) humidity_external = sensors.BME280_H(name="humidity_external", bme280_device=bme280_device_external) LOG.info("Stabilizing sensors...") stabilization_sensors = [ t_bme280_internal, pressure_internal, humidity_internal, t_bme280_external, humidity_external, ] for i in range(3): for sensor in stabilization_sensors: sensor.update() LOG.info( f"{' '.join(str(sensor.value) for sensor in stabilization_sensors)}" ) time.sleep(1) LOG.info("Setting up ambient light sensor...") ambient_light = sensors.MCPSensor( name="ambient_light", mcp3xxx=Adafruit_MCP3008.MCP3008( spi=Adafruit_GPIO.SPI.SpiDev(SPI_PORT, SPI_DEVICE)), channel=0, ) LOG.info("Setting up DS18B20 sensors...") t_ds18b20 = [ sensors.DS18B20(name="t_internal_1", id="4cba936"), sensors.DS18B20(name="t_external", id="4cdf645"), sensors.DS18B20(name="t_internal_2", id="4ce8778"), ] LOG.info("Setting up heater controller...") heater_controller = controllers.HeaterController(name="heater", control_pin=11, sensor=t_bme280_internal) heater_controller.setpoint = 18 LOG.info("Setting up pigpio") pi = pigpio.pi() LOG.info("Setting up fan controller...") fan_controller = controllers.FanController( name="fan", control_pin=15, humidity_sensor=humidity_internal, temperature_sensor=t_bme280_internal, pi=pi, ) fan_controller.setpoint = 60 fan_controller.setpoint_temp = 20 fan_controller.set_external_humidity_sensor(humidity_external) LOG.info("Setting up vent controller...") vent_controller = controllers.VentController( name="vent", control_pin=18, # BCM-style control pin pi=pi, fan_controller=fan_controller, ) LOG.info("Starting control loop...") looper = Loop( event=STOP_FLAG, target=process, sensors=[ *t_ds18b20, t_bme280_internal, pressure_internal, humidity_internal, ambient_light, t_bme280_external, humidity_external, ], controllers=[heater_controller, fan_controller, vent_controller], ) looper.start() atexit.register(on_exit, [looper])
cf = 0 sf = 15 CLK = 5 MISO = 6 MOSI = 13 node = 0 gap = 0.1 ssp = 10 factor = 6 CS = [9, 10, 22, 27, 17, 4] cfactor = [0, 0, 0, 0] pos = [0, 0, 0, 0] nodeDetected = False #CSextra=17 #CSencoder=4 mcp = [Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS[0], miso=MISO, mosi=MOSI)] * 6 for i in range(6): mcp[i] = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS[i], miso=MISO, mosi=MOSI) avg = [[0 for i in range(8)] for j in range(4)] bi = [[0 for i in range(8)] for j in range(4)] prevbi = [[0 for i in range(8)] for j in range(4)] values = [[0 for i in range(8)] for j in range(6)] maxi = [[0 for i in range(8)] for j in range(4)] mini = [[1023 for i in range(8)] for j in range(4)] summ = [0 for j in range(4)] motordir = [16, 24, 8, 21] motorpwm = [20, 7, 25, 12] #motordir = [16,24,15,21] #motorpwm=[20,7,14,12] motorin = [0, 0, 0, 0]
from time import sleep import Adafruit_MCP3008 # Create MCP3008 object using specified pin numbers: a2d = Adafruit_MCP3008.MCP3008(clk=18, cs=25, miso=23, mosi=24) print('Press Ctrl-C to quit...') while True: a2d0 = a2d.read_adc(0) print('A/D input channel 0 = ', a2d0) sleep(0.5)
#GPIO.setmode(GPIO.BOARD) #print "mode: " #print GPIO.getmode() #software box configuration: OUT1 = 24 LED1 = 23 #software SPI configuration: CLK = 23 MISO = 21 MOSI = 19 CS = 24 mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI) print "mode: " print GPIO.getmode() # Hardware SPI configuration: SPI_PORT = 0 SPI_DEVICE = 0 mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE)) #Define Variables delay = 0.5 ldr_channel = 0 def readadc(i): # read SPI data from the MCP3008, channel 1 is temp channel 0 is light if i == 1:
def initTurbineVoltageSensor(): global adcSensor adcSensor = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI) print("Turbine voltage sensor is connected")
# Import SPI library (for hardware SPI) and MCP3008 library. import Adafruit_GPIO.SPI as SPI import Adafruit_MCP3008 # Software SPI configuration: ##CLK = 18 ##MISO = 23 ##MOSI = 24 ##CS = 25 ##mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI) # Hardware SPI configuration: SPI_PORT = 0 SPI_DEVICE = 0 mcp1 = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE)) mcp2 = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE + 1)) Vref = 5 # method to save the results google_sheet = False csv_sheet = True # value of the resistors R = [{'R1': 0, 'R2': 1}] R.append({'R1': 1000, 'R2': 1000}) R.append({'R1': 10000, 'R2': 1000}) R.append({'R1': 10000, 'R2': 1000}) R.append({'R1': 10000, 'R2': 1000}) R.append({'R1': 10000, 'R2': 1000}) R.append({'R1': 10000, 'R2': 1000})
#!/usr/bin/python import time import Adafruit_GPIO.SPI as SPI import Adafruit_MCP3008 as ADC CLK = 12 # GPIO 18 = Pin 12 (CLK -> CLK) MISO = 7 # GPIO 23 = Pin 16 (DOUT -> MISO) MOSI = 8 # GPIO 24 = Pin 18 (DIN -> MOSI) CS = 25 # GPIO 25 = Pin 22 (CS -> CE0) mcp = ADC.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI) def get_voltage(): v = (mcp.read_adc(0) / 1023.0) * 3.3 return v def calc_distance_cm(v): a = 0.00385 b = -0.2205 c = 4.12 cm = ((b*-1) + (((b**2)-(4*a*c))*0.5)) / (2*a) return cm if __name__ == '__main__': total_volt = 0 total_samples = 0
import RPi.GPIO as GPIO import time from random import randint import numpy as np # next two libraries must be installed IAW appendix instructions import Adafruit_GPIO.SPI as SPI import Adafruit_MCP3008 global pwmL, pwmR, mcp lightOld = 0 hysteresis = 2 # Hardware SPI configuration: SPI_PORT = 0 SPI_DEVICE = 0 mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE)) threshold = 25.4 # use the BCM pin numbers GPIO.setmode(GPIO.BCM) # setup the motor control pins GPIO.setup(18, GPIO.OUT) GPIO.setup(19, GPIO.OUT) pwmL = GPIO.PWM(18, 20) # pin 18 is left wheel pwm pwmR = GPIO.PWM(19, 20) # pin 19 is right wheel pwm # must 'start' the motors with 0 rotation speeds pwmL.start(2.8) pwmR.start(2.8) # ultrasonic sensor pins TRIG1 = 23 # an output ECHO1 = 24 # an input TRIG2 = 25 # an output ECHO2 = 27 # an input
import sys sys.path.insert(0, 'Cubium/drivers/PythonDrivers') import Adafruit_GPIO.SPI as SPI import Adafruit_MCP3008 import time SPI_PORT = 0 SPI_DEVICE = 0 uv_external = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE)) ADC_PIN = 1 def handleSpaData(): pass def sendData(): value = uv_external.read_adc(ADC_PIN) return value def init(): pass
def __init__(self): # Hardware SPI configuration: SPI_PORT = 0 SPI_DEVICE = 0 self.mcp = Adafruit_MCP3008.MCP3008( spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE))
# Import SPI library (for hardware SPI) and MCP3008 library. import Adafruit_GPIO.SPI as SPI import Adafruit_MCP3008 # Software SPI configuration: CLK = 18 MISO = 23 MOSI = 24 CS = 25 Clk = 10 Miso = 9 Mosi = 11 Cs = 22 mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI) mcp2 = Adafruit_MCP3008.MCP3008(clk=Clk, cs=Cs, miso=Miso, mosi=Mosi) # Hardware SPI configuration: #SPI_PORT = 0 #SPI_DEVICE = 0 #mcp2 = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE)) print('Press Ctrl-C to quit...') while True: for i in range(9): value = 0 if i < 6: value = mcp.read_adc(i) else: value2 = mcp2.read_adc(i - 6)
def __init__(self, CLK, DOUT, DIN, CS): self.mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=DOUT, mosi=DIN)
#!/usr/bin/env python import multiprocessing from pyo import * import math import Adafruit_ADS1x15 adc = Adafruit_ADS1x15.ADS1115() import Adafruit_MCP3008 import RPi.GPIO as GPIO CLK = 27 MISO = 22 MOSI = 17 CS1 = 8 CS2 = 9 mcp1 = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS1, miso=MISO, mosi=MOSI) mcp2 = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS2, miso=MISO, mosi=MOSI) MAXADC = 26300.0 GPIO.setup(CS1, GPIO.OUT) GPIO.setup(CS2, GPIO.OUT) pa_list_devices() #print pm_get_default_input() # --TriTable import from examples-- (Not in normal libs?) class TriTable(PyoTableObject): def __init__(self, order=10, size=8192):
def init(): global mcp mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI)
import Adafruit_GPIO.SPI as SPI import Adafruit_MCP3008 mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(0, 0)) #895 = OK #638 = LEFT #511 = UP #383 = RIGHT #766 = DOWN #255 = BACK #128 = RESET def tol(input): t = 2 return xrange(input - t, input + t) button_map = { tol(895): 'OK', tol(766): 'DOWN', tol(638): 'LEFT', tol(511): 'UP', tol(383): 'RIGHT', tol(255): 'BACK', tol(128): 'RESET', -1: 'NULL' }
import time import math from sensors import * #Import the firmware code for the Adafruit MAX31855 Amplifier for the Thermocouple import Adafruit_MAX31855.MAX31855 as MAX31855 max_sensor = MAX31855.MAX31855(21, 20, 16) #import smbus for use with the DHT20 sensor and setting up the bus with the address import smbus import numpy as np bus = smbus.SMBus(1) #SHT20 address, 0x40(64) #import MCP3008 (ADC) Library import Adafruit_MCP3008 mcp = Adafruit_MCP3008.MCP3008(clk=22, cs=25, miso=23, mosi=24) #importing the DHT11 sensor library import Adafruit_DHT # a function that returns a string with the system status and stores that in the Store/status.csv file def statusUpdate(): try: while True: statusString = 0 sensorString = 0 #check for tank leaks tankLeak = checkTankLeak() if tankLeak["status"] == 1:
class MQ(): CLK = 23 MISO = 21 MOSI = 19 CS = 24 mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI) SPI_PORT = 0 SPI_DEVICE = 0 mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE)) RL_VALUE = 10 RO_CLEAN_AIR_FACTOR = float(4.4) CALIBARAION_SAMPLE_TIMES = 50 CALIBRATION_SAMPLE_INTERVAL = 50 READ_SAMPLE_INTERVAL = 50 READ_SAMPLE_TIMES = 5 GAS_CH4 = 0 def _init_(self, Ro=10, analogPin=1): self.Ro = Ro self.MQ_PIN = analogPin self.CH4Curve = [2.3, 0.26, -0.36] print("Calibrating...") self.Ro = self.MQCalibration(self.MQ_PIN) print("Calibration is done...\n") print("Ro=%f kohm" % self.Ro) def MQPercentage(self): val = {} read = self.MQRead(self.MQ_PIN) val["GAS_CH4"] = self.MQGetGasPercentage(read / self.Ro, self.GAS_CH4) return val def MQResistanceCalculation(self, raw_adc): return float(self.RL_VALUE * (1023.0 - raw_adc) / float(raw_adc)) def MQCalibration(self, mq_pin): val = 0.0 for i in range(self.CALIBARAION_SAMPLE_TIMES): val += self.MQResistanceCalculation(self.mcp.read_adc(mq_pin)) time.sleep(self.CALIBRATION_SAMPLE_INTERVAL / 1000.0) val = val / self.CALIBARAION_SAMPLE_TIMES val = val / self.RO_CLEAN_AIR_FACTOR return val def MQRead(self, mq_pin): rs = 0.0 for i in range(self.READ_SAMPLE_TIMES): rs += self.MQResistanceCalculation(self.mcp.read_adc(mq_pin)) time.sleep(self.READ_SAMPLE_INTERVAL / 1000.0) rs = rs / self.READ_SAMPLE_TIMES return rs def MQGetGasPercentage(self, rs_ro_ratio, gas_id): if (gas_id == self.GAS_CH4): return self.MQGetPercentage(rs_ro_ratio, self.CH4Curve) def MQGetPercentage(self, rs_ro_ratio, pcurve): return (math.pow( 10, (((math.log10(rs_ro_ratio) - pcurve[1]) / pcurve[2]) + pcurve[0])))
type=int, help='channel to read from the ADC (0 - 7)', required=False, choices=range(0, 8)) return parser.parse_args() if __name__ == '__main__': import Adafruit_MCP3008 parser = argparse.ArgumentParser( description='MCP3008 Analog-to-Digital Converter Read Test Script') args = parse_args(parser) # Example Software SPI pins: CLK = 18, MISO = 23, MOSI = 24, CS = 25 mcp = Adafruit_MCP3008.MCP3008(clk=args.clockpin, cs=args.cspin, miso=args.misopin, mosi=args.mosipin) if -1 < args.adcchannel < 8: # Read the specified channel value = mcp.read_adc(args.adcchannel) print("ADC Channel: {chan}, Output: {out}".format(chan=args.adcchannel, out=value)) else: # Create a list for the ADC channel values values = [0] * 8 # Conduct measurements of channels 0 - 7, add them to the list for i in range(8): values[i] = mcp.read_adc(i)
class MQ(): # Software SPI #CLK = 23 #MISO = 21 #MOSI = 19 #CS = 24 #mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI) # Hardware SPI SPI_PORT = 0 SPI_DEVICE = 0 mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE)) RL_VALUE = 5 RO_CLEAN_AIR_FACTOR = 3.62 CALIBARAION_SAMPLE_TIMES = 50 CALIBRATION_SAMPLE_INTERVAL = 500 READ_SAMPLE_INTERVAL = 50 READ_SAMPLE_TIMES = 5 GAS_CO2 = 0 GAS_CO = 1 GAS_NH4 = 2 def __init__(self, Ro=20, analogPin=0): self.Ro = Ro self.MQ_PIN = analogPin self.CO2Curve = [1, 0.38, -0.339] self.COCurve = [1, 0.462, -0.232] self.NH4Curve = [1, 0.423, -0.423] print("Calibrating...") self.Ro = self.MQCalibration(self.MQ_PIN) print("Calibration is done...\n") print("Ro=%f kohm" % self.Ro) def MQPercentage(self): val = {} read = self.MQRead(self.MQ_PIN) val["GAS_CO2"] = self.MQGetGasPercentage(read / self.Ro, self.GAS_CO2) val["GAS_CO"] = self.MQGetGasPercentage(read / self.Ro, self.GAS_CO) val["GAS_NH4"] = self.MQGetGasPercentage(read / self.Ro, self.GAS_NH4) return val def MQResistanceCalculation(self, raw_adc): return float(self.RL_VALUE * (1023.0 - raw_adc) / float(raw_adc)) def MQCalibration(self, mq_pin): val = 0.0 for i in range(self.CALIBARAION_SAMPLE_TIMES): val += self.MQResistanceCalculation(self.mcp.read_adc(mq_pin)) time.sleep(self.CALIBRATION_SAMPLE_INTERVAL / 1000.0) val = val / self.CALIBARAION_SAMPLE_TIMES val = val / self.RO_CLEAN_AIR_FACTOR return val def MQRead(self, mq_pin): rs = 0.0 for i in range(self.READ_SAMPLE_TIMES): rs += self.MQResistanceCalculation(self.mcp.read_adc(mq_pin)) time.sleep(self.READ_SAMPLE_INTERVAL / 1000.0) rs = rs / self.READ_SAMPLE_TIMES return rs def MQGetGasPercentage(self, rs_ro_ratio, gas_id): if (gas_id == self.GAS_CO2): return self.MQGetPercentage(rs_ro_ratio, self.CO2Curve) elif (gas_id == self.GAS_CO): return self.MQGetPercentage(rs_ro_ratio, self.COCurve) elif (gas_id == self.GAS_NH4): return self.MQGetPercentage(rs_ro_ratio, self.NH4Curve) return 0 def MQGetPercentage(self, rs_ro_ratio, pcurve): return (math.pow( 10, (((math.log(rs_ro_ratio) - pcurve[1]) / pcurve[2]) + pcurve[0])))
# Import SPI library (for hardware SPI) and MCP3008 library. import Adafruit_GPIO.SPI as SPI import Adafruit_MCP3008 # Software SPI configuration: #CLK = 31 #MISO = 33 #MOSI = 35 #CS = 37 #mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI) # Hardware SPI configuration: SPI_PORT = 0 SPI_DEVICE = 0 mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE)) print('Reading MCP3008 values, press Ctrl-C to quit...') # Print nice channel column headers. print('| {0:>4} | {1:>4} | {2:>4} | {3:>4} | {4:>4} | {5:>4} | {6:>4} | {7:>4} |'.format(*range(8))) print('-' * 57) # Main program loop. while True: # Read all the ADC channel values in a list. values = [0] * 8 for i in range(8): # The read_adc function will get the value of the specified channel (0-7). values[i] = mcp.read_adc(i) # Print the ADC values. print('| {0:>4} | {1:>4} | {2:>4} | {3:>4} | {4:>4} | {5:>4} | {6:>4} | {7:>4} |'.format(*values))
import time import Adafruit_GPIO.SPI, Adafruit_MCP3008 try: print('start') while True: adc = Adafruit_MCP3008.MCP3008(spi=Adafruit_GPIO.SPI.SpiDev(0, 0)) for a in range(8): var = adc.read_adc(a) print(var, end=', ') print() time.sleep(0.1) except KeyboardInterrupt: print('KeyboardInterrupt') finally: print('finally')
# There may be plans to include digital input to complement the analog input ####### # INPUT (MCP3008) ####### # Input is directly involved from the input port on the hat and then goes through the Analog-to-Digital Converter, # which is the MCP3008 IC. The input channels are respective to the input ports on the SwissCHEESE Hat, from A0 to # A7. The output is read through SPI or Serial Peripheral Interface. A lot of the code was inherited from Adafruit's # open source repository for the MCP3008 module. # Hardware SPI configurations for the Pi SPI_PORT = 0 SPI_DEVICE = 0 mcp = MCP.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE)) # Parent input class for all general peripheral input devices - limited functions class inputPort: # Initialization of the port number being used portNum = -1 # Maximum value of the analog values (actually is 1023, but intended purpose is for function use) analogMax = 1024 # Constructor for the inputPort def __init__(self, portNum): # The only valid ports accepted will be from 0 to 7 (referred to as J1 to J8) if (portNum > -1 and portNum < 8):
def read(self): #reads value from sensor value = Adafruit_MCP3008.read_adc(channel)