Arduino test: voltmeter

First experiment with Arduino. Trying to implement a voltmeter.

Each analog input of Arduino has 1024 steps. From 0 to 5 volt. This experiment used a simple voltage divider to measure roughly 0 to 12 volt (using 50k as R1 and 4k3 as R2).

By varying the values of R1 and R2, the precision and range of the measurement can be changed.

0

1

Here is the Arduino code:
// variables for input pin and control LED
  int analogInput = 1;
  int LEDpin = 13;
  int prev = LOW;
  int refresh = 1000;
  float vout = 0.0;
  float vin = 0.0;
  float R1 = 50000.0;    // !! resistance of R1 !!
  float R2 = 4300.0;     // !! resistance of R2 !!
  
// variable to store the value 
  int value = 0;
  
 
void setup(){

  // declaration of pin modes
  pinMode(analogInput, INPUT);
  pinMode(LEDpin, OUTPUT);
  
  // begin sending over serial port
  Serial.begin(9600);
}

void loop(){
  // read the value on analog input
  value = analogRead(analogInput);
  //Serial.print("value=");
  //Serial.println(value);

  if (value >= 1023) {
    Serial.println("MAX!!");
    delay(refresh);
    return;
  }
  else if (value <= 0) {
    Serial.println("MIN!!");
    delay(refresh);
    return;
  }

  // blink the LED
  if (prev == LOW) {
    prev = HIGH;
  } else {
    prev = LOW;
  }
  digitalWrite(LEDpin, prev); 

  // print result over the serial port
  vout = (value * 5.0) / 1024.0;
  vin = vout / (R2/(R1+R2));
  
  //Serial.print("vout=");
  //Serial.println(vout);
  
  Serial.print(vin);
  Serial.println(" volt");

  // sleep...
  delay(refresh);	
}

This entry was posted on Sun, 17 May 2009 11:14:00 GMT and Posted in , . You can follow any any response to this entry through the Atom feed. You can leave a comments, .


Comments

Leave a response

  1. cc 6 days later:
    @_________@
  2. Colin about 1 month later:
    Hi, I'm trying to read battery voltages in real time from a car I recently converted from ICE to all electric. I have 11 12V lead acid batteries in series as my battery pack and I am researching how best to cycle through the battery pack and read the voltage of each of the 11 in turn . I need to read the range of 10V to 15 v. I know the arduino has only 6 analogue inputs, but for a start, how do I calculate the values of r1 and r2 in your example above to read that V range at just one input? Thanks for any help, Colin McC Whistler Canada
  3. clarence about 1 month later:
    @colin: R1 and R2 act together as a voltage divider. If Vin is the voltage across the voltage divider, the voltage applied to Arduino input will be Vout = (Vin * R2) / (R1 + R2).

    http://en.wikipedia.org/wiki/Voltage_divider

    Choose your combination of R1 and R2 based on: (1) R1 + R2 will affect the current drawn from the source. Keep the current small to avoid overheating and increase accuracy; (2) Arduino input can read 0V to5V. Values returned range from 0 to 1023.

    (now you asked... i am wondering if i actually used 4k3 and 50k resistors in my experiment... anyway...)
  4. Luis about 1 month later:
    Works,its a good sample. tks
  5. Luis about 1 month later:
    this site help you to caculate: http://www.beyondttl.com/calculator-vdiv.php
  6. extremesanity 8 months later:
    Thanks for the info!

Leave a comment