Exemplo n.º 1
0
    def __init__(self, param):
        """
        param - dictionary of parameters for the constant voltage test. It
        should contain the following items.

         filename      Data log filename
         port          Potentiostat serial port
         volt_range    Output voltage range
         curr_range    Measurement current range
         sample_dt     Sample period (s)
         volt          # Output voltage (V)

        """
        self.param = param
        self.done = False
        self.sep = ','

        self.pstat = Potentiostat(self.param['port'])
        self.pstat.set_volt_range(self.param['volt_range'])
        self.pstat.set_curr_range(self.param['curr_range'])
        self.pstat.set_volt(self.param['volt'])

        self.scheduler = sched.scheduler(time.time, time.sleep)
        self.scheduler_event = None
        signal.signal(signal.SIGINT, self.sigint_handler)
Exemplo n.º 2
0
def fetch_ports():
    coms = fetch_coms()
    pots = {}
    for c in coms:
        p = Potentiostat('/dev/{}'.format(c))
        if p not in pots:
            pots['pot{}'.format(p.get_device_id())] = p
    for k, p in pots.items():
        _pot_radio = ttk.Radiobutton(parent, text=p)
        _pot_radio.grid(row=0, column=1)
Exemplo n.º 3
0
def read_pots():
    devlist = os.listdir('/dev')

    coms = [c for c in devlist if c.startswith('ttyACM')]

    pots = {}
    for c in coms:
        p = Potentiostat('/dev/{}'.format(c))
        _id = p.get_device_id()
        if p not in pots:
            pots['pot{}'.format(_id)] = p
    return pots
Exemplo n.º 4
0
def read_pots():
    """
    searches the operating system for connected serial ports
    """
    devlist = os.listdir('/dev')

    coms = [c for c in devlist if c.startswith('ttyACM')]

    pots = {}
    for c in coms:
        p = Potentiostat('/dev/{}'.format(c))
        _id = p.get_device_id()
        if p not in pots:
            pots['pot{}'.format(_id)] = p
    return pots
Exemplo n.º 5
0
 def find_arduino_serial_ports(num_RAAs):
     _Ard_Address = [[] for x in range(num_RAAs)]
     ports = list(serial.tools.list_ports.comports())
     for p in ports:
         try:
             dev = Potentiostat(p[0])
             cT = dev.get_device_id()
             print cT
             if float(cT) == 1:
                 print 'Connecting RAA 1 to Arduino via port %s.'%(p[0])
                 _Ard_Address[0] = dev
             if float(cT) == 2:
                 print 'Connecting RAA 2 to Arduino via port %s.'%(p[0])
                 _Ard_Address[1] = dev
         except:
             print 'Could not connect to arduino'
     return _Ard_Address
Exemplo n.º 6
0
    def find_arduino_serial_ports(num_RAAs):
        _Ard_Address = [[] for x in range(num_RAAs)]
        ports = list(serial.tools.list_ports.comports())
        print 'Looking for ARD port...'
        for p in ports:
            try:
##                print p
                dev = Potentiostat(p[0])
                cT = dev.get_device_id()
                if float(cT) == 1:
                    print 'Connecting RAA 1 to Arduino (ID: %s) via port %s.'%(str(cT), p[0])
                    _Ard_Address[0] = dev
                if float(cT) == 2:
                    print 'Connecting RAA 2 to Arduino (ID: %s) via port %s.'%(str(cT), p[0])
                    _Ard_Address[1] = dev
            except:
                pass
##                print 'Could not connect to arduino (Ln: 140)'
        if not _Ard_Address[0]:
            print 'Could not connect RAA 1 to potentiostat'
        if not _Ard_Address[1]:
            print 'Could not connect RAA 2 to potentiostat'
        return _Ard_Address
Exemplo n.º 7
0
from potentiostat import Potentiostat
import sys

if len(sys.argv) > 1:
    port = sys.argv[1]
