Loading...

Hardware

Hardware_ CHELO

Short Description

 This year, we developed hardware to facilitate cyclic voltammetry (CV) testing, enabling the creation of a comprehensive and rapid disease detection system. Our goal is to ensure that the device is user-friendly, easy to fabricate, cost-effective, and efficient in reducing detection time. To validate our concept, we will first test the device's ability to detect the binding of specific proteins: CD55-CD97, 2BOU-2-CD97, and 2BOU-3-CD97.

Press buttons on the top to see different parts of hardware

The cv test introduction

 CV testing is an advanced potentiometric and voltammetric technique. During a scan, the target chemical undergoes either oxidation (loss of an electron) or reduction (gain of an electron), depending on the direction of the ramping potential[1].
 In the cv process, key parameters must be configured, including the number of cycles, the number of points per cycle, the initial and termination voltages, the scan rate, the current threshold, and N-turn execution. The number of cycles refers to how many times the potential is cycled, while the points per cycle indicate the frequency of data recording[2]. The initial and termination voltages define the voltage sweep range, and the scan rate specifies the rate of voltage change. The current threshold sets a safety limit to prevent exceeding the battery's safe current range. N-turn execution allows for a predetermined number of cv tests to be performed. Once these parameters are established, the test can be initiated, ultimately producing a cyclic voltammetric curve.

This is the sample curve of a cv test:
example of cv testing
Figure 1. The sample curve of CV testing. The above curve represents a typical schematic cyclic voltammetric curve; however, actual test curves may vary. They may appear broader, narrower, or exhibit undulations in certain regions. In some cases, the curve may be less smooth, with numerous small spikes.

How can CD97 and CD55 bindings be detected by the cv test system

During the interaction between CD97 and CD55, our docking results indicate that the involvement of the side chain of aspartic acid (Asp) is crucial for the binding process. Thus, broadly speaking, CD97 can be regarded as being reduced by CD55 throughout their interaction. This finding not only underscores the pivotal role of Asp in the binding mechanism but also provides novel insights into the nature of the interaction between CD97 and CD55.


Three electrodes system of test pieces

We selected the three-electrode method, which is the most widely used approach in electrochemical analysis, for our detection process[3]. As shown in Figure 2, the test piece features three pins corresponding to three types of electrodes: the working electrode (WE), reference electrode (RE), and counter electrode (CE). The WE acts as either an electron donor or acceptor under appropriate voltage conditions within an electrolyte environment. The CE serves as the counterpart to the WE, undergoing a reduction reaction when the WE is oxidized, and vice versa. While the CE does not participate directly in the electrochemical reaction, it provides charge balancing. In electroanalytical chemical systems, the RE must be positioned as close as possible to the WE at a fixed distance to ensure a stable reference potential.

figure of test peices we use
Figure 2. The test pieces we use to detect samples. In each test, we will use new test pieces.
Three electrode system on test pieces
Figure 3. The position and material of WE,RE, and CE on the test pieces.

The circuit design & Device figure

Below are the circuit diagram and an image of our prototype machine.
circuit diagram of our device
Figure 4. The circuit diagram of the device. The system requires multiple amplifiers, for which the LM324[4] module is used. Additionally, the Arduino board serves as the core component of the device due to its accessibility and cost-effectiveness.
device in real world
Figure 5. The device in a real-world setting. The device can be roughly divided into three main components: the Arduino board, the circuit on the breadboard, and the test piece holder.

The usage method in testing of device

 To ensure both user-friendliness and reproducibility, we established a standard protocol for the device. For rapid testing, we coat the working electrode (WE) on the test pieces with BELO-engineered bacteria. Users can then simply apply their samples to the test pieces, which are pre-coated with BELOs, and proceed with the testing.
 Since BELOs cannot directly adhere to the carbon surface of the electrodes, we needed to find a suitable method for coating them. To address this challenge, we sought guidance from Prof. Chao-Min Cheng (for more details, see the Integrated human practice page). Through discussions with him, we learned that a slight modification to the electrode is required. We selected phosphate-buffered saline (PBS) to create a positively charged layer on the electrode. By applying a consistent voltage environment, positive ions are attracted to the electrode surface, forming the desired charge layer. Following this pre-oxidation step, BELOs can be effectively coated onto the surface of the positively charged, modified electrode.

