Arduino Playground is read-only starting December 31st, 2018. For more info please look at this Forum Post

Serial output actual voltage through divider

Method to convert raw analog data back into voltage and then convert back to actual voltage before divider.

Sketch:

/* This sketch serial outputs a voltage through a voltage divider into

  analog pin 0

This is written in as simple terms as possible, so its long.

  Actual real numbers math is only 3 lines of code so
  skip to the code if you understand voltage dividers.

Resistance divider follows Vout = Vin * (R2 / (R1 + R2))

  This sketch is assuming 25V max is measured.
  Resistance values used for 1/5 divider are R1 = 10k and R2 = 2.5K

BEFORE YOU CONNECT voltage divider to arduino, test with a meter to verify.

  If you connect 25Vdc to arduino... its bad.  

Meter Black Lead to Gnd

  Gnd -- R2 -- Meter Red Lead -- R1 -- V+ (measured voltage 0-25Vdc)

Connection: Gnd -- R2 -- arduino pin A0 -- R1 -- V+ (measured voltage 0-25Vdc)

I can get to within 0.05 Vdc by measuring actual value of resistors

 */

//Analog volt read pin

const int voltPin = 0;

//Variables for voltage divider

float denominator;

int resistor1 = 10000;

int resistor2 = 2500;

void setup() {

  Serial.begin(9600);
  //Convert resistor values to division value
  //  Equation is previously mentions voltage divider equation
  //  R2 / (R1 + R2)
  //  In this case returns 0.20 or 1/5
  denominator = (float)resistor2 / (resistor1 + resistor2);

} // Void Setup Close

void loop() {

  float voltage;
  //Obtain RAW voltage data
  voltage = analogRead(voltPin);

  //Convert to actual voltage (0 - 5 Vdc)
  voltage = (voltage / 1024) * 5.0;

  //Convert to voltage before divider
  //  Divide by divider = multiply
  //  Divide by 1/5 = multiply by 5
  voltage = voltage / denominator;

  //Output to serial
  Serial.print("Volts: ");
  Serial.println(voltage);

  //Delay to make serial out readable
  delay(500);

} // void loop close