전자 엔지니어로서 우리는 회로의 작동을 측정하고 분석하기 위해 항상 미터 / 계기에 의존합니다. 단순한 멀티 미터부터 복잡한 전력 품질 분석기 또는 DSO에 이르기까지 모든 것이 고유 한 애플리케이션을 가지고 있습니다. 이러한 미터의 대부분은 쉽게 구할 수 있으며 측정 할 매개 변수와 정확도에 따라 구입할 수 있습니다. 그러나 때때로 우리는 우리 자신의 미터를 만들어야하는 상황에 처할 수 있습니다. 예를 들어 태양 광 PV 프로젝트에서 작업 중이고 부하의 전력 소비를 계산하고 싶다고 가정 해 보겠습니다. 이러한 시나리오에서는 Arduino와 같은 간단한 마이크로 컨트롤러 플랫폼을 사용하여 자체 전력계를 구축 할 수 있습니다.
자체 계량기를 구축하면 테스트 비용이 절감 될뿐만 아니라 테스트 프로세스를 쉽게 할 수있는 여지가 생깁니다. 마찬가지로 Arduino 를 사용하여 구축 된 전력계 는 직렬 모니터에서 결과를 모니터링하고 직렬 플로터에 그래프를 플로팅하거나 SD 카드를 추가하여 사전 정의 된 간격 으로 전압, 전류 및 전력 값 을 자동으로 기록하도록 쉽게 조정할 수 있습니다. 흥미로운 것 같네요!? 그럼 시작하겠습니다…
필요한 재료
- Arduino Nano
- LM358 연산 증폭기
- 7805 전압 조정기
- 16 * 2 LCD 디스플레이
- 0.22 ohm 2Watt 션트 저항기
- 10k 트리머 냄비
- 10k, 20k, 2.2k, 1k 저항기
- 0.1uF 커패시터
- 테스트 부하
- 퍼프 보드 또는 브레드 보드
- 납땜 키트 (옵션)
회로도
arduino 전력계 프로젝트 의 전체 회로도 가 아래에 나와 있습니다.
이해하기 쉽도록 arduino 전력계 회로 는 두 단위로 나뉩니다. 회로의 위쪽 부분은 측정 단위이고 회로의 아래쪽 부분은 계산 및 표시 단위입니다. 이러한 유형의 회로를 처음 접하는 사람들을 위해 레이블을 따랐습니다. 예제 + 5V는 레이블로, 레이블이 연결된 모든 핀이 함께 연결될 때 고려되어야 함을 의미합니다. 라벨은 일반적으로 회로도를 깔끔하게 보이게하는 데 사용됩니다.
이 회로는 Solar PV의 사양을 염두에두고 0-24V 사이에서 작동하는 시스템에 적합하도록 설계되었으며 전류 범위는 0-1A입니다. 그러나 회로의 작동을 이해하면 범위를 쉽게 확장 할 수 있습니다. 회로의 기본 원리는 부하 양단의 전압과 부하를 통한 전류를 측정하여 소비 전력을 계산하는 것입니다. 모든 측정 값은 16 * 2 영숫자 LCD에 표시됩니다.
더 아래에서 회로를 작은 부분으로 분할하여 회로가 어떻게 작동하는지에 대한 명확한 그림을 얻을 수 있습니다.
측정 단위
측정 장치는 전압을 측정하는 데 도움이되는 전위 분배기로 구성되며 비 반전 연산 증폭기가있는 차단 저항은 회로를 통해 전류를 측정하는 데 사용됩니다. 위 회로의 전위 분배기 부분은 아래와 같습니다.
여기서 입력 전압은 Vcc로 표시됩니다. 앞서 언급했듯이 0V ~ 24V의 전압 범위에 대한 회로를 설계합니다. 그러나 Arduino와 같은 마이크로 컨트롤러는 이러한 높은 전압 값을 측정 할 수 없습니다. 0-5V의 전압 만 측정 할 수 있습니다. 따라서 0-24V에서 0-5V의 전압 범위를 매핑 (변환)해야합니다. 이는 아래와 같이 전위 분배기 회로를 사용하여 쉽게 수행 할 수 있습니다. 저항 10k 및 2.2k는 함께 전위 분배기 회로를 형성합니다. 전위 분배기의 출력 전압은 아래 공식을 사용하여 계산할 수 있습니다. 저항 값을 결정하는 데 동일한 방법이 사용되며 회로를 다시 설계하는 경우 온라인 계산기를 사용하여 저항 값을 계산할 수 있습니다.
Vout = (Vin × R2) / (R1 + R2)
매핑 된 0-5V는 전압으로 표시된 중간 부분에서 얻을 수 있습니다. 이 매핑 된 전압은 나중에 Arduino 아날로그 핀에 공급 될 수 있습니다.
다음으로 LOAD를 통해 전류를 측정해야합니다. 우리가 알고 있듯이 마이크로 컨트롤러는 아날로그 전압 만 읽을 수 있으므로 어떻게 든 전류 값을 전압으로 변환해야합니다. 옴의 법칙에 따라 경로에 저항 (분로 저항)을 추가하면 통과하는 전류에 비례하는 전압 값이 떨어집니다. 이 전압 강하의 값은 매우 적으므로 연산 증폭기를 사용하여 증폭합니다. 동일한 회로가 아래에 나와 있습니다.
여기에서 션트 저항기 (SR1)의 값은 0.22 Ohms입니다. 앞서 말했듯이 0-1A 용 회로를 설계하고 있으므로 옴 법칙에 따라 최대 1A 전류가 부하를 통과 할 때 약 0.2V가 될이 저항의 전압 강하를 계산할 수 있습니다. 이 전압은 마이크로 컨트롤러가 읽기에 매우 작습니다. 우리는 비 반전 증폭기 모드에서 Op-Amp를 사용하여 Arduino가 읽을 수 있도록 전압을 0.2V에서 더 높은 레벨로 높입니다.
비 반전 모드의 연산 증폭기는 위에 나와 있습니다. 증폭기는 이득이 21이므로 0.2 * 21 = 4.2V가되도록 설계되었습니다. 연산 증폭기의 이득을 계산하는 공식은 아래에 나와 있습니다. 회로를 다시 설계하는 경우이 온라인 이득 계산기를 사용하여 저항 값을 얻을 수도 있습니다.
이득 = Vout / Vin = 1 + (Rf / Rin)
여기서 우리의 경우 Rf의 값은 20k이고 Rin의 값은 1k이며 이는 우리에게 21의 gian 값을 제공합니다. Op-amp에서 증폭 된 전압은 저항 1k와 커패시터 0.1uF가있는 RC 필터에 주어집니다. 결합 된 모든 노이즈를 필터링합니다. 마지막으로 전압은 Arduino 아날로그 핀에 공급됩니다.
측정 장치에 남아있는 마지막 부분은 전압 조정기 부분입니다. 가변 입력 전압을 제공 할 것이므로 Arduino 및 Op 앰프가 작동하려면 조정 된 + 5V 볼트가 필요합니다. 이 조정 된 전압은 7805 전압 조정기에 의해 제공됩니다. 노이즈를 필터링하기 위해 출력에 커패시터가 추가됩니다.
계산 및 표시 장치
측정 장치에서 전압 및 전류 매개 변수를 Arduino 아날로그 핀에 공급할 수있는 0-5V로 변환하는 회로를 설계했습니다. 이제 회로의이 부분에서는 이러한 전압 신호를 Arduino에 연결하고 결과를 볼 수 있도록 16x2 영숫자 디스플레이를 Arduino에 인터페이스합니다. 동일한 회로가 아래에 나와 있습니다.
보시다시피 전압 핀은 아날로그 핀 A3에 연결되고 현재 핀은 아날로그 핀 A4에 연결됩니다. LCD는 7805에서 + 5V로 전원이 공급되며 Arduino의 디지털 핀에 연결되어 4 비트 모드에서 작동합니다. 또한 Con 핀에 연결된 전위차계 (10k)를 사용하여 LCD의 대비를 변경했습니다.
Arduino 프로그래밍
이제 하드웨어를 잘 이해 했으므로 Arduino를 열고 프로그래밍을 시작하겠습니다. 코드의 목적은 핀 A3 및 A4의 아날로그 전압을 읽고 전압, 전류 및 전력 값을 계산하여 마지막으로 LCD 화면에 표시하는 것입니다. 동일한 작업을 수행하는 전체 프로그램은 위에서 설명한 하드웨어에 사용할 수있는 페이지 끝에 제공됩니다. 또한 코드는 작은 조각으로 분할되어 설명됩니다.
모든 프로그램에서 우리가 사용한 핀을 정의합니다. 프로젝트에서 A3 및 A4 핀은 전압과 전류를 각각 측정하는 데 사용되며 디지털 핀 3,4,8,9,10 및 11은 LCD와 Arduino를 연결하는 데 사용됩니다.
int Read_Voltage = A3; int Read_Current = A4; const int rs = 3, en = 4, d4 = 8, d5 = 9, d6 = 10, d7 = 11; // LCD 연결을위한 핀 번호 언급 LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
또한 LCD를 Arduino와 인터페이스하기 위해 액정이라는 헤더 파일을 포함했습니다. 그런 다음 설정 기능 내에서 LCD 디스플레이를 초기화하고 "Arduino 전력계"로 인트로 텍스트를 표시하고 삭제하기 전에 2 초 동안 기다립니다. 동일한 코드는 다음과 같습니다.
void setup () { lcd.begin (16, 2); // 16 * 2 LCD 초기화 lcd.print ("Arduino Wattmeter"); // Intro Message line 1 lcd.setCursor (0, 1); lcd.print ("-Circuitdigest"); // Intro Message line 2 delay (2000); lcd.clear (); }
메인 루프 기능 내에서 아날로그 읽기 기능을 사용하여 핀 A3 및 A4에서 전압 값을 읽습니다. 아두 이노 ADC는 10 비트 ADC를 가지고 있기 때문에 0-1203의 출력 값을 알고 있습니다. 이 값은 0-5V로 변환되어야하며 (5/1023)을 곱하여 수행 할 수 있습니다. 그런 다음 하드웨어의 앞부분에서 전압의 실제 값을 0-24V에서 0-5V로, 전류 형태의 실제 값을 0-1A에서 0-5V로 매핑했습니다. 이제 승수를 사용하여 이러한 값을 실제 값으로 되돌려 야합니다. 이것은 승수 값으로 곱하여 수행 할 수 있습니다. 승수 값은 하드웨어 섹션에 제공된 공식을 사용하여 이론적으로 계산할 수 있거나 알려진 전압 및 전류 값 세트가있는 경우 실제로 계산할 수 있습니다.실시간으로 더 정확한 경향이 있기 때문에 후자의 옵션을 따랐습니다. 그래서 여기서 승수의 값은 6.46과 0.239입니다. 따라서 코드는 다음과 같습니다.
float Voltage_Value = analogRead (Read_Voltage); float Current_Value = analogRead (Read_Current); Voltage_Value = 전압 _ 값 * (5.0 / 1023.0) * 6.46; Current_Value = Current_Value * (5.0 / 1023.0) * 0.239;
더 정확하게 측정하는 방법?
위의 실제 전압 및 전류 값을 계산하는 방법은 잘 작동합니다. 그러나 한 가지 단점이 있습니다. 즉, 측정 된 ADC 전압과 실제 전압 사이의 관계는 선형이 아니므로 단일 승수는 매우 정확한 결과를 제공하지 않으며 전류에도 동일하게 적용됩니다.
따라서 정확도를 개선하기 위해 알려진 값 세트를 사용하여 실제 값으로 측정 된 ADC 값 세트를 플로팅 한 다음 해당 데이터를 사용하여 그래프를 플로팅하고 선형 회귀 방법을 사용하여 승수 방정식을 유도 할 수 있습니다. 비슷한 방법을 사용한 Arduino dB 미터를 참조 할 수 있습니다.
마지막으로 부하를 통한 실제 전압과 실제 전류 값을 계산했으면 공식 (P = V * I)을 사용하여 전력을 계산할 수 있습니다. 그런 다음 아래 코드를 사용하여 LCD 디스플레이에 세 가지 값을 모두 표시합니다.
lcd.setCursor (0, 0); lcd.print ("V ="); lcd.print (Voltage_Value); lcd.print (""); lcd.print ("I ="); lcd.print (Current_Value); float Power_Value = 전압 _ 값 * 전류 _ 값; lcd.setCursor (0, 1); lcd.print ("Power ="); lcd.print (Power_Value);
작업 및 테스트
튜토리얼을 위해 회로에 표시된 모든 구성 요소를 납땜하기 위해 perf 보드를 사용했습니다. Phoenix 나사 단자를 사용하여 부하를 연결하고 일반 DC 배럴 잭을 사용하여 전원을 연결했습니다. Arduino Nano 보드와 LCD는 Female Bergstik에 장착되어 나중에 필요할 경우 재사용 할 수 있습니다.
하드웨어를 준비한 후 Arduino 코드를 Nano 보드에 업로드합니다. 명확한 소개 텍스트가 표시 될 때까지 트리머 포트를 조정하여 LCD의 대비 수준을 제어합니다. 보드를 테스트하려면 부하를 나사 터미널 커넥터에 연결하고 소스를 배럴 잭에 연결합니다. Arduino가 작동하는 데 + 5V가 필요했기 때문에이 프로젝트가 작동하려면 소스 전압이 6V 이상이어야합니다. 모든 것이 잘 작동하면 아래 그림과 같이 LCD의 첫 번째 줄에 표시된 부하 및 부하의 전압 값과 LCD의 두 번째 줄에 표시된 계산 된 전력을 볼 수 있습니다.
무언가를 만드는 데있어 재미있는 부분은 제대로 작동하는지 확인하기 위해 테스트하는 것입니다. 이를 위해 12V 자동차 표시등을 부하로 사용하고 RPS를 소스로 사용했습니다. RPS 자체가 전류 및 전압 값을 측정하고 표시 할 수 있기 때문에 회로의 정확성과 성능을 쉽게 교차 점검 할 수 있습니다. 그리고 예, 정확한 값에 가까워 지도록 RPS를 사용하여 승수 값을 보정했습니다.
전체 작업은이 페이지 끝에있는 비디오에서 찾을 수 있습니다. 회로와 프로그램을 이해하고 유용한 것을 배웠기를 바랍니다. 이 작업을 수행하는 데 문제가 있으면 아래 댓글 섹션에 게시하거나 더 많은 기술적 인 도움을 위해 포럼에 글을 작성하십시오.
이 Arduino 기반 전력계 프로젝트 에는 자동 데이터 로깅, 그래프 플로팅, 과전압 또는 과전류 상황에 대한 알림 등의 성능을 높이기 위해 추가 할 수있는 더 많은 업그레이드가 있습니다. 따라서 궁금한 점을 유지하고 이것을 사용할 용도를 알려주십시오.