By Marco Ventimiglia on July 26, 2022
As we know, Arduino Uno includes a 10-bit ADC (analog-to-digital converter) inside its ATmega328p, which takes a signal between 0 and 5V and produces a digital value that varies from 0 to 1023. However, attempting to measure any voltage above 5V will cause some less than desirable results, such as creating magic smoke and destroying the microcontroller. To get around this, some makers add a voltage divider that divides the input voltage by a predetermined factor. This solution reduces the resolution of the ADC, as a single step of the digital value corresponds to a greater voltage variation. To solve this problem, the YouTuber known as Techoyaki has come up with a new solution that can measure the entire range of values without reducing the resolution.
The circuit divides the 0V-20V range into four ranges (0V-5V, 5v-10V, 10V-15V and 15V-20V) translating them all into the 0-5V range. After that, these four obtained signals arrive at the Arduino’s four analog inputs, which add up the values to produce the equivalent of an ADC of nearly 12 bits, thus leading to values that fall between 0 and 4092 (1023 x 4).
The circuit is composed of four rail-to-rail operational amplifiers, and various resistors, which allow to limit the voltage obtained in the 0v-5v range and subtract a DC voltage value to effect the translation in the desired range.