else:
    port = '/dev/ttyACM0'

dev = Potentiostat(port)
dev.set_curr_range('100uA')
dev.set_sample_period(10)

name = 'constant'
param = {
        'quietValue' : 0.0,
        'quietTime'  : 1000,
        'value'      : 1.0,
        'duration'   : 5000,
        }

dev.set_param(name,param)
t,volt,curr = dev.run_test(name,display='pbar')
Exemplo n.º 8
0
from __future__ import print_function
from potentiostat import Potentiostat
import sys

if len(sys.argv) > 1:
    port = sys.argv[1]
else:
    port = '/dev/ttyACM0'

dev = Potentiostat(port)

name = 'cyclic'
param = {
    'quietValue': 0.2,
    'quietTime': 1500,
    'amplitude': 1.52243432,
    'offset': 0.1,
    'period': 2000,
    'numCycles': 5,
    'shift': 0.12,
}

param_rsp = dev.set_param(name, param)
print(param_rsp)
Exemplo n.º 9
0
from __future__ import print_function
from potentiostat import Potentiostat
import sys

if len(sys.argv) > 1:
    port = sys.argv[1]
else:
    port = '/dev/tty.usbmodem65156601'  #'/dev/ttyACM0'

dev = Potentiostat(port)

variant = dev.get_hardware_variant()
print('hardware variant: ', variant)
Exemplo n.º 10
0
                                                       
                                                       H2O2ValLast , \
                                                       
                                                       _H2O2Conc ,\
                                                       
                                                       _current , \
                                                       
                                                       _Pump])
                                                       
                                                       
            lastWriteTime = time.time()
            





except:
    traceback.print_exc()
    pass
finally:
    GPIO.cleanup()
    ports = list(serial.tools.list_ports.comports())
    for p in ports:
        try:
            dev = Potentiostat(p[0])
            dev.stop_test()
        except:
            pass

Exemplo n.º 11
0
from __future__ import print_function
from potentiostat import Potentiostat
import sys

if len(sys.argv) > 1:
    port = sys.argv[1]
else:
    port = '/dev/ttyACM0'

if len(sys.argv) > 2:
    dev_id = int(sys.argv[2])
else:
    dev_id = 0

dev = Potentiostat(port)

print('setting device id to: {0}'.format(dev_id))

rsp = dev.set_device_id(dev_id)



Exemplo n.º 12
0
from __future__ import print_function
from potentiostat import Potentiostat
import sys

if len(sys.argv) > 1:
    port = sys.argv[1]
else:
    #port = '/dev/ttyACM0'
    port = '/dev/tty.usbmodem65156601'

dev = Potentiostat(port)

HV = [0, 100, 200, 0]
for v in HV:
    param_rsp = dev.set_HV(v)
    print(param_rsp)

    print(dev.get_HV())
Exemplo n.º 13
0
from __future__ import print_function
from potentiostat import Potentiostat
import sys
import time

if len(sys.argv) > 1:
    port = sys.argv[1]
else:
    port = '/dev/ttyACM0'

channel_list = [1, 7]
num_sample = 10
sleep_dt = 0.25

dev = Potentiostat(port)
dev.set_volt_range('5V')
dev.set_curr_range('100uA')

dev.set_mux_enabled(True)
dev.set_enabled_mux_channels(channel_list)
dev.set_mux_ref_elect_connected(True)
dev.set_mux_ctr_elect_connected(True)

print()

for channel in channel_list:

    print('testing channel: ', channel)
    print('----------------------------------------------')

    dev.set_mux_wrk_elect_connected(channel)
