들어가면서
며칠 전 주문한 AC 릴레이가 도착하여 코딩을 시작 후 목업제품을 만들어 보았다.
처음엔 단순하게 타이머기능만 있었는데 결과물이 실사용에 무리가 없어 소스를 다듬어 누구나 쉽게 따라 만들 수 있도록 소스를 공개한다.
아두이노 공부 혹은 조금 수정하여 자기만의 타이머를 만들 경우가 아니면 기성품을 사용하는 것을 추천한다.
1차 공개된 작업로그에는 없던 인터벌 기능이 추가되었다.
인터벌 기능은 ON/OFF를 설정한 카운트만큼 반복하는 기능으로,,
ON/OFF 시간, 카운트 값을 모두 설정가능하다.
또한, 인터벌 기능이 추가되면서 추가 액션이 필요해 엔코더 회전에 기능을 심어 처리했다.
자세한 사항은 아래 조작방법을 참고
준비물
아두이노 프로미니(Arduino Pro mini)
LCD Display(16x2, I2C 버전)
로터리 엔코더(컨트롤용)
부저(Passive Buzzer)
만능 기판
5V 아답터 (2A 추천)
220V 아두이노용 릴레이
메인 전원 컨트롤용 스위치 (250V/10A)
유리관 퓨즈(250V/10A)
220V 입출력을 위한 소켓(적출품)
아두이노는 프로미니만 사용해봐서 다른 버전에 대한 지원여부는 잘 알지 못한다.
다만 아두이노는 프로미니 이상을 사용하면 될 듯 싶다.
Display는 16x2로 고정되어 있어,
그 이상의 LCD는 코딩수정이 많아 추천하지 않는다.
+
타이머는 정확도에서 일반 시계와 달리 비교적 유연한 편이다.
따라서 추가 RTC 추가없이 비교적 간단하게 만들 수 있도록 아두이노 내부 시스템 클락을 사용했다.
1초틱은 MSTimer2 라이브러리를 사용함
좀 더 정밀한 작업이 필요한 경우는 RTC 모듈을 사용해야한다.
(컴퓨터 메인보드에 RTC용 동전 건전지를 생각하면 될 듯 싶다.)
배선도
핀번호를 주의하자.
220V를 다루는 바 전원인가 전에 꼼꼼하게 체크하기를 권장한다.
릴레이 동작방식
#define RELAY_ON LOW /* RELAY, LOW Level Trigger */
#define RELAY_OFF HIGH /* RELAY, LOW Level Trigger */
릴레이는 시그널핀의 상태에 따라 ON/OFF가 다를 수 있다.
필자가 선택한 릴레이는 시그널이 없을 경우(LOW)에 동작하는 Low Level Trigger였다.
반대의 경우 LOW/HIGH를 바꿔주면 된다.
PIN MAP
/* PIN MAP */
#define PIN_ROTARY_RT 2 /* do not change, fixed by INTR_NO_0 */
#define PIN_ROTARY_LT 3 /* do not change, fixed by INTR_NO_1 */
#define PIN_ENCODER_SWITCH 4
#define PIN_BUZZER 5
#define PIN_AC_RELAY 10
배선상의 이유로 변경시 위 코드의 값을 변경해주면 된다.
주의할 것은, PIN_ROTARY_RT, PIN_ROTARY_RT는 변경하면 안된다.
LCD I2C Address
LiquidCrystal_I2C lcd(0x27, 16, 2);
LCD가 제대로 표시되지 않을 경우 구입시 제공하는 주소로 변경해주어야 한다.
주소를 모른다면, LCD I2C를 연결을 하고 아래 l2c Scanner를 아두이노 보드에 올려 디버깅 메시지로 확인할 수 있다.
기능설명
타이머 ON/OFF
엔코더를 5초이상 누르면 ON/OFF가 토글된다.
타이머 OFF시 상시 전원
모드(MODE)
TMR(타이머 모드), ITV(인터벌 모드)가 있고 각각 다음과 같다.타이머(TMR) 모드 : 설정한 시간이 지나면 자동으로 꺼짐
인터벌(ITV) 모드 : 주기적으로 ON/OFF를 반복한다.
> ON/OFF/COUNT값을 각각 설정할 수 있고 설정값은 EEPROM에 저장
설정 시간
타이머 모드 : 최대 24시간 지원
인터벌 모드 : ON/OFF 타임 최대 24시간까지 지원, 카운트는 1~255회 반복, 0은 무한반복
% 동작이 20초 동안 없을 경우 자동으로 꺼지며 다이얼 조정시 백라이트가 켜집니다.
% 모드와 설정 값이 EEPROM에 저장됩니다.
조작방법
5핀 엔코더는 크게 클릭과 좌우회전을 지원한다.
크게 짧게 클릭, 3초 클릭, 5초 이상 클릭과 좌우턴, 좌우 회전에 동작한다.시계방향(CW)으로 2바퀴
> TMR(타이머) 모드와 ITV(인터벌) 모드의 전환
> 엄지와 검지로 회전을 할 경우 5~6번 돌려주면 된다.
반시계방향(CCW)으로 1바퀴
> 현재 모드를 리셋 (설정값으로 초기화) 후 자동 시작
> 엄지와 검지로 회전을 할 경우 3~4번 돌려주면 된다.
짧게 누름
동작시 : 멈춤(HLD)과 동작(RUN)을 전환
설정시
TMR 모드 : 초(Sec) --> 분(Min) --> 시(Hour) 설정항목을 순환
ITV 모드 : ON TIme 초(Sec) --> ON Time 분(Min) --> ON Time 시(Hour) --> OFF TIme 초(Sec) --> OFF Time 분(Min) --> OFF Time 시(Hour) --> ITV Count(반복 회수) 설정항목을 순환환결설정시 각 필드에서 엔코더를 좌우로 회전하면 값이 증감한다.
3초 누름
> 설정모드와 동작모드가 전환
> 정확히는 2~3초이다.
> TIMER OFF 시에는 3초 누름에서 일반 모드로 변환됨
5초 누름
> TIMER ON/OFF
> OFF(상시전원)시에 ON으로 진입시 3초 누름에도 반응함
타이머 모드
인터벌 모드
타이머 OFF
작동영상
Arduino Sketch File
모든 프로젝트의 소스 공유를 중단 합니다.!!
1st Release
Date : 2020-03-25
---------------------------------
Version 1.1
1. 1.0 배포 후 인터벌 모드 ON/OFF 타임 전환시 실제 값 표시 오류 정정
2. 인터벌 모드 환경설정 후 타이머모드로 변경 후 환경설정 진입시 최초 설정항목 Na 표시 오류 정정
Version 1.2 (2020-03-28)
1. 타이머 조정시 0초까지 설정 가능하도록 수정
2. 인터벌 회수 수정시 0에서 255로 255에서 증가시 0으로 순환되도록 수정
3. 타임 값을 0으로 설정후 동작시 ERROR 메시지 표시하고 부저를 울림
- 삭제 -
Version 1.2 UV-C 살균기 전용 타이머 (2020-03-29)
1. 동작 이외의 모드에서는 릴레이 전원을 OFF한다.
> 실제 Run 상태에서만 전원인가
2. 백라이트 유시 시간을 20초에서 3분으로 늘림
3. 초기 릴레이 ON->OFF 되는 증상 수정
--- 삭제 --
버그나 수정사항이 있다면 이 페이지에서 업데이트 합니다.
혹여 따라 만드신다면 작업 후 피드백 주시길 부탁드립니다.
가급적 본 소스는 이 페이지를 통해서 다운로드 받으시고 수정 후 재배포는 자유지만,
출처와 이 글의 링크는 첨부해주시면,,, 개발과 공유에 큰 힘이 됩니다.
아두이노를 처음 접하는 사람들을 위한 글
제작 샘플