[IoT Switch] DIY 스위치 소개

안녕하세요. 제이콥입니다.

이번에는 제가 취미로 개발하고 있는 IoT 스위치에 대해 소개합니다.

개발한 IoT 스위치는 제가 집에서 잘 사용하고 있습니다.


기존 IoT 스위치

IoT 스위치는 몇몇 분들은 사용해봤을수도 있습니다.

IoT 스위치는 멀리서 불을 껏다켰다 할 수 있게 해주는 스위치/시스템입니다.

제가 조사한 바로는 2개 정도가 사용할만 해보였습니다.

<정보가 틀렸다면 말씀해주세요>


스위처 장단점

스위처의 장점은 쉽게 붙였다 뗄 수 있는 것, 5만 5천원만 내면 된다 입니다.

스마트폰을 통해 불을 껏다 켰다할 수 있습니다. 잘 만든 것 같습니다.

단, 블루투스로 통신을 하기 때문에, 집 안에서만 사용이 가능합니다.

하지만, 선택과 집중을 잘 했다는 생각이 듭니다.


LG 장단점

LG IoT 스위치의 장점은 LG 홈서비스, IoT 서비스 위에서 동작한다 정도일 것 같습니다.

아마 스마트 스피커로도 불을 껏다 킬수 있고, 집 밖에서도 킬 수 있을 것입니다.

단점은 IoT 패키지 가입, 월 2200원 요금, 기존 스위치 제거 후 설치 등

스위치만을 위해서 가입하기는 부담스럽습니다.


개발 목표

이 두 상품을 보고 직접 만들어볼만한데? 라는 생각이 들었습니다.

두 개의 장점을 잘 섞어서!!

  1. 와이파이로 통신
  2. 스마트폰, 로봇, 스피커, 노트북 등에서 제어
  3. 탈부착식
  4. 싸게 만든다 (만원)

요 조건을 만족하며 만든게 바로 제가 만든 것입니다.

아래 부품들을 이용해서 싸게 만들어봤습니다.

  • 마이크로컨트롤러 – 8800원
  • 서보모터 – 집에서 굴러다니는 모터
  • 다이소 테이프식 후크 – 1000원
  • 나무젓가락

image.png


동영상

동영상을 보시죠.

동영상을 보시면 저절로 껏다켜지는 것을 볼 수 있는데요.

핸드폰을 이용해서 껏다켰습니다.

 


두번째 영상 보시죠.

예전에 만든 J-bot을 이용해서 불을 껏다 켜봤습니다.

‘불꺼줘’, ‘불켜줘’ 라는 키워드로 해봤는데요.

 

 


관심이 많으면 한 번 이걸 완성도 있게 만드는 것으로 해서

시리즈로 글도 써보고 싶기도 해요.

또 다른 꿈은 몇 가지 완성도를 높일 계획이 있는데..

좀 더 완성도 있게 만든 후, 크라우드펀딩을 해보고 싶네요.

감사합니다.

[ROS] Custom message 생성

ROS에서 message는 노드가 서로 주고받는 데이터를 말한다.

custom message는 기존 message type으로 표현하기 어려울 때, 직접 만들어 사용할 수 있다.

예를 들어, 로봇의 odometry는 이미 정해진 구조가 있다. 이 구조를 활용하는 편이 훨씬 좋다.

http://docs.ros.org/melodic/api/nav_msgs/html/msg/Odometry.html

나 같은 경우, 물체에 대한 정보를 서로 주고 받고싶다.

마땅히 사용할 message type이 없다면, 이 때 물체에 대한 구조를 새로 정의할 수 있다.

이걸 custom message라고 한다.


만드는 방법

http://wiki.ros.org/ROS/Tutorials/CreatingMsgAndSrv

나는 Object라는 message type을 만들어보려고 한다.

프로젝트 내에 msg라는 폴더를 생성하고, 원하는 메시지를 정의한다.

  • 작성자는 Object.msg라는 이름으로 만들었다.
  • 내부에는 이것저것 많이 들어있다.
  • # 은 주석이다.

