Dear friends, welcome to another tutorial!
Today we are going to learn how to use this analog voltmeter with Arduino and make it show the temperature instead of the voltage. As you can see, in this modified voltmeter, we can see the temperature in degrees Celsius. The temperature is measured by this digital sensor, a DS18B20 and it is then displayed on the voltmeter. I really like analog dials like this one, because they give a vintage look to the projects.
By building this project you are going to gain very valuable knowledge and experience. The knowledge to add analog dials to any Arduino project and you are going to learn how to use the PWM functionality of the Arduino.
Let’s now see how to achieve that result.
The parts that we are going to need today are the following:
The cost of the project is around $9.
The DS18B20 is a digital thermometer that accurately measures temperature in the range -10°C to +85°C and also includes alarm functions and trigger points.
It is a very easy sensor to use because it uses the One-Wire interface. So, we only need to connect one wire to make it work! I have used this sensor a lot in the past, and I am going to use it a lot in the future as well because of it's ease of use and accuracy.
The cost of sensor is around $2. You can get it here.
This is a low cost DC analog voltmeter. It has a range from 0 to 5V DC. It is very easy to use - you simply connect the leads to a voltage source and it will display the voltage.
I find this voltmeter very useful because of its range. We can easily output any voltage from 0 to 5V from a digital pin of the Arduino using the PWM functionality. So, this way we can control the position of the needle at will! This way we can build any analog meter we like! We can build amazing projects using Voltmeters like this one.
The cost of the voltmeter is around $2.5. You can get it here.
At first let’s see how to control the voltmeter with Arduino. We connect the positive side of the Voltmeter to digital pin 9, and the negative one to GND. Since the Arduino Uno does not offer a Digital-to-Analog converter, we have to use one of the PWM pins in order to write an analog value to a digital pin of the Arduino. Pulse Width Modulation is a technique for getting analog results with digital means. Instead of writing HIGH to the digital pin, with PWM we send a pulse. PWM is attached to certain pins of the Arduino Uno. The digital pins that support PWM have the ~ symbol next to them.
In order to send a value to the voltmeter, we use the
analogWrite command and we write a value from 0 to 255. So, if we write 0, the voltmeter shows 0V and if we write 255 the voltmeter show 5V. We can write any other value between 0 and 255 the voltmeter will go to the appropriate position. So, If we want the voltmeter to show 2.5V we have to call the command
analogWrite(9,128). Great! Now we can control the voltmeter needle at will!
Let’s now convert the voltmeter to a thermometer.
First we have to connect the DS18B20 sensor. We connect the pin with the – sign to Arduino GND, the pin with the + sign to 5V and the signal pin to digital pin 2. That’s it.
Now we have to prepare panel meter. I unscrew these screws and I remove this metal plate. We then need to design our own face for it. I designed a simple one using Photoshop. Actually designing the face took me much more time than building the project itself, so in order to save your time, I will attach the file in this tutorial. Now all we have to do is to print the face for the panel meter and glue it in place. If we load the code and power up the project, we can see that it works fine! If I touch the sensor, the temperature rises quickly. Our analog thermometer is ready!
Let’s now take a quick look at the code of the project in order to understand how it works.
We need the
DallasTemperature library in the code to compile. Get it here.
The code is very simple. We first read the temperature from the sensor. Next we pass the temperature value to the
temperatureToPWM function. This function converts the temperature to a PWM value from 0 to 255 using the map function. Next, all we have to do is write this PWM value out at the voltmeter. You can also define the maximum and the minimum temperatures that your panel meter can display by changing the values of MIN_TEMP and MAX_TEMP global variables. The smaller the gap between these two values, the bigger the resolution the panel meter will offer.
You can find the code of the project attached here. Also you can visit the project's website in order to get the latest version of the code.
As you can see, our Analog thermometer works fine! It is a very easy project to build and it also looks so cool!
I really love the looks of these analog panel meters so I am going to build a lot of projects with them. In a future video, I will design and 3D print a vintage enclosure for this analog thermometer we built today. I am going use an Arduino Nano to make things more compact and add some yellow diffused LEDs to illuminate the panel at night. I think it will be cool.
I would love to hear your opinion about this. Do you like analog panel meters? If so, what kind of projects are you going to build using one of these? Please post your comments in the comments section below, and don’t forget to like this tutorial if you find it interesting. Thanks!
Love this project? Think it could be improved? Tell us what you think!