[IoT Project] 아두이노와 라즈베리파이 간의 시리얼 통신

 

이번 글은 아두이노와 라즈베리파이 간의 시리얼 통신에 대한 글입니다.

시리얼 통신이 무엇인지에 대해 설명을 하고,

J-bot은 아두이노와 라즈베리파이를 같이 사용하는데 어떻게 사용하였는지 적었습니다.

J-bot이 궁금하신가요? 아래 글들을 읽어보세요.

나만의 비서 로봇, J-bot 만들고 있습니다.
google-aiy-voice-kit 활용기
google-aiy-voice-kit 셋팅


#### 시리얼 통신

시리얼 통신은 이종의 보드 간에 데이터를 주고 받는 방법 중 하나입니다.

시리얼 통신을 위해서 필요한 것들에 대해 소개를 하겠습니다.

  • Rx, Tx, GND 선 연결
    • 아두이노는 USB로 연결할 경우, 하드웨어는 따로 생각할 필요없습니다. 준비 끝!
    • 아두이노 내부에 칩이 있습니다. 그래서 USB만 연결해도 시리얼 통신을 할 수 있습니다.
  • 보레이트 (Baudrate) 설정
    • 보레이트는 시리얼 통신의 속도를 말합니다.
    • 아두이노와 라즈베리파이 모두 같은 보레이트로 설정해야합니다.
    • 9600 bps, 19200 bps, 38400 bps, 115200 bps 등이 있습니다.
    • bps 는 bit per second로 1초에 보낼수 있는 비트 수를 의미합니다.
    • 9600bps는 1초에 9600 bit를 보낼 수 있습니다.
  • 데이터 포맷
    • 한 번 데이터를 보낼 때, 아래 그림의 데이터 포맷과 같이 8bit씩 보냅니다.
    • 만약 “hello”라는 텍스트를 시리얼 통신을 통해 전송하면 ‘h’, ‘e’, ‘l’, ‘l’, ‘o’로 하나씩 전송됩니다.

사진 <시리얼 데이터 포맷>  – http://nptel.ac.in/courses/Webcourse-contents/IIT-KANPUR/microcontrollers/micro/ui/Course_home2_11.htm


J-bot은 시리얼 통신을 어떻게 활용하는가?

 

J-bot은 아래와 같이 아두이노와 라즈베리파이를 활용합니다.

아두이노

  • 내부적으로는 서보모터를 제어하고 그리고 초음파 센서의 거리값을 수집
  • 1초에 10번 모터의 각도와 거리값을 라즈베리파이에게 전송합니다.
  • 라즈베리파이에서 모터를 몇 도로 동작하라는 신호를 받으면 모터 제어

라즈베리파이

  • 아두이노로부터 받는 데이터를 활용하여 여러 동작 수행
  • 라즈베리파이에서 아두이노로 원할 때 명령을 내릴 수 있습니다.

 


코드를 보면서 이야기 합시다.

먼저 아두이노에서 송수신을 어떻게 하는지 보겠습니다.

아두이노에서 라즈베리파이로 센서 데이터를 보내는 코드는 아래와 같습니다.

아두이노에서 라즈베리파이로 보내는 센서 데이터는 아래의 형식으로 표현합니다.

초음파 거리 (cm) * 서보 모터 각도 (deg)

50 * 40

위와 같은 데이터라면 거리 50cm, 각도 40도라는 의미입니다.

위에는 제가 단순하게 데이터 포맷을 정한 것입니다.

(필요하다면 데이터 길이, 데이터, 데이터 검증 byte 등으로 구성하여 보내기도 합니다.)

아두이노가 라즈베리파이로부터 데이터를 받아 처리하는 코드는 아래와 같습니다.

위 코드는 라즈베리파이가 ‘모터를 몇도로 회전하라’ 라는 데이터를 보내는데, 그 데이터를 받는 부분입니다.

위의 코드에서 매 루프마다 serial.read를 통해 입력되는 문자가 있는지 체크합니다.

문자가 있을 경우, inputString이라는 문자열에 추가합니다.

만약 입력된 문자가 ‘*’일 경우, 문자열이 끝나는 것으로 생각합니다.

그리고 * 앞의 데이터를 추출하고, goal_servo_val에 넣습니다.


라즈베리파이에서 아두이노로부터 센서 데이터를 받는 코드는 아래와 같습니다.

SerialComm은 시리얼 통신을위한 모듈입니다. 초기화, 읽기, 쓰기 함수를 만들었습니다.

init함수에서 먼저 아두이노와 연결되는 드라이버를 초기화합니다.

그리고 read 함수는 아두이노에서 보낸 데이터에서 거리와 각도값을 추출합니다.

*을 구분자로 활용하여 첫번째 데이터가 거리, 두번째 데이터가 각도라는것을 알 수 있고 변수에 저장합니다.