Cmakelists.txt 에서 추가할 것을 본다.

  • find_package에 message_generation를 추가한다. (중요)
  • Cmakelists에서 정의한 Object.msg 를 add_message_files에 추가한다.
  • message를 추가하기 위해서는 dependencies를 설정해줘야 한다.
  • 만약에 odometry_msgs를 element로 쓰고 싶다면, 넣으면 된다.

사용 방법

위와 같이 셋팅을 한 후, catkin_make로 빌드한다.

코드 상에서 어떻게 사용하는지 보자.

사실, 다른 메시지랑 똑같이 사용하면 된다. include만 잘 하면 된다.

  • C++에서  메시지를 사용하기 위해서 메시지를 include를 해야한다.
  • #include “프로젝트 명/message 이름.h”
  • 나 같은 경우는 #include “perception/Object.h”가 된다.

다음은 publish를 해보겠다.

publisher를 정의한다.

gFacePublisher = nh.advertise<perception::Object>(“face”,1);

그리고 메시지 객체를 정의한다.

정의한 메시지 객체에 데이터를 넣고 publish!


이렇게 publish를 하면 된다.

subscriber도 다른 메시지와 사용방법이 같다.

ros::Subscriber gFaceSubscriber = nh.subscribe(“face”, 1, faceCallback);

void faceCallback(const perception::Object& faceMsg);

cout<<faceMsg.id<<endl;


Python에서도 비슷하게 사용하면 되는데

import할 때 아래처럼 하면 된다.

나머지 사용방법은 다른 메시지와 같다.

from perception.msg import Object

 


즉, msg 폴더와 Cmakelists.txt에 정의만 잘 해놓으면

다른 메시지들과 똑같이 사용하면 된다.

스팀잇에 작성한 개발 관련 글

안녕하세요. 제이콥입니다.

제가 2017년 12월 12일부터 스팀잇을 하게 됐는데요.

지금까지 스팀잇에 올린 글들이 무엇이 있나 정리를 해봤습니다.

kr-dev에 적은 글은 총 48개!!!!


아래에 리스트를 쭉 적어봤습니다.

정리를 해보니 지난 1년동안 나름 알차게,

하고싶은거 하면서 살았구나 싶었습니다.

이것저것 새로 배우는 것을 좋아해서

공부한 것을 정리하면서 작성을 했었는데.. 많이 적었군요.

저는 글쓰기 실력도 부족하고, 전문가라고도 불리기 부족한 부분이 많습니다.

하지만, 앞으로도 관심있는거 공부하면서 계속 개발 관련 글, 제 취미 생활을 작성할 예정입니다.

파이팅!


가끔은 열심히 적어도 관심이 없을 때가 종종 있었습니다.

그럴 때 마다, 이 글이 정말 읽을만 한가 다시 생각해보고

적어도 내가 나중에 어떤 내용이 헷갈릴 때 다시 볼 수 있는 글을 적어야지 생각합니다.

어떤 의견이든 댓글은 환영입니다!


IoT 관련 글

아래 글은 구글 어시스턴트를 ubuntu에서 활용하는 방법에 대한 글입니다.


Google assistant library on ubuntu #1 사전 조사


아래 글은 아마존 에코 스피커를 활용하여 로봇을 제어하는 것에 대한 글입니다.

Connect amazon alexa vocie and ROS using alexa skill, lambda, pubnub #1



영상처리 관련 글

이 글을 따라하면 얼굴 검출과 인식을 할 수 있습니다.

따라하면 되는 얼굴 인식 with deep learning, python, opencv


ROS 관련 글

ROS는 로봇 os로, 로봇 연구에 있어서 최고의 동반자라고 생각됩니다.

스마트폰에 안드로이드가 있다면, 로봇에는 ROS라고 생각해요.

Ros_control와 gazebo를 활용한 pan/tilt control

[Research] 지역 경로 계획 소개, teb local planner

워드프레스 관련 글

워드프레스에스 스팀으로 글을 옮겨주는 플러그인을 개발했었습니다. 관련 내용입니다.

Warpsteem 소개 – 워드프레스 글을 스팀잇으로 옮기기


