이 프로젝트는 내가 이전에 진행했었던 프로젝트와 아주 유사한 프로젝트이다.
2016/08/04 - [IT / Development/Arduino] - Arduino를 이용해서 에어컨을 제어해보자.(with Thing+)
비슷한 프로젝트이지만, 내가 작성했던 글보다 좀더 자세하고 친절하게 설명한 자료이기 때문에 공유합니다. 아마도 내가했던 프로젝트를 참고해서 한것으로 예상이된다.
해당 포스팅은 아래 두 포스팅이 선행되었다는 전제로 진행합니다.
2019/04/09 - [IT / Development/Arduino] - 아두이노로 리모컨 IR신호 확인하기 - IRremote Library를 활용한
2019/04/09 - [IT / Development/Arduino] - 아두이노로 나만의 IR 리모컨 만들기 - IRremote Library를 활용한
클라우드 서비스 (Cloud Service)
[클라우드 서비스] 라는 단어를 들으면, 보통은 N드라이브, 구글 드라이브와 같은 '저장소'의 개념을 많이 떠올리시는 것 같습니다.
하지만 단순히 '저장소'의 개념만 가지고 접근한다면, 클라우드를 제대로 활용할 수 없습니다.
클라우드라 명명된 인터넷 기반의 저장소에 다양한 데이터를 저장하고, 그 클라우드에서 그 데이터를 분석/활용하여 다양한 것들을 할 수 있죠. 단순히 데이터만 넣었다가 빼는 것이 아니라, 인터넷 기반의 컴퓨팅 자원을 활용할 수 있다는 것입니다.
대표적으로는 아마존의 AWS, 구글의 Google Cloud 등이 있습니다.
자세한 내용이 궁금하시다면, 아래 링크의 내용을 천천히 읽어보시면 도움이 되시리라 생각합니다.
http://terms.naver.com/entry.nhn?docId=3386842&cid=58369&categoryId=58369
국내 IoT Thing+ Cloud Service
뭐 유명한 AWS나 Google Cloud 등등 외국산 클라우드 서비스를 써도 되겠지만, 아무래도 국내에서 나온 것을 사용하는게 다양한 사람들의 접근성을 더 높일 수 있겠죠? 국내 Cloud Service가 무엇이 있는지는 자세히 모르겠지만, 일단 Thing+가 있는 것으로 알고 있습니다. SK의 ThingPlug 경우는 대기업의 사업화 플랫폼이라 일단 배제하였습니다.
우선 홈페이지는 다음과 같습니다. https://thingplus.net/
사용을 하시려면 가입 후 사용을 하셔야 하구요. API Key 및 Gateway 등록을 하셔야 합니다.
자세한 내용은 공식 홈페이지에 잘 설명하고 있으나, 사용에 대한 중요한 포인트는 말씀드려야하므로 몇 가지 언급 하겠습니다.
이미 사용할 줄 아시거나, 아래의 링크를 따라 진행하실 수 있다면 다음 절로 넘어가주세요.
http://support.thingplus.net/
아래부터는 회원가입을 하셨다는 가정하에 진행하겠습니다.
우선 Thing+ 공식 홈페이지 메인 화면에서, [지금 바로 시작하기] 를 누르시면 아래와 같은 화면을 보실 수 있습니다.
보면, 무료 사용자의 경우 센서 20개와 규칙 5개까지 적용이 가능하다는 것을 알 수 있겠네요.
참고로 데이터 Interval은 최소 1분만 가능합니다.
위 페이지 하단의 [사용자 가이드 바로가기] 버튼을 누르시면 아래 링크로 이동하게 되는데요.
http://support.thingplus.net/
보시는 것처럼 기초부분부터 다양한 가이드를 해주고 있습니다.
여기서 왼쪽 메뉴의 [아두이노 사용자 가이드] 를 클릭하면 됩니다.
자, 여기서부터가 이 포스팅과 직접적으로 연관된 내용인데요,
라이브러리 추가/확인부터 진행하겠습니다.
라이브러리 매니저를 통해서 추가해야할 라이브러리는 아래와 같습니다.
혹시나 이전에 설치되어 있더라도 Update가 필요하면 Update해주세요.
1. Thingplus
2. ArduinoJson
3. PubSubClient
4. Time ( Timekeep 이라고 검색 )
그리고, 라이브러리 매니저에서 추가할 수 없거나, 업데이트 적용이 안된 라이브러리를 직접 추가 해주셔야 합니다.
1. Timer ( https://github.com/JChristensen/Timer/ )
2. IRremote ( https://github.com/z3t0/Arduino-IRremote )
.zip 파일로 다운받아서 아래처럼 추가하시면 됩니다.
참고로, IRremote는 라이브러리에서도 추가할 수 있지만, 최신 버전 적용이 되어 있지 않습니다.
그리고 아래는 가이드문서에도 나와 있는 내용인데요.
소스를 수정해 주셔야 합니다.
소스는 아래 위치에 있구요. .h 파일입니다.
아래처럼 128 -> 196
15 -> 120
로 수정해 주셔야 합니다.
이거 수정 안하시면 Actuator기능이 정상동작하지 않아요!
그리고 예제를 하나 열어봅니다.
어차피 간단히 살펴볼 것이기 때문에 뭐든 열어주세요.
다만 제가 첨부할 소스는 WizFi250과 Ethernet 입니다.
소스를 오픈한 상태에서, Thing+에서 생성하신 게이트웨이를 확인해보겠습니다.
게이트웨이를 아직 만드시지 않으셨다면, 아래 링크를 참조해서 생성해주세요.
http://support.thingplus.net/ko/open-hardware/arduino-noSSL-user-guide.html#id-gateway
위 화면에서 말씀드린 것처럼 API 키는 중요하기때문에 위치를 기억하시거나, 메모장에 복사해두세요.
그리고 화면을 조금 내려주면, 아래와 같은 센서들이 보이는데요.
이 센서들이 가지고 있는 ID와 API 키를 아래 오른쪽과 같은 위치에 복사 붙여넣기 해주시면 됩니다.
뭐가 뭔지 쉽게 이해할 수 있겠죠? 잘 모를땐 더 해보시거나 질문하시면 됩니다 !
회로구성
Ethernet을 사용하시면 Ethernet Shield를 사용하시면 되고,
WIFI를 사용하시면 WizFi250 나 ESP8266 Shield를 한층 쌓아주기만 하시면 되겠죠?
다른 통신을 사용하시더라도, Interface가 겹치지만 않으면 되니까요.
그러니 회로는 Arduino Uno PIN에 대해서만 작성하였습니다.
( 참고로 제공하는 소스는 Ethernet, WizFi250만 제공합니다 )
여기서 IR신호를 만들기 위한 Pin으로 9번 핀을 사용한 이유는,
WizFi250을 사용할 때는 3번핀을 사용할 수 없고,
Mega 보드를 사용할 경우 기본 9번 핀을 사용하기 때문에 범용으로 더 좋겠다 싶어서 이렇게 하였습니다. 소스 수정을 하고 싶지 않으신 분들은 3번 핀에 연결하셔서 사용하셔도 됩니다.
( 다만 이 경우는 Uno보드 한정이며, WizFi250 사용이 불가 )
회로를 보시면 뜬금없이 조도센서랑 온도센서가 포함되어 있는데,
하는김에 그냥 추가해 보았습니다.
소스코드
Ethernet Shield
https://create.arduino.cc/editor/OpusK/e02d47f6-fbb7-4112-af66-cc9922b0aa96/preview
WizFi250
https://create.arduino.cc/editor/OpusK/0f158e54-7bde-44dd-b00c-68ae0b4646b1/preview
TEST
저는 Ethernet을 기준으로 테스트하였습니다.
이유는... Uno를 사용해야하는데, SRAM부족 문제로 인해 무한 리셋이 되기 때문이었습니다.
물론, 아래 링크에는 이러한 현상의 원인과 해결방안 모두 제시하고 있으나... 번거로움에 그냥 Ethernet Shield로 했습니다.
http://wiznetacademy.com/index.php?mid=tutorial&category=188&document_srl=1067
Arduino
현재 제공된 소스는 Serial 모니터가 열릴 때까지 이후 프로그램을 진행하지 않습니다.
따라서 아래처럼, 모니터를 오픈해주시거나... 해당 소스코드 부분을 주석처리 해주세요.
위 화면과는 다르게,
[ ===== Published to ThingPlus ===== ] 라는 문구 이전에 수많은 로그 데이터가 출력될 겁니다.
너무 번잡해서... 저는 출력되지 않게 막아버렸습니다. 데이터 전송 실패 메시지만 출력하게 변경하였죠.
해당 소스는 Thingplus 라이브러리의 Thingplus.cpp 을 수정하시면 됩니다.
SERIALPRINT()라는 함수가 printf 역할을 하기때문에, 이 부분만 찾아서 입맛대로 변경하시면 됩니다.
Thing+ 대시보드
대시보드를 위처럼 구성을 해보았습니다.
Temperature : LM35 센서로부터 온도데이터를 받아, 레퍼런스에 따른 공식으로 계산하였습니다.
Light : CDS를 통해 조도값을 받습니다. 위에는 lux 단위로 나오지만, 값 자체는 그냥 저항치를 0~1023 으로 표현한 것 뿐입니다.
lux 단위로 변경하려면 CDS가 아닌, 조도센서를 사용해야 합니다.
(lux가 마음에 안드시는 분들은 다른 센서ID를 사용하면 되겠습니다)
Air Conditioner ON/OFF : On/Off 로만 구분되어 있으며, 원하는 기능(켜기/끄기)을 선택후 [실행] 버튼을 누르면, 디바이스로 데이터가 전달되어 on/off 판단으로 에어컨 IR신호를 내보냅니다. 실제로도 잘 작동합니다.
에어컨의 경우는 직접 켜보지 않으시더라도, 이전 포스팅에서 진행했던 것처럼, 리시버를 반대편에 만들어서 값이 정확히 들어오는지 확인해 볼 수 있습니다 :)
동영상
실제 에어컨을 키는 영상은 리모컨으로 키는지 아닌지 알 길이 없으므로, 한 화면에서 IR 리시버를 통해 제대로 된 값이 들어오는지 보여드리도록 하겠습니다.
출처 : https://blog.naver.com/opusk/220984821032
'IT / Development > Arduino' 카테고리의 다른 글
아두이노로 나만의 IR 리모컨 만들기 - IRremote Library를 활용한 (0) | 2019.04.19 |
---|---|
아두이노로 리모컨 IR신호 확인하기 - IRremote Library를 활용한 (1) | 2019.04.18 |
Arduino Uno와 WIZ550S2E를 사용한 Serial to Ethernet (0) | 2019.04.12 |
Arduino MKRZERO(ARM 기반 아두이노)로 Ubidots 이용하기 (0) | 2019.03.10 |
아두이노(Arduino Ethernet Shield)를 이용해 Ubidots for Education를 이용해보자 - 2 (0) | 2019.03.09 |