Exemplo n.º 14
0
    t0 = 10.0  # Transition start time (s)
    t1 = 50.0  # Transition stop time (s)

    v0 = -0.9  # Initial voltage (V)
    v1 = 1.2  # Final voltage (V)

    amp = 0.1  # Sinusoid ampliude (V)
    per = 2.0  # Sinusoid period (s)

    dt = 0.05  # Time step for setting voltage and measurements
    t_total = 60.0  # Total experiment duration

    volt_func = create_sin_linear_func(t0, t1, v0, v1, amp, per)

    # Create device object, set voltage/current ranges and run test
    pstat = Potentiostat('/dev/ttyACM0')
    pstat.set_volt_range('2V')
    pstat.set_curr_range('100uA')
    t, volt, curr = run_manual_test(pstat, volt_func, dt, t_total)

    # Plot results
    plt.subplot(211)
    plt.plot(t, volt)
    plt.ylabel('potential (V)')
    plt.grid('on')

    plt.subplot(212)
    plt.plot(t, curr)
    plt.xlabel('time (s)')
    plt.ylabel('current (uA)')
    plt.grid('on')
        'quietTime': 1000,
        'step': [(1000, -0.25), (1000, 0.5)],
    },

    # Multistep Test Data
    {
        'quietValue':
        0.0,
        'quietTime':
        1000,
        'step': [(1000, -0.5), (1000, -0.2), (1000, -0.3), (1000, -0.0),
                 (1000, -0.1), (1000, 0.3), (1000, 0.2), (1000, 0.5)],
    },
]

cpp = Potentiostat(port)
cpp.set_curr_range(curr_range)
cpp.set_sample_rate(sample_rate)
print(test_name[int_test], test_data[int_test])
cpp.set_param(test_name[int_test], test_data[int_test])

t, volt, curr = cpp.run_test(test_name[int_test], display='pbar')
file = open(datafile[int_test], 'w')
file.write('Time \n' + str(t) + '\n' + 'Volt \n' + str(volt) + '\n'
           'Curr \n' + str(curr) + '\n')
plt.figure(1)
plt.subplot(211)
plt.plot(t, volt)
plt.ylabel('potential (V)')
plt.grid('on')
Exemplo n.º 16
0
from __future__ import print_function
from potentiostat import Potentiostat
import sys

if len(sys.argv) > 1:
    port = sys.argv[1]
else:
    #port = '/dev/ttyACM0'
    port = '/dev/tty.usbmodem65156601'

dev = Potentiostat(port)

#Vi = dev.get_volt()
#print(Vi)

samples = 10
param_rsp = dev.set_samples(samples)
print(param_rsp)
Exemplo n.º 17
0
from __future__ import print_function
from potentiostat import Potentiostat
import sys

if len(sys.argv) > 1:
    port = sys.argv[1]
else:
    port = '/dev/tty.usbmodem65156601'

dev = Potentiostat(port)

rsp = dev.set_cell('On')
print('cell: {0}'.format(rsp))

rsp = dev.set_cell('Off')
print('cell: {0}'.format(rsp))
Exemplo n.º 18
0
from __future__ import print_function
from potentiostat import Potentiostat
import sys

if len(sys.argv) > 1:
    port = sys.argv[1]
else:
    #port = '/dev/ttyACM0'
    port = '/dev/tty.usbmodem65156601'

dev = Potentiostat(port)

param_rsp = dev.stop_test()
print(param_rsp)
Exemplo n.º 19
0
    'quietValue': 0.0,  #ignored in current version
    'quietTime': 0,  #ignored in current version
    'amplitude': amplitude,
    'offset': offset,
    'period': period_ms,
    'numCycles': num_cycles,  #ignored in current version
    'shift': shift,
    'gain': gain,
    'HV': HV,
    'measure': measure
}
# %%
# Create potentiostat object and set current range, sample rate and test parameters
dev = Potentiostat(
    port,
    raw=True,  # required for DE firmware 
    debug=True  # optionally turn on debug flag, outputs lots of messages
)

