New Courses Coming Soon

Join the waiting lists

In this project we’re going to use a potentiometer and connect it to an analog input pin in the Arduino, and we’ll write a program that reads the current values.

In the Arduino Project #2 we saw how to read a digital input. The value read can be `0` or `1`, `LOW` or `HIGH`.

This can be done using the digital I/O pins, numbered from `0` to `13`.

Analog I/O pins start with an `A`. On the Arduino Uno you can find 6 analog I/O pins `A0` / `A5`:

On the Arduino MKR 1010 WiFi you have 7 analog I/O pins, from `A0` to `A6`

Different boards will have a different amount and placement of those pins. Those pins can be configured to be analog input or analog output.

A digital signal can only be high or low. An analog signal can hold a range of values, in the case of Arduino it goes from `0` to `1023`, which maps to a level of tension on the input pun that goes from 0V to 5V.

All sorts of sensors will provide us analog values. Think about temperature sensors, distance sensors, sound sensors, motion sensors.. we can read the values from them using Arduino, and decide what to do with the data.

We do so using a function called `analogRead()`.

But let’s start by building a little circuit.

In the project “Build a LED dimmer with a potentiometer” we build a simple circuit that controlled a LED light using a potentiometer. Let’s replicate a part of that circuit, except now instead of the LED we’ll put the Arduino.

If the potentiometer is turned all the way to the left, the value we read should be `0`. All the way to the right the value we read should be `1023`, and around the middle it should be `512`.

Here is the circuit, made with a 10kΩ potentiometer:

We get 0V and 5V from the power output pins of the Arduino and we connect them to the breadboard. Then we connect those levels of tension to the potentiometer input pins, and we get the output pin which we connect to the analog pin `A1`:

We write a program to read from that pin, and we print the value read to the serial interface, so we can read it from the Arduino IDE serial monitor:

``````void setup() {
Serial.begin(9600);
}

void loop() {
Note that I didn’t explicitly set the `A1` pin to be an input pin, because a pin is input by default. If I wanted to write to that instead I’d have to configure it with `pinMode()` in `setup()`.
Here is our program running. With the potentiometer all turned to the left we read `0`:
With the potentiometer all turned to the left we read `1023` (and sometimes `1022` as we’re working with analog values and it’s not 100% precise):