만원에 아두이노로 만드는 원격 전원제어
  • 2015-08-03
  • 김언한 기자, unhankim@elec4.co.kr
  • 글 | 허 원 진 아키텍트




아두이노를 포함하여 1만 원에 원격으로 전원을 제어하는 모듈을 만들어보자. 1만 원이지만 굉장히 안전하고 깔끔한 하우징까지 가능하다. 테스트 목적이 아닌 실제 사용할 것이다.

시작하기 전 주의사항

이 글은 아두이노를 이용하여 가정용 전기 전원을 제어하는 내용을 다루고 있다. 매우 위험할 수 있다. 따라서 전기에 대한 이해와 안전의식이 필요하다. 이해가 부족할 경우 반드시 전문가의 도움을 받고 적절한 도구와 부품을 이용하여 안전하게 만들어야한다. 이 글과 필자는 결과에 대해 책임을 지지 않는다. 글에 언급한 주의사항을 잘 따라 안전하게 만들어보자.

재료

초반부터 무시무시한 말을 했지만 좋은 재료로 안전하게 결합하면 안전하다. 모두 인터넷에서 구입할 수 있는 재료들이다. 아두이노와 센서까지 국내에서 살 경우에는 총 25,000원이 든다. 재료 구입이 DIY 과정의 반이다. 재료 이름 그대로 검색을 하면 찾기 쉬울 것이다. 플러그, 콘센트, 전선은 한국품질인증표준원이 인증하고 있는 K마크가 있는 제품을 구입한다.

안전을 위해 접지 단자가 있는 접지형을 구입한다. 또한 코드 쪽에 전선을 물어서 장력을 분산할 수 있는 제품이 좋다. 코드 쪽에 전선 매듭을 만들어 장력을 분산하는 방법은 안 좋은 방법이다. 용량만 맞으면, ‘ㄱ’자 플러그를 써도 된다.

노출 박스(그림 2)에 아두이노와 릴레이 스위치, 온도센서 콘센트가 들어간다. 이 글은 실험이 목적이 아니라 실제 사용할 전제로 만드는 것이 목적이므로 전원부를 안전하게 보호할 케이스가 필요하다. 박스가 그런 역할을 한다. 전원과 관련된 단자, 구리선 등이 눈에 보이면 안 된다. 눈에 보인다는 것은 접촉할 가능성이 있고 빛에 노출된다는 것이다.
콘센트는 플러그와 마찬가지로 접지 단자가 있는 것을 구매한다(그림 3). 접지는 낮은 저항을 제공하여 과전류가 발생하면 전류가 사용자가 아닌 다른 곳으로 흐르게 유도한다.

또한 전기선을 볼트로 연결 안하고 피복을 일부 벗겨내어 꼽는 형태가 더 안전하다. 외부에 전선 동선이 노출되지 않기 때문이다. 2구 콘센트는 공간이 좁아서 곤란하다. 스위치부 콘센트를 이용하면 스위치를 이용해서 제어도 가능하다.

전선은 생산년도가 너무 오래 된 것이 아닌 것으로 구매한다. 전선 옆에 생산일과 규격이 인쇄돼 있다. 여기서는 VCTF 전선만을 쓰고 있으나, VCTF 전선은 콘센트 연결이 어렵다. 코드선 부분을 VCTF 전선으로 쓰고 콘센트 부분을 HIV(구리 단선)을 연결하는 것이 가장 편한 방법이다. 그럴 경우에는 HIV 2.5 SQ, IV 2.5 SQ로 검색하고 추가로 구입해야 한다. 이 때 반드시 초록색(접지 표시용) 선을 포함해서 주문하기 바란다.

그 외에 다음과 같은 재료가 필요하다.

