[IoT] MAKE with Open H/W + Node.JS - 4th

Preview:

Citation preview

Expand your dimension circul.us

Opensource H/W + Node JS

IoT 따라잡기

Lesson 4

CIRCULUS http://www.circul.us

Expand your dimension

누구나 로봇을 만드는 그날까지!

Circulus Robot CULU

Lesson 1 Introduction

Lesson 2 Linux

Lesson 3 NodeJS

Lesson 4 Sensor

Lesson 5 Project

Lesson 4 Sensor

GPIO 기초

Lesson 4

Expand your dimension circul.us

GPIO

GPIO (General Purpose Input Output)

일반적인 입/출력을 제공하는 단자로써, 하나의

단자로 입력 또는 출력이 고정되지 않고 선택적

으로 입력/출력이 가능. 하지맊 동시에 입력과

출력을 겸용으로 핛 수 없음. 사용 목적에 따라

먼저 GPIO모드 설정을 해야 함.

Raspberry Pi는 21개의 GPIO를 제공하고 있는

데, 그 중에 17개는 Pin Head 로 구성되어 있고,

나머지 8개는 보드에 Pin Head 를 세워서 사용

핛 수 있음.

기존 A,B 모델에 비해 A+, B+, B2 는 26개에서 40개로 20여개가 증가함

Expand your dimension circul.us

GPIO

공식 GPIO

WiringPi 를 사용하지 않고

직접 GPIO 에서 연결하는

센서 혹은 하드웨어 연결 시

해당 GPIO 번호를 이용하여

사용함

WiringPi GPIO

Wiring Pi 를 이용하는 경우,

실제 사용하는 Pin 번호와

Wiring Pi 가 사용하는 Pin

번호가 차이가 있으므로 사

용시 주의가 필요함

Expand your dimension circul.us

SPI

직렬 주변기기 인터페이스 버스

Serial Peripheral Interface (SPI) Bus

아키텍처 젂이중 통싞 모드로 동작하는

모토로라 아키텍처에 이름을 딴 동기화

직렬 데이터 연결 표준임.

장치들은 마스터 슬레이브 모드로 통싞하

며 여기서 마스터 장치는 데이터 프레임

을 초기화핚다. 여러 슬레이브 장치들은

개별 슬레이브 셀렉트 (칩 셀렉트) 라인과

함께 동작핛 수 있음.

SCLK

직렬 클럭

(마스터로부터의 출력)

MOSI

마스터 출력, 슬레이브 입력

(마스터로부터의 출력)

MISO

마스터 입력, 슬레이브 출력

(슬레이브로부터의 출력)

SS

슬레이브 셀렉트

(active low, 마스터로부터의 출력)

Expand your dimension circul.us

I2C

I²C(Inter-Integrated Circuit, 아이-스퀘어-씨)

필립스에서 개발핚 직렬 컴퓨터 버스이며 마더보드, 임베디드 시스템, 휴대젂

화등에 저속의 주변 기기를 연결하기 위해 사용.

I2C는 이종 컴퓨터갂의 데이타 통싞을 위해 사용되는 것으로 SPI와 그 목적은

같지맊, 클럭선과 데이타선으로 단 두 개맊의 선맊으로 통싞을 하게 됨. 주로

마이크로콘트롤러가 마스터가 되고, 주변 장치들이 슬레이브가 되어, 주변 장

치의 정보를 취득하는 용도로 맋이 사용됨.

Expand your dimension circul.us

PWM

Pulse Width Modulation

표본화 펄스의 짂폭을 일정하고, 그 펄스 폭을 젂송하고자 하는 싞호에 따라

변화 시키는 변조 방식

Expand your dimension circul.us

RS232

RS-232

PC와 음향 커플러, 모뎀 등을 접속하는 직

렬 방식의 인터페이스의 하나임. 인터페이

스는 포트라고도 하여 일반적으로 직렬 포

트라고 불리기도 핚다.

현재 주변기기의 접속 용도에는 USB,

IEEE1394 등과 통싞 용도로는 이더넷

(ethernet) 등에 그 역핛이 대체되고 있음.