motorcontrol 함수는 아두이노에게 회전할 각도를 전송하는 함수입니다.

main에서는 serial_comm의 객체를 만들고

쓰레드를 하나 만들어서 serial.read를 반복적으로 호출합니다.


#### 결론

라즈베리파이 하나만으로 시스템을 구성하는게 아니라 두개를 같이 쓴 이유는

두개의 역할이 다르며, 각자의 역할을 하는게 효율적이기 때문입니다.

라즈베리파이는 통신, 영상처리, 음성처리 등을 하고

아두이노는 반복적이고 실시간으로 수행해야하는 작업 ( 모터를 제어하는 것이나 10hz로 센서 데이터를 수집)을 하고요!

여기까지해서 시리얼 통신에 대해 적어봤는데요.

읽어주셔서 감사합니다.

유토피안 글 쓰기

utopian 글 작성에 주의해야할 것

1. 이미지, 코드 등 올리는 모든 것에 대해서는 저작권, 라이센스 체크해야한다.

Images and videos used must be distributed under the Creative Commons license and content source must be cited (when applicable).

Inclusion of licensed or commercial materials may lead to a downvote and/or temporary or permanent ban from Utopian services.

이미지나 동영상은 고화질

Images and videos used in contribution submissions should be of high resolution. Low resolution images and videos may lead to a lower score of your contribution.

2. 깃헙 관련 문제

The Github repository linked to the submission post must contain the project’s source code, a readme file with usage and install instructions and an appropriate open source license, or be directly connected to such a repository.

3. Contribution 관련 문제

In order to be considered for a reward, the contribution must add value to the Open Source project. Submissions that offer little to no added value to the project will not be eligible for potential reward.


참고 자료

글 쓰기 참고자료

https://docs.google.com/viewerng/viewer?url=https://owl.english.purdue.edu/media/ppt/20120820094902_656.ppt

마크다운 참고자료

https://guides.github.com/features/mastering-markdown/

https://steemit.com/utopian-io/@espoem/make-your-posts-look-great-in-steemit-and-busy

개발 관련 contributor

https://github.com/utopian-io/editor-templates/blob/master/development

Submissions to the development category include (1) Bug Fixes; (2) New Features and (3) Contributor’s Own Projects.

Category Tag: development

  • 적절한 코드 설명, 이미지, 실제로 한 일
  • https://github.com/utopian-io/editor-templates/blob/master/development

[IoT Project] J-bot 외형을 꾸며보자

#### 간단한 소개