릴레이 AC 250V 10A: 노출 박스 안에 넣으므로 5×2×2 (cm) 정도 크기의 제품을 구입해야 한다. 10A 이상의 제품을 사용해도 상관없으나 부피를 고려해야 한다. ‘5V 30A 1-Channel Relay Module’ 식으로 검색하면 쉽다.
아두이노 마이크로/나노: 아두이노 유노( Arduino Uno)를 쓸 경우, 부피가 크므로 노출 박스도 4구형으로 구입해야 한다. 유노는 이전에 언급한 2구형 노출 박스에 넣을 수 없다.
온도센서 DHT11: 전원제어 모듈 안의 온도를 측정하여 일정 온도가
넘으면 전원을 차단한다.
노이즈 필터 USB 케이블: 전력선 등에서 발생하는 노이즈를 막기
위해 사용한다.
나사못 2개: 콘센트와 노출 박스를 연결할 때 사용한다.

최소 도구
브레드보드, 점프선
인두기
라디오 펜치(롱노즈)
절연 테이프

있으면 좋은 도구
1mm 열수축 테이프
글루건

회로는 가장 낮은 성능의 부품이 제품의 최종 성능을 결정한다. 릴레이의 용량이 제일 작으므로 전원제어는 AC 250V 10A 이하인 전자제품만 가능하다. 따라서 위와 동일한 재료로 구성했을 경우에는 반드시 10A 이하인 전자제품만 연결해야 한다. 이 용량은 전자제품의 설명서나 전원부에 정격 입력으로 쓰여 있다.
원격 전원제어 모듈을 다시 멀티탭에 연결했을 경우 멀티탭의 용량에 영향을 받는다. 따라서 5A 이하의 전자제품만을 연결해서 쓰기를 권장한다. 전기 회로에 낮은 용량과 높은 용량이 연결돼 있으면 낮은 용량 쪽에 열이 발생하고 화재의 원인이 된다.

플러그와 콘센트 연결하기

우선 플러그와 콘센트를 연결한다. 연결에 앞서 전선 규격부터 확인한다. 여기서 사용하는 전선은 2.5 SQ에 접지선을 포함한 3선 전선이다. 케이블 안에 또 다른 전선 3개가 들어 있다. 전선의 굵기에 따라서 허용 전류가 다르다. 이 전선은 220V 기준으로 3500W 이하를 쓸 수 있는 전선이다. 전류로는 16A를 사용할 수 있는 전선이다.

전선의 굵기가 사용 전류보다 작을 경우 전선에서 열이 발생한다. 또한 이 전선을 뱀처럼 감아 놓을 경우에도 문제가 생긴다. 불필요하게 길게 전선을 만들어 선을 정리한다고 일부를 감아 놓으면 허용 전류가 낮아지는 효과가 있다. 이 또한 열이 발생하고 화재의 원인이 된다. 필자는 아두이노의 USB 케이블 길이에 맞춰 1미터로 잘랐다.

전선 양쪽의 외피를 벗겨야 하는데, 컷터로 그냥 자르면 내피까지 자를 수 있다. U자로 구부려 컷터로 조심스럽게 자르면, 잘리는 부분이 외피인지 내피인지 쉽게 알 수 있다(그림 6).

다시 내피를 10 mm 정도 벗겨서 플러그의 접지와 전원에 연결한다. 전선 끝의 구리선을 꼬아주는 것이 좋은데, 다 벗긴 후 꼬아주는 것보다 살짝 당긴 이후에 외피를 잡고 꼬아주는 것이 더 좋다(그림 7). 굵은 전선일수록 뻣뻣해서 손을 다치기 쉽다.



이때 반드시 초록색선은 접지에 연결한다. 우리나라는 접지선을 녹색과 황색으로 규정하고 있다. 미국의 경우 규정은 없고 단자함에 레이블로 접지선을 어떤 것으로 했는지 표시하도록 하고 있다. 나라마다 다르나 녹색과 황색이 가장 많이 쓰인다.

전원이나 접지선의 구리선이 하나라도 밖으로 나와 있으면 다른 곳과 단락될 가능성이 높다. 전선 끝에 납을 코팅하는 것이 제일 좋고, 아니면 결속 이후에 확인해야 한다. 한 가닥 정도는 괜찮다고 생각하면 안 된다. 많은 단락이 발생하는 부분이, 전원선의 구리선 하나가 접지 단자 쪽에 나와서 접지 단자를 통해 단락되는 경우이다.

