Arduino를 사용하여 고급 디지털 전류계 만들기

문제를 제거하기 위해 도구를 사용해보십시오





이 게시물에서는 16 x 2 LCD 디스플레이와 Arduino를 사용하여 디지털 전류계를 구성 할 것입니다. 션트 저항을 사용하여 전류를 측정하는 방법론을 이해하고 Arduino를 기반으로 한 설계를 구현합니다. 제안 된 디지털 전류계는 적절한 정확도로 0 ~ 2A (절대 최대) 범위의 전류를 측정 할 수 있습니다.

전류계의 작동 원리

전류계에는 아날로그와 디지털의 두 가지 유형이 있으며 작동 방식은 서로 다릅니다. 그러나 둘 다 공통된 개념 인 션트 저항을 가지고 있습니다.

션트 저항기는 전류를 측정하는 동안 소스와 부하 사이에 배치되는 저항이 매우 작은 저항입니다.

아날로그 전류계가 어떻게 작동하는지 살펴보면 디지털 전류계를 더 쉽게 이해할 수 있습니다.

아날로그 전류계의 작동 원리

저항 R이 매우 낮은 션트 저항기이며 어떤 종류의 아날로그 미터가 저항에 연결되어 있다고 가정합니다.이 저항은 편향이 아날로그 미터를 통한 전압에 정비례합니다.

이제 왼쪽에서 약간의 전류를 전달하겠습니다. i1은 션트 저항 R에 들어가기 전의 전류이고 i2는 션트 저항을 통과 한 후의 전류입니다.

전류 i1은 션트 저항을 통해 전류의 일부를 떨어 뜨리기 때문에 i2보다 클 것입니다. 션트 저항기 간의 전류 차이는 V1 및 V2에서 매우 적은 양의 전압을 발생시킵니다.
전압의 양은 해당 아날로그 미터로 측정됩니다.

션트 저항에서 발생하는 전압은 션트 저항을 통해 흐르는 전류와 션트 저항 값의 두 가지 요인에 따라 달라집니다.

션트를 통한 전류 흐름이 더 크면 발생 된 전압이 더 커집니다. 션트 값이 높으면 션트에서 발생하는 전압이 더 커집니다.

션트 저항은 매우 작은 값이어야하며 더 높은 와트 정격을 가져야합니다.

작은 값의 저항은 부하가 정상 작동을 위해 적절한 양의 전류와 전압을 얻도록합니다.

또한 션트 저항은 전류를 측정하는 동안 더 높은 온도를 견딜 수 있도록 더 높은 와트 정격을 가져야합니다. 션트를 통과하는 전류가 높을수록 더 많은 열이 발생합니다.

지금 쯤이면 아날로그 미터가 어떻게 작동하는지에 대한 기본적인 아이디어를 얻었을 것입니다. 이제 디지털 디자인으로 넘어 갑시다.

이제 우리는 전류가 흐르면 저항이 전압을 생성한다는 것을 알고 있습니다. 다이어그램에서 V1 및 V2는 전압 샘플을 마이크로 컨트롤러로 가져 오는 지점입니다.

전압에서 전류로의 변환 계산

이제 간단한 수학, 생성 된 전압을 전류로 변환하는 방법을 살펴 보겠습니다.

옴의 법칙 : I = V / R

션트 저항 R의 값을 알고 있으며 프로그램에 입력됩니다.

션트 저항에서 생성되는 전압은 다음과 같습니다.

V = V1-V2

또는

V = V2 – V1 (측정 중 음의 기호를 피하고 전류 흐름의 방향에 따라 음의 기호를 피함)

그래서 우리는 방정식을 단순화 할 수 있습니다.

나는 = (V1 – V2) / R
또는
나는 = (V2-V1) / R

위의 방정식 중 하나가 코드에 입력되고 현재 흐름을 찾을 수 있으며 LCD에 표시됩니다.

이제 션트 저항 값을 선택하는 방법을 살펴 보겠습니다.

Arduino에는 10 비트 아날로그-디지털 변환기 (ADC)가 내장되어 있습니다. 0 ~ 1024 단계 또는 전압 레벨에서 0 ~ 5V를 감지 할 수 있습니다.

따라서이 ADC의 분해능은 5/1024 = 0.00488 볼트 또는 단계 당 4.88 밀리 볼트입니다.

따라서 4.88mV / 2mA (전류계의 최소 분해능) = 2.44 또는 2.5ohm 저항입니다.

4 개의 10ohm, 2W 저항을 병렬로 사용하여 프로토 타입에서 테스트 한 2.5ohm을 얻을 수 있습니다.

