아두이노:릴레이
둘러보기로 이동
검색으로 이동
아두이노 관련 정보를 모으기 위한 틀. 틀:아두이노
- 아두이노:개요
- 아두이노:하드웨어
- 아두이노:코드
- 아두이노:핀 사용
- 아두이노:시리얼 통신
- 아두이노:편의함수
- 센서 사용
- 아두이노:LCD 사용
- 아두이노:스위치 사용
- 아두이노:릴레이
- 아두이노:WIFI
- 아두이노:해결되지 않은 다양한 의문들
- 수업용 간단 실습
- 분류:아두이노 프로젝트
개요[편집 | 원본 편집]
아두이노는 기본적으로 5V밖에 공급을 못한다.
그런데 때에 따라서 24V, 220V를 제공해야 할 때가 있는데, 이럴 땐 외부의 전원을 가져다 써야 해. 그걸 위한 장치.
회로[편집 | 원본 편집]
과정 | 설명 | 비고 |
---|---|---|
외부전원의 연결 | 회로의 한 쪽을 COM에 넣는다.
릴레이에 전원이 들어올 때 연결할 선을 NO(기본적으로 오픈)에 연결. 릴레이에 전원이 들어오지 않을 때 연결할 선을 NC(기본적으로 클로즈)에 연결. |
|
아두이노와 연결 | +, -, 제어선. 3개로 이루어져 있다.
각각 5V, GND, 제어핀에 연결한다. |
코드[편집 | 원본 편집]
과정 | 설명 | 코드 |
---|---|---|
setup | 셋업에 넣을 코드. | pinMode(13, OUTPUT); // 제어핀으로 사용할 핀번호 설정.
|
loop | 루프에 넣을 코드. | digitalWrite(13, HIGH); // 릴레이 NO 작동.
delay(1000);
digitalWrite(13, LOW); // 릴레이 NC 작동.
delay(1000);
|
예시 코드[편집 | 원본 편집]
의도 | 코드 |
---|---|
1번 릴레이 12시간 켜고 끄기.
2번 릴레이 15분 켜고 끄기. |
// 릴레이 핀번호 정의
const int relayPin1 = 12;
const int relayPin2 = 11;
// 각 릴레이의 상태를 저장할 변수
bool relayState1 = HIGH;
bool relayState2 = HIGH;
// 각 릴레이의 이전 상태 변경 시간
unsigned long previousMillis1 = 0;
unsigned long previousMillis2 = 0;
// 각 릴레이 상태 변경 간격 (밀리초)
unsigned long interval1 = 12UL * 60 * 60 * 1000; // 12시간. UL은 데이터타입을 지정하기 위해서.
unsigned long interval2 = 15UL * 60 * 1000; // 15분
unsigned long currentMillis = millis();
void setup() {
// 릴레이 핀들을 출력으로 설정
pinMode(relayPin1, OUTPUT);
pinMode(relayPin2, OUTPUT);
// 릴레이 핀들을 초기 상태로 설정
digitalWrite(relayPin1, relayState1);
digitalWrite(relayPin2, relayState2);
// 시리얼 통신 시작
Serial.begin(9600);
}
void loop() {
currentMillis = millis(); // 현 시간 반영.
Serial.print("currentMillis: ");
Serial.println(currentMillis);
Serial.print("intervalMillis: ");
Serial.println(previousMillis1);
Serial.println(previousMillis2);
// 릴레이1 상태 변경 검사
if (currentMillis - previousMillis1 >= interval1) {
// 이전 상태 변경 시간 업데이트
previousMillis1 = currentMillis;
// 릴레이 상태 반전
relayState1 = !relayState1;
// 릴레이 상태 적용
digitalWrite(relayPin1, relayState1);
// 디버깅 출력 추가
Serial.print("Relay 1 State: ");
Serial.println(relayState1);
}
// 릴레이2 상태 변경 검사
if (currentMillis - previousMillis2 >= interval2) {
// 이전 상태 변경 시간 업데이트
previousMillis2 = currentMillis;
// 릴레이 상태 반전
relayState2 = !relayState2;
// 릴레이 상태 적용
digitalWrite(relayPin2, relayState2);
}
}
|