아두이노:릴레이: 두 판 사이의 차이
둘러보기로 이동
검색으로 이동
(새 문서: {{아두이노}} == 개요 == 아두이노는 기본적으로 5V밖에 공급을 못한다. 그런데 때에 따라서 24V, 220V를 제공해야 할 때가 있는데, 이럴 땐 외...) |
(→코드) |
||
1번째 줄: | 1번째 줄: | ||
{{아두이노}} | {{아두이노}} | ||
== 개요 == | ==개요== | ||
아두이노는 기본적으로 5V밖에 공급을 못한다. | 아두이노는 기본적으로 5V밖에 공급을 못한다. | ||
그런데 때에 따라서 24V, 220V를 제공해야 할 때가 있는데, 이럴 땐 외부의 전원을 가져다 써야 해. 그걸 위한 장치. | 그런데 때에 따라서 24V, 220V를 제공해야 할 때가 있는데, 이럴 땐 외부의 전원을 가져다 써야 해. 그걸 위한 장치. | ||
=== 회로 === | ===회로=== | ||
{| class="wikitable" | {| class="wikitable" | ||
!과정 | !과정 | ||
26번째 줄: | 26번째 줄: | ||
|}<br /> | |}<br /> | ||
=== 코드 === | ===코드=== | ||
{| class="wikitable" | {| class="wikitable" | ||
!과정 | !과정 | ||
46번째 줄: | 46번째 줄: | ||
delay(1000); | delay(1000); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|}< | |} | ||
= 예시 코드 = | |||
{| class="wikitable" | |||
!의도 | |||
!코드 | |||
|- | |||
|1번 릴레이 12시간 켜고 끄기. | |||
2번 릴레이 15분 켜고 끄기. | |||
|<syntaxhighlight lang="c"> | |||
// 릴레이 핀번호 정의 | |||
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); | |||
} | |||
} | |||
</syntaxhighlight> | |||
|} |
2024년 1월 18일 (목) 11:21 기준 최신판
아두이노 관련 정보를 모으기 위한 틀. 틀:아두이노
- 아두이노:개요
- 아두이노:하드웨어
- 아두이노:코드
- 아두이노:핀 사용
- 아두이노:시리얼 통신
- 아두이노:편의함수
- 센서 사용
- 아두이노: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);
}
}
|