# %%
# Run cyclic voltammetry test, returns a dictionary containing time (t), current (i), voltage, (v), and photocurrent values.
testCounter += 1
data = dev.run_test(
    test_name,  # name of test to run
    test_param,  # dictionary of experimental parameters 
    display=
    'data',  # (data |  plot ), plot requires testing, pbar option not implemented
    filename=dataFileName % testCounter)

# %%
# Plot combinations of values vontained in argument data.
Exemplo n.º 20
0
from __future__ import print_function
from potentiostat import Potentiostat
import sys

if len(sys.argv) > 1:
    port = sys.argv[1]
else:
    port = '/dev/ttyACM0'

dev = Potentiostat(port)

# All connected commands
print('---------------------------------------')
print('get all_connected')
rsp = dev.get_all_elect_connected()
print('rsp = ', rsp)
print()

print('set all connected = True')
rsp = dev.set_all_elect_connected(True)
print('rsp = ', rsp)
print()

print('get all_connected')
rsp = dev.get_all_elect_connected()
print('rsp = ', rsp)
print()

print('set all connected = False')
rsp = dev.set_all_elect_connected(False)
print('rsp = ', rsp)
Exemplo n.º 21
0
from __future__ import print_function
from potentiostat import Potentiostat
import sys

if len(sys.argv) > 1:
    port = sys.argv[1]
else:
    port = '/dev/ttyACM0'

dev = Potentiostat(port)

# Enable the multiplexer expansion hardware
rsp = dev.set_mux_enabled(True)
print('mux enabled: {0}'.format(rsp))

# Get the list of currently enabled mux channels
rsp = dev.get_enabled_mux_channels()
print('mux channels: {0}'.format(rsp))

# Set the list of enabled mux channels to new values
rsp = dev.set_enabled_mux_channels([1, 2])
print('mux channels: {0}'.format(rsp))

# Get the list of currently enabled mux channels (just a check for fun)
rsp = dev.get_enabled_mux_channels()
print('mux channels: {0}'.format(rsp))

# Disable the multiplexer expansion hardware
rsp = dev.set_mux_enabled(False)
print('mux enabled: {0}'.format(rsp))
Exemplo n.º 22
0
from __future__ import print_function
from potentiostat import Potentiostat
import sys

if len(sys.argv) > 1:
    port = sys.argv[1]
else:
    #port = '/dev/ttyACM0'
    port = '/dev/tty.usbmodem65156601'

dev = Potentiostat(port, raw=True, debug=True)

M = ['IP', 'IV', 'PV']
for m in M:

    print('Setting measurement to {}...'.format(m))
    param_rsp = dev.set_measure(m)
    print(param_rsp)
Exemplo n.º 23
0
potentiostat_ID = 2
curr_range = '10uA'     # Name of current range for test [-10uA, +10uA]
volt_range = '1V'
low_voltage = -0.3
low_time = .5
high_voltage = 0.7
high_time = 2
sample_period = .1

try: 
    dev = []
    ports = list(serial.tools.list_ports.comports())
    for p in ports:
        try:
            dev_temp = Potentiostat(p[0])
            cT = dev_temp.get_device_id()
            if cT == potentiostat_ID:
                dev = dev_temp
        except:
            pass

    if not dev == []:
        print 'Running chronoamperometry on potentiostat with device ID: %s'%(str(dev.get_device_id()))
        dev.set_volt_range(volt_range)
        dev.set_curr_range(curr_range)
        ##dev.stop_test()

        list_length = 1
        curr_list = []
        while True:
Exemplo n.º 24
0
from __future__ import print_function
from potentiostat import Potentiostat
import sys

if len(sys.argv) > 1:
    port = sys.argv[1]
else:
    port = '/dev/tty.usbmodem65156601'

dev = Potentiostat(port)

# Get list of all test names
test_names = dev.get_test_names()

# Get parameters for each test
for test in test_names:
    rsp_dict = dev.get_param(test)
    print('test =', test)
    print('rsp  =', rsp_dict)
    print()