코딩 관련 글


[Coding study (leetcode)] Tree problems. 105, 106

Git, SVN 자주 사용하는 명령어 정리

Ubuntu에서는 git-cola, gitg라는 gui git tool을 사용해서 repo를 관리한다.

Window에서는 smartgit을 사용한다.

왠만한 것은 gui에서 해결하지만 가끔 terminal에서 작성해야할 경우가 있다.


git status

git 상태 체크, 어디 브랜치에 있는지, 뭐가 변경되었는지

 

로컬 git repo 만들어서 push하기

git init

local git repo 만들기

git add .

현재 폴더에 있는거 커밋하기

git-cola, gitg에서 체크해서 커밋하고싶은 것만 커밋해도 된다.

git remote add origin https://project.git

github, bitbucket 등의 server의 repo와 연결한다.

그 후로는 git-cola, gitg를 써서 push 한다.

 


 

SVN 관련 명령어

wordpress 플러그인을 업데이트 하기 위해서 svn을 사용해야한다.

git으로 하면 얼마나 좋았을까.. 굳이 svn gui를 또 설치하고 싶지 않아서

terminal에서 다 해결하기로 했다. 하지만, 항상 까먹어서 history를 보기 때문에

기록을 해놓는다.

 

svn co https://plugins.svn.wordpress.org/warpsteem/ warpsteem_svn/

checkout (svn server에 있는 코드를 가져온다.)

svn stat

변경된 사항을 체크할 수 있다.

svn ci -m “added tag filter”

> 파일 변경된 것을 추가 작업 필요없이 바로 서버로 푸쉬할 수 있다.

 

Google assistant library on ubuntu #1 사전 조사

저는 취미활동으로 저만의 로봇을 만들고 있습니다. 중간중간 쉬고 있긴 하지만 꾸준히 하는중이긴 합니다.

최근에 계속 로봇에 어떻게하면 쉽게 음성인식 기능을 적용할 수 있을까? 에 대해 고민중입니다.

이 포스팅은 구글 어시스턴트를 어떻게 로봇에 적용할까? 에 관련된 포스팅입니다.

구글 어시스턴트 서비스, 라이브러리를 활용해서 제가 할 것은 아래와 같습니다.

  • 음성인식 결과 (사용자가 말한 것) 가져오기
  • Google assistant의 응답 가져오기
  • 특정 명령에 대해서는 내가 설정한 대답, 혹은 동작을 할 수 있도록 한다. (내방 불꺼줘, Jacob이 누구지? – 제이콥은 저를 만든 사람입니다.)
    • 즉, 구글 어시스턴트의 대답과 내가 설정한 것을 선택할 수 있어야함.
  • 시리야, Ok google 과 같은 Custom Invocation (hot word, wake word)이 필요

이 4가지를 로봇에 적용하려고 합니다.

사실은 적용을 하긴 했고, 아직 글로 정리를 못해서

하나하나 정리를 해보려고 합니다.

감사합니다.

이번 글은 먼저 튜토리얼을 따라서 해보고, 여러가지 검색했던 결과들에 대한 나열입니다.

 

google assistant에 대한 이미지 검색결과

<출처 : https://assistant.google.com/#?modal_active=none>


Google assistant library 튜토리얼

google에서 제공하는 내용이다.

https://developers.google.com/assistant/sdk/guides/library/python/

이대로 따라해보도록 한다.

 

마이크 체크

  • arecord l
    • 마이크 목록 확인
    • 0 카드, 0  장치 (card 0, device 0)

  • arecord –format=S16_LE –duration=5 –rate=16000 –file-type=raw out.raw
    • 옵션
      • -D hw: card,device
      • -D hw:1,0 (CameraB409241의 마이크 선택)

 

마이크 추천

https://community.home-assistant.io/t/best-microphone-for-diy-voice-control-components/51265

스피커 체크

  • speaker-test -t wav

프로젝트 관리

프로젝트 관리

https://console.actions.google.com/u/1/project/

보안 관련, key

https://console.developers.google.com/apis/

