아두이노:릴레이

학교의 모든 지식. SMwiki
Sam (토론 | 기여)님의 2024년 1월 18일 (목) 11:21 판 (→‎코드)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
둘러보기로 이동 검색으로 이동

아두이노 관련 정보를 모으기 위한 틀. 틀:아두이노

  1. 아두이노:개요
  2. 아두이노:하드웨어
    1. 아두이노:우노보드
  3. 아두이노:코드
    1. 아두이노:기초 문법
    2. 아두이노:라이브러리
    3. 아두이노:컴퓨터에서 보드로
    4. 아두이노:안드로이드에서 보드로
  4. 아두이노:핀 사용
    1. 아두이노:전원공급
  5. 아두이노:시리얼 통신
    1. 아두이노:엑셀기록
    2. 아두이노:파이썬과 통신
  6. 아두이노:편의함수
  7. 센서 사용
    1. 아두이노:모션센서
    2. 아두이노:온습도센서
    3. 아두이노:조도센서
    4. 아두이노:pH미터 만들기(Gravity 아날로그 pH센서)
  8. 아두이노:LCD 사용
  9. 아두이노:스위치 사용
  10. 아두이노:릴레이
  11. 아두이노:WIFI
  12. 아두이노:해결되지 않은 다양한 의문들
  13. 수업용 간단 실습
    1. 아두이노:LED
    2. 아두이노:초음파센서
  14. 분류:아두이노 프로젝트

개요[편집 | 원본 편집]

아두이노는 기본적으로 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);
  }
}