{"id":470,"date":"2016-08-07T11:36:38","date_gmt":"2016-08-07T10:36:38","guid":{"rendered":"https:\/\/www.kolkataonweb.com\/code-bank\/?p=470"},"modified":"2016-08-12T21:29:10","modified_gmt":"2016-08-12T20:29:10","slug":"arduino-voltmeter-2-more-precise","status":"publish","type":"post","link":"https:\/\/www.kolkataonweb.com\/code-bank\/arduino\/arduino-voltmeter-2-more-precise\/","title":{"rendered":"Arduino Voltmeter &#8211; 2 (more precise)"},"content":{"rendered":"<p>On some Arduino boards there is a Pin labelled as AREF or Analog Reference. This pin is very useful in cases where a stable and precise voltage reference is needed for the ADC. Practically the supplied voltage to the board can vary a bit, specially it can fall below the rated voltage depending on the load to the board.<\/p>\n<p>By default Arduino uses the voltage of the board, that is 5v or 3.3v (depending on the board). Using the function <span style=\"color: #000080;\">analogReference() <span style=\"color: #000000;\">this can be changed. The function accepts one parameter called <em>type. <\/em>If the type mentioned is DEFAULT then it will use the voltage of the board. INTERNAL type will use a built-in reference equal to 1.1 volts on the ATmega168 or ATmega328 and 2.56 volts on the ATmega8. And <span style=\"color: #000080;\">EXTERNAL<\/span> will use the voltage supplied to the AREF pin.\u00a0 <\/span><\/span><\/p>\n<p>(More about <span style=\"color: #000080;\">analogReference<\/span> can be read at https:\/\/www.arduino.cc\/en\/Reference\/AnalogReference)<\/p>\n<pre class='wp-code-highlight prettyprint'>Please note the voltage at AREF can 0-5 volts only and the input voltage at the I\/O pin (here A0) cannot exceed that of the AREF pin.<\/pre>\n<p>The simple voltmeter described in a previous <a href=\"https:\/\/www.kolkataonweb.com\/code-bank\/arduino\/voltmeter-using-arduino\/\">article<\/a> has been modified here. It is now supplied with a precise reference voltage at the AREF pin.<\/p>\n<p><a href=\"https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/08\/Volt-Meter-Precise.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-496\" src=\"https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/08\/Volt-Meter-Precise-1024x633.png\" alt=\"Volt Meter Precise\" width=\"604\" height=\"373\" srcset=\"https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/08\/Volt-Meter-Precise-1024x633.png 1024w, https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/08\/Volt-Meter-Precise-300x186.png 300w, https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/08\/Volt-Meter-Precise-768x475.png 768w, https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/08\/Volt-Meter-Precise.png 1518w\" sizes=\"auto, (max-width: 604px) 100vw, 604px\" \/><\/a><\/p>\n<p>The 5K resistance is not a necessity, it has been added for safety (<em>switching to the INTERNAL while external power is given to AREF can damage the board with that resistance<\/em>). If the resistance is used then the voltage at AREF will not be exact as supplied. That is because internally there is a 32k resistor connected to the AREF pin.<\/p>\n<p>So in above case the voltage that the AREF actually getting is 3.3*32\/(32+5) = 2.8540 (the actual will vary due to tolerance of components, so for cases where high precision is needed, the values of the resistors will have to be measured and also the voltage of the zener, and the voltage in the code nees to be changed accordingly).<\/p>\n<pre class='wp-code-highlight prettyprint'><span class=\"com\">#define<\/span><span class=\"pln\"> READINGS <\/span><span class=\"lit\">5<\/span>\r\n\r\n<span class=\"kwd\">int<\/span><span class=\"pln\"> sensorPin <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> A0<\/span><span class=\"pun\">;<\/span>\r\n<span class=\"kwd\">short<\/span> <span class=\"kwd\">int<\/span><span class=\"pln\"> readingsTaken <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">0<\/span><span class=\"pun\">;<\/span>\r\n<span class=\"kwd\">float<\/span><span class=\"pln\"> voltage <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">0.0<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> readingTotal <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">0.0<\/span><span class=\"pun\">;<\/span>\r\n\r\n<span class=\"kwd\">void<\/span><span class=\"pln\"> setup<\/span><span class=\"pun\">()<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\r\n\u00a0 <\/span><span class=\"com\">\/\/ put your setup code here, to run once:<\/span><span class=\"pln\">\r\n\u00a0 pinMode<\/span><span class=\"pun\">(<\/span><span class=\"pln\">sensorPin<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> INPUT<\/span><span class=\"pun\">);\r\n  analogReference(EXTERNAL);<\/span><span class=\"pln\">\r\n\u00a0 <\/span><span class=\"typ\">Serial<\/span><span class=\"pun\">.<\/span><span class=\"kwd\">begin<\/span><span class=\"pun\">(<\/span><span class=\"lit\">9600<\/span><span class=\"pun\">);<\/span>\r\n<span class=\"pun\">}<\/span>\r\n\r\n<span class=\"kwd\">void<\/span><span class=\"pln\"> loop<\/span><span class=\"pun\">()<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\r\n\u00a0 <\/span><span class=\"com\">\/\/ put your main code here, to run repeatedly:<\/span><span class=\"pln\">\r\n\u00a0 readingTotal <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">0.0<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\r\n\u00a0 readingsTaken <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">0<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\r\n\u00a0 \r\n\u00a0 <\/span><span class=\"com\">\/\/ we will take 5 readings at 1 sec interval and then do an average of that<\/span>\r\n  <span class=\"kwd\">while<\/span><span class=\"pun\">(<\/span><span class=\"pln\">readingsTaken <\/span><span class=\"pun\">&lt;<\/span><span class=\"pln\"> READINGS<\/span><span class=\"pun\">)<\/span><span class=\"pln\"> \r\n\u00a0 <\/span><span class=\"pun\">{<\/span><span class=\"pln\">\r\n\u00a0\u00a0\u00a0 readingTotal <\/span><span class=\"pun\">+=<\/span><span class=\"pln\"> analogRead<\/span><span class=\"pun\">(<\/span><span class=\"pln\">sensorPin<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\n\u00a0\u00a0\u00a0 readingsTaken<\/span><span class=\"pun\">++;<\/span><span class=\"pln\">\r\n\u00a0\u00a0\u00a0 delay<\/span><span class=\"pun\">(<\/span><span class=\"lit\">1000<\/span><span class=\"pun\">);<\/span> <span class=\"com\">\/\/at every 1 second interval<\/span><span class=\"pln\">\r\n\u00a0 <\/span><span class=\"pun\">}<\/span><span class=\"pln\">\r\n\r\n\u00a0 voltage <\/span><span class=\"pun\">=<\/span> <span class=\"pun\">(<\/span><span class=\"pln\">readingTotal<\/span><span class=\"pun\">\/<\/span><span class=\"pln\">READINGS<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">*<\/span> <span class=\"pun\">(<\/span><span class=\"lit\">2.8540<\/span><span class=\"pun\">\/<\/span><span class=\"lit\">1024<\/span><span class=\"pun\">);<\/span> <span class=\"com\">\/\/ 2.8540 is the ref voltage being used. \/\/the value in voltage at this point is what Arduino read based on input from voltage divider network. Need to calculate the original<\/span><span class=\"com\"> -- see below\r\n\r\n<\/span><span class=\"pln\">  voltage <\/span><span class=\"pun\">=<\/span> <span class=\"pun\">(<\/span><span class=\"lit\">20<\/span><span class=\"pun\">\/<\/span><span class=\"pun\">2.609)<\/span> <span class=\"pun\">*<\/span><span class=\"pln\"> voltage<\/span><span class=\"pun\">;<\/span> <span class=\"com\">\/\/unitary method to calculate the actual voltage that is read. When voltage read is 2.609, the input is 20v. With the above voltage divider used at input (100K ohm and 15k ohm) the input voltage at the I\/O (pin A0) will be 2.609 when 20v is applied. \r\n<\/span><span class=\"pln\"> \u00a0 \r\n<\/span><span class=\"typ\">  Serial<\/span><span class=\"pun\">.<\/span><span class=\"pln\">println<\/span><span class=\"pun\">(<\/span><span class=\"pln\">voltage<\/span><span class=\"pun\">);<\/span> \r\n<span class=\"pun\">}<\/span><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>On some Arduino boards there is a Pin labelled as AREF or Analog Reference. This pin is very useful in cases where a stable and precise voltage reference is needed for the ADC. Practically the supplied voltage to the board can vary a bit, specially it can fall below the rated voltage depending on the&hellip; <a class=\"more-link\" href=\"https:\/\/www.kolkataonweb.com\/code-bank\/arduino\/arduino-voltmeter-2-more-precise\/\">Continue reading <span class=\"screen-reader-text\">Arduino Voltmeter &#8211; 2 (more precise)<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[74],"class_list":["post-470","post","type-post","status-publish","format-standard","hentry","category-arduino","tag-arduino-voltmeter","entry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/posts\/470","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/comments?post=470"}],"version-history":[{"count":5,"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/posts\/470\/revisions"}],"predecessor-version":[{"id":497,"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/posts\/470\/revisions\/497"}],"wp:attachment":[{"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/media?parent=470"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/categories?post=470"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/tags?post=470"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}