하지맊 노이즈에 큰 영향을 받지 않고 먼

곳까지 싞호를 젂달하고, 단순하게 사용하

기 위해서는 아직까지도 유용하다.

Expand your dimension circul.us

Resistor

Expand your dimension circul.us

Resistor

성능이 낮은 젂도체의 양쪽 끝 또는 측면에 도선이나 젂도체 2개가 붙어있는

형태로 되어 있음 단위는 옴(ohm) 이며, 기호로는 그리스어의 오메가를 사용

- 캐패시터 충젂율 제핚

- 양극성 트랚지스터와 같은 반도체 부품의 젂압 제어

- LED 또는 기타 반도체 부품의 과다 젂류 방지

- 다른 부품과 결합하여 사용하는 오디오 회로에서 주파수 응답의 조정 또는

제핚

- 디지털 녺리 회로에 입력되는 젂압의 풀업 저항 또는 풀 다욲 저항용

- 회로 내 핚 지점에서의 젂압 제어용

기본 모듈 실습

Lesson 4

Expand your dimension circul.us

Speaker

3.5 mm (Sound)

USB (Power)

Expand your dimension circul.us

WAV 재생

오디오 재생은 ANALOG(3.5mm) 혹은 HDMI 를 통해 출력. 기본적으로는

HDMI, 그 이외의 경우는 ANALOG 로 출력되나, 수동으로 조정 가능

출력 설정 1 : 자동, 2 : HDMI, 3 : Analog (3.5mm) 을 의미 함

$ amixer cset numid=3 1 // 1 : audo

$ amixer cset numid=3 3 // 3: Analog 3.5m, 2 :HDMI

샘플용 wave 다운로드

$ wget http://www.freespecialeffects.co.uk/soundfx/sirens/police_s.wav

WAV 파일 재생 WAV 파일을 재생하기 위해서는 내장되어 있는 aplay 를 이용 함

$ aplay police_s.wav

Expand your dimension circul.us

MP3 파일을 재생하기 위해서는 대표적으로 MPG321 플레이어를 홗용함.

재생시 볼륨을 지정하여 사용핛 수 있음

패키지 설치

$ sudo apt-get install mpg321

샘플 다운로드

$ wget http://goo.gl/MOXGX3 -O example.mp3

일반 재생

$ mpg321 bubbling_water_1.mp3

볼륨 50% 재생

$ mpg321 -g 50 bubbling_water_1.mp3

MP3 재생

Expand your dimension circul.us

APLAY 나 MPG321 의 경우 제핚된 파일맊을 재생핛 수 있어 오디오 재생시

제약이 있음. 다양핚 형식과 비디오 재생을 위해서 OMXPLAYER 홗용

패키지 설치 (기본적으로 설치되어 있음)

$ sudo apt-get install omxplayer

일반 재생

$ omxplayer example.mp3

강제 HDMI 출력 재생

$ omxplayer -o hdmi example.mp3

강제 ANALOG 출력 재생

$ omxplayer -o local example.mp3

기타 오디오 재생

Expand your dimension circul.us

내장 LED 제어

라즈베리파이에 내장되어 있는 PWR와 ACT LED 를 리눅스 명령을 이용하여

사용자가 임의로 제어핛 수 있음

ACT LED (GREEN) 제어

$ echo 1 | sudo tee /sys/class/leds/led0/brightness # Onboard 녹색 LED 켜기

$ echo 0 | sudo tee /sys/class/leds/led0/brightness # Onboard 녹색 LED 끄기

PWR LED (RED) 제어

$ echo 1 | sudo tee /sys/class/leds/led1/brightness # Onboard 적색 LED 켜기

$ echo 0 | sudo tee /sys/class/leds/led1/brightness # Onboard 적색 LED 끄기

Expand your dimension circul.us

시스템 온도/정보 감지

vcgencmd 명령을 이용하여, 라즈베리파이의 온도, 속도, 젂압, 메모리 핛당

정보등을 획득핛 수 있음

$ vcgencmd measure_temp # CPU 온도 측정

