본문 바로가기
카테고리 없음

4. 아두이노 릴레이 컨트롤 (스마트 플러그?) / 조립 및 문제해결

by ㅋㅋ잠자 2015. 11. 7.
반응형

안녕하세요. 도정진입니다.

   

아두이노와 시리얼로 연결하여 릴레이를 껏다 켰다하는 코드를 작성해 보았습니다. 오늘은 추가적으로 발견된 문제를 해결하고 케이스 조립을 해 보겠습니다.

   

   

제 목적은 컴퓨터를 원격으로 켜고 끄는것이 목적이기 때문에 아두이노의 D3 포트를 이용하여 PC 자체의 전원 LED 와 연결해 값을 읽어 현재 컴퓨터가 켜저 있는지 확인하는 용도의 코드를 추가했습니다.

   

갑자기 전원을 내리면 컴퓨터에 손상이 가기 때문에 모니터링차 코드를 약간 추가했습니다.

   

수정된 코드는 저장을 따로 해 놓지 않아 따로 올리진 않습니다.

   

그리고 큰 문제가 확인 되었는데 , 우분투에서 minicom 으로 연결을 시도하면 자꾸 아두이노가 초기화 된다는 문제가 있었습니다.

   

   

   

0 . 시리얼 연결을 시도하면 아두이노가 재부팅되는 문제 해결하기

   

아두이노가 부팅이 끝났는지 확인을 해보기 위해서 저는 arduino ready 라는 메시지를 터미널로 출력하게 해 두었습니다. 코드상으로는 void setup() 함수입니다.

   

   

   

그런데 시리얼로 연결을 시도하려고 하면 계속 이 메시지가 뜨고 실제로 조립을 하여 PC 를 켜고 끄고 해 보는데

   

PC가 켜진 상태에서 끄려고 시리얼로 연결을 시도하면 PC가 갑자기 꺼지는 문제가 발생했습니다.

   

즉, 아두이노는 시리얼 연결을 시도하면 재부팅이 된다는 것을 알았습니다. relaypin 으로 HIGH 가 나가고 있었는데 이제 끄려고 다시 시리얼 연결을 시도하면 void setup() 함수가 실행되어 relaypin 이 전 state 와 관계없이 LOW 로 바뀐다는 것입니다.

   

이 문제를 해결하기 위해 코드를 몇번이나 수정해 보고 연구를 많이 해 보았지만 뾰족한 수는 없었고

   

아래의 글을 찾을 수 있었습니다.

   

http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection

   

보시면 GND 핀과 RST 핀에 저항 120옴을 달아주라는 말도 있고 그게 안되면 10uF 정도의 콘덴서를 달아보라는 말이 있습니다.

   

어차피 못져도 본전이니 저는 직접 해 보기로 결심했습니다.

   

   

바로 RST 단자와 GND 자리에 콘덴서 220uF 를 달았습니다. (조금 크면 어때 ㅎㅎ) 그러니 정말 리부팅이 일어나지 않았습니다.

   

문제는 이 콘덴서가 연결되어 있으면 프로그래밍을 못한다는 점이 있음으로 완벽히 프로그래밍 한 후 부착해 주시면 될것 같습니다.

   

추가적으로 저항의 경우 0과 1의 경계를 정확하게 놓기 위해서 단 것으로 만약에 저 저항이 없다면 D3 의 디지털 핀이 High Z (0인지 1인지 모르는 상태) 에 놓임으로 꼭 저항을 통해 GND 와 연결해 주셔야합니다.

   

   

PC LED 부분에는 많게는 3.3V 가 나옵니다. 전원이 나올때는 D3 핀으로 전압이 흘러 분명히 HIGH 상태임을 판단할 수 있으나

   

꺼지면 위 사진의 오른쪽 처럼 저항을 놔주지 않으면 High Z 상태에 놓이게 되어 0인지 1인지 모르는 상태가 되어 작동상으로 매우 랜덤적인 상태로 됩니다.

   

저항으로 해결하시면 됩니다.

   

   

   

   

   

   

1 . 본격 케이스 조립

   

케이스를 마땅한 것을 선정해야 되는데 부품 크기도 크지 않고 해서 브레드 보드 부품 케이스를 활용하기로 하였습니다.

   

   

다들 잘 아실 것이라 생각됩니다.

구도상으로 처음칸에 아두이노 , 셋째칸에 릴레이를 둘 생각입니다.

나머지 그 PC 전원이 켜졌는지 꺼졌는지 감지용 컨넥터는 아두이노 뒤쪽으로 뺄 생각입니다.

   

   

실제로 콘센트와 연동하여 사용하려고 했지만 위 사용한 SSR 릴레이가 용량이 2A 정도로 콘센트 용으로는 부적합 하여, 처음부터 PC 만 켜고 끌 생각이였기 때문에

   

PC 전원 케이블을 짤라서 연결하였습니다. 보통 녹색이 접지이고 전원은 노란색 갈색으로 흐릅니다.

   

   

   

이렇게 상판을 덮어 주고 컴퓨터 뒤에 쳐박아 두었습니다.

   

   

   

   

   

   

   

2 . 커맨드라인에서 바로 켜고 끌 수 있도록 스크립트 제작

   

제가 아직 bash 스크립트 제작 문법을 제대로 몰라 아래처럼 못해도 작동은 하는 코드를 작성했습니다.

   

일단 minicom 은 minicom -S 를 통한 스크립트 실행이 가능합니다.

   

   

   

아주 간단한 코드인데 minicom 으로 연결하고 3초 기다린 다음 1 이라는 값을 보내는 것입니다.

   

제가 만든 코드에서는 1 을 보내면 릴레이가 작동하여 PC가 켜집니다.

   

반대로는 0 을 보내도록 하였습니다.

   

   

minicom 실행 명령은 아래와 같습니다.

   

minicom -S /etc/minicom/poweron

이런식으로 하면 자동으로 스크립트 내용이 실행됩니다.

   

이것을 조금 더 간단하게 하기 위해서 아래처럼 스크립트를 짜고 스크립트 파일을 /usr/local/bin 에 넣어 두었습니다.

   

   

이렇게 하면 바로 리눅스 터미널에서 poweron 이라고 치면 컴퓨터가 켜집니다.

   

스크립트는 아래와 같습니다.

   

   

저는 스크립트에 관해 정확한 지식이 없어서 위와 같이 만들었습니다. 일단 작동은 됩니다.

   

혹시 제대로 알려주실 분 있으시면 덧글 남겨주세요!

   

웹으로 구현할까 해서 구현 해 보았는데 아직 CGI 에 대한 이해가 부족하다 보니 실패하였습니다.

   

   

이 부분은 다음 기회에...

   

   

   

   

3 . 작동영상

   

아래 영상은 guacamole 에서 터미널 연결을 하고 컴퓨터를 킨 다음 원격으로 접속하는 영상입니다.

   

정확히 컴퓨터가 꺼진지 확인하고 릴레이를 끄는 부분도 영상에 포함되어 있습니다.








   

   

   

감사합니다.

반응형

댓글