IOT 조명 제어

작성자
박창민
작성일
2021-04-23 23:22
조회
694

 

1. IOT 조명 제어 소개

조명제어는 IOT 중에 비교적 다루기 쉬운 기본적인 주제입니다.

직접 전기설비를 고치거나 변형하는 방법도 있지만 위험하기도 하고 원상복구나 변경이 까다롭다는 단점이 있습니다.

때문에 스위치 위에 원격 클리커를 설치하여 스마트폰으로 조명을 끄는 IOT 조명제어를 이번 실습세미나에서 다루어보고자 합니다.

이번 실습에서는 이 원격 클리커의 프로토타입을 만드는 것을 목표로 합니다.

실제로 목표에 달성하지 못했더라도 이 구조를 익히시고 이후 실생활에 적용해 보시길 바랍니다.
 
예상 제작 시간 : 1~3시간

 

2. 재료

재료는 아래와 같습니다.
  1. 아두이노  :   구매링크(UNO) or 구매링크(NANO)
  2. 블루투스 모듈  :  구매링크(HC-06) or 구매링크(HM-10)
  3. 서보모터 모듈  :  구매링크(SG-90) or 구매링크(MG90S) or 구매링크(MG996R)
  4. 브레드보드  :  구매링크
  5. 전원장비  :  구매링크
구매부품의 가격은 유통사와 시기에 따라 가격이 다를 수 있으니 구매할 때, 여러 가격을 조사해보고 저렴하게 구매하기를 권장합니다.

 

2-1. 아두이노 우노 / 나노

프로토타입 제작은 아두이노 UNO를 통해 진행하겠습니다.

이후 실생활에서 적용하고 싶을 경우에는 보다 크기가 작은 나노를 사용해 제작하면 더욱 작은 원격 클리커를 만들 수 있습니다.

 

1) 아두이노 시작하기

아두이노에 코드 이식 방법부터 알려드리겠습니다.

아두이노에 프로그램을 이식(=컴파일)하기 위해서는 명령 코드를 작성할 IDE가 있어야 합니다.

아두이노 제작사에서 지원하는 공식IDE가 있으니 이를 이용해 줍시다.

 

1-1) IDE 설치

아두이노 홈페이지 에 들어가 "SOFTWARE"를 클릭한 뒤

바로 아래에 있는 "Downlaods" 섹션의 "DOWNLOAD OPTIONS"에서 사용하는 운영체제에 맞게 클릭해 줍니다. (저는 Windows에서 진행하였습니다.)

이후 후원페이지가 뜰 텐데 후원을 원할 경우 금액을 결정 후 "CONTRUBUTE & DOWNLOAD"를 클릭해주시고,

그렇지 않을 경우 옆에 있는 "JUST DOWNLOAD"를 클릭해 줍니다.

다운로드후, 설치나 압축 해제를 진행한 뒤 실행시켜서 아래와 같은 창을 띄우는데 성공하면 아두이노에 코드를 이식할 모든 준비가 되었습니다.


 

1-2) 코드 이식

가운데 글을 적을 수 있는 공간이 실제 이식할 코드를 적는 공간입니다.

간단한 테스트를 위해 이전에 배웠던 Blink 소스코드를 가져와 적어줍니다.
void setup() {
  // put your setup code here, to run once:
  pinMode(13, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000);
}
테스트 해볼 수 있는 소스코드는 IDE 내에 내장되어 있기도 합니다.

맨 상단의 탭에서 "파일"을 클릭한 뒤 > "예제"를 클릭 > "01.Basics"를 클릭 > "Blink"를 클릭하면 같은 내용의 코드가 있습니다.

이제 코드가 이상이 없는지 디버깅해 보겠습니다.

위의 메뉴 버튼들 중에 맨 왼쪽에 있는 체크표시("확인"/"컴파일")를 클릭합니다.

아래 메세지 영역에 에러가 없이 "컴파일 완료"가 뜨면 코드에 문제가 없다는 뜻입니다.

이제 코드를 아두이노에 이식해 보겠습니다.

우선 아두이노를 해당 타입의 케이블을 통해 컴퓨터와 연결합니다.