따라서 제안 된 전류계의 최대 측정 가능 범위 인 2A를 어떻게 말할 수 있습니까?

ADC는 0에서 5V까지만 측정 할 수 있습니다. 위의 내용은 마이크로 컨트롤러의 ADC를 손상시킵니다.

테스트 된 프로토 타입에서 현재 측정 된 값이 XmA 일 때 포인트 V1과 V2의 두 아날로그 입력에서 아날로그 전압이 X / 2 (직렬 모니터)를 읽는다는 사실을 관찰했습니다.

예를 들어 전류계가 500mA를 읽는 경우 직렬 모니터의 아날로그 값은 250 단계 또는 전압 수준을 읽습니다. ADC는 최대 1024 단계 또는 최대 5V까지 견딜 수 있으므로 전류계가 2000mA를 읽을 때 직렬 모니터는 약 1000 단계를 읽습니다. 1024에 가깝습니다.

1024 전압 레벨을 초과하는 것은 Arduino의 ADC를 손상시킵니다. 2000mA 직전에이를 방지하기 위해 LCD에 회로를 분리하라는 경고 메시지가 표시됩니다.

지금 쯤이면 제안 된 전류계가 어떻게 작동하는지 이해했을 것입니다.

이제 구조적 세부 사항으로 이동하겠습니다.

개략도:

Arduino DC 디지털 전류계

제안 된 회로는 매우 간단하고 초보자에게 친숙합니다. 회로도에 따라 구성하십시오. 디스플레이 대비를 조정하려면 10K 전위차계를 조정하십시오.

USB 또는 9V 배터리가있는 DC 잭을 통해 Arduino에 전원을 공급할 수 있습니다. 4 개의 2 와트 저항은 8-10 와트 저항과 함께 2.5 옴 저항을 1 개 사용하는 것보다 열을 고르게 분산시킵니다.

전류가 디스플레이를 통과하지 않으면 무시할 수있는 작은 임의의 값을 읽을 수 있습니다. 이는 측정 단자의 표류 전압 때문일 수 있습니다.

참고 : 입력 부하 공급 극성을 바꾸지 마십시오.

프로그램 코드 :

//------------------Program Developed by R.GIRISH------------------//
#include
#define input_1 A0
#define input_2 A1
LiquidCrystal lcd(12, 11, 5, 4, 3, 2)
int AnalogValue = 0
int PeakVoltage = 0
float AverageVoltage = 0
float input_A0 = 0
float input_A1 = 0
float output = 0
float Resolution = 0.00488
unsigned long sample = 0
int threshold = 1000
void setup()
{
lcd.begin(16,2)
Serial.begin(9600)
}
void loop()
{
PeakVoltage = 0
for(sample = 0 sample <5000 sample ++)
{
AnalogValue = analogRead(input_1)
if(PeakVoltage {
PeakVoltage = AnalogValue
}
else
{
delayMicroseconds(10)
}
}
input_A0 = PeakVoltage * Resolution
PeakVoltage = 0
for(sample = 0 sample <5000 sample ++)
{
AnalogValue = analogRead(input_2)
if(PeakVoltage {
PeakVoltage = AnalogValue
}
else
{
delayMicroseconds(10)
}
}
input_A1 = PeakVoltage * Resolution
output = (input_A0 - input_A1) * 100
output = output * 4
while(analogRead(input_A0) >= threshold)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Reached Maximum')
lcd.setCursor(0,1)
lcd.print('Limit!!!')
delay(1000)
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Disconnect now!!')
delay(1000)
}
while(analogRead(input_A0) >= threshold)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Reached Maximum')
lcd.setCursor(0,1)
lcd.print('Limit!!!')
delay(1000)
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Disconnect now!!')
delay(1000)
}
lcd.clear()
lcd.setCursor(0,0)
lcd.print('DIGITAL AMMETER')
lcd.setCursor(0,1)
lcd.print(output)
lcd.print(' mA')
Serial.print('Volatge Level at A0 = ')
Serial.println(analogRead(input_A0))
Serial.print('Volatge Level at A1 = ')
Serial.println(analogRead(input_A1))
Serial.println('------------------------------')
delay(1000)
}
//------------------Program Developed by R.GIRISH------------------//

이 Arduino 기반 디지털 전류계 회로 프로젝트에 대한 구체적인 질문이 있으시면 코멘트 섹션에 표현해 주시면 빠른 답변을 받으실 수 있습니다.




이전 : Arduino와 함께 디지털 전위차계 MCP41xx 사용 다음 : Arduino를 사용한 과전류 차단 전원 공급 장치