Giter Site home page Giter Site logo

iorodeo / potentiostat Goto Github PK

View Code? Open in Web Editor NEW
32.0 3.0 13.0 30.03 MB

Rodeostat design files, software and firmware

Home Page: https://blog.iorodeo.com/rodeostat-product-guide/

License: Creative Commons Attribution 4.0 International

C++ 56.13% C 0.39% Python 21.27% OpenSCAD 6.41% JavaScript 9.43% HTML 0.08% Vue 5.18% Makefile 1.12%
biosensors electrochemistry potentiostat

potentiostat's Introduction

IO Rodeo Rodeostat

alt text

Hardware design, firmware and software for IO Rodeo's Rodeostat Potentiostat.

Hardware

  • Designed as a shield for teensy 3.2 development board.
  • 12-bit voltage output with four range settings: +/- 1, 2, 5, 10V
  • 16-bit current measurement with four range settings: +/- 1, 10, 100, 1000 uA ranges
  • Can be programmed over USB using the Arduino IDE (teensyduino).
  • Expansion headers with DIO, analog inputs, UART, I2C, and SPI
  • Schematic

Firmware

  • Implements many standard voltammetric methods including:
    • constant voltage,
    • cyclic voltammetry,
    • sinusoidal voltammetry,
    • linearsweep voltammetry,
    • chronoamperometry,
    • multistep.
  • API for control over USB/Serial using messages in JSON.
  • Easy to extend enabling users to add custom tests.

Libraries

Software

potentiostat's People

Contributors

iorodeo avatar willdickson avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

potentiostat's Issues

The chart is flipped when using rodeostat teensy_shield_v0p1

Hello, we have encounter a problem while using rodeostat teensy_shield_v0p1.

We plot the Current-Voltage chart. Amplitude of Current in palmsens and rodeostat is different but there peak voltage location is more or less same, but the curve is flipped.
Screenshot 2023-07-04 12 44 01
In each case , you see current -x axis current is negative, but it should be positive.
WhatsApp Image 2023-07-04 at 15 01 36 like this.

we've check the connection of the electrodes are correct. May I ask what cause this problem and how to solve it?

Shifted 100Hz Sinusoid and Sample Rate Problem

Hello,
I have a problem when I try to make a sinusoid with a 20ms period (or 50Hz) with a 2V amplitude. It works but instead of behind centered on 0, it is centered on -2V. How to correct this problem ? Using 'shift' doesn't do anything, and when using 'offset' it just does a flat voltage at the offset value.

Furthermore, I have an issue understanding sample rate. Is the sample rate simply the number of measurements every second and is just used to make the graph ? And no matter the sample rate the sinusoid follow its parameters ? Or does it give an output voltage according to the sample rate ? And thus the sample rate is critical to make the system work correctly ?
If the second explanation is correct, then I must tune the sample rate to match the period I want to set right ?
I have get it to work by putting 5 sample per period (changing the sample_rate to keep this rate for every period I set) but I need to understand it.

Thank you for your response

Questions regarding multiplexer

Hello again, I have some questions to ask regarding multiplexer.

For connecting multiplexer, do we have to change any code in firmware part? Also, is there any examples that how the potentialstat displays the data when multiple electrodes are functioning? Now currently using teensy_shield_v0p1 and multiplexer_v0p3.

Unexpected behavior when setting parameters

The code I would like to run is this:

from potentiostat import Potentiostat

pstat = Potentiostat('COM5')

t1 = 10000
v1 = 0.3
t2 = 10000
v2 = -1.4

cond_params = {
    'quietValue' : 0,
    'quietTime' : 0,
    'step' : [ (t1,v1),(t2,v2)],
}

odict = pstat.set_param('multiStep',cond_params)

Presently, I'm working in a Jupyter notebook, Python 3.9. I have the library import and pstat definition in a separate cell to avoid re-running them. Starting with a fresh kernel, I get the following error:

JSONDecodeError Traceback (most recent call last)
Cell In[2], line 12
4 v2 = -1.4
6 cond_params = {
7 'quietValue' : 0,
8 'quietTime' : 0,
9 'step' : [ (t1,v1),(t2,v2)],
10 }
---> 12 odict = pstat.set_param('multiStep',cond_params)
13 odict['step']

File c:\Users\rlesuer\OneDrive - SUNY - The College at Brockport\Documents\GitHub\pstat.venv\lib\site-packages\potentiostat\potentiostat.py:306, in Potentiostat.set_param(self, testname, param)
295 """Sets the parameters for the specified voltammetric test.
296
297 Args:
(...)
303
304 """
305 cmd_dict = {CommandKey: SetParamCmd, TestKey: testname, ParamKey: param}
--> 306 msg_dict = self.send_cmd(cmd_dict)
307 return msg_dict[ResponseKey][ParamKey]