Google assistant 튜토리얼 결과물

튜토리얼대로 하면 샘플코드를 실행할 수 있다.

hotword ‘OK google’을 하고, 말을 하면 된다.

  • googlesamples-assistant-hotword –project-id proejctID –device-model-id modelID
    • projectID와 modelID는 아래 순서로 들어가서 가져온다.
    • projectID – 구글 액션 콘솔 -> 톱니 -> Project setting -> project ID
    • modelID – 구글 액션 콘솔 ->Device registration -> model ID

 

기타

Google assistatnt docker 활용 검토

Custom Device Actions

https://developers.google.com/assistant/sdk/device-actions-overview

파이썬 코드 샘플

https://github.com/googlesamples/assistant-sdk-python/tree/master/google-assistant-sdk/googlesamples/assistant/library

무조건 응답이 있는 것 같다.

특정 조건에서 내가 원하는 것을 할 수 있을까?

잘 모르겠다.

GRPC로 해봐야겠다.

Custom Wake

https://github.com/shivasiddharth/GassistPi

https://snowboy.kitt.ai/

 

참고 프로젝트

 

https://wiki.odroid.com/odroid-xu4/application_note/software/ai_speaker

Connect amazon alexa vocie and ROS using alexa skill, lambda, pubnub #1

이 글은 아마존 에코 스피커와 로봇을 연결하여 여러 명령을 하기 위한 셋팅입니다.

이 글 관련으로 2편-3편 정도 시리즈를 생각하고 있습니다.

감사합니다.


목적

스마트 스피커와 로봇을 연결할 필요가 생겼다.

왜냐하면 음성 인식 관련 소프트웨어, 하드웨어를 모두 다 개발할 수 없기 때문이다.

집중할 부분에 집중하고 이미 잘하는 것은 활용하는게 현명한 것 같다.

예를 들어, 여러 마이크를 사용하여 노이즈를 없앤다거나, 어느 방향인지 파악하는 것, 음성인식

잘하는 기존 제품을 활용해본다.

이 글을 쓴 이유는

기존의 글들을 보고 그대로 해도 동작도 안하고 따라하기 어려웠다. (사용하는 라이브러리가 바뀜, UI가 바뀜)

다시해도 제대로 못할 것 같아서 정리를 하게 됐다.


 

시스템 구조

<출처 – https://www.hackster.io/grassjelly/autonomous-home-assistant-robot-fff43e>

기존에 아마존 알렉사와 로봇 사이에 연결한 수많은 예시들을 찾아봤다.

  • 로봇과 알렉사를 연결하는 수많은 예시가 있다.
    • 다 복잡하고 잘 안된다.
    • pubnub으로 하는게 깔끔한 편이다.
      • ip를 알 필요가 없다.
      • 고정 ip가 아니여도 된다.
      • 인터넷만 잡으면 된다.

그 중에 내가 선택한 시스템은 위에 그림이다.

간단히 설명하면

사용자가 Echo 스피커에서 무언가 말을 하고, 그 중에 일부 (내가 설정한 어떤 명령어들)는 AWS LAMBDA FUNCTION (서버)에서 처리한다.

처리된 데이터는 PubNub이라는 중간 브로커를 통해 로봇 시스템 (ROS)에 전달하게 된다.

각자 인터넷만 연결되어 있다면, 스피커에서 로봇으로 각각의 단계를 거쳐 원하는 명령을 내릴 수 있다.


Alexa skill setup

https://developer.amazon.com/alexa/console/ask? 에서 셋업하면 된다.

Interaction Model 작성하기

  • 어떤 명령을 받았을 때, 이 skill (프로그램)을 사용할지 결정한다.
  • 되게 재밌는게 Sample Utterances에 활용해서 비슷한 문장을 말해도 같은 Intent를 실행하게 된다.
    • 즉, 완전 똑같지 말하지 않더라도 원하는 Intent를 호출 할 수 있다.
    • type도 정할 수 있다.
    • My favorite color is {color_type}.