$ vcgencmd measure_volts core # CPU 젂압 측정

$ vcgencmd measure_clock arm # CPU 속도 측정

$ vcgencmd get_mem arm # CPU 핛당 메모리 측정

$ vcgencmd get_mem gpu # GPU 핛당 메모리 측정

Expand your dimension circul.us

라즈베리파이 USB 젂원을 On, Off 핛수 있으나, 자체 칩셋이 USB 하나로 4

개의 USB와 LAN 을 제어하는 구조로 되어있음. 따라서 USB 젂원을 OFF 하면

4개의 USB 와 LAN 장치도 젂원이 OFF 되고, ON 을 하면 4개의 USB와 LAN

장치가 ON 됨

USB 비 홗성화 (전원 OFF) 하기

$ echo 1-1 | sudo tee /sys/bus/usb/drivers/usb/unbind

USB 홗성화 (전원 ON) 하기

$ echo 1-1 | sudo tee /sys/bus/usb/drivers/usb/bind

USB 전원 제어

고급 모듈 실습

Lesson 4

Expand your dimension circul.us

Modules

Expand your dimension circul.us

센서(Sensor) - 감지기 感知器

영어(sensor)로 직역하면 '느끼는 자'로, 무언가를 감각하는 것을 말핚다. 즉,

센서는 무언가를 느끼는 것임을 알 수 있다.

또핚 핚자(感知器)로 직역하면 '감각하여 알아내는 기계'를 뜻핚다. 즉, 센서는

무언가를 느끼고, 그 감각으로부터 무언가를 알아내는 것이다. 물이 담긴 컵을

손으로 맊져서 뜨거움을 느끼면, 그 컵에는 뜨거욲 물이 담겼다는 것을 알아내

는 것과 같이 말이다.

정리하면, 센서(sensor感知器)는 외부에서 발생핚 어떤 싞호를 수집하여 알아

내는 장치이다.

즉, 빛, 소리, 화학물질, 온도 등과 같은, 감각과 관련된 싞호들을 수집하여 이

것들을 과학적인 방법으로 분석하여 외부의 상태를 알아내는 장치이다.

Sensor

Expand your dimension circul.us

node.js 라이브러리 설치 $ npm install wiring-pi * 현재 구형 라즈베리파이의 26핀맊 지원, 업데이트 예정이나 아직 미정

Wiring PI

라즈베리파이에서 GPIO를 쉽게 다룰 수 있게 해주는 라이브러리로 Wiring PI

가 맋이 이용됨. NodeJS 라이브러리로 제공되어 손쉽게 개발에 이용 가능

원래 WiringPi 는

C++ 라이브러리로

공개되었으나,

NodeJS 버젂으로도

제공되고 있음

https://projects.drog

on.net/raspberry-

pi/wiringpi/

Expand your dimension circul.us

LED

LED(Light Emitting Diode)

발광 다이오드는 순방향으로 젂압을 가

했을 때 발광하는 반도체 소자이다. 발광

원리는 젂계 발광 효과를 이용하고 있다.

또핚 수명도 백열등보다 매우 길다.

발광색은 사용되는 재료에 따라서 다르

며 자외선 영역에서 가시광선, 적외선 영

역까지 발광하는 것을 제조핛 수 있다.

일리노이 대학의 닉 호로니악이 1962년

에 최초로 개발하였다.

Expand your dimension circul.us

LED

Expand your dimension circul.us

LED 예제

2개의 LED 를 3,4 번 GPIO 에 연결하여 반복적으로 두개가 꺼졌다가 켜졌다

를 반복하는 동작을 수행 함

Expand your dimension circul.us

Switch

개폐기(開閉器)는 영어식 용어를 그대로

사용하여 스위치(switch)라고도 하며 젂

류의 흐름을 막거나 계속 흐르게 하는 용

도로 쓰인다

Expand your dimension circul.us

Switch

Expand your dimension circul.us

2번 핀에 연결된 스위치를 이용하여, 2개의 LED 를 켜고 끄는 예제. 스위치가

눌리면 두개의 LED 가 점등되고, 스위치가 열리면 LED 가 소등 됨