File c:\Users\rlesuer\OneDrive - SUNY - The College at Brockport\Documents\GitHub\pstat.venv\lib\site-packages\potentiostat\potentiostat.py:1065, in Potentiostat.send_cmd(self, cmd_dict, rsp)
1063 msg_json = self.readline()
...
354 except StopIteration as err:
--> 355 raise JSONDecodeError("Expecting value", s, err.value) from None
356 return obj, end

JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Setting t1 and t2 to 1000 does not throw this error. Without refreshing the kernel, if I change t1 and t2 to 10000, the error is thrown. If I run the same cell again, without changing t1 and t2, odict now reports the correct times and voltages for the multistep. However, there seems to be a communication problem, because trying to run the test with t, v, i = pstat.run_test('multiStep') throws this error:

OSError Traceback (most recent call last)
Cell In[7], line 1
----> 1 t, v, i = pstat.run_test('multiStep')

File c:\Users\rlesuer\OneDrive - SUNY - The College at Brockport\Documents\GitHub\pstat.venv\lib\site-packages\potentiostat\potentiostat.py:929, in Potentiostat.run_test(self, testname, param, filename, on_data, display, timeunit, max_decode_err)
927 channel_list = [0]
928 if self.firmware_version >= MinimumFirmwareVersionForMux:
--> 929 mux_enabled = self.get_mux_enabled()
930 if mux_enabled:
931 channel_list = self.get_enabled_mux_channels()

File c:\Users\rlesuer\OneDrive - SUNY - The College at Brockport\Documents\GitHub\pstat.venv\lib\site-packages\potentiostat\potentiostat.py:743, in Potentiostat.get_mux_enabled(self)
736 """Get multiplexer expansion hardware enabled state
737
738 Returns:
739 bool: enable state of mux hardware (from device), True/Fasle
740
741 """
742 cmd_dict = {CommandKey: GetMuxEnabledCmd}
--> 743 msg_dict = self.send_cmd(cmd_dict)
744 return msg_dict[ResponseKey][MuxEnabledKey]

File c:\Users\rlesuer\OneDrive - SUNY - The College at Brockport\Documents\GitHub\pstat.venv\lib\site-packages\potentiostat\potentiostat.py:1066, in Potentiostat.send_cmd(self, cmd_dict, rsp)
1064 msg_json = msg_json.strip()
...
1118 cmd_recv = msg_dict[ResponseKey][CommandKey]
1119 if cmd_recv != cmd_sent:
-> 1120 raise IOError('command sent, {0}, not same as received, {1}'.format(cmd_sent, cmd_recv))

OSError: command sent, getMuxEnabled, not same as received, setParam

It is also clear that something in the communication with the potentiostat has become un-synced since I have to restart the kernel, try to communicate with the potentiostat only to have it fail, then restart the kernel again to be able to connect to the potentiostat. This behavior also happens for larger quiet times in the square wave test.

Cap Current Range Reading

Hello,
I was wondering if there was a way to increase the current range. I'm using the max range but it's not enough for my use case, the reading I do saturate very fast. Would it be possible to go from 1000µA to 10mA ??
Thanks for the help !

Device Information :
Firmware Version : FW0.0.9
Hardware Variant : 10V_microAmpV0.2

Compilation Error for Firmware

Cannot compile the firmware with Arduino version 2.10 Windows 11, it throws the following error :
c:\Users\xxx\Documents\Arduino\potentiostat\firmware\libraries\potentiostat/ps_analog_subsystem.h:29:26:
error: 'eAnalogReference' does not name a type
29 | static const eAnalogReference DefaultAnalogReference = AR_DEFAULT;

Please advise, thank you.

Doubt about the Teensy

Hi!
First of all, I woul'd like to congrat all contributors of the project. I woul'd like to ask if anyone see's any problem of changing the microcontroller to a ESP32... I'm having some dificculties in finding the teensy module here in Brazil.

Problem using Python

Hi, so when trying to initialize the Rodeostat in Python I always get an permission error (Error 13).
May you can help me with this...

Offset Dummy Cell

DummyCell50kPlot
testparameter

Hi,
I recently got my Rodeostat (Hardware Variant: 10V_10MilliAmpV0.2 Firmware:FW0.0.9). I run a test with the dummy cell 50k. I expected that a 0V also the current 0uA is, but at 0V there is a current flowing of -14uA and 0 current flow occurs at 0.65V.
Is there any option to adjust something to get 0 current at 0V?

Best regards
Chris

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.