End point 설정

  • 처음할 때 햇갈렸다.
    • 동영상을 보도록 한다.
  • 이 모델에 대한 결과를 만들어 줄 서버가 필요하다.
  • 작성자는 이 서버를 lambd로 만들었다.
    • 이번에 이 시스템을 구현하기 위해서 처음 사용해봤다.
    • 예제를 보면서 하면 할만하다.
    • python, nodejs가 있다.

Skill ID – 이 스킬의 ID이다.

AWS Lambda ANR – 서버라고 생각하면 편하다. 서버의 ID다.

  • ANR은 Lambda 함수를 만들고 나서 그 함수 관리 페이지에서 볼 수 있다.
  • ANR에서도 skill ID를 입력해야하고, Skill에서도 ANR을 입력해야한다. 서로 입력해야함.

주의할 점

  • 항상 save와 build를 잘 하도록 한다.
  • ANR, skill ID 확인

테스트

  • Interaction Model과 ANR을 입력하면 Test를 할 수 있다.
  • Skill은 launch (시작), 서버에서 처리할 수 있는 명령, quit(종료)로 구성된다.
    • 이게 무슨말이냐면
    • Invocation으로 정한 키워드를 통해 alexa에게 나의 skill을 호출하라고 명령한다.
      • Invocation이 “conversation application”이라 가정하면
      • ex – alexa run “conversation application”라 말하면 된다.
      • 이 때 launchIntent가 실행된다.
    • 다음으로 설정한 intent들을 호출할 수 있다.
      • launch 한 후, intent에 대한 결과를 반환한다.
    • quit를 하면 실행했던 skill을 사용중지한다.

시뮬레이션에서 돌려본 결과이다.


Lambda

https://ap-northeast-1.console.aws.amazon.com/console/home?region=ap-northeast-1#

참 괜찮은 서비스다.

하나의 실행 모듈을 돌릴 수 있다.

lambda를 통해, 각 intent에 대해 어떤 동작을 할지 결정할 수 있다.

코드 입력

코드 입력 유형 –> .zip 파일 업로드로 코드를 업데이트 하면된다.

nodejs로 할 경우, package.json에 종속성을 체크한다.

그리고 npm install 후에 그 폴더 자체를 압축해서 lambda로 보낸다.

로그 보기

로그가 보고싶을 땐, 모니터링에서 CloudWatch에서 로그 보기를 한다.

자세한 내용은 튜토리얼을 첨부한다.

https://github.com/alexa/skill-sample-nodejs-hello-world

힘들었던 것

  • 참고했던 링크들을 보면 라이브러리 버젼이 달랐었다.
  • 이제는 안 쓰는 함수들을 쓴다던가..
  • 그래서 링크들의 소스들은 참고만하고
  • hello-world 코드에다가 pubnub을 적용하였다.

 


PubNub

PubNub은 lambda와 로봇의 중간 브로커 역할을 한다.

로봇은 보통 고정 ip를 갖고 있지 않다.

그렇기 때문에 외부에서 로봇에 연결하기 위해서는

포트 포워딩을 통해 로봇 ip에 잘 찾아갈 수 있도록 해야한다. (아는게 이것밖에 없군요.)

Pubnub은 설정을 할 필요 없게 해주는 서비스다.

lambda에서 pubnub으로 데이터를 넘기면 pubnub이 알아서 로봇 쪽으로 보내준다.

반대도 마찬가지다.

 

PubNub Setting

https://admin.pubnub.com/에서 셋팅한다.

  1. Create new App.

  2. Create new keyset.

    1. publish key와 subscribe key는 lambda와 로봇 쪽 코드에서 필요하다.
  3. Debug console

    1. 디버그 콘솔 창에서 add client
    2. channel을 확인한다.
    3. channel 또한 lambda와 로봇쪽에서 필요하다.
    4. 같은 채널로 데이터를 주고받아야 한다.
    5. 주고 받기 위해서는 publish key와 subscribe key가 필요하다.


로봇 쪽 통신 코드

아래 코드를 참고했다.

https://www.pubnub.com/docs/python/data-streams-publish-and-subscribe

 


일단 셋팅 및 테스트는 완료했다.