그림 8과 같이 전선 연결을 끝낸 후에는 전원과 접지 부분을 각각 테스터로 저항을 측정해본다. 갈색과 청색이 연결된 전원 코드 부분과 접지/전원 코드 양쪽 이렇게 3번을 테스트해야 한다. 단락이 됐다면 저항값이 나온다. 다음은 전선의 다른 끝을 박스에 통과시켜 콘센트에 연결할 차례이다.


그림 9에서, 콘센트를 보면 Push & Pull이라는 부분이 있다. 이곳을 일자 드라이버로 강하게 누른 후 전선을 삽입하여 고정한다. 한 번에 강하게 누르고 넣어야 한다. 앞쪽 전선이 밀리면 다음 시도에는 더 넣기가 힘들다. 원래 콘센트는 굵은 구리선 하나로 된 전선을 결속한다. 따라서 잔 구리선 여러 개가 모인 전선으로 결속이 힘들다.

인두기가 있다면 전선 끝을 납으로 코팅하여 밀어 넣으면 훨씬 편하다. 벗겨야 하는 길이는 콘센트 뒷면에 쓰여 있다. 전선의 구리선이 안 보이도록 외피까지 쑥 넣어야 한다. 넣은 후에는 롱노즈 같은 도구를 이용해 당겨서 강하게 연결됐는지 확인한다. 약하게 연결될 경우, 이 부분에서 열이 발생한다. 높은 전류를 얇은 전선으로 사용한 효과가 발생한다.

마지막으로 단락의 위험이 있으므로 전원 단자가 조금이라도 노출된 곳을 모두 글루로 코팅한다(그림 10). 이로써 먼지, 습기, 기타 이물질로부터 전원 단자가 안전하게 보호된다.

아두이노 회로 구성과 프로그래밍

회로 구성과 프로그래밍은 모두 이전 글 “라즈베리파이2로 만드는 작은 천사”(본지 2015년 6월호)와 같다. 시리얼 통신으로 전원제어 명령을 받고, 모듈의 온도가 높으면 전원 On 명령을 무시한다.

온도센서가 일종의 안전장치 역할을 한다. 퓨즈를 두는 방법도 있지만 퓨즈로는 이상 징후를 확인할 수 없기 때문에 온도센서를 사용했다. 우선 온도센서부터 테스트 한다. 센서 A를 사용할 때는 반드시 센서 A보다 높은 정밀도의 센서 B로 동일한 대상을 측정한 다음 센서 A가 오차범위에 있는지 확인하고 사용해야 한다. DHT11은 아두이노 라이브러리를 이용하여 쉽게 사용할 수 있다(그림 11).

신호선이 10M 이하일 경우 10K 저항을 써야 하나, 저항이 없어도 온도와 습도 출력은 나온다. 저항 없이 연결할 경우 오차가 10% 증가한다. 이를 정밀 온도센서인 SHT71과 비교해서 오차범위 안에 있는 지 확인한다(그림 12).



다음은 릴레이 테스트이다. 필자는 ArduinoJson 라이브러리를 통해 JSon 포맷으로 아두이노를 제어한다. 시리얼로 {"power":1} 명령을 보내면 전원이 연결되고, {"power":0} 명령을 보내면 전원 연결이 끊긴다. 시리얼로 {"power":1} 명령을 보내더라도 온도가 50도가 넘으면 릴레이 스위치를 끊는다.

아두이노 코드를 컴파일 하기 위해서는 ArduinoJson 라이브러리와 DHT 라이브러리가 필요하다. 500 ms 단위로 온도를 수집하고 시리얼로 들어온 명령을 확인한다. JSon 포맷을 사용한 이유는, 통신에는 통신의 끝을 알리는 약속된 기호가 필요하고 그런 것을 별도로 정의하는 것보다 JSon을 쓰는 것이 웹과 연결하기 쉽기 때문이다. 온도는 JSon 포맷으로 보낸다. {"power":1} 명령이 들어오면 전원 연결 명령으로 인식한다. 릴레이를 연결하기 전 내부 온도가 50도를 넘으면 연결 명령을 무시하거나 연결을 끊는다.