Exemplo n.º 25
0
from __future__ import print_function
from potentiostat import Potentiostat
import sys

if len(sys.argv) > 1:
    port = sys.argv[1]
else:
    #port = '/dev/ttyACM0'
    port = '/dev/tty.usbmodem65156601'

dev = Potentiostat(port)

#first make it safe to enable HV:
dev.set_HV(1.0)

param_rsp = dev.set_HVEnable('On')
print(param_rsp)

param_rsp = dev.get_HVEnable()
print(param_rsp)

param_rsp = dev.set_HVEnable('Off')
print(param_rsp)

param_rsp = dev.get_HVEnable()
print(param_rsp)
Exemplo n.º 26
0
from __future__ import print_function
from potentiostat import Potentiostat
import sys

if len(sys.argv) > 1:
    port = sys.argv[1]
else:
    port = '/dev/ttyACM0'

dev = Potentiostat(port)

rsp = dev.get_device_id()

print('device id: {0}'.format(rsp))
Exemplo n.º 27
0
port = '/dev/ttyACM0'  # Serial port for potentiostat device
datafile = 'data.txt'  # Name of output data file

test_name = 'constant'  # Name of test to run - constant volate voltammetery
curr_range = '100uA'  # Name of current range for test [-10uA, +10uA]
sample_rate = 100.0  # Rate (samples/sec) at which to collect samples

test_param = {
    'quietValue': 0.0,  # Output voltage during quiet peroid
    'quietTime': 1000,  # Duration of quiet period (ms)
    'value': 2.5,  # Output volatage (V) durring constant voltage test
    'duration': 4000,  # Duration of constant voltage test (ms)
}

# Create Device object and set sample rate, current range and test parameters
dev = Potentiostat(port)
dev.set_sample_rate(sample_rate)
dev.set_curr_range(curr_range)
dev.set_param(test_name, test_param)

# Run cyclic voltammetry test
t, volt, curr = dev.run_test(test_name, display='pbar', filename=datafile)

# plot results using matplotlib
plt.subplot(211)
plt.title('Voltage and current vs time')
plt.plot(t, volt)
plt.ylabel('potential (V)')
plt.ylim(0, test_param['value'] * 1.1)
plt.grid('on')
Exemplo n.º 28
0
from potentiostat import Potentiostat
import sys
import matplotlib.pyplot as plt

port = '/dev/ttyACM0'

num_pulse = 25  # Number of pulses (max = 25)
lo_pulse = (500, -0.5)  # Low  pulse,  500ms @ -0.5V
hi_pulse = (2000, 0.7)  # High pulse, 2000ms @  0.7V

dev = Potentiostat(port)
hw_variant = dev.get_hardware_variant()

dev.set_curr_range('100uA')
dev.set_sample_rate(300)

step_list = []

# Add pulses to step list
for i in range(num_pulse):
    step_list.append(lo_pulse)
    step_list.append(hi_pulse)

# Test name and test parameters
test_name = 'multiStep'
test_param = {
    'quietValue': 0.0,
    'quietTime': 0,
    'step': step_list,
}
Exemplo n.º 29
0
from __future__ import print_function
from potentiostat import Potentiostat
import sys

if len(sys.argv) > 1:
    port = sys.argv[1]
else:
    port = '/dev/ttyACM0'

dev = Potentiostat(port)

version = dev.get_firmware_version()
print('firmware version: ', version)
Exemplo n.º 30
0
from __future__ import print_function
from potentiostat import Potentiostat
import sys

if len(sys.argv) > 1:
    port = sys.argv[1]
else:
    port = '/dev/ttyACM0'


dev = Potentiostat(port)

period_new = 20

period_old = dev.get_sample_period()

dev.set_sample_period(period_new)

period_new_resp = dev.get_sample_period()

print('period orig:        {0}'.format(period_old))
print('period new (sent):  {0}'.format(period_new))
print('period new (resp):  {0}'.format(period_new_resp))