이후 맨 상단의 탭에서 "툴"(또는 "도구")를 클릭한 뒤 > "포트"라고 적어진 칸을 클릭 > 연결된 아두이노에 해당하는 포트를 선택(위 이미지의 경우에는 COM06 포트가 아두이노에 해당합니다)합니다.

이후 위의 메뉴 버튼들 중에 화살표표시("업로드")를 클릭합니다.

아래 메세지 영역에 업로드 완료가 뜨고, 아두이노의 LED가 1초간격으로 점멸을 할 경우 아두이노에 이식이 성공적으로 이루어진 것입니다.

 

2-2. 블루투스 모듈

블루투스는 디지털 기기의 근거리 무선 통신 표준 기술을 말합니다. 블루투스 모듈은 수 미터에서 수 십미터의 거리의 무선 통신을 저전력으로 수행한다는 장점이 있어 여러 디지털 기기에서 많이 활용되고 있습니다.

현재 동방에는 블루투스 모듈의 종류가 HC-06(기판 뒷면이 파란색)과 HM-10(기판 뒷면이 검정색)으로 2가지가 존재합니다.

사용하시는 스마트폰이 안드로이드이실 경우 어떤 모듈을 사용하셔도 상관없지만, 아이폰이실 경우 HM-10을 사용하실 것을 권장합니다. (호환상의 문제로 아이폰이 HC-06를 검색하지 않는 문제가 있습니다.)

블루투스 모듈은 크게 4가지의 핀을 통해 활용할 수 있습니다.

전원에 해당하는 VCC와 GND가 있고, 송신 핀을 나타내는 TXD와 수신 핀을 나타내는 RXD가 있습니다.

즉, 아두이노와 블루투스 사이의 통신에서 아두이노에서 오는 정보를 받으려면 블루투스의 RXD와 아두이노의 송신핀을 연결하여야 되고, 아두이노로 정보를 보내려면 블루투스의 TXD와 아두이노의 수신핀을 연결하면 됩니다.

 

1) 블루투스 시작하기

블루투스를 다루기 위해 간단한 테스트를 진행해봅시다. 아래의 표에서 같은 행에 해당하는 핀끼리 연결해줍니다.
아두이노 블루투스
5V VCC
GND GND
D8 TXD
D7 RXD
아래는 블루투스를 테스트하는 코드입니다. 참고로 아두이노의 시리얼 모니터는 IDE의 메뉴 버튼들 중에 가장 오른쪽에 있는 돋보기표시를 클릭하시면 띄울 수 있습니다.
#include <SoftwareSerial.h>

// 블루투스 모듈을 선언합니다
// 첫번째 인자는 아두이노의 RX에 해당하므로 블루투스의 TXD와 연결된 핀번호를 입력
// 두번째 인자는 아두이노의 TX에 해당하므로 블루투스의 RXD와 연결된 핀번호를 입력
SoftwareSerial bluetooth(8, 7);

void setup(){
  Serial.begin(9600); // 아두이노 비트레이드 설정
  bluetooth.begin(9600); // 블루투스 비트레이드 설정
}

void loop(){
  // 블루투스에서 수신한 내용이 있을 경우
  if (bluetooth.available()) {
    // 아두이노 시리얼 모니터에 수신받은 내용 출력
    Serial.write(bluetooth.read());
  }
  // 아두이노 시리얼 모니터에서 송신할 내용이 있을 경우
  if (Serial.available()) {
    // 블루투스에 해당 내용을 송신
    bluetooth.write(Serial.read());
  }
}
시리얼 모니터에 "AT"를 입력한 뒤, "OK"가 출력된다면 블루투스가 정상적으로 작동되고 있다는 뜻입니다.

그러나 "OK"가 뜨지 않았을 경우 블루투스의 펌웨어 버전이 달라 출력 호환이 제대로 이루어지지 않은 것일 수 있습니다.

시리얼 모니터의 하단에 옵션을 바꾸어 보기를 권장합니다. 일반적으로 "line ending 없음"으로 설정되어 있지만 그래도 나타나지 않을 경우 "Both NL & CR"을 선택하여 테스트 해보기 바랍니다.

 

2) 스마트폰과 연동