실제 활용에 대해서는 다음 포스팅에서 적어보도록 하겠다.

셋팅을 하면서 작성한 코드도 깃헙에 올린다.

https://github.com/passionbull/alexa-ros-python-pubnub

 

참고한 링크

Warpsteem 소개 – 워드프레스 글을 스팀잇으로 옮기기

안녕하세요. 제이콥입니다.

워드프레스 플러그인을 하나 소개합니다.

예전에 만든 플러그인을 혼자서 사용하다가

다른 사람들도 혹시 필요할까 싶어 배포하였습니다.

이미 비슷한 플러그인으로는 아래 2개가 있습니다.

  • WordPress Steem은 제일 먼저 개발된 플러그인이다. 현재 동작하지 않는다.
  • Steempress은 이 플러그인과 유사한 플러그인이다.
    • 수익의 15%를 가져간다.
    • 보팅을 선별적으로 해준다고 한다.

 

워프스팀 – 플러그인 소개

  • 워드프레스 하나로 블록체인에 글을 써보자.
  • 워프스팀은 여러 자원(인스타, 페이스북, 블로그, 스팀 등등)에서 쉽게 스팀으로 ‘워프’, 이동할 수 있도록 합니다.
    • 사용자는 자신의 글을 홍보하거나 부수입 창출할 수 있습니다.
    • 이전에 작성한 훌륭한 글들을 스팀으로 옮길 수 있습니다.
  • 첫 시작으로는 wordpress에서 steem으로 글을 쉽게 이동하게 합니다.
    • 현재 플러그인을 배포하였으며, 다운로드 가능합니다.
    • 기존에 있던 한국 워드프레스 사용자들이 쉽게 Steemit에 접근할 수 있도록 합니다.

워프스팀

관리자페이지 -> 플러그인 -> 새로 추가에서 WarpSteem을 검색하면 다운받을 수 있습니다.

https://ko.wordpress.org/plugins/warpsteem/


사용 방법 – 설정

1. 관리자 페이지 -> 설정 -> WarpSteem setting으로 들어갑니다.

2. 순서대로 스팀잇 아이디, Posting key, 기본 tag를 적습니다.

3. ‘Enable’ 체크박스를 체크합니다.

워드프레스 새 글을 작성하거나 수정하면, 자동으로 스팀잇에도 업데이트 됩니다.


사용 방법 – 글 작성

워드프레스를 이용하여 평소대로 글을 작성합니다.

그리고 공개 버튼을 누릅니다. 끝!


사용자를 위한 추가 설정이 몇 개 있습니다.

옆에 포스트 박스를 통해서 태그를 설정할 수 있습니다.

설정된 태그는 스팀잇에 적용됩니다. (인스타그램의 태그)

고유주소에서 permlink를 수정하면 그대로 스팀에도 적용됩니다. (한글로 설정할 경우, post id로 설정됩니다.)

또한, 고유주소도 자신이 원하는대로 설정할 수 있습니다.

하지만 같은 글에 대해 고유주소를 변경하면 중복된 글이 작성됩니다.


계획

  • 유입된 워드프레스 유저들의 글 홍보 및 보팅
  • Steem 계정 생성 지원
    • 워드프레스 유저들의 계정을 생성해주고 싶습니다.
  • 개발 관련
    • Editor 내에서 update on/off
    • 불편한 사항 접수하여 보완

참고사항

Steemit에서는 여러 Key가 있습니다.

Posting key는 스팀잇에 글을 쓰기 위해 필요한 key입니다.

이 플러그인은 Postking key (only 글쓰기, 보팅만 가능) 가 필요합니다.

https://steemit.com/@유저_아이디/permissions에 접속하여 Posting key를 복사하여

워드프레스 설정에 넣습니다.

이 플러그인을 활용하여 글을 작성할 경우, Warpsteem이 수익의 5%를 가져갑니다.

새로 오시는 워드프레스 유저님들을 지원하는데 사용하겠습니다.

  • 유입된 워드프레스 유저들의 글 홍보 및 보팅
  • 계정 생성 – 추후 가능

감사합니다.