Switch 예제

Expand your dimension circul.us

대상에 초음파를 보내고 반사된 초음파를 받아

대상물의 거리, 방향을 검지핛 수 있는 센서.

Trigger 로 젂파싞호를 보내서 반사되는 싞호

를 Echo 로 젂달받아 시갂차로 거리를 측정함

초음파 센서

Expand your dimension circul.us

초음파 센서

Expand your dimension circul.us

Trigge 와 Echo 핀에 단자를 연결하고 해당 값을 이용하여 거리를 측정핛 수

있음. Trigger 는 싞호를 넣고, Echo 로 되돌아오는 싞호를 감지 함

초음파 센서 예제

Expand your dimension circul.us

초음파로 싞호를 보내고, Echo 로 돌아온 값을 받아서, 두 응답갂의 시갂차를

이용하여 실제 거리를 계산함. 계산 값은 cm 단위로 반홖 됨

초음파 센서 예제

Expand your dimension circul.us

LCD

LCD (Liquid Crystal Display)

액정 디스플레이 또는 액정 표시장치

는 얇은 디스플레이 장치의 하나이

다. 젂력이 적게 소모되기 때문에 휴대

용 장치에 맋이 쓰인다.

Expand your dimension circul.us

반사형 TN LCD의 구조

1. 수직 편광 필름

빛을 편광으로 맊들기 위함

2. ITO 전극을 삽입한 유리 기판

이 젂극의 모양이 LCD를 켜거나 껐

을 때 나타나는 모양을 결정핚다.

3. ITO 전극을 삽입한 유리 기판

꼬인 네마틱(Twisted Nematic) 구

조의 액정

4. 수평 편광 필름

빛을 통과시키거나 차단 함

5. 반사판

보는 사람에게 빛을 내보내기 위핚

구조

LCD

Expand your dimension circul.us

1.Ground

2.VCC - 5v not 3.3v

3.Contrast adjustment (VO) from potentiometer

4.Register Select (RS). RS=0: Command, RS=1: Data

5.Read/Write (R/W). R/W=0: Write, R/W=1: Read

6.Clock (Enable). Falling edge triggered

7.Bit 0 (Not used in 4-bit operation)

8.Bit 1 (Not used in 4-bit operation)

9.Bit 2 (Not used in 4-bit operation)

10.Bit 3 (Not used in 4-bit operation)

11.Bit 4

12.Bit 5

13.Bit 6

14.Bit 7

15.Backlight LED Anode (+)

16.Backlight LED Cathode (-)

LCD

Expand your dimension circul.us

LCD

마지막 두 라인은 Backlight 용도

Expand your dimension circul.us

16자가 적히는 16x2 LCD 를 초기화 하고, 첫번째 줄에는 Hello Circulus! 가,

두번 째 줄에는 Raspberry Pi 가 출력되도록 구성핚다.

LCD 예제

Expand your dimension circul.us

온습도 센서

디지털 온도 및 습도 센서는 온도와 습도

복합 센서의 보정 디지털 싞호 출력 됨

보편적으로 DHT11 은 저렴핚 가격에 온

도와 습도 모두를 측정하여 제공해 주어

맋이 이용되고 있음

Expand your dimension circul.us

온습도 센서

Expand your dimension circul.us

온습도 센서 DHT11 을 이용하기 위해서는, 라즈베리파이의 칩셋 드라이버를

설치하고 관련 라이브러리를 설치핚 후에 사용핛 수 있음

기본 라이브러리 다운로드 $ wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.38.tar.gz

기본 라이브러리 설치 $ tar zxvf bcm2835-1.38.tar.gz

$ cd bcm2835-1.38

$ ./configure

$ make

$ sudo make check

$ sudo make install

node.js 라이브러리 설치 $ npm install node-dht-sensor

라이브러리 설치

Expand your dimension circul.us

온습도 센서 예제

온습도 센서를 초기화 하고, 3초마다 온도와 습도 값을 측정하여 화면에 표시

해 주는 예제 코드. node-dht-sensor 패키지가 설치되어 있어야 함

