This is an old revision of the document!
GlucoMeter
Introduction
This project aims to build a functional, low-cost, and extensible blood glucose monitor using the Arduino Uno board, based on the ATmega328P microcontroller.
The goal is to create a simplified version of commercial glucometers that can be easily reproduced for educational purposes or used in low-resource environments. It focuses on making glucose level measurement more accessible for people.
The initial idea came from exploring how test strips work electrochemically and attempting to replicate the measuring device using analog and digital components.
I believe this project is useful for understanding the integration of bio-sensing, analog signal amplification, and embedded systems, offering both educational value and the potential to evolve into a practical, low-cost health monitoring tool.
General Description
The electrochemical test strips generate a small electrical current through a redox reaction. This current is proportional to the concentration of glucose in the sample.
However, the generated current is extremely small, typically in the range of nanoamperes to microamperes and cannot be measured directly by the ATmega328P's ADC. To overcome this, the project uses an operational amplifier (op-amp) that converts the current signal from the test strip into a measurable voltage, using a feedback resistor to set the gain of the amplifier.
The amplified voltage is then digitized using the built-in ADC, the value is then processed to calculate the glucose concentration, based on calibration parameters corresponding to the specific test strips used.
For development and testing purposes, a potentiometer is used to simulate the small and variable current generated by an electrochemical test strip. The potentiometer provides a controllable analog voltage input which, after amplification, is read by the ADC to mimic real sensor behavior.
Modules used:
ADC – used to read the analog voltage signal from the potentiometer simulating the test strip output.
I2C – used to communicate with the LCD 1602 display module for showing glucose measurement results.
UART – for serial communication to log data or debug via PC.
GPIO – to control LEDs which indicate glucose level categories by turning on different colored LEDs.
PWM – used to control LED brightness.
Interrupts – employed to detect button presses immediately, allowing the program to respond instantly to user input.
Hardware Design
Description
This project integrates a set of analog and digital components to create a functional blood glucose monitor, capable of measuring glucose concentration in the blood by analyzing the electrochemical current generated from a test strip (simulated using a potentiometer).
Main Hardware Components:
Arduino Uno (ATmega328P) – The central microcontroller that processes signals, reads analog values through its ADC, and controls output peripherals like LEDs and the LCD.
OP07 Operational Amplifier – Used in a transimpedance amplifier configuration to convert the small current from the test strip into a measurable voltage. A feedback resistor determines the gain and ensures compatibility with the 0–5V ADC range of the Arduino.
Potentiometer (50kΩ) – Used to simulate the small and variable electrical current generated by an electrochemical test strip. By adjusting the potentiometer, we can vary the input voltage, mimicking different glucose concentrations for testing and calibration purposes.
Feedback Resistor – Connected between the output and inverting input of the OP07, typically selected in the kΩ–MΩ range to produce appropriate voltage output for microampere-level currents.
LEDs (x6) – Provide visual alerts for glucose thresholds: hypoglycemia, normal, and hyperglycemia. Connected to Arduino digital pins (D3, D5, D6, D9, D10, D11). Some LEDs may be controlled via PWM to adjust brightness or indicate different alert levels.
1602 LCD with I2C Interface – Displays the measured glucose value and classification. Connected via I2C on pins SDA and A5 SCL.
Push Button – Used to manually initiate a measurement or reset the display. Connected to a digital input pin with pull-up resistor (pin D2) to allow interrupt-based input detection.
Breadboard and Jumper Wires – For rapid prototyping and modular hardware assembly.
Pin Assignment and Justification
Component | Arduino Pin(s) | Reason for Selection |
Sensor Output (from OP07) | `A0` | Analog input pin used to read the amplified voltage proportional to glucose level via ADC. |
LEDs (for alerts) | `D3, D5, D6, D9, D10, D11` | PWM-capable digital pins allow brightness modulation of LEDs to indicate different alert levels clearly. |
LCD 1602 I2C Module | `SDA, SCL` | Dedicated I2C pins on Arduino Uno, used for communication with the LCD to display glucose values and status. |
Push Button (manual trigger) | `D2` | Digital pin with hardware interrupt capability used to detect button presses instantly and trigger actions. |
Power Supply for Op-Amp | `5V` and `GND` | Provides the necessary power for the OP07 amplifier with a common ground reference to the Arduino board. |
Interfaces and Communication:
Analog Input (A0): Reads the output voltage from the OP07 amplifier.
Digital Outputs (D8–D13): Control the LEDs based on glucose classification.
I2C (A4 – SDA, A5 – SCL): For communication with the LCD module.
UART (D0, D1): Used for serial communication with a PC (for debug or data logging).
Power and Consumption:
The system is powered through the Arduino Uno’s 5V rail (USB).
The total current draw is modest (~70–100 mA), making it suitable for portable applications using a power bank.
Power optimization strategies can include switching off the display or entering sleep modes between measurements.
This modular and extensible design allows for future upgrades such as Bluetooth integration, OLED displays, or buzzer alarms. It demonstrates the synergy between bio-sensing, analog electronics, and embedded systems in an accessible, low-cost platform.
Bill of Materials:
Circuit diagram:
Signal diagram:
Physical Circuit:
Software Design
Descrierea codului aplicaţiei (firmware):
mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR)
librării şi surse 3rd-party (e.g. Procyon AVRlib)
algoritmi şi structuri pe care plănuiţi să le implementaţi
(etapa 3) surse şi funcţii implementate
Rezultate Obţinute
Care au fost rezultatele obţinute în urma realizării proiectului vostru.
Concluzii
Download
O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună

.
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.
Jurnal
03.05.2025 – Created the wiki page.
05.05.2025 – Conducted more in-depth research on the project.
10.05.2025 – Prepared the Introduction, General Description and Block Diagram.
15.05.2025 – Order the operational amplifier and potentiometer to complete the project..
18.05.2025 – Completed the Hardware Design milestone.
Bibliografie/Resurse
Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.
Export to PDF