Illustration of a modified-coated BELOs chip
Figure 6. Illustration of a modified-coated BELOs chip, showing the status and structure of the electrode after coating with BELOs.

Constant setting

Here’s the constant we set while testing the device:
  • Positive layer: 20 mM PB
  • Scanning rate: 20 mV/sec
  • Scanning range: ±1 V
  • Max scanning cycle: 1
  • Electrode material: Carbon (WE/CE), AgCl (RE)
  • Preserve environment: humidity 20% in room temperature

Testing results

the results of hardware testing
Figure 7. Hardware testing results. The overall diagrams do not clearly distinguish the differences between each result. Additionally, some outliers are present, caused by noise from unstable signals due to a high scanning frequency.

A full view of the diagram does not clearly show differences between the results. Therefore, we zoomed into specific sections of the diagram to better distinguish any variations.

diagram top left zoom in
Figure 8. Zoom in the top left of the result diagram.
diagram buttom right zoom in
Figure 9. Zoom in the buttom right of the result diagram.
The left image represents a magnified view of the upper left corner of the original cyclic voltammetry (CV) test result, while the right image shows a zoomed-in view of the lower right corner of the same test result. Both images clearly illustrate the reaction trend, demonstrating a consistent sequence of CD55 > 2BOU-3 > 2BOU-2 > control(E. coli with pSB1C3 plasmid) > background for the tested samples, validating the expected interaction patterns.

Summary

 The experimental results thus far indicate that our hardware is capable of detecting differences in the system; however, the observed variations are currently subtle. We are confident that with additional experimental iterations, systematic adjustments to testing parameters, and potential modifications to the electrode materials, we can significantly enhance the precision and reliability of our hardware. These refinements will be instrumental in achieving a more robust and comprehensive cyclic voltammetry (CV) testing platform, ultimately fulfilling our objective of establishing a rapid and efficient disease detection system.

Future outlook

 From the preliminary results, it is evident that this prototype device has several areas for improvement, including enhancing the electrode materials, improving signal stability, refining the user interface on computers, and developing wireless capabilities. In the coming weeks leading up to the Jamboree, we will prioritize testing whether different materials affect the signals detected. Additionally, we will continue to improve other features to create a practical and user-friendly electrochemical analyzer for researchers.

The open sources usage

Here is our protocol and code for using the hardware. We hope it will serve as a resource for future iGEMers. Anyone interested is welcome to download it from here.

Protocol for doing testing with device


The open source code for device usage

C code for run the hardware

  1. #include <LiquidCrystal.h>
  2. int pwmPin = 10; // PWM pin for voltage control
  3. int adcPin = A0; // ADC pin to read current
  4. float Potstep = 0.0078; // Potential step, fixed due to DAC resolution
  5. float current = 0.0; // Variable to store measured current
  6. float voltage = 0.0; // Variable to store applied voltage
  7. int vevals[] = {100, 20, 50, 100, 200, 250, 300}; // Scan rates in mV/s
  8. int const count = 6; // Number of different scan rates
  9. long intervalos[count]; // Time intervals for each scan rate
  10. int val = 0;
  11. int n = 0;
  12. int maxScans = 1; // Number of forward-reverse scans
  13. int scanCount = 0; // Counter for scans
  14. void setup() {
  15. TCCR1B = TCCR1B & B11111000 | B00000001; // Set dividers to change PWM frequency
  16. Serial.begin(9600);
  17. pinMode(pwmPin, OUTPUT);
  18. pinMode(adcPin, INPUT);
  19. for (int pos = 0; pos < count; pos++) {
  20. intervalos[pos] = (1000000L / ((vevals[pos]) * 128L));
  21. }
  22. // Output headers for CSV format
  23. // Serial.println("Voltage(V),Current(µA)");
  24. }
  25. void loop() {
  26. for (int pos = 0; pos <= count; pos++) {
  27. n = 0;
  28. while (n <= 1 && scanCount < maxScans) {
  29. // Forward scan
  30. for (val = 0; val <= 255; val++) {
  31. analogWrite(pwmPin, val);
  32. delay(intervalos[pos]);
  33. voltage = map(val, 0, 255, -1.0 * 1000, 1.0 * 1000) / 1000.0; // Calculate the applied voltage
  34. current = readCurrent(adcPin); // Function to convert ADC reading to current
  35. // Output the data in CSV format to Serial Monitor
  36. Serial.print(voltage, 6); // Voltage with 6 decimal places
  37. Serial.print(",");
  38. Serial.println(current, 6); // Current with 6 decimal places
  39. delay(100); // Short delay between readings
  40. }
  41. // Reverse scan
  42. for (val = 255; val >= 0; val--) {
  43. analogWrite(pwmPin, val);
  44. delay(intervalos[pos]);
  45. voltage = map(val, 0, 255, -1.0 * 1000, 1.0 * 1000) / 1000.0; // Calculate the applied voltage
  46. current = readCurrent(adcPin); // Function to convert ADC reading to current
  47. // Output the data in CSV format to Serial Monitor
  48. Serial.print(voltage, 6); // Voltage with 6 decimal places
  49. Serial.print(",");
  50. Serial.println(current, 6); // Current with 6 decimal places
  51. delay(100); // Short delay between readings
  52. }
  53. n++;
  54. scanCount++; // Increment scan counter
  55. }
  56. // Exit loop if maxScans is reached
  57. if (scanCount >= maxScans) {
  58. break;
  59. }
  60. }
  61. // Stop execution after reaching max scans
  62. if (scanCount >= maxScans) {
  63. while (true); // Infinite loop to halt execution
  64. }
  65. }
  66. // Function to read current based on ADC reading (modify based on actual circuit)
  67. float readCurrent(int pin) {
  68. int adcValue = analogRead(pin);
  69. float voltage = adcValue * (5.0 / 1023.0);
  70. return (voltage - 2.5) / 0.12; // Assuming a transimpedance amplifier with a gain of 1/0.12 µA/V
  71. }