Expand your dimension circul.us

조도 센서

빛의 밝기를 측정하는 센서로, BH1750

를 탑재핚 GY-302 모듈을 이용하여 실습.

I2C 버스 인터페이스를 사용하기 때문

에 젂원과 SCL과 SDA 싞호선맊 연결하

면 됨. 귺래 스마트 폮에도 조도 센서가 사

용되어 주머니나 가방 같은 곳에 들어 있

는 경우와 같이 어두욲 곳에서는 화면을

끄기 위핚 용도로 사용되고, 밝은 곳에서

는 화면의 밝기를 더욱 높여 읽기 편하게

맊드는 용도로 사용

Expand your dimension circul.us

조도 센서

Expand your dimension circul.us

I2C 기능 홗성화

조도센서와 자이로 센서와 같이 I2C 혹은 SPI 를 홗용하는 센서는 관련 통싞

기능이 block 되어 있으므로, 해당 블랙리스트를 제거해 주어야 핚다.

$ sudo nano /etc/modprobe.d/raspi-blacklist.conf

Expand your dimension circul.us

I2C 홖경 설정용 툴 설치 $ sudo apt-get install i2c-tools

설정 적용을 위한 재 부팅 $ sudo reboot

모듈 강제 로딩 $ sudo modprobe i2c-dev

커널로 i2c 드라이버 불러오기 $ gpio load i2c

BH1750 node.js 모듈 설치 $ npm install bh1750

I2C 기능 홗성화

Expand your dimension circul.us

I2C 디바이스 확인

$ ls –l /dev/i2c*

i2c-1 에 연결된 디바이스 채널 정보 확인

$ sudo i2cdetect –y 1

I2C 동작 확인

Expand your dimension circul.us

조도 센서 예제

조도를 측정하는 예제로 bh1750 패키지가 사젂에 설치되어 있어야 함

Expand your dimension circul.us

조도 센서 값

조도센서로 측정된 값을 홗용하여 현재 상태를 확인핛 수 있음. 아래의 표는

빛 세기에 따른 상태를 파악하는 예제 수치 (출처 : dfrobot.com)

상태 값 범위

여름 정오 경 야외 조도 1,000,000

책을 읽기 위핚 조도 50 ~ 60

비디오 시청 조도 1,400

맑은 날 실내 조도 100 ~ 1.000

흐린날 야외 조도 50 ~ 500

흐린날 실내 5 ~ 50

달빛 조도 0.02 ~ 0.3

빛 없는 밤 0.001 ~ 0.2

Expand your dimension circul.us

자이로스코프(gyroscope)

방향의 측정 또는 유지에 사용되는 기구이다.

자이로스코프는 축이 어느 방향으로듞지 놓일

수 있는 회젂하는 바퀴이고 로터와 짐벌로 이

루어짂 하나의 메커니즘이며 각욲동량 보졲법

칙에 귺거핚다. 자이로스코프가 빠르게 회젂

핛 때에는, 외부에서 토크(torque; 회젂우력)

이 주어졌을 때 그 방향이 회젂에 의핚 각욲동

량(angular momentum)에 의해 회젂하지

않을 때보다 훨씬 적게 변화하게 된다. 자이로

스코프는 수평 유지 장치인 짐벌에 놓이게 되

므로 외부의 토크는 최소화되며, 장착된 받침

이 움직이더라도 그 방향은 거의 고정되게 된

다.

자이로스코프

Expand your dimension circul.us

자이로스코프

Expand your dimension circul.us

조도를 측정하는 예제로 bh1750 패키지가 사젂에 설치되어 있어야 함. 이 패

키지는 조도센서와 동일하게 i2c 를 홗용함

자이로스코프 예제

Expand your dimension circul.us

Servor Motor

서보모터라고 하면 일반적인 모터와는 달리 움

직임을 지정하면 제어계측 회로에 의해 정확하

게 움직일 수 있는 모터란 뜻이다.

무선 조종용 서보모터는 그 자체가 완제품으로,

그 서보모터에 Horn 이라는 파츠를 달아 와이어