이제 블루투스를 스마트폰과도 연결해 봅시다.

안드로이드 일 경우 Arduino bluetooth controller 앱을 이용하면 편합니다.

아이폰일 경우 BitBlue앱을 이용하면 편합니다.

해당 앱에 접속해 블루투스와 페어링을 한 후, "Terminal mode"로 열어주시고 아무 문자를 입력하고, IDE의 시리얼 모니터에 출력되는 내용을 확인하며 무선 통신을 테스트 해보기 바랍니다.

 

2-3. 서보모터 모듈

프로토타입 제작은 SG-90으로 진행하겠습니다.

이후 실제 작동을 확인해보시고 힘이 약하다고 판단될 경우 더욱 큰 힘(토크)를 가지는 MG90S이나 MG996R과 같은 모터로 바꾸어 보면 됩니다.

전반적인 서보모터를 다루는 방법은 이전의 기초세미나 2주차를 참고해주세요.

 

3. 회로 설계

본격적인 회로를 짜기 전에 만들고자 하는 기능을 디자인하면 아래와 같이 나타내 줄 수 있습니다.



그림을 보면 알 수 있듯이 간략한 구조를 가지는 것을 알 수 있습니다.

단방향으로만 내용이 전달되고, 그 과정이 일직선으로 연결되어 있으므로 아두이노에 블루투스와 서보모터를 독립적으로 회로를 구성할 수 있습니다.

아래는 연결관계를 나타낸 표(같은 행끼리 연결해줍니다)와 해당 스케치입니다.
아두이노 블루투스 서보모터
5V VCC VCC
GND GND GND
D3 PWM
D4 TXD
D5 RXD


아래는 위의 내용을 바탕으로 구성한 실제 회로 사진입니다.


 

4. 소프트웨어 설계

아래는 위의 구조를 수행하기 위한 코드의 예시입니다.
#include <Servo.h>
#include <SoftwareSerial.h>

// 각 핀번호에 이름 붙이기
#define PWM     3
#define blueTXD 4
#define blueRXD 5

char com; // 블루투스를 통해 입력받은 문자 변수
Servo myServo; // 서보모터 모듈
SoftwareSerial myBluetooth(blueTXD, blueRXD); // 블루투스 모듈

void setup(){
  myServo.attach(PWM); // 서보모터 PWM 핀 입력
  myServo.write(90); // 90도로 초기 설정
  Serial.begin(9600); // 아두이노 비트레이드 설정
  myBluetooth.begin(9600); // 블루투스 비트레이드 설정
  // Serial.println("READY!"); // 준비완료 출력
}

void loop(){
  // 블루투스에서 수신한 내용이 있을 경우
  if (myBluetooth.available()) {
    // 문자형으로 변환해 저장
    com = (char)myBluetooth.read();
    // Serial.write(com); // 해당 문자 출력
  }
  // 해당 문자가 0일 경우 75도로 각도 변경
  if ('0' == com) myServo.write(75);
  // 해당 문자가 1일 경우 105도로 각도 변경
  else if ('1' == com) myServo.write(105);
}

 

5. 마무리

전반적으로 IOT 조명제어를 위한 프로토타입을 직접 만들어 보았습니다.

블루투스의 명령에 따라 서보모터가 돌아간다면 이번 실습세미나의 목표를 이룬 것입니다.

그러나 여기에 멈추지 마시고 직접 실생활에도 적용해보고

브레드보드가 아닌 만능기판에 직접 남땜도 해보며 원격 클리커를 만들어 보시길 바랍니다.
전체 0

  • 🚨현재 코로나19 방역지침 준수를 위해 집합금지와 관련하여🚨
    기존 부원들께서는 구글 폼으로 예약 후 사용 부탁드리겠습니다.
  • 동아리방 사용시 항상 마스크 착용, 취식 절대 금지, 자주 환기 부탁드립니다!
  • 동아리방 방문 예약은 전날 24시전까지 부탁드립니다.
시간
12:00     
13:00     
14:00     
15:00상주상주상주 상주
16:00 
17:00 
18:00저녁시간~
19:00상주상주상주 상주
20:00 
21:00 
22:00