J-bot은 Jacob`s robot으로, 내가 상상해왔던 모든 것을 적용해볼 로봇입니다.

J-bot은 누구나 직접 만들 수 있는 로봇을 꿈꾸며,
하드웨어를 덜 신경쓰기 위해서 google AIY voicekit를 기반으로 시작하였습니다.

한 마디로 표현하자면 DIY Smart Robot using google AIY voicekit 입니다.

현재 J-bot의 기능은 아래와 같습니다.

  • Google assistant와 연동 (날씨 체크, 주가 확인, 캘린더 등록)
  • 사진 촬영
  • 말을 할 때, 로봇팔을 흔든다.
  • 로봇 가까이 손을 두면 로봇팔을 흔든다.

J-bot으로 할 수 있는 재밌는 아이디어들이 많습니다.

관심이 가는 것 부터 하나하나 개발해서 J-bot에 넣어보고 싶습니다.

    • 비서로서의 역할 (날씨 정보 제공, 캘린더 등록) – google assistant를 이용
    • 스팀잇과의 연동 고려 (스팀 dialogflow 링크)
    • 주변의 여러 IoT 제품을 제어 (불 키고 끄기)
    • 감시 시스템 & 알림
  • Timelapse (한 장소에 대해 오랫동안 사진을 찍어 동영상으로 만드는 것)

#### 이전 작성글

 

#### 외형을 꾸미자

이전 글을 보신분들은 아시겠지만, 저의 J-bot의 외형은 아직 준비되지 않았습니다.

기능들도 중요하지만 보여지는 것도 중요하기 때문에 외형을 꾸며보려고 합니다.

먼저, 다른 사람들은 어떻게 외형을 꾸몄나 살펴봤습니다.

Thingiverse – AIY voicekit의 검색 결과

Thingiverse라는 사이트는 3d printing 파일을 서로 공유하는 사이트 입니다.

여기서 검색을 해보니 몇몇 사람들이 3d printing을 이용해서 voicekit의 외형을 아래처럼 꾸몄더라고요.

저도 위의 외형들을 참고해서 만들고자 합니다.


#### 설계 준비

예전에 sketchup이라는 툴을 사용해본적이 있는데 이것으로 설계하고자합니다.

J-bot은 1번 고양이 형태에다가 눈에는 초음파 센서를, 코에는 카메라를 부착할 것입니다.

기존에 설계된 파일을 무료로 다운받을 수 있어서 그 파일에서 시작을 해보았습니다.
https://www.thingiverse.com/thing:2783658

살짝 앞으로 튀어나온 눈과 코쪽에 구멍을 뚫을 예정이고
(초음파 센서와 카메라를 부착하기 위해서)

옆에는 스팀 그림도 넣으려고 합니다.

#### 3d printing 하기

서울에서 무료로 3d printer를 사용할 수 있는곳이 어딘지 찾아봤는데

수원에 시제품 제작터가 있더군요.

http://www.mss.go.kr/site/gyeonggi/03/10302010000002016110903.jsp

전화해서 확인 해봤는데 현재도 운영 중입니다.

이 곳에 가서 만들 예정입니다.

체크해야할 것이 있는데 다시 전화를 해볼 예정입니다.

  • stl파일을 sd카드에 담아가면 되는지? (체크 필요)
  • 운영시간에 무료로 사용 가능
  • 3d printing 필라멘트 개인 구매, 혹은 시제품 제작터에서 산다.

#### 끝맺음

로봇의 외형을 꾸미기 위한 과정을 적어봤는데요.

기존에 사람들이 해놓은 3d 모델을 기반에 살을 붙여서 만들 예정입니다.

본격적으로 외형을 설계를 해볼 것이며,

직접 시제품제작터에 가서 외형을 만들어오겠습니다.

원래는 일주일마다 글을 적겠다고 했는데 여행을 다녀와서 못했습니다.

하지만, 꾸준히 개발하면서 내용을 공유하고 싶습니다.

감사합니다.

[IoT Project] Google AIY Voice Kit Setting

AIY Voice Kit 셋팅 관련 기록

AIY Voice Kit 활용이라는 글에서 AIY Kit의 하드웨어, 소프트웨어를 셋팅하였습니다.

주요 소자들을 끼고 박스에 잘 넣은 다음,

Google AIY Project에서 제공해주는 라즈비안 OS 이미지를 SD카드에 넣어줍니다.

이제 추가적으로 필요한 여러 셋팅들을 설치해야하는데요.

제가 라즈베리파이에 여러가지 셋팅한 것을 기록해놨습니다.

많은 도움이 됐으면 좋겠습니다!


라즈베리파이 카메라를 이용한 사진 촬영

  • raspistill -w 1640 -h 922 -o image.jpg
  • raspistill -o image.jpg -hf -vf -w 320 -h 240 //상하반전

AIY Voice Kit 한국어 설정

/home/pi/AIY-projects-python/src/aiy/i18n.py

_DEFAULT_LANGUAGE_CODE = ‘ko-KR’ 로 바꾼다.

  • 한국어 설정을 해도 구글 어시스턴트 핫키는 안되는 것 같다. 확인 해보기

raspberry pi 한국어 설치

sudo apt-get install ibus ibus-hangul fonts-unfonts-core


Raspberrypi 화면 설정

sudo nano /boot/config.txt

VNC로 접속을 할 때, 적절한 해상도를 설정하지 않으면 불편하다.

hdmi_mode=16 –> 1080p


text to speech 설치

text to speech를 하는 여러가지 방법이 있다.

google cloud text to speech
  • voice에 대한 여러 설정이 가능하다.
  • 아직 한국어는 여성음성만 된다. (Male로 설정해봤으나 안됨.)
  • 400만 쿼리 요청에 대해 무료
  • 인증키 발급 필요하다.

설치 방법

  • pip3 install –upgrade google-cloud-texttospeech
  • pip3 uninstall protobuf
  • sudo pip3 install protobuf==3.5.2
  • sudo apt-get install mpg321
google speech
  • google에서 제공하는 서비스
  • 따로 인증키가 필요없음
  • 무료임
  • 한국어 지원됨

설치 방법

  • sudo pip3 install google_speech
  • sudo apt-get install sox libsox-fmt-mp3

AIY Kit 자체 지원
  • aiy.audio.say(‘Hello’)
  • 한국어 지원 X

자동 실행

  • sudo nano /etc/systemd/system/assist.service
  • sudo systemctl enable assist.service
  • sudo systemctl start assist.service


Github 코드 업데이트

https://github.com/passionbull/J-bot

이 저장소에서 확인하실 수 있습니다.

[IoT Project] Camera lib setting on raspberrypi

#### List of additional libraries installed on AIY Board

  • Install python and OpenCV
    • AIY Board에는 python을 깔 필요 없다.
    • OpenCV만 설치한다.
  • Install Dlib
    • https://gist.github.com/ageitgey/629d75c1baac34dfa5ca2a1928a7aeaf
    • check
  • Install Face_recognition
    • https://github.com/ageitgey/face_recognition

 

#### Camera setup

  • I used Raspberry pi Camera
  • use raspberry-pi camera library