#include
#include
dht DHT;

#define DHT11_PIN 5
void setup()
{
  Serial.begin(9600);
  pinMode(3, OUTPUT);
}
int serialBufferRead = 0;
int power=0;
char serialBuffer[100];
void loop()
{
  int chk = DHT.read11(DHT11_PIN);
  switch (chk)
  {
  case DHTLIB_OK:
    // Serial.print("OK,\t");
    break;
  case DHTLIB_ERROR_CHECKSUM:
    Serial.print("Checksum error,\t");
    break;
  case DHTLIB_ERROR_TIMEOUT:
    Serial.print("Time out error,\t");
    break;
  case DHTLIB_ERROR_CONNECT:
    Serial.print("Connect error,\t");
    break;
  case DHTLIB_ERROR_ACK_L:
    Serial.print("Ack Low error,\t");
    break;
  case DHTLIB_ERROR_ACK_H:
    Serial.print("Ack High error,\t");
    break;
  default:
    Serial.print("Unknown error,\t");
    break;
  }
  StaticJsonBuffer<200> jsonBuffer;
  JsonObject& json = jsonBuffer.createObject();
  char humidityString[10];
  dtostrf(DHT.humidity, 2, 2, humidityString);
  sprintf(humidityString, "%s%%", humidityString);
  json["humidity"] = humidityString;
  char tempString[10];
  dtostrf(DHT.temperature, 2, 2, tempString);
  sprintf(tempString, "%sc", tempString);
  json["temperature"] = tempString;
  json["power"] = power;
  json.printTo(Serial);
  Serial.println();
  while (Serial.available() > 0) {
    char incomingByte = Serial.read();
    serialBuffer[serialBufferRead] = incomingByte;
    if (incomingByte == '}') {
      serialBuffer[serialBufferRead + 1] = 0;
      serialBufferRead = 0;
      StaticJsonBuffer<100> jsonBuffer;
      JsonObject& inputJson = jsonBuffer.parseObject(serialBuffer);
      power = inputJson["power"];
    }
    else {
      serialBufferRead++;
    }
  }
  // 50도가 넘으면 명령과 상관 없이 전원을 차단한다.
  if(DHT.temperature>50){
    power=0;
  }
  if (power == 1) {
    digitalWrite(3, HIGH);
  }
  else {
    digitalWrite(3, LOW);
  }
  delay(500);
}
//
// END OF FILE
//

테스트가 끝났으므로 브레드보드에 구성한 회로를 다른 아두이노에 납땜한다. 브레드보드에 구성한 아두이노는 마이크로고 실제 모듈에 쓸 아두이노는 나노이나, 핀과 전압만 맞으면 동일한 코드로 프로그램밍 가능하다.

납땜하기

지금까지의 모습을 그림 15에 제시한다.

그림 16과 같이 전선을 준비한다. 릴레이와 온도센서를 위해 검정색선 2개, 적색선 2개, 다른 색선 2개가 필요하다. 검정색과 적색은 아두이노의 그라운드와 5V에 연결한다. 온도센서의 핀을 감쌀 수 있는 1mm 열수축 튜브가 있으면 좋다. 없으면 절연 테이프도 된다.

전선 끝을 납으로 살짝 입히면 납땜이 더욱 쉽다(그림 17). 전선 끝에 솔더링 페이스트를 살짝 묻히고 납을 입히는 것이 쉽다. 또한 전선 굵기가 증가하는 효과가 있으므로 릴레이에 더욱 단단하게 연결할 수 있다. 구리선은 공기와 고온에 노출되면 바스러진다. 납으로 코팅하면 내구성을 더 증가시킬 수 있다. 릴레이 제어에 3번 핀, 온도 신호선에 5번 핀만 주의하면 된다.

