http://blog.naver.com/eduino/220878604760
1. 회로연결의 예
전류센서의 부하쪽 회로 연결은 아래 그림과 같이 전하가 흐르는 +단자쪽 전선을 연결해줍니다.
따라하기
1. 멀티탭의 전류량을 센싱해보자~
주의! 가정의 멀티탭제어를 위해서는 220V 60Hz의 높은 전력을 다루게 되므로 매우 위험합니다. 따라서 미성년자나 전자지식이 부족한 성인의 경우 충분히 학습하고 안전장치를 갖춘 뒤 실험할 것을 권고합니다.
아래 그림과 같이 멀티탭은 3개의 선이 있습니다. 이 중 한 개는 접지선(여기서는 초록색)입니다. 멀티탭에서 접지선의 역할은 벼락과 같이 과전압이 걸렸을때 건물의 땅으로 흘려보내기 위한 비상선입니다.
아래와 같이 전류센서와 아두이노 보드와 점퍼선으로 연결합니다.
전류센서 아두이노 보드
GND ----------- GND
OUT ---------- A0
VCC ---------- 5V
실제로 연결한 모습은 다음과 같습니다.
2. 소스코드
float getVPP();
const int sensorIn = A0;
int mVperAmp = 100; // use 185 for 5A Module and 66 for 30A Module
double Voltage = 0;
double VRMS = 0;
double AmpsRMS = 0;
void setup(){
Serial.begin(9600);
}
void loop(){
Voltage = getVPP();
VRMS = (Voltage/2.0) *0.707;
AmpsRMS = (VRMS * 1000)/mVperAmp;
Serial.print(AmpsRMS);
Serial.println(" Amps RMS");
}
float getVPP()
{
float result;
int readValue; //value read from the sensor
int maxValue = 0; // store max value here
int minValue = 1024; // store min value here
uint32_t start_time = millis();
while((millis()-start_time) < 1000) //sample for 1 Sec
{
readValue = analogRead(sensorIn);
// see if you have a new maxValue
if (readValue > maxValue)
{
/*record the maximum sensor value*/
maxValue = readValue;
}
if (readValue < minValue)
{
/*record the maximum sensor value*/
minValue = readValue;
}
}
// Subtract min from max
result = ((maxValue - minValue) * 5.0)/1024.0;
return result;
}
댓글 6
-
묵묵이
2017.07.18 09:37
-
묵묵이
2017.07.27 09:28
Vrms라는 것은 실효값을 의미하는데, 이는 AC전압을 표현한 것으로 알고 있습니다.
-
묵묵이
2017.07.27 09:34
평균치 : 교류파형의 반파분의 평균값을 말한다.
[ 예 : 정파의 경우 ]
Vm 최대치= 실효치 * 루트2 = 실효치 * 1.414
Vrms 실효치= 최대치 * 1/루트2 = 최대치 * 0.707
Vrms 실효치 = 평균치 * 1.11
평균치 = 최대치 * 2 / 파이 = 최대치 * 0.637
교류의 전압은 AC 220V 이다 바로 이 AC 220V는 실효값이며, 직류 DC 220V 와 같은 일을 하게되는 겂이지요.
하지만 실효값이 AC 220V인 교류 전압의 최대값 Vm 은
Vm = 루트2 * 220[v] 가 됩니다. -
묵묵이
2017.07.27 09:59
A/D 컨버터의 분해능은 시간의 연속에 의한 정밀도가아니라
0~5V를 디지털화하기위한작업으로 8비트의경우 0~255의 범위를 같습니다.
0V일때 AD변환을하게되면 0의 값이 ADC레지스터에 쓰이게됩니다.5V일때는 당연히255겠죠....
여기서 분해능은 8비트,10비트,12비트 이런 분해했을때 변환되는 수의 크기를 말합니다.
5V를 256으로 쪼갠것과 65536으로 쪼갠것은 차이가 엄청나죠..이게 분해능입니다...
주로 센서에 이용되는데요....
센서를 사용할때 센서를 거쳐 나온 전압강하를 읽게 될때 쓰입니다.
온도센서로 설명을 드리자면 온도가 100도일때 ADC값이 값이 50이다.... 101도일때도 ADC값이 50이다...
분해능이 좋은 10비트로한다면 위와같은일은 발생하지않겠죠?
-
묵묵이
2017.07.27 10:10
const float midPoint = 515.2; // Zero setting (AnanlogRead for mid-Point)const float rmsZero = 0.3; // Zero setting (RMS for zero load)제로 베이스 조정이 필요함 -
묵묵이
2017.07.29 16:51
http://blog.naver.com/ysahn2k/221042398310
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | IR 리모콘 코드 따기 [1] | 묵묵이 | 2017.02.10 | 12 |
공지 | rc 카 작업용 [1] | 묵묵이 | 2017.02.07 | 11 |
공지 | [sketch_mydust] 미세멘지 측정기 작업 용 [2] | 묵묵이 | 2017.02.07 | 15 |
42 | RFID 정보를 읽고 쓸 수 있는 Proxmark3 | 묵묵이 | 2024.09.13 | 1 |
41 | [Android,Java] 안드로이드 - AES256 암호화 및 복호화 예제 소스 다운로드 | 묵묵이 | 2022.06.12 | 0 |
40 | 교류모터 속도제어킷 | 묵묵이 | 2021.05.02 | 7 |
39 | WiFiHTTPSServer test | 묵묵이 | 2020.03.02 | 7 |
38 | 8GLIB 유저매뉴얼 구글번역 | 묵묵이 | 2020.02.29 | 5 |
37 | 아두이노 2.4G 통신 모듈 사용하기 | 묵묵이 | 2019.04.04 | 9 |
36 | 전기가용량 계산 방법 - 전압, 전류와 전력량 측정에 대한 내용 | 묵묵이 | 2017.07.27 | 9 |
35 | 초저렴 iot 모듈 | 묵묵이 | 2017.06.04 | 8 |
34 | 적정 습도 / 미세먼지 값보정 | 묵묵이 | 2017.05.11 | 8 |
» | 5V동작 20A 전류 센서 모듈 측정하기 ... [6] | 묵묵이 | 2017.04.17 | 16 |
32 | 먼지 센서 구매 하는곳 ... | 묵묵이 | 2017.04.15 | 7 |
31 | 라즈베리파이 프로그램 자동 실행 | 묵묵이 | 2017.03.12 | 8 |
30 | 라즈베리파일 설정 | 묵묵이 | 2017.03.11 | 6 |
29 | [라즈베리파이] C언어를 이용한 GPIO 입출력 제어 [3] | 묵묵이 | 2017.03.07 | 5 |
28 | 와이파이 모듈(ESP8266) 공유기 연결 AT 명령어 [1] | 묵묵이 | 2017.02.26 | 6 |
27 | 아두이노 EEPROM 사용해보기 | 묵묵이 | 2017.02.20 | 6 |
26 | [아두이노] 0.96인치 OLED LCD 모듈 텍스트 출력 [2] | 묵묵이 | 2017.02.20 | 9 |
25 | HEX to DEC | 묵묵이 | 2017.02.10 | 5 |
ACS712-20A 전류센서는5V 동작전압으로AC, DC의전류를측정가능한 모듈입니다
http://www.eduino.kr/product/detail.html?product_no=99&cate_no=27&display_group=1
소스 코드
float getVPP();
const int sensorIn = A0;
//int fv_mVperAmp = 100; // use 185 for 5A Module and 100 for 20A Module
int fv_mVperAmp = 66; // use 185 for 5A Module and 66 for 30A Module
double Voltage = 0;
double VRMS = 0;
double AmpsRMS = 0;
void setup(){
Serial.begin(9600); // 시리얼 통신 속도 9600bps
}
void loop(){
Voltage = getVPP();
VRMS = (Voltage/2.0) *0.707; // RMS값 70.7%
AmpsRMS = (VRMS * 1000)/mVperAmp; // mA 단위 맞춰줌
Serial.print(AmpsRMS);
Serial.println(" Amps RMS");
}
float getVPP()
{
float result;
int readValue; //value read from the sensor
int maxValue = 0; // store max value here
int minValue = 1024; // store min value here
uint32_t start_time = millis();
while((millis()-start_time) < 1000) // 1초동안 값을 모아서 AC 전류의 최고점, 최저점을 찾아 평균치를 구함
{
readValue = analogRead(sensorIn);
// see if you have a new maxValue
if (readValue > maxValue)
{
/*record the maximum sensor value*/
maxValue = readValue;
}
if (readValue < minValue)
{
/*record the maximum sensor value*/
minValue = readValue;
}
}
// Subtract min from max
result = ((maxValue - minValue) * 5.0)/1024.0; // 5V 분해능, 아날로그핀의 분해능 1024
return result;
}