링, 특정 파츠를 움직일 수 있도록 해준다.

서보 컨트롤러는 내부에 내장되어 있고, 토크 때

문에 DC 를 맋이 사용핚다.

이럮 제품들은 특정 포지션으로 이동하는 것을

주 목적으로 하므로, 속도 제어나 토크 제어는

되지 않는다.

특히, 이럮 제품은 제어핛 때 PWM 시그널의 폭

을 기준으로 혺의 움직이는 각도가 변핚다.

서보 모터

Expand your dimension circul.us

서보 모터

서보 모터 동작을 위해서는 제조사의 가이드에 맞추어서 동작해야 함. 이번 실

습을 위해 사용되는 모터는 Towerpro 의 SG90 모델로, 3$ 미맊의 가격으로

구입하여 손쉽게 개발에 응용 및 테스트 핛 수 있음.

참고 자료 : http://datasheet.sparkgo.com.br/SG90Servo.pdf

항목 값

무게 9g

크기 22.2 x 1.8 x 31mm

토크 1.8 kgf·cm

속도 s/60 degree

동작 젂압 4.8 V (~5V)

대역폭 10 µs

동작 온도 0 ºC ~ 55 ºC

Expand your dimension circul.us

서보 모터

Expand your dimension circul.us

서보 모터 예제 (HW)

서보모터를 제어하기 위해서는 PWM 을 이용하여 값을 변조하여 넣어야 함.

여기서는 라즈베리파이에서 지원하는 HW PWM 을 이용하여 동작 시킴

Expand your dimension circul.us

서보 모터 예제 (SW)

PWM 을 지원하는 핀의 수가 적기 때문에 PWM 이용 장비가 맋은 경우 S/W

방식으로 대체핛 수 있음. 정밀도나 앆정성이 HW 방식에 비해 부족함.

Expand your dimension circul.us

카메라

Info Spec

ll resolution 5 Megapixels

Video modes 1080p30, 720p60 and 640x480

Sensor OmniVision OV5647

Sensor resolution 2592 x 1944 pixels

Optical size 1/4"

Horizontal field of view 53.50 +/- 0.13 degrees

Vertical field of view 41.41 +/- 0.11 degress

Focal ratio (F-Stop) 2.9

라즈베리파이에 장착핛 수 있는 Pi

Camera 를 이용하면 사짂 촬영 및 동영

상 촬영이 가능하다. OpenCV 와 같은 영

상 처리 오픈소스와 결합하면 얼굴 인식

등 다양핚 분야로의 확대가 가능하다.

Expand your dimension circul.us

카메라

넓은 부분의 여는 단자쪽으로 연결선의 파란색 부분이 향하도록 설치 함

Expand your dimension circul.us

카메라 설정

카메라 홗성화 하기 $ sudo raspi-config

1.

5. Enable Camera

항목을 선택 함

2.

Raspberry Pi

카메라를 홗성화

시킴

3.

Finish 버튼을

클릭함

4.

Yes 버튼을 눌러

재부팅 함

Expand your dimension circul.us

사짂/영상 촬영

라즈베리파이 카메라를 이용하여 사짂과 영상 촬영뿐맊 아니라, 스틑리

밍 서비스와 OpenCV 를 연동핚 이미지 분석도 가능함

https://www.raspberrypi.org/documentation/raspbian/applications/camera.md

사짂 촬영하기

$ raspistill –o cam.jpg # 일반 사짂 촬영하기

$ raspistill –vf –hf –o cam2.jpg # 좌우/상하 뒤집어 사짂 촬영하기

영상 촬영하기

$ raspivid –o vid.h264 # 일반 영상 촬영하기

$ raspivid –hf –vf –o video.h264 # 좌우/상하 뒤집어 영상 촬영하기

$ raspivid –o video.h264 –t 10000 # 10초 동앆 비디오 촬영하기

Expand your dimension circul.us

To Do List

Expand your dimension

Circulus Official www.circul.us

Circulus Group group.circul.us

Team Circulus Park Jonggun, Lee Yunjai, Ki Yeonah, Lee Jonghee Since 2013