Arduino measures current with LM358 op-amp.
Basic Electronics Learning and Projects
Arduino Microcontroller Projects


Arduino Measures Current from Constant Current Source

by Lewis Loflin


Open above schematic. Schematic Arduino Current Measurement.

This is a continuing series on Arduino projects. This circuit enables Arduino to measure current from the constant current source projects below.

Also see Arduino Controlled Power Constant Current Source.

I used two parallel 0.5 Ohm resistors for 0.25 Ohms. The small voltage from resistors is amplified by an LM358 op-amp. Gain is set by R2 / R1.

An RC filter of 4.7K resistor and 10uF capacitor enable measurement of DC current or pule-width-modulated current from Arduino PWM from digital pin 9.

The test program for an I2C LCD display and serial monitor.

Download code ccs_lm358.txt.


/* Arduino Measures Current from Constant Current Source
   https://www.bristolwatch.com/ele4/ccs_lm358.htm
   by Lewis Loflin lewis@bvu.net
   
   also see:
   Arduino Controlled Power Constant Current Source
   https://www.sullivan-county.com/ele/ard_css.htm
*/
   
// Arduino code:

#include < Wire.h >
#include < LiquidCrystal_I2C.h >
LiquidCrystal_I2C lcd(0x27, 16, 2);
//set the LCD address to 0x27 
//for a 16 chars and 2 line display

#define pwmPin 9
#define pot 0
#define analog1 1
int analogValue = 0;    
// variable to hold the analog value

int total, average;
float volts;

void setup() {
  // open the serial port at 9600 bps:
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
}

void loop() {
  // read the analog input on pin 0:
  analogValue = analogRead(0) ;
  Serial.print("Pot value = ");
  Serial.print(analogValue);
  Serial.print("\n");
  analogWrite(pwmPin, analogValue / 4);

  analogValue = analogRead(pot);

  lcd.setCursor(0, 0);
  lcd.print("POT =         ");
  lcd.setCursor(6, 0);
  lcd.print(analogValue);

  analogValue = analogRead(analog1);

  lcd.setCursor(0, 1);
  lcd.print("AMPs =       ");
  lcd.setCursor(11, 1);
  lcd.print(analogValue * .00467 );

  Serial.print("AMPs = ");
  Serial.print(analogValue * .00475);
  Serial.print("\n");
  delay(500);
}


Bristolwatch.com banner.



Related video to above:

Web site Copyright Lewis Loflin, All rights reserved.
If using this material on another site, please provide a link back to my site.