납땜을 한 후에는 리드 끝을 바로 자르지 말고 테스트 후 깔끔하게 잘라낸다(그림 18). 회로 구성을 잘못 했을 경우 다시 연결하기가 쉽다.
센서의 열수축 튜브는 드라이기를 사용하면 쉽게 수축시킬 수 있다. 인두기나 라이터는 수축에 좋은 선택이 아니다. 직경이 더욱 얇은 수축 튜브를 사용하면 납땜 없이 전선과 센서 단자, 와이어 만으로 결합이 가능하다(그림 19).

최종적으로 릴레이에 있는 전원과 관련된 핀(납땜 후 솟아나온 부분)이나 단자를 모두 글루를 이용해서 코팅했다. 모든 코팅을 통해서 전원부에 접촉할 수 있는 방법은 전원 코드와 콘센트만 남게 된다.




콘센트 박스 완성하기

이제 콘센트 박스 안에 아두이노, 릴레이, 온도센서, 콘센트로 회로를 구성해서 넣고 케이스를 닫으면 끝난다. 아두이노와 USB로 시리얼 통신을 하여 전원을 제어할 것이다. 아두이노에 연결한 USB 케이블을 보면 케이블 양끝 쪽에 원통이 달려 있는데, 노이즈 필터 USB 케이블이다. 전력선이나 릴레이 쪽의 노이즈가 시리얼 통신에 영향을 주지 않도록 노이즈 필터 케이블을 사용했다. 부품의 자리를 잡고 가조립을 한번 해본다(그림 20). 전선의 탄성과 USB의 노이즈 필터가 좀 걸리지만 충분한 공간이 있다.


위치를 잡은 후에는 콘센트의 전원선을 단선하여 릴레이에 연결한다. 위치를 잡아본 후 릴레이를 연결한 이유는 전선이 굵기 때문에 릴레이까지의 선이 여유 있거나 너무 짧으면 위치 잡기가 힘들기 때문이다.

이제 노출박스에 콘센트를 나사못으로 고정한 후 콘센트 커버를 덮으면 깔끔하게 전원제어 모듈의 하우징이 끝난다(그림 22).



테스트

테스트는 반드시 하우징이 끝난 상태에서 진행해야 한다. 아두이노와 시리얼 통신을 할 수 있는 PC나 라즈베리파이 같은 마이크로프로세스와 콘센트에 연결할 전자제품이 필요하다. 전자제품은 정격 입력 전류가 낮은 제품부터 시작하여 온도를 체크하면서 마지막으로는 5A 제품을 연결해본다. 50도 이상으로 제어 모듈의 온도가 상승할 경우에는 자동으로 릴레이가 끊긴다. 보통 휴대전화 충전기는 0.3A를 사용하고 PC는 5A를 사용한다. 다음 순으로 테스트했다.

1. LG G3 어댑터, 정격 입력 0.3A
2. 노트북 어댑터, 정격 입력 1A
3. 리튬폴리머 배터리 충전기, 정격 입력 3A
4. 데스크톱 PC, 정격 입력 5A

테스트는 각각에 대해서 일정 온도에 수렴할 때까지 했다. 예를 들어, 노트북 어댑터를 연결했을 때 지속적으로 온도가 증가하거나 감소하는 등의 변화가 40분간 없을 때까지 테스트했다. 독자들도 이와 같은 테스트를 하여 안정화된 이하의 전류만 사용해야한다. 결과는 표 1과 같다.

[

장시간 운영해도 안정적으로 동작한다. 이 전원제어 모듈은 필자의 PC에 한 달 동안 사용하고 있다. 필자가 구축한 클라우드는 컴퓨팅 자원이 더 필요하고, PC를 쓰지 않을 경우 PC를 켜서 연산에 이용한 다음 끈다. 필자가 집에 도착하기 전에 PC를 켜두는 등의 전원제어에 이용하고 있다.
PC에 적용한 장면은 http://angeliot.blogspot.kr/2015/05/blog-post.html에서 직접 확인할 수 있다.

 

<저작권자(c)스마트앤컴퍼니. 무단전재-재배포금지>


#전력   #아두이노  

  • 100자평 쓰기
  • 로그인

세미나/교육/전시
TOP