Python code to load data from the arduino code

  1. import serial
  2. import time
  3. import csv
  4. import matplotlib.pyplot as plt
  5. # Setup serial connection (adjust port and baudrate as needed)
  6. try:
  7. ser = serial.Serial('COM8', 9600, timeout=1)
  8. time.sleep(2) # Wait for the connection to be established
  9. except serial.SerialException as e:
  10. print(f"Error opening serial port: {e}")
  11. exit()
  12. # Open CSV file for writing
  13. with open('cv_data.csv', mode='w', newline='', encoding='utf-8') as file:
  14. writer = csv.writer(file)
  15. writer.writerow(["Voltage (V)", "Current (µA)"])
  16. print("Reading data...")
  17. # Read data until stopped manually or until the Arduino stops sending
  18. try:
  19. while True:
  20. line = ser.readline().decode('utf-8').strip()
  21. if line:
  22. print(line)
  23. writer.writerow(line.split(","))
  24. else:
  25. # Timeout reached or no data available
  26. break
  27. except KeyboardInterrupt:
  28. print("Stopped by user")
  29. finally:
  30. # Ensure the serial connection is closed on exit
  31. ser.close()
  32. print("Serial connection closed.")
  33. # Load the data and plot the CV curve
  34. voltages = []
  35. currents = []
  36. with open('cv_data.csv', mode='r', encoding='utf-8') as file:
  37. reader = csv.DictReader(file)
  38. for row in reader:
  39. try:
  40. voltages.append(float(row["Voltage (V)"]))
  41. currents.append(float(row["Current (µA)"]))
  42. except ValueError:
  43. # Handle any potential conversion errors
  44. print("Skipping row with invalid data:", row)
  45. # Plotting as a scatter plot
  46. plt.figure(figsize=(10, 6))
  47. plt.scatter(voltages, currents, label='CV Data', marker='o')
  48. plt.xlabel('Voltage (V)')
  49. plt.ylabel('Current (µA)')
  50. plt.title('Cyclic Voltammetry (CV) Data')
  51. plt.grid(True)
  52. plt.legend()
  53. plt.show()

Reference

  1. Ossila. (n.d.). Cyclic Voltammetry. Retrieved from https://www.ossila.com/pages/cyclic-voltammetry
  2. IEST Tech. (n.d.). [走進電化學 | 揭秘循環伏安法的神奇世界]. Retrieved from https://www.iesttech.com/big5/NewsDetail/4804334.html
  3. Zensor. (n.d.). [電化學系統]. Retrieved from https://www.zensor.com.tw/Article09.html#article-02
  4. Yengalwar, Devika & Zade, Samiksha & Mute, Dinesh. (2015). FOUR QUADRANT SPEED CONTROL OF DC MOTOR USING CHOPPER.