arduino 40 - cafe24 · 2019-01-28 · 5 arduino 와 함께 하는 40 가지 센서 브 커먼즈...

118
1 Arduino함께 하는 40가지 센서 목차 Chapter 1. Arduino .................................................................................................................................................... 2 1.1. Arduino대해서..................................................................................................................................... 2 1.2. Arduino 종류....................................................................................................................................... 6 Chapter 2. 아두이노를 다루기 위한 기본지식 ............................................................................................ 7 2.1. 프로그래밍 .................................................................................................................................................. 7 2.2. 전기 전자 기초 ...................................................................................................................................... 10 Chapter 3. 개발 환경 구축................................................................................................................................. 13 3.1. Arduino Software 설치 ....................................................................................................................... 13 3.2. 프로그램 작성 컴파일 ................................................................................................................. 25 3.3. 이미지 로딩 디버그...................................................................................................................... 31 Chapter 4. 다양한 센서들을 다뤄보자.......................................................................................................... 35 4.1. 디지털 센서류 ........................................................................................................................................ 35 4.2. 아날로그 센서류.................................................................................................................................... 71 4.3. 아두이노 라이브러리 ........................................................................................................................107 4.4. 라이브러리 활용..................................................................................................................................111

Upload: others

Post on 29-Dec-2019

0 views

Category:

Documents


0 download

TRANSCRIPT

  • 1

    Arduino와 함께 하는 40가지 센서

    목차 Chapter 1. Arduino .................................................................................................................................................... 2

    1.1. Arduino에 대해서..................................................................................................................................... 2

    1.2. Arduino 핀 종류 ....................................................................................................................................... 6

    Chapter 2. 아두이노를 다루기 위한 기본지식 ............................................................................................ 7

    2.1. 프로그래밍 .................................................................................................................................................. 7

    2.2. 전기 전자 기초 ...................................................................................................................................... 10

    Chapter 3. 개발 환경 구축 ................................................................................................................................. 13

    3.1. Arduino Software 설치 ....................................................................................................................... 13

    3.2. 프로그램 작성 및 컴파일 ................................................................................................................. 25

    3.3. 이미지 로딩 및 디버그 ...................................................................................................................... 31

    Chapter 4. 다양한 센서들을 다뤄보자.......................................................................................................... 35

    4.1. 디지털 센서류 ........................................................................................................................................ 35

    4.2. 아날로그 센서류 .................................................................................................................................... 71

    4.3. 아두이노 라이브러리 ........................................................................................................................ 107

    4.4. 라이브러리 활용 .................................................................................................................................. 111

  • 2

    Arduino와 함께 하는 40가지 센서

    Arduino와 함께 하는 40가지 센서

    Chapter 1. Arduino

    1.1. Arduino에 대해서

    1.1.1. 아두이노(Arduino)란?

    2005년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기

    위해 아두이노(이하 Arduino와 동일한 표현)를 만들었습니다. 오픈 소스와 통합개발환경

    (IDE)을 사용하여 마이크로컨트롤러를 보다 편리하게 하드웨어를 구성하고 동작시킬 수

    있습니다. 또한 아두이노 보드는 아두이노사에서 제작된 보드들, 그 기기들과 호환되는

    제품들을 말합니다.

    아두이노 보드는 하드웨어와 소프트웨어 구조가 모두 개방된 오픈 소스 플랫폼이기때문

    에 정품뿐만 아니라 기능이나 성능, 제조사, 가격 등에 따라 다양한 보드들이 존재합니다.

    여기에서는 동일한 아두이노 IDE를 사용해서 개발할 수 있고 기본적으로 많이 사용되는

    본 교재에서는 Arduino Uno R3 모델을 사용합니다.

  • 3

    Arduino와 함께 하는 40가지 센서

    정품보드 호환보드

    아두이노 우노는 세계에서 가장 많이 사용되는 기본적인 아두이노 보드입니다. 이 보드의

    핀 배일 거의 표준과 같이 사용됩니다.

    아두이노 나노는 우노와 거의 동일한 구성을 가지고 있습니다. 브레드 보드에서 실험을

    할수 있도록 작은 크기와 핀배열을 가집니다.

    1.1.2. Arduino Uno R3

  • 4

    Arduino와 함께 하는 40가지 센서

    프로세서로는 ATMega328을 사용하고 있으며 0 ~ 13번의 14개의 디지털 입출력 핀을 가

    지고 있어 외부의 이진 신호를 읽어 들이거나 또는 이진 신호를 내보낼 수 있습니다.

    이진 신호란 ON/OFF나 0/1과 같이 상태값이 두 가지만을 가지는 신호라는 의미입니다.

    이 디지털 핀을 이용해서 LED를 켜고/끄거나 외부의 스위치가 눌러져 있는지 아닌지 등

    을 검출할 수 있습니다. 구체적으로 0V와 5V 두 전압 중 하나의 값을 가지며 이것으로

    프로그램을 제어할 수 있습니다.

    1.1.3. Arduino 특징

    현재 많은 마이크로 컨트롤러 및 물리적 컴퓨팅에 해당하는 마이크로 컨트롤러 플랫폼이

    있습니다. Netmedia의 BX-24, Phidgets, MIT의 HandyBoard, 그리고 많은 다른 유사한 기

    능을 제공합니다. 이러한 툴은 모두 마이크로 컨트롤러 프로그래밍의 지저분한 세부 사항

    을 가지고 사용하기 쉬운 패키지로 감싸고 있습니다. 아두이노는 마이크로 컨트롤러와 함

    께 작동하는 과정을 단순화 하였지만 다른 시스템을 통해 교사, 학생, 관심 있는 아마추

    어를 위한 아래와 같은 몇 가지 이점을 제공합니다.

    저렴한 가격 - 아두이노 보드는 다른 마이크로 컨트롤러 플랫폼에 비해 상대적

    으로 저렴합니다. arduino의 모듈의 가장 저렴한 버전은 손에 의해 조립 될 수

    있고, 심지어는 미리 조립된 모듈의 Arduino 모듈은 50달러 미만입니다.

    크로스 컴파일 플랫폼 - 대부분의 마이크로 컨트롤러 시스템은 윈도우 운영체제

    로 제한이 되지만 아두이노 소프트웨어는 윈도우, 매킨토시 OSX, 리눅스 운영체

    제에서 실행됩니다.

    단순 명확한 프로그래밍 환경 - 아두이노 프로그래밍 환경은 초보자를 위해 사

    용하기 쉬운, 그러나 고급 사용자들도 활용하기 쉽도록 설계됬습니다. 언어는

    C++ 라이브러리를 통해 확장 할 수 있고, 기술적으로 세부 사항을 이해하고자

    하는 사람들은 아두이노를 통해 AVR C 프로그래밍 언어에 도약 할 수 있습니다.

    만약 사용자가 원한다면 아두이노 프로그램에 AVR C코드를 추가 할 수 있습니다.

    오픈 소스 및 확장 가능한 하드웨어 - 아두이노는 Atmel사의 ATMEGA8 과 AT-

    MEGA168을 기반으로 하는 마이크로 컨트롤러입니다. 모듈에 대한 계획은 경험

    많은 회로 설계자가 직접 개선하여 자신의 버전을 만들 수 있습니다. 크리에이티

  • 5

    Arduino와 함께 하는 40가지 센서

    브 커먼즈 라이선스(CCL)로 배포됩니다. 그렇다 하더라도 상대적으로 경험이 없

    는 사용자가 어떻게 작동하는지 이해하고 비용을 절감하기 위해 모듈의 브레드

    버전을 구축 할 수 있습니다.

    1.1.4. Arduino의 응용

    현재 Arduino는 여려 방면에서 사용되고 있습니다. 사용 사례를 보면 원래의 목적인 학생

    들의 교육을 위해 기본 보드를 기초로 하여 외부 기기들 제어하는 용도로 사용되고 있으

    며 또한 다양한 IT전시회에서 Arduino를 이용한 핸드폰 웹 개발 및 예술가들이 디지털화

    된 작품들을 만들 때 많이 응용된다. 아래 그림들은 Arduino의 응용 사례들입니다.

  • 6

    Arduino와 함께 하는 40가지 센서

    1.2. Arduino 핀 종류

    1.2.1. 디지털 입출력 핀(0번 ~ 13번 핀)

    0번과 1번 핀은 시리얼 통신에 사용된. USB로 PC와 통신을 할 수 있습니다.

    2번과 3번 핀은 인터럽트 기능을 갖습니다.

    3, 5, 6, 9, 10, 11번 핀은 PWM 기능을 가지며 아날로그 출력을 흉내낼 수 있습니

    다.

    1.2.2. 아날로그 입력 핀 6개(A0~A5)

    센서와 연결하여 센서의 아날로그 입력값을 읽어들이는데 사용합니다.

    아날로그 신호는 디지털 신호와 달리 연속값을 의미하며 이것은 예를 들어서 온

    도, 빛의 세기 등이 있고 이것을 물리량이라 합니다.

    물리량을 센서가 전기신호로 변환하며 이것을 이 아날로그 핀으로 읽어들일 수

    있습니다

    센서를 통해 읽은 전압값은 0~1023사이의 숫자로 변환합니다.

    기준 전압은 5V이지만 1.1V의 내부 전압이 사용될 수 있습니다.

    AREF핀으로 기준 전압을 직접 인가할 수도 있습니다.

    디지털 입/출력 핀으로도 사용이 가능합니다.

    1.2.3. 아날로그 출력 핀 6개(3, 5, 6, 9, 10, 11번 핀)

    디지털 출력핀은 0V/5V 두가지 값만을 가질 수 있습니다.

    아날로그 출력핀은 0V~5V사이의 전압 값(256단계)를 가질 수 있습니다.

    정확히 이야기하면 PWM방식으로 동작하므로 순수 아날로그 방식은 아닙니다.

    1.2.4. 인터럽트(2, 3번 핀)

    2번과 3번핀은 인터럽트 기능을 가집니다.

    인터럽트 처리라는 이벤트를 처리하는 사용되는 기능으로서 특정한 신호가 발생

    했을 때 정해진 동작을 수행하여야 하는 경우 사용되는 방식입니다.

    1.2.5. 그 외의 기능들

    SPI 통신: ICSP 헤더핀

    TWI(I2C)통신: A0, A1핀

  • 7

    Arduino와 함께 하는 40가지 센서

    Chapter 2. 아두이노를 다루기 위한 기본지식

    2.1. 프로그래밍

    2.1.1. 프로그래밍이란?

    프로그래밍은 프로그램을 만드는 과정을 말하며 프로그램은 일의 순서 또는 과정을 말합

    니다.

    위와 같은 과정 또한 프로그램이라 할수 있습니다. 우리가 스마트폰이나 컴퓨터에서 사용

    하는 인터넷, 게임 등의 프로그램은 컴퓨터를 통해 제작하는 ‘컴퓨터 프로그램’이며, C언

    어, 파이썬, 자바, 등의 프로그래밍 언어를 사용하여 만들 수 있습니다.

  • 8

    Arduino와 함께 하는 40가지 센서

    2.1.2. 프로그래밍 언어

    프로그래밍 언어는 사람과 디바이스(컴퓨터, 아두이노 등)가 의사소통을 가능하게 해주는

    언어입니다. 우리가 키보드로 A 를 입력하지만 사실 컴퓨터는 0 과 1 로 이루어진

    기계어로 표현합니다. 0 과 1 만을 사용하는 컴퓨터에서 기계어를 사용하여 프로그램을

    제작하기란 쉽지 않습니다. 그렇기 때문에 만들어진 것이 C, C++, JAVA 등과 같은

    프로그래밍 언어입니다. 즉, 프로그래밍 언어는 사람이 사용하는 언어를 컴퓨터가

    사용하는 기계어로 바꿔주는 언어입니다.

    아두이노는 C, C++를 사용합니다. C 언어에 대해 설명을 드리자면 세계적으로 많이

    쓰이는 영어와 같이 대부분의 컴퓨터 시스템에 사용할 수 있는 프로그래밍 언어입니다.

    절차 지향적 언어로 빠른 연산속도를 자랑하며, 운영체제 및 디바이스 드라이버,

    마이크로 컨트롤러 임베디드 프로그래밍 등에 사용되고 있습니다.

  • 9

    Arduino와 함께 하는 40가지 센서

    2.1.3. 프로그래밍을 왜 배워야 할까?

    스티브 잡스는 이렇게 말했습니다. “이 나라 모든 사람들은 컴퓨터 프로그래밍을 배워야

    하는 이유는 사고하는 법을 배워야 하기 때문이다.”

    기본적으로 뭘 모르는지 모르는 것과, 뭘 모르는지 아는 것은 하늘과 땅만큼의 차이를 가

    지고 있습니다. 즉, 뭘 모르는지 모른다면 그것은 개선의 의지가 없다는 것이지만 뭘 모

    르는지 아는 것은 개선을 할 수 있다는 것입니다. 그리고 컴퓨터를 기반으로 한 응용프로

    그램 활용 능력이 달라집니다. 만약 어떤 학교의 학생들의 반평균과 학년 평균을 구하는

    경우 이것을 엑셀과 같은 프로그램으로 순식간에 끝낼지, 아니면 계산기나 암산을 통해서

    일일이 사칙연산을 하는지는 시간적으로나 비용적으로나 충분히 우리에게 코딩의 중요성

    을 일깨워 줍니다.

    4차 산업혁명에선 빅 데이터 분석, 인공지능, 로봇공학, 사물인터넷, 무인 운송 수단, 3차

    원 인쇄, 나노 기술과 같은 6대 분야에서 새로운 기술혁명입니다. 이들 분야에선 컴퓨터

    는 빼놓을 수는 없을 것입니다. 즉, 프로그래밍을 모른다면 살아가는게 힘들 것입니다

    2.1.4. 아두이노 프로그래밍

    아두이노사에서 무상으로 제공되는 아두이노 통합개발환경(IDE)은 아두이노의 모든 기능

    을 사용할 수 있도록 지원하는 컴파일러이며, C언어 기반의 프로그래밍 언어를 입력하여

    프로그램을 만들수 있습니다. 기존의 C언어는 굉장히 광범위하며 어려운 언어이지만, C언

    어를 바탕으로 재구성된 아두이노 언어는 비교적 쉽게 익혀서 사용할수 있습니다. 그 외

    에도 아두이노 보드는 스크래치나 엔트리와 같은 프로그램과도 사용할 수 있습니다

  • 10

    Arduino와 함께 하는 40가지 센서

    2.2. 전기 전자 기초

    2.2.1. 전기에 대한 이해

    전기에너지는 화력, 원자력 등의 발전소에서 만들어진 후 재가공을 거쳐 가정이나 공장

    등으로 공급이 됩니다. 집에서 흔히 볼수 있는 콘센트나 여러가지 건전지, 배터리들을 통

    해 전기에너지를 공급받아 사용합니다.

    2.2.2. 직류 전기와 교류 전기

    전기는 크게 직류전기와 교류 전기로 나뉩니다. 그렇다면 직류 전기와 교류 전기는 무엇

    이 다를까요? 다음 그림을 보고 설명하겠습니다.

    직류전기는 시간에 관계없이 항상 일정하게 음극에서 양극으로 한 뱡향으로만 흐르는 전

    기입니다. 건전지가 이 방식에 해당합니다. 멀리 떨어진 곳으로 전기를 송전하기 위해서

    는 전압을 고압으로 승압시켜야하지만 직류는 고압으로의 승압이 어렵기 때문에 일반 가

    정에 보급하기가 힘듭니다.

    교류전기는 전압, 전류 극성의 방향이 함께 바뀝니다. 그리고 일정 시간에 몇번 바뀌는지

    에 따라서 주파수가 정해집니다. 우리가 가정에서 사용하고 있는 콘센트는 220VAC 입니

    다.

    2.2.3. 전기의 원리

    전기는 원자안의 자유 전자가 외부로 이동하여 생기는 에너지의 한 형태입니다. 원자는

    원자핵을 기준으로 전자와 원자핵의 인력을 덜 받는 자유전자가 회전하고 있습니다. 자유

    전자는 원자의 외부로 벗어날 수 있으며, 이러한 현상을 ‘전기가 흐른다’고 표현할수 있습

    니다.

  • 11

    Arduino와 함께 하는 40가지 센서

    2.2.4. 전기의 성질

    전기의 성질은 전압, 전류, 저항을 통해 정의할 수 있으며, 이는 물이 흐르는 성질에 비유

    하여 나타낼 수 있습니다.

    전압은 수압에 비유 할 수 있고 저항은 물의 흐름을 방해하는 지형지물과 같습니다. 또한

    전류는 물의 흐름입니다.

    2.2.5. 옴의 법칙

    전자기학의 법칙 중 하나인 옴의 법칙은 게오르크 옴의 이름을 딴 것입니다. 도체의 두지

    점사이에 나타나는 전위차에 의해 흐르는 전류가 일정한 법칙에 따르는 것을 말합니다.

    두 지점 사이의 도체에 일정한 전위차가 존재할 때, 도체의 저항의 크기와 전류의 크기는

    반비례합니다. 전류(I)는 도선에 흐르는 단위로 암페어(A), 전압(V)은 도체에 양단에 걸리는

    전위차로 단위는 볼트(V), 그리고 저항(R)은 도체의 전기저항으로 단위는 옴(Ω)입니다.

    I=V/R으로 표현하는데 전류는 전압에 비례하고 저항에 반비례한다고 합니다.

    2.2.6. 전압 분배 법칙

    전압 분배 법칙은 전기 회로 안에 다수의 저항기가 있을 경우 저항기를 지날 때 마다 전

    압이 사용되어 전압이 떨어지는 현상을 가지고 어떤 회로나 부품에서 필요로 하는 전압

    을 만들어줄 때 사용합니다. 즉, 12V의 입력전압을 가지고 5V의 LED를 켜려고 하면 LED

    는 고장이 납니다. 그렇기 때문에 저항기를 추가하여 12V의 전압을 5V로 낮춰 LED를 켤

    수 있습니다 아날로그 신호와 디지털 신호

  • 12

    Arduino와 함께 하는 40가지 센서

    전기 신호는 아날로그 신호와 디지털 신호로 나뉘며, 우리가 사용하는 아두이노 우노보드

    는 디지털 신호와 아날로그 신호를 사용하여 부품들을 제어 및 센싱할 수 있습니다.

  • 13

    Arduino와 함께 하는 40가지 센서

    Chapter 3. 개발 환경 구축

    3.1. Arduino Software 설치

    3.1.1. Arduino Software 다운로드

    Arduino는 Arduino 홈페이지(www.arduino.cc/)에서 제공하고 있으며 무료로 다운받아 설치

    할 수 있습니다. 다운 로드 방법은 홈페이지에 접속 후 SOFTWARE - DOWNLOADS 탭을

    클릭합니다.

    다운로드 페이지에서 중간에 Download the Arduino IDE를 보면 ARDUINO1.8.6이라고 버

    전이 표시되어 있고 우측을 보면 각 운영체제나 버전별로 구분이 되어있습니다.

    http://www.arduino.cc/

  • 14

    Arduino와 함께 하는 40가지 센서

    우리가 사용할 버전은 Windows Installer, for Windows XP and up을 클릭하면 다음화면으

    로 넘어가게 된다. 그러면 JUST DOWNLOAD를 누르면 다운로드가 시작됩니다.

  • 15

    Arduino와 함께 하는 40가지 센서

  • 16

    Arduino와 함께 하는 40가지 센서

    3.1.2. Arduino IDE 설치

    다운이 완료되면 Install 파일을 눌러 설치를 시작합니다.

    동의

    설치할 컴포넌트를 선택해줍니다. 다 선택하면 됩니다.

  • 17

    Arduino와 함께 하는 40가지 센서

    설치할 위치를 설정해줍니다.

    설치가 진행중입니다.

  • 18

    Arduino와 함께 하는 40가지 센서

    설치 중간에 드라이버 설치를 묻는데 설치해줍니다.

    설치가 완료 되면 다음과 같은 폴더의 구조로 이루어진 아두이노 프로그램을 볼 수 있습

    니다.

    위 과정을 거치면 아두이노 소프트웨어 설치가 완료됬습니다. 아래 그림과 같이 PC와 아

    두이노를 USB케이블로 연결합니다.

  • 19

    Arduino와 함께 하는 40가지 센서

    3.1.3. Arduino driver 설치

    연결을 했을 때 다음 그림과 같이 장치관리자에 들어가서 포트에 Arduino Uno(COM4)와

    같은 형식이 있다면 드라이버까지 잘 잡힌 것입니다.

  • 20

    Arduino와 함께 하는 40가지 센서

    만약 드라이버가 잡히지 않았거나 설치가 안 됐을 경우 다음의 방법으로 시도해보기시

    바랍니다.

  • 21

    Arduino와 함께 하는 40가지 센서

  • 22

    Arduino와 함께 하는 40가지 센서

  • 23

    Arduino와 함께 하는 40가지 센서

  • 24

    Arduino와 함께 하는 40가지 센서

    위 그림과 같은 과정을 거치면 Driver설치가 완료됩니다. 이제 Arduino 프로그램에서 코

    드 작성 후 컴파일 된 이미지 파일을 보드에 업 로딩하고 코드에서 출력하는 debug 메

    시지를 확인 할 수 있는 조건이 갖추어진 것이다.

  • 25

    Arduino와 함께 하는 40가지 센서

    3.2. 프로그램 작성 및 컴파일

    3.2.1. 프로그램 작성

    코드 작성에 필요한 준비가 완료되었으니 실제로 아두이노 프로그램에는 어떠한 기능이

    있고 어떻게 사용하는지 알아 보도록 합니다. 우선 아두이노 프로그램을 실행하면 아래

    그림과 같은 프로그램 실행 화면을 확인할 수 있습니다.

    프로그램을 보면 위에 5개의 메뉴와 그 아래 6개의 아이콘들이 있다. 각각 의 아이콘들을

    살펴 보면 다음과 같습니다.

    1: 컴파일 -> 작성된 프로그램을 컴파일 합니다.

    2: 컴파일 및 업로드 -> 작성된 프로그램을 컴파일 후 보드에 업 로딩 합니다.

    3: 새파일 -> 새로운 스케치 파일을 생성합니다.

    4: 열기 -> 저장된 스케치 파일을 엽니다.

  • 26

    Arduino와 함께 하는 40가지 센서

    5: 저장 -> 스케치 파일을 저장합니다.

    6: 시리얼모니터 -> 코드상에서 Serial Data 전송 및 출력합니다.

    아이콘들의 기능입니다. 이 기능들을 숙지 하고 다음과 같이 타이핑하여 기본적인 소스코

    드를 작성해보세요.

    소스코드를 설명하자면 13이라는 값을 가지는 int형 변수 led를 선언해서 출력핀으로 설

    정하고 1초마다 HIGH와 LOW 값을 가지는 소스입니다. 다음에 설명할 Blink 예제와 같은

    소스입니다.

  • 27

    Arduino와 함께 하는 40가지 센서

    3.2.2. 파일 열기

    프로그램의 메뉴에서 파일 ->예제->01.Basics->Blink를 선택합니다.

    Blink를 선택 아래의 그림처럼 코드가 작성된 새로운 스케치가 생성됩니다.

  • 28

    Arduino와 함께 하는 40가지 센서

    주석으로 처리된 구문이 있는데 예제에 대한 설명과 언제, 누가 수정했는지에 대한 설명

    이 나옵니다. 여기서는 이 예제에 대한 설명이 나와있는데 우리가 사용하는 우노 보드에

    선 LED_BUILTIN는 13번 핀으로 설정 돼있다 정도만 알면 됩니다.

    소스 코드를 설명 하자면 Setup() 함수에서 LED와 연결된 핀 (13번)을 pinmode() 라는

    api 함수를 통해 출력으로 설정하고 loop() 함수는 출력으로 설정된 LED Pin을 digital-

    Write()함수를 통해 HIGH 을 출력으로 내보내고 1000ms 즉 1초 후에 다시 LED pin에

    LOW를 출력하는 소스 코드입니다.

    동작으로 본다면 1초 LED ON 1초 LED OFF의 동작을 한다. 여기서 setup 함수는 스케치

    가 실행되면서 처음에 한번 실행되는 함수이고 주로 외부디바이스와 연결된 포트 설정

    및 Serial을 초기화합니다. loop()함수는 스케치가 실행되면 처음 setup 함수를 실행한 다

    음 board가 멈추기 전까지 계속해서 loop() 함수를 실행합니다.

  • 29

    Arduino와 함께 하는 40가지 센서

    3.2.3. 컴파일 방법

    blink 스케치에 대해 알아보았고 소스가 확인되었으므로 컴파일 한다. 컴파일은 메뉴의

    스케치->확인/컴파일을 누르거나 아이콘에서 √아이콘(확인)을 클릭합니다.

  • 30

    Arduino와 함께 하는 40가지 센서

    컴파일 버튼을 클릭하면 위 그림처럼 진행바가 나타나고 진행바가 끝까지 가게 되면 컴

    파일이 완료됩니다. 만약 에러가 있을 경우에는 주황색 메시지로 에러 메시지를 표출하게

    됩니다.

  • 31

    Arduino와 함께 하는 40가지 센서

    3.3. 이미지 로딩 및 디버그

    3.3.1. 이미지 로딩

    위에서 컴파일까지 진행했습니다. 이 컴파일 된 이미지를 보드에 업 로딩 하는 방법을 알

    아보고 또한 디버그 방법은 어떻게 하는지 알아보겠습니다.

    보드에 이미지 업 로딩을 위해서는 2가지 설정이 완료되어야 합니다. 첫번째 설정은 "보

    드" 설정입니다. 아두이노 프로그램은 제공하는 보드에 대한 ISP설정이 각 기기 별로 되

    어 있어 그것을 선택해 주기만 하면 업 로딩은 아주 쉬운 구조로 돼있습니다. 선택하는

    방법은 메뉴에서 툴->보드->"보드 선택" 선택하여 설정합니다. 아두이노 보드가 여러종류

    가 있기때문에 자신의 보드에 맞게 선택합니다.

    보드 설정이 완료 되었다면 두 번째로 설정해야 할 것이 시리얼 포트설정입니다+. 아두

    이노 프로그램은 이미지를 업 로딩할 때 USB포트를 통해 이루어지기 때문에 USB가 연결

    된 포트를 설정해야만 합니다. 설정 방법은 도구->시리얼 포트->"연결된 포트"를 선택합

    니다.

  • 32

    Arduino와 함께 하는 40가지 센서

    시리얼 포트까지 완료되었다면 이미지 업 로딩 준비가 끝났습니다. 보드에 업 로딩은 ->

    모양의 Icon을 클릭하여 이루어집니다.

    업 로딩이 완료되면 보드의 LED(PIN13에 연결된 LED)가 1초 ON, 1초 OFF 동작 하는 것

    을 확인 육안으로 확인 할 수 있습니다.

  • 33

    Arduino와 함께 하는 40가지 센서

    3.3.2. 디버그 방법

    위의 Blink 예제처럼 LED를 제어하여 육안으로 확인이 가능하다면 코드가 돌아 간다는 것

    을 확인할수 있습니다. 하지만 코드 중간에 에러가 나거나 코드가 어느 흐름으로 이루어

    지는지 알고 싶을 경우에 일일이 LED를 제어할수는 없습니다. 이럴 때 이용하는 것이

    Serial 모니터 기능을 이용하여 debug 메시지를 출력하여 확인 할 수 있습니다. Serial 모

    니터 기능 사용하기 위해서는 우선 setup 함수에 Serial을 사용할 수 있도록 초기화 하고

    loop()함수가 동작 시 원하는 위치에 print()함수를 이용하여 메시지를 출력합니다. 이렇게

    되면 코드가 원하는 방향으로 흘러가는지 및 원하는 data가 나오는지를 확인할수 있어

    debugging시 상당한 도움됩니다. blink예제에 Serial을 초기화 하고 LED제어 후 println메

    시지를 출력해 보도록합니다.

  • 34

    Arduino와 함께 하는 40가지 센서

    위 그림에서 빨간색으로 네모 칸 쳐진 곳이 Blink 예제에서 추가된 부분입니다. 설명을 첨

    부한다면 setpup() 함수에서 Serial을 115200의 baud rate 의 속도로 초기화 한 것이고

    loop()함수에서 LED를 제어 후 Pirint 할 Data를 Serial로 보내고 있습니다. 이것을 컴파일

    후 업로딩 하여 시리얼 모니터로 확인할수 있습니다.

    위 그림처럼 코드에서 작성한 LED ON, OFF print 문이 시리얼 모니터 창에 표시되는

    것을 확인 할 수 있습니다. 이렇게 Serial debugging 을 사용하여 손쉽게 debuging이

    가능합니다.

  • 35

    Arduino와 함께 하는 40가지 센서

    Chapter 4. 다양한 센서들을 다뤄보자

    센서란 무엇인가를 감지하기 위한 장치입니다. 온도나 습도, 밝기, 소리, 움직임 등 다양한

    요소에 대해 측정 되거나 혹은 감지된 데이터를 물리적인 수치값으로 출력합니다. 센서는

    성능, 크기, 가격 등에 따라 여러가지 종류로 나뉘며 센서마다 사용 방법이 다릅니다.

    이 장에서는 여러가지 센서 모듈을 이용하여 실습 해보면서 센서들이 어떠한 기능을 하

    는지 알아보고 이를 통하여 다양한 프로젝트에서 센서들을 응용 할 수 있습니다.

    4.1. 디지털 센서류

    센서는 디지털 신호를 통해 입력과 출력의 결과를 나타내는 종류가 있습니다.

    LOW와 HIGH를 통해 센서를 동작할 수 있습니다.

    4.1.1. 7컬러 플래시 LED 모듈

    색이 7가지로 변하는 LED 모듈입니다. 디지털 신호로 제어할 수 있고 간단한 조명

    장식등에 활용이 가능합니다.

    센서사진 및 핀 연결

    아두이노 LED

    D11 S

    GND ―

  • 36

    Arduino와 함께 하는 40가지 센서

    회로 연결

    소스코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    int Color = 11; // 11번 핀을 사용

    void setup() {

    pinMode(Color, OUTPUT); //출력모드 설정

    }

    void loop() {

    digitalWrite(Color, HIGH); // LED on

    delay(500); // 0.5초 대기

    digitalWrite(Color, LOW); // LED off

    delay(500); // 0.5초 대기

    }

  • 37

    Arduino와 함께 하는 40가지 센서

    4.1.2. 피에조 부저 모듈

    전원이 입력 되었을 압전효과에 의해 음향을 출력하는 부저 모듈입니다. 디지털 신호

    입력으로 소리를 출력합니다. 알람, 멜로디, 경고음 장치 등에 응용 할 수 있습니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 피에조 부저

    D11 S

    GND ―

  • 38

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    int buzzer = 11; // 11번 핀을 사용

    void setup () {

    pinMode (buzzer, OUTPUT); // 출력모드로 설정

    }

    void loop () {

    digitalWrite(buzzer, HIGH); // Buzzer on

    delay(500); // 0.5초 대기

    digitalWrite(buzzer, LOW); // Buzzer off

    delay(500); // 0.5초 대기

    }

  • 39

    Arduino와 함께 하는 40가지 센서

    4.1.3. 수동 부저 모듈

    전원과 신호가 입력되었을 때 신호에 따라 음을 출력하는 수동형 부저 모듈입니다.

    Tone 함수를 사용하여 음의 주파수에 맞는 신호가 입력될 경우 간단한 음악을 재생할

    수 있고 알람, 멜로디, 경고음 장치 등에도 응용 할 수 있습니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 수동 부저

    D11 S

    GND ―

  • 40

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    int buzzer = 11; // 11번 핀을 사용

    void setup () {

    pinMode (buzzer, OUTPUT); // 출력모드로 설정

    }

    void loop () {

    tone(buzzer,261.6); // 음계 '도' 출력

    delay(500); // 0.5초 대기

    tone(buzzer,311.1); // 음계 '레' 출력

    delay(500); // 0.5초 대기

    tone(buzzer,329.6); // 음계 '미' 출력

    delay(500); // 0.5초 대기

    }

  • 41

    Arduino와 함께 하는 40가지 센서

    4.1.4. 레이저 발광 모듈

    전원이 입력되면 레이저를 발광하는 모듈입니다. 디지털 신호를 통하여 제어 하고 특

    정 지점을 가르키는 레이저 포인터 등에 응용 할 수 있습니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 레이저

    D11 S

    VCC ┼

    GND ―

  • 42

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    int Laser = 11; // 11번 핀을 사용

    void setup() {

    pinMode (Laser, OUTPUT); // 출력 모드로 설정

    }

    void loop() {

    digitalWrite (Laser, HIGH); // 레이저 on

    delay (1000); // 1초 대기

    digitalWrite (Laser, LOW); // 레이저 off

    delay (1000); // 1초 대기

    }

  • 43

    Arduino와 함께 하는 40가지 센서

    4.1.5. 릴레이

    전기 신호를 통해 전원을 스위칭 할 수 있는 스위치 모듈입니다. 보통 낮은 전압으로

    높은 전압을 제어하기 위한 용도로 사용됩니다. AC 200V, DC 30V까지 입력할 수 있

    고 DC 5V로 제어가 가능합니다..

    센서 사진 및 핀 연결

    회로 연결

    아두이노 릴레이

    D10 S

    VCC ┼

    GND ―

  • 44

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    int relay = 10; // 10번 핀을 사용

    void setup()

    {

    pinMode(relay, OUTPUT); // 출력모드로 설정

    }

    void loop()

    {

    digitalWrite(relay,HIGH); // 릴레이 연결

    delay(1000); // 1초 대기

    digitalWrite(relay,LOW); // 릴레이 연결 해제

    delay(1000); // 1초 대기

    }

  • 45

    Arduino와 함께 하는 40가지 센서

    4.1.6. 푸시 버튼 모듈

    버튼을 누르면 출력핀을 통하여 디지털 신호를 출력하는 푸시 버튼 모듈 입니다. 각

    종 동작 버튼, 스위칭을 해야 할 때 활용됩니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 푸시 버튼

    D11 S

    VCC ┼

    GND ―

  • 46

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    int Led = 13; // 13번 핀을 led 제어에 사용

    int Button = 11; // 11번 핀을 button 제어에 사용

    int Value; // 상태 값을 저장 하기위한 변수

    void setup() {

    pinMode(Led,OUTPUT); // 출력모드로 설정

    pinMode(Button,INPUT); // 입력모드로 설정

    }

    void loop() {

    Value=digitalRead(Button); // 버튼의 상태를 읽어들임

    if(Value==HIGH) { // 버튼이 눌러진 상태일경우

    digitalWrite(Led, HIGH); // Led on

    }

    else { // 눌러진 상태가 아닐경우

    digitalWrite(Led, LOW); // Led off

    }

    }

  • 47

    Arduino와 함께 하는 40가지 센서

    4.1.7. 기울기 센서

    센서 내부의 볼이 기울기에 따라 움직이는 위치에 따라 디지털 신호를 출력하여 기

    울기 여부를 판단하는 센서입니다. 기울임이 없어야 하거나 기울어짐에따라 동작하는

    상황에 활용 할 수 있습니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 기울기센서

    D11 S

    VCC ┼

    GND ―

  • 48

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    int Tilt = 11; // 11번 핀을 사용

    int Led = 13; // 13번 핀을 led제어에 사용

    int TiltState; // Tilt 상태를 읽는 변수

    void setup() {

    pinMode(Led, OUTPUT); // 출력모드 설정

    pinMode(Tilt, INPUT); // 입력모드 설정

    }

    void loop() {

    TiltState = digitalRead(Tilt); // Tilt 기울기 상태를 읽어들임

    // Tilt의 기울기 감지상태에 따라 LED On, Off

    if (TiltState == HIGH) {

    digitalWrite(Led, HIGH);

    }

    else {

    digitalWrite(Led, LOW);

    }

    }

  • 49

    Arduino와 함께 하는 40가지 센서

    4.1.8. 수은 기울기 센서

    유리 내부 수은의 기울기와 움직이는 위치에 따라 디지털 신호를 출력하여 기울기

    여부를 판단하는 센서입니다. 기울임이 없어야 하거나 기울어짐에따라 동작하는 상황

    에 활용 할 수 있습니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 수은 기울기 센서

    D11 S

    VCC ┼

    GND ―

  • 50

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    int Tilt = 11; // 11번 핀을 사용

    int Led = 13; // 13번 핀을 led제어에 사용

    int TiltState; // Tilt 상태를 읽는 변수

    void setup() {

    pinMode(Led, OUTPUT); // 출력모드 설정

    pinMode(Tilt, INPUT); // 입력모드 설정

    }

    void loop() {

    TiltState = digitalRead(Tilt); // Tilt 기울기 상태를 읽어들임

    // Tilt의 기울기 감지상태에 따라 LED On, Off

    if (TiltState == HIGH) {

    digitalWrite(Led, HIGH);

    }

    else {

    digitalWrite(Led, LOW);

    }

    }

  • 51

    Arduino와 함께 하는 40가지 센서

    4.1.9. 디지털 홀 센서

    자기장의 세기에 따라 전압이 변하는 센서로 자기장의 세기가 일정 수준이 되면 디

    지털 신호를 출력합니다. 모터나 자석과 같은 자기장이 발생하는 것들을 감지하는데

    활용됩니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 디지털 홀 센서

    D11 S

    VCC ┼

    GND ―

  • 52

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    int sensor = 11; // 11번 핀을 사용

    int Led = 13; // 13번 핀을 led제어에 사용

    int State; // 상태 값을 저장 하기위한 변수

    void setup()

    {

    pinMode(Led, OUTPUT); // 출력모드 설정

    pinMode(sensor, INPUT); // 입력모드 설정

    }

    void loop()

    {

    State = digitalRead(sensor); // 자기장 센싱값을 읽어들임

    if(State == HIGH) { // 자기장 발생을 감지했을 때

    digitalWrite(Led, HIGH); // LED on

    }

    else { // 자기장이 없을 때

    digitalWrite(Led, LOW); // LED off

    }

    }

  • 53

    Arduino와 함께 하는 40가지 센서

    4.1.10. 디지털 리드 센서

    자기장이 가까워졌을 때 연결되고, 멀어지면 연결이 해제되는 센서로 자기장으로 인

    해 리드 부분이 자기장을 통해 접점과 연결되어 디지털 신호를 출력합니다. 모터나

    자석과 같은 자기장이 발생하는 것들을 감지하는데 활용됩니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 리드 센서

    D11 S

    VCC ┼

    GND ―

  • 54

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    int Reed = 11; // 11번 핀을 사용

    int Led = 13; // 13번 핀을 led제어에 사용

    int State; // 상태 값을 저장 하기위한 변수

    void setup() {

    pinMode (Led, OUTPUT); // 출력모드 설정

    pinMode (Reed, INPUT); // 입력모드 설정

    }

    void loop() {

    State = digitalRead(Reed); // 자기장 센싱값을 읽어들임

    // 자기장 상태에 따라 Led on / off

    if (State == HIGH) {

    digitalWrite(Led, HIGH);

    }

    else {

    digitalWrite(Led, LOW);

    }

    }

  • 55

    Arduino와 함께 하는 40가지 센서

    4.1.11. 적외선 장애물 감지 센서

    적외선을 발사하여 주위에 물체가 있는지 없는지를 확인하는 센서입니다. 측정부가

    수평 방향이며 각종 로봇의 바닥에 장착하여 흑/백 감지에도 사용 할 수 있습니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 센서

    D11 out

    VCC ┼

    GND ―

  • 56

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    int Led = 13 ; // 13번 핀을 LED제어에 사용

    int Sensor = 11; // 11번 핀을 사용

    int val ; // 센서의 상태를 저장하기 위해 사용

    void setup () {

    pinMode (Led, OUTPUT) ; // 출력모드 설정

    pinMode (Sensor, INPUT) ; // 입력모드 설정

    }

    void loop () {

    val = digitalRead (Sensor) ; // 센서값을 입력 받음

    if (val == HIGH) { // 물체가 가까이 접근하면

    digitalWrite (Led, LOW); //Led on

    }

    else { // 물체가 멀어지면

    digitalWrite (Led, HIGH); // Led off

    }

    }

  • 57

    Arduino와 함께 하는 40가지 센서

    4.1.12. 트래킹 센서

    적외선을 발사하여 주위에 물체가 있는지 없는지를 확인하는 센서입니다. 측정부가

    수직 방향이며 물체의 유무 , 라인 트레이서 로봇의 흑색선 감지용으로 사용 할 수

    있습니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 트래킹 센서

    D11 S

    VCC ┼

    GND ―

  • 58

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    int Led = 13 ; // 13번 핀을 LED제어에 사용

    int Sensor = 11; // 11번 핀을 사용

    int val ; // 센서의 상태를 저장하기 위해 사용

    void setup () {

    pinMode (Led, OUTPUT) ; // 출력모드 설정

    pinMode (Sensor, INPUT) ; // 입력모드 설정

    }

    void loop () {

    val = digitalRead (Sensor) ; // 센서값을 입력 받음

    if (val == HIGH) { // 물체가 가까이 접근하면

    digitalWrite (Led, LOW); //Led on

    }

    else { // 물체가 멀어지면

    digitalWrite (Led, HIGH); // Led off

    }

    }

  • 59

    Arduino와 함께 하는 40가지 센서

    4.1.13. 터치 센서

    자성, 금속성을 가진 물체가 센서를 터치할 때 출력이 발생하여 터치를 감지하는 센

    서입니다. 아날로그와 디지털 신호를 출력 할 수 있으며, 가변부를 조정하여 터치 감

    도를 조절할 수 있습니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 센서

    D11 D0

    VCC ┼

    GND ―

  • 60

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    int Led = 13; // 13번 핀을 led 제어에 사용

    int Sensor = 11; // 11번 핀을 사용

    int State; // 상태 값을 저장 하기위한 변수

    void setup() {

    pinMode(Led,OUTPUT); // 출력모드로 설정

    pinMode(Sensor,INPUT); // 입력모드로 설정

    }

    void loop() {

    State=digitalRead(Sensor); // 터치 상태를 읽어들임

    if(State==HIGH) { // 터치된 상태일경우

    digitalWrite(Led, HIGH); // Led on

    }

    else { // 터치 상태가 아닐경우

    digitalWrite(Led, LOW); // Led off

    }

    }

  • 61

    Arduino와 함께 하는 40가지 센서

    4.1.14. 노크 센서

    네모 케이스 안의 스프링이 외부 충격을 받아 흔들릴 때 내부의 센서에 닿아 디지털

    신호를 출력하여 충격이나 진동을 감지 할 수 있는 센서입니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 노크 센서

    D11 S

    VCC ┼

    GND ―

  • 62

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    int Led = 13 ; // 13번 핀을 LED제어에 사용

    int Sensor = 11; // 11번 핀을 사용

    int State ; // 센서의 상태를 저장하기 위해 사용

    void setup () {

    pinMode (Led, OUTPUT) ; // 출력모드 설정

    pinMode (Sensor, INPUT) ; // 입력모드 설정

    }

    void loop () {

    State = digitalRead (Sensor) ; // 센서값을 입력 받음

    if (State == HIGH) { // 센서에 충격이 감지되면

    digitalWrite (Led, HIGH); //Led on

    }

    else { // 아무런 충격이 없을떄

    digitalWrite (Led, LOW); // Led off

    }

    }

  • 63

    Arduino와 함께 하는 40가지 센서

    4.1.15. 충격 센서

    센서 내부에 있는 금속 구가 외부 충격에 의해 움직일 때 디지털 신호를 출력하여

    터치나 충격, 진동 등을 감지하는 센서입니다. 충돌이나 흔들림을 감지하는대에 활용

    됩니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 충격 센서

    D11 S

    VCC ┼

    GND ―

  • 64

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    int Led = 13 ; // 13번 핀을 LED제어에 사용

    int Sensor = 11; // 11번 핀을 사용

    int State ; // 센서의 상태를 저장하기 위해 사용

    void setup () {

    pinMode (Led, OUTPUT) ;// 출력모드 설정

    pinMode (Sensor, INPUT) ; // 입력모드 설정

    }

    void loop () {

    State = digitalRead (Sensor) ; // 센서값을 입력 받음

    if (State == HIGH) { // 센서에 충격이 감지되면

    digitalWrite (Led, HIGH); //Led on

    }

    else { // 아무런 충격이 없을떄

    digitalWrite (Led, LOW); // Led off

    }

    }

  • 65

    Arduino와 함께 하는 40가지 센서

    4.1.16. 포토 인터럽트

    U자 형으로 마주한 발광 소자와 수광소자 사이에 빛의 차단 여부를 통해 물체의 유

    무를 감지 할 수 있는 센서입니다. 인코더를 장착한 모터의 RPM을 측정하는데 활용

    됩니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 포토 인터럽트

    D11 S

    VCC ┼

    GND ―

  • 66

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    int Led = 13 ; // 13번 핀을 LED제어에 사용

    int Sensor = 11; // 11번 핀을 사용

    int State ; // 센서의 상태를 저장하기 위해 사용

    void setup () {

    pinMode (Led, OUTPUT) ; // 출력모드 설정

    pinMode (Sensor, INPUT) ; // 입력모드 설정

    }

    void loop () {

    State = digitalRead (Sensor) ; // 센서값을 입력 받음

    if (State == HIGH) { // 빛이 차단되었을 때

    digitalWrite (Led, HIGH); //Led on

    }

    else { // 빛이 차단되지 않았을떄

    digitalWrite (Led, LOW); // Led off

    }

    }

  • 67

    Arduino와 함께 하는 40가지 센서

    4.1.17. 초음파 거리 센서

    초음파를 전방으로 발사하여 반사되어 돌아오는 반사파를 받을 때까지의 시간을 확

    인하여 거리를 측정하는 센서입니다. 거리를 측정하여 장애물이나 벽에 닿지 않도록

    하는 로봇 등에 활용 할 수 있습니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 센서

    D11 Trig

    D10 Echo

    VCC ┼

    GND ―

  • 68

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    int Echo = 10;

    int Trig = 11;

    void setup() {

    Serial.begin (9600); // 시리얼 통신 시작

    pinMode(Trig, OUTPUT); // Trig핀 출력모드 설정

    pinMode(Echo, INPUT); // Echo핀 입력모드 설정

    }

    void loop() {

    int duration, distance; // 반사파가 돌아오는 주기와 거리를 계산하기 위한 변수

    digitalWrite(Trig, HIGH); // 초음파 발사

    delayMicroseconds(1000); // 1초 대기

    digitalWrite(Trig, LOW); // 초음파 발사 중지

    // Echo로 돌아오는 반사파의 시간과 거리를 계산

    duration = pulseIn(Echo, HIGH);

    distance = (duration/2) / 29.1;

    if (distance >= 200 || distance

  • 69

    Arduino와 함께 하는 40가지 센서

    4.1.18. 로터리 인코더

    회전축의 회전량을 확인하는 센서입니다. 신호가 출력되는 핀의 패턴과 펄스를 확인

    하여 회전 방향이나 속도를 측정할 수 있습니다. 모터의 회전을 확인하는데 활용됩니

    다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 로터리 인코더

    D9 SW

    D10 DT

    D11 CLK

    VCC ┼

    GND ―

  • 70

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    int Right = 11;

    int Left = 10;

    int Pos = 9;

    int RightLast = LOW;

    int n = LOW;

    void setup() {

    pinMode (Right,INPUT); // 입력모드 설정

    pinMode (Left,INPUT);

    Serial.begin (9600); // 시리얼통신 시작

    }

    void loop() {

    n = digitalRead(Right); // Right값을 n에 저장

    if ((RightLast == LOW) && (n == HIGH)) {

    if (digitalRead(Left) == LOW) { // Left쪽으로 동작하면

    Pos--; // Pos 감소

    } else { // 그렇지 않고 Right쪽으로 동작하면

    Pos++; // Pos 증가

    }

    Serial.println (Pos); // 현재 값 출력

    }

    RightLast = n; // 현재 값은 이전 값으로 기억하기 위해 저장

    }

  • 71

    Arduino와 함께 하는 40가지 센서

    4.2. 아날로그 센서류

    아날로그 센서는 아날로그 값을 통하여 입력, 출력을 할 수 있는 센서 모듈입니다. 아날

    로그 값 수치를 조정하여 센서를 동작할 수 있습니다. 일부 센서는 디지털 핀의 PWM을

    통한 아날로그값 제어가 가능합니다.

    PWM은 Pulse Width Modulation의 약자로 펄스의 폭을 컨트롤 하는 주기 제어 방법입니

    다. 출력값을 디지털로 나타내지만 0V와 5V 사이의 아날로그 값으로도 표현 가능합니다.

    4.2.1. 듀얼 컬러 LED 모듈 (3mm)

    3mm 지름의 소자로 두 가지의 색상과 밝기를 조절 가능한 LED 모듈입니다. 입력 전

    압에 따라 밝기가 변하고 PWM 출력으로 밝기 및 색상을 제어 할 수 있습니다.

    센서 사진 및 핀 연결

    아두이노 LED

    D11 Y

    D10 R

    GND G

  • 72

    Arduino와 함께 하는 40가지 센서

    회로 연결

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    int Red = 10; // 10번핀 사용

    int Green = 11; // 11번핀 사용

    void setup () {

    pinMode (Red, OUTPUT); // 출력모드 설정

    pinMode (Green, OUTPUT);

    }

    void loop () {

    analogWrite (Red, 255); // Red 컬러 밝기 최대

    analogWrite (Green, 0); // Green 컬러 밝기 0

    delay (3000); // 3초 대기

    analogWrite (Red, 0); // Red 컬러 밝기 0

    analogWrite (Green, 255); // Green 컬러 밝기 최대

    delay (3000); // 3초 대기

    }

  • 73

    Arduino와 함께 하는 40가지 센서

    4.2.2. 듀얼 컬러 LED 모듈 (5mm)

    5mm 지름의 소자로 두 가지의 색상과 밝기를 조절 가능한 LED 모듈입니다. 입력 전

    압에 따라 밝기가 변하고 PWM 출력으로 밝기 및 색상을 제어 할 수 있습니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 센서

    D11 Y

    D10 R

    GND G

  • 74

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    int Red = 10; // 10번핀 사용

    int Green = 11; // 11번핀 사용

    int val; // 밝기 조절을 위한 변수

    void setup () {

    pinMode (Red, OUTPUT); // 출력모드 설정

    pinMode (Green, OUTPUT);

    }

    void loop () {

    for (val = 255; val > 0; val --) { // 반복문 255에서 0으로 감소

    analogWrite (Red, val); // red는 점점 흐려짐

    analogWrite (Green, 255-val); //green은 점점 밝아짐

    delay (10); // 0.01초 대기

    }

    for (val = 0; val < 255; val ++) { // 반복문 0에서 255까지 증가

    analogWrite (Red, val); // red는 점점 밝아짐

    analogWrite (Green, 255-val); // green은 점점 흐려짐

    delay (10); // 0.01초 대기

    }

    }

  • 75

    Arduino와 함께 하는 40가지 센서

    4.2.3. RGB LED 모듈

    세 가지의 색상과 밝기를 조절 가능한 LED 모듈입니다. 입력 전압에 따라 밝기가 변

    하고 PWM 출력으로 밝기 및 색상을 제어 할 수 있습니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 RGB LED

    D9 R

    D10 G

    D11 B

    GND ―

  • 76

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    int Red = 9; // 9번핀 사용

    int Green = 10; // 10번핀 사용

    int Blue = 11; // 11번핀 사용

    void setup () {

    pinMode (Red, OUTPUT); // 출력모드 설정

    pinMode (Green, OUTPUT);

    pinMode (Blue, OUTPUT);

    }

    void loop () {

    analogWrite (Red, 255); // Red 컬러 밝기 최대

    analogWrite (Green, 128); // Green 컬러 밝기 중간

    analogWrite (Blue, 0); // Blue 컬러 밝기 0

    delay (3000); // 3초 대기

    analogWrite (Red, 0); // Red 컬러 밝기 0

    analogWrite (Green, 128); // Green 컬러 밝기 중간

    analogWrite (Blue, 255); // Blue 컬러 밝기 최대

    delay (3000); // 3초 대기

    }

  • 77

    Arduino와 함께 하는 40가지 센서

    4.2.4. RGB LED SMD 모듈

    SMD 타입의 소자로 세 가지의 색상과 밝기를 조절 가능한 LED 모듈입니다. 입력 전

    압에 따라 밝기가 변하고 PWM 출력으로 밝기 및 색상을 제어 할 수 있습니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 RGB LED

    D9 R

    D10 G

    D11 B

    GND ―

  • 78

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    int Red = 9; // 9번핀 사용

    int Green = 10; // 10번핀 사용

    int Blue = 11; // 11번핀 사용

    int val; // 밝기 조절을 위한 변수

    void setup() {

    pinMode(Red, OUTPUT); // 출력모드 설정

    pinMode(Green, OUTPUT);

    pinMode(Blue, OUTPUT);

    }

    void loop() {

    for(val=255; val>0; val--) { // 반복문 255에서 0으로 감소

    analogWrite(Red, val); // red 는 점점 흐려짐

    analogWrite(Blue, 255-val); // blue는 점점 밝아짐

    analogWrite(Green, 128-val); // green은 중간 밝기에서 점점 밝아짐

    delay(10); //0.01초 대기

    }

    for(val=0; val

  • 79

    Arduino와 함께 하는 40가지 센서

    4.2.5. 리니어 홀 센서

    자기장의 세기에 따라 전압이 변하는 센서입니다. 아날로그와 디지털 신호를 입력하

    여 상태를 확인할 수 있습니다. 자기장이 가까울수록 높은 값을 출력합니다. 모터나

    자석 등을 감지할 수 있습니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 센서

    A0 A0

    VCC ┼

    GND ―

  • 80

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    int sensor = A0; // A0번핀 사용

    int val = 0; // 상태값을 담기 위한 변수

    void setup() {

    Serial.begin(9600); // 시리얼 통신 시작

    }

    void loop() {

    val = analogRead(sensor); // 센서가 읽어들인 값을 저장

    Serial.println(val); // 결과값 출력

    delay(500); // 0.5초 대기

    }

  • 81

    Arduino와 함께 하는 40가지 센서

    4.2.6. 아날로그 홀 자기 센서

    자기장의 세기에 따라 전압이 변하는 센서입니다. 아날로그로 상태를 확인 할수 있으

    며 자기장이 가까울수록 낮은 값을 출력합니다. 모터나 자석 등을 감지할 수 있습니

    다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 센서

    A0 A0

    VCC ┼

    GND ―

  • 82

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    int sensor = A0; // A0번핀 사용

    int val = 0; // 상태값을 담기 위한 변수

    void setup() {

    Serial.begin(9600); // 시리얼 통신 시작

    }

    void loop() {

    val = analogRead(sensor); // 센서가 읽어들인 값을 저장

    Serial.println(val); // 결과값 출력

    delay(500); // 0.5초 대기

    }

  • 83

    Arduino와 함께 하는 40가지 센서

    4.2.7. 아날로그 리드 스위치

    자기장이 가까워졌을 때 연결되고, 멀어지면 연결이 해제되는 센서로 아날로그와 디

    지털 신호 입력으로 상태를 확인 할 수 있습니다. 모터나 자석과 같은 자기장이 발생

    하는 것들을 감지하며 가까울수록 낮은 값을 출력합니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 센서

    A0 S

    VCC ┼

    GND ―

  • 84

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    int sensor = A0; // A0번핀 사용

    int val = 0; // 상태값을 담기 위한 변수

    void setup() {

    Serial.begin(9600); // 시리얼 통신 시작

    }

    void loop() {

    val = analogRead(sensor); // 센서가 읽어들인 값을 저장

    Serial.println(val); // 결과값 출력

    delay(500); // 0.5초 대기

    }

  • 85

    Arduino와 함께 하는 40가지 센서

    4.2.8. 불꽃 감지 센서

    적외선 LED를 통해 빛의 파장을 감지하여 불꽃을 감지하는 센서입니다. 파장을 감지

    하여 아날로그 혹은 디지털 신호를 출력하며 화재 감지와 관련된 곳에 활용이 가능

    합니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 센서

    A0 A0

    VCC ┼

    GND ―

  • 86

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    int sensor = A0; // A0번핀 사용

    int val = 0; // 상태값을 담기 위한 변수

    void setup() {

    Serial.begin(9600); // 시리얼 통신 시작

    }

    void loop() {

    val = analogRead(sensor); // 센서가 읽어들인 값을 저장

    Serial.println(val); // 결과값 출력

    delay(500); // 0.5초 대기

    }

  • 87

    Arduino와 함께 하는 40가지 센서

    4.2.9. 심박 센서

    적외선이 신체를 투과하여 심장 박동 속도와 횟수를 측정하는 센서입니다. 두 개의

    다이오드 사이에 손가락을 넣으면 적외선이 투과하여 심박을 측정합니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 센서

    A0 S

    VCC ┼

    GND ―

  • 88

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    int sensor = A0;

    double alpha = 0.75; // 심박수 계산을 위한 초기값 설정

    void setup() {

    Serial.begin(9600);

    }

    void loop() {

    static double oldValue;

    int rawValue = analogRead(sensor); // 심박수 측정값

    // 심박수 계산

    double value = alpha * oldValue + (1 - alpha) * rawValue;

    Serial.print(rawValue); // 측정값 출력

    Serial.print(",");

    Serial.println(value); // 계산값 출력

    oldValue = value;

    delay(1000);

    }

  • 89

    Arduino와 함께 하는 40가지 센서

    4.2.10. 워터 센서

    물에서도 전기가 통하는 원리를 이용하여 전류를 흘려보내서 전류의 흐름을 측정하

    여 물의 깊이를 측정 하는 센서입니다. 물에 깊이 담길수록 전류가 많이 흐를 것이고

    얕을수록 전류는 적게 흐를 것입니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 센서

    A0 S

    VCC ┼

    GND ―

  • 90

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    int sensor = A0; // A0번핀 사용

    int val = 0; // 상태값을 담기 위한 변수

    void setup() {

    Serial.begin(9600); // 시리얼 통신 시작

    }

    void loop() {

    val = analogRead(sensor); // 센서가 읽어들인 값을 저장

    Serial.println(val); // 결과값 출력

    delay(500); // 0.5초 대기

    }

  • 91

    Arduino와 함께 하는 40가지 센서

    4.2.11. 토양 수분 센서

    토양 내 수분 함량에 따른 저항의 변화를 측정하는 센서입니다. 토양 내 수분과 구성

    입자의 크기등에 영향을 받으며, 수분 함량이 많으면 저항값이 작아지고, 수분 함향

    이 적으면 저항값이 커집니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 센서

    A0 S

    VCC V

    GND G

  • 92

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    int sensor = A0; // A0번핀 사용

    int val = 0; // 상태값을 담기 위한 변수

    void setup() {

    Serial.begin(9600); // 시리얼 통신 시작

    }

    void loop() {

    val = analogRead(sensor); // 센서가 읽어들인 값을 저장

    Serial.println(val); // 결과값 출력

    delay(500); // 0.5초 대기

    }

  • 93

    Arduino와 함께 하는 40가지 센서

    4.2.12. CDS 조도 센서

    빛의 양에 따라 저항값이 바뀌어 빛의 세기를 측정하는 센서입니다. 주변 빛의 밝기

    가 어두울수록.높은 값을 출력하고 밝을수록 낮은 값을 출력합니다. 가로등이나 취침

    등과 같은 곳에 활용이 가능합니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 센서

    A0 S

    VCC ┼

    GND ―

  • 94

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    int cds = A0;

    int led = 13;

    int cdsValue = 0; // 측정값을 저장하기위한 변수

    void setup() {

    pinMode(led, OUTPUT); // 출력모드 설정

    }

    void loop() {

    cdsValue = analogRead(cds); // 조도 값 측정

    if (cdsValue > 50) {

    // 조도센서로 부터 측정된 밝기 값이 50보다 높을경우, LED ON

    digitalWrite(led, HIGH);

    }

    else {

    // 조도센서로 부터 측정된 밝기 값이 50보다 낮을경우, LED OFF

    digitalWrite(led, LOW);

    }

    delay(500); // 0.5초 대기

    }

  • 95

    Arduino와 함께 하는 40가지 센서

    4.2.13. 고감도 사운드 센서

    주변 소리의 크기를 감지할 수 있는 센서입니다. 소리의 크기에 따라 아날로그 신호

    를 출력합니다. 가변부를 조정하여 감도를 조절할 수있습니다. 큰 마이크가 장착되어

    넓은 감도를 측정 할 수 있습니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 센서

    A0 A0

    VCC ┼

    GND ―

  • 96

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    int sensor = A0; // A0번핀 사용

    int val = 0; // 상태값을 담기 위한 변수

    void setup() {

    Serial.begin(9600); // 시리얼 통신 시작

    }

    void loop() {

    val = analogRead(sensor); // 센서가 읽어들인 값을 저장

    Serial.println(val); // 결과값 출력

    delay(100); // 0.1초 대기

    }

  • 97

    Arduino와 함께 하는 40가지 센서

    4.2.14. 마이크로폰 사운드 감지 센서

    주변 소리의 크기를 감지할 수 있는 센서입니다. 소리의 크기에 따라 아날로그 신호

    를 출력합니다. 가변부를 조정하여 감도를 조절할 수있습니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 센서

    A0 A0

    VCC ┼

    GND ―

  • 98

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    int sensor = A0; // A0번핀 사용

    int val = 0; // 상태값을 담기 위한 변수

    void setup() {

    Serial.begin(9600); // 시리얼 통신 시작

    }

    void loop() {

    val = analogRead(sensor); // 센서가 읽어들인 값을 저장

    Serial.println(val); // 결과값 출력

    delay(100); // 0.1초 대기

    }

  • 99

    Arduino와 함께 하는 40가지 센서

    4.2.15. 아날로그 온도 센서

    주변 온도에 따라 저항값이 달라지는 온도 센서입니다. 가변부를 조정하여 출력감도

    를 조절할 수 있고 온도가 높으면 높은 아날로그 값을 출력합니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 센서

    A0 A0

    VCC ┼

    GND ―

  • 100

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    int sensor = A0; // A0번핀 사용

    int val = 0; // 상태값을 담기 위한 변수

    void setup() {

    Serial.begin(9600); // 시리얼 통신 시작

    }

    void loop() {

    val = analogRead(sensor); // 센서가 읽어들인 값을 저장

    Serial.println(val); // 결과값 출력

    delay(500); // 0.5초 대기

    }

  • 101

    Arduino와 함께 하는 40가지 센서

    4.2.16. 써미스터 온도 센서

    주변 온도에 따라 저항이 변하는 써미스터가 장착된 온도 센서입니다. 온도가 높으면

    높은 아날로그 값을 출력합니다

    센서 사진 및 핀 연결

    회로 연결

    아두이노 센서

    A0 S

    VCC ┼

    GND ―

  • 102

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    int Atemp = A0;

    int Value = 0;

    void setup() {

    Serial.begin(9600); // 시리얼 통신 시작

    }

    void loop() {

    Value = analogRead(Atemp); // 온도 값 읽어들임

    Serial.print(Thermister(Value)); // 읽어들인 값을 변환하여 온도 출력

    Serial.println("℃");

    delay(500); // 0.5초 대기

    }

    double Thermister(int RawADC) { // 온도값을 계산하는 함수

    double Temp;

    Temp = log(10000.0 / (1024.0 / RawADC - 1));

    Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))*

    Temp );

    Temp = Temp - 273.15; // Convert Kelvin to Celcius

    return Temp;

    }

  • 103

    Arduino와 함께 하는 40가지 센서

    4.2.17. 매직 라이트 컵 모듈

    기울기 센서의 출력값에 따라 LED를 동작시키는 모듈입니다. 2개의 모듈을 함께 기울

    이면 불빛을 다른쪽으로 이동시킬 수 있습니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 매직 라이트 컵A 매직 라이트 컵B

    D5 S

    D6 L

    D10 S

    D11 L

    VCC ┼ ┼

    GND G G

  • 104

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    int LedA = 5;

    int LedB = 10;

    int SensorA = 6;

    int SensorB = 11;

    // 각 수은 스위치 상태를 저장하는 변수와 LED밝기를 저장하는 변수 선언.

    int StateA, StateB, light = 0;

    void setup() {

    pinMode(LedA, OUTPUT);

    pinMode(LedB, OUTPUT);

    pinMode(SensorA, INPUT);

    pinMode(SensorB, INPUT);

    }

    void loop() {

    StateA = digitalRead(SensorA); // A 센서의 수은 스위치 측정값

    // A 모듈의 수은 스위치가 OFF이고 밝기가 최대치가 아니면 밝기가 밝아짐

    if (StateA == HIGH && light != 255) {

    light ++;

    }

    StateB = digitalRead(SensorB); // B 센서의 수은 스위치 측정값

    // B 모듈의 수은 스위치가 OFF이고 불이 꺼져있지 않으면 밝기가 흐려짐

    if (StateB == HIGH && light != 0) {

    light -- ;

    }

    analogWrite(LedA, light); // 각 LED에 밝기값을 설정

    analogWrite(LedB, 255 - light);

    delay(25);

    }

  • 105

    Arduino와 함께 하는 40가지 센서

    4.2.18. PS2 조이스틱 모듈

    X, Y 좌표 검출과 푸시 버튼 기능이 내장된 조이스틱 모듈입니다. 두 개의 가변 저항

    과 하나의 푸시 버튼으로 구성되어 있고, X, Y좌표는 아날로그 신호가 출력되며 푸시

    버튼은 디지털 신호로 출력됩니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 로터리 인코더

    A0 VRx

    A1 VRy

    D10 SW

    VCC ┼

    GND ―

  • 106

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    int x = A0;

    int y = A1;

    int sw = 10;

    int value; // 상태값을 담기 위한 변수

    void setup() {

    pinMode(sw, INPUT); // 입력모드 설정

    Serial.begin(9600); // 시리얼 통신 시작

    }

    void loop() {

    value = analogRead(x); // 0~1023 까지의 범위를 x 좌표로 읽음

    Serial.print("X:");

    Serial.print(value, DEC); // 좌표값 출력

    value = analogRead(y); // 0~1023 까지의 범위를 y 좌표로 읽음

    Serial.print(" | Y:");

    Serial.print(value, DEC); // 좌표값 출력

    value = digitalRead(sw); // 버튼 상태를 읽음

    Serial.print(" | Button:");

    Serial.println(value, DEC); // 좌표값 출력

    delay(200); // 0.2초 대기

    }

  • 107

    Arduino와 함께 하는 40가지 센서

    4.3. 아두이노 라이브러리

    라이브러리는 어떠한 기능을 사용하기위한 코드를 미리 작성해 놓아서 사용자 간에 공유

    하여 사용할 수 있는 방법입니다.

    아두이노에서는 센서의 프로그래밍을 좀 더 쉽게할 수 있도록 도와주는 라이브러리를 제

    공합니다. 오픈소스를 기반으로 한 아두이노 개발 환경의 한 부분으로 내장모듈 및 외장

    의 각종 부가 장치를 제어하는 함수들로 구성되어 있습니다.

    라이브러리 파일은 스케치 파일(.ino)로만 구성된 경우 또는 소스코드(.cpp)와 헤더파일(.h)

    이 포함된 경우로 구성되어 있습니다.

    4.3.1. 라이브러리의 종류

    라이브러리는 아두이노에서 기본적으로 제공하는 표준 라이브러리가 있고 사용자들이 다

    른 수많은 하드웨어들을 사용하기 위해 직접 작성하고 배포한 사용자 라이브러리가 있습

    니다. 표준 라이브러리는 아두이노에서 기본적으로 제공하기 때문에 별도로 추가할 작업

    이 없지만 제공되지 않는 라이브러리를 사용하여야 할 때에는 인터넷 매체를 통하여 다

    운로드 받아 라이브러리를 추가하여야 사용 가능합니다.

  • 108

    Arduino와 함께 하는 40가지 센서

    4.3.2. 라이브러리 사용방법

    표준 라이브러리의 경우 스케치 → 라이브러리 포함하기 에서 확인 및 사용이 가능합니

    다.

    하지만 사용자 라이브러리 사용시에는 간단한 라이브러리 추가 작업이 필요합니다.

    여기서는 DHT11이라는 라이브러리를 사용하기 위해 먼저 라이브러리를 다운로드 받은

    후 압축을 풀어줍니다.

  • 109

    Arduino와 함께 하는 40가지 센서

    그리고 압축을 푼 파일을 Ardiono → libraries 폴더안에 위치해 주어야 합니다.

    아두이노를 새롭게 실행하여 스케치 → 라이브러리 포함하기를 확인하면 DHT11 라이브

    러리가 추가된 것을 확인할 수 있습니다.

  • 110

    Arduino와 함께 하는 40가지 센서

    라이브러리를 추가하여 사용시에 컴파일 과정에서 아래 그림과 같은 에러 메시지가 발생

    할 경우에는 라이브러리 파일을 찾을수 없어서 에러가 발생한 경우이므로 라이브러리가

    정상적으로 추가되었는지 확인해야 합니다.

  • 111

    Arduino와 함께 하는 40가지 센서

    4.4. 라이브러리 활용

    센서들중에는 아두이노에서 제공하는 라이브러리를 사용하여 좀 더 쉽게 센서를 동작할

    수 있습니다. 아두이노에서 기본적으로 제공하지 않는 라이브러리는 인터넷매체를 통하여

    다운로드하여 사용하여야 합니다.

    4.4.1. 디지털 온도 센서

    디지털 신호를 통해 온도를 측정하는 센서 모듈입니다. 라이브러리를 통하여 간단히

    사용 가능합니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 센서

    D10 S

    VCC ┼

    GND ―

  • 112

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    // 디지털 온습도 측정을 위한 라이브러리 파일 사용

    #include

    #include

    #define ONE_WIRE_BUS 10 // 10번 핀을 사용

    OneWire oneWire(ONE_WIRE_BUS);

    DallasTemperature sensors(&oneWire);

    void setup(void) {

    Serial.begin(9600); // 시리얼통신 시작

    sensors.begin(); // 라이브러리 실행

    }

    void loop(void) {

    // 라이브러리를 통해 측정된 값이 변환되어 출력

    sensors.requestTemperatures();

    Serial.print(sensors.getTempCByIndex(0));

    Serial.println("℃");

    delay(500);

    }

  • 113

    Arduino와 함께 하는 40가지 센서

    4.4.2. 디지털 온습도 센서

    온도와 습도를 측정하는 센서 모듈입니다. 전력 소모가 적으며 온도 보상 및 보정된

    디지털 신호를 제공합니다. 측정 범위는 0~50℃, 20~90% 입니다. 라이브러리를 통하

    여 간단히 사용 가능합니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 센서

    D10 S

    VCC ┼

    GND ―

  • 114

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    #include // DHT11을 사용하기 위한 라이브러리

    int Sensor = A0;

    DHT11 dht11(Sensor); // 라이브러리에서 사용하기 위한 핀번호 변수 설정

    void setup() {

    Serial.begin(9600); // 시리얼통신 시작

    }

    void loop() {

    int res; // 결과값을 가질 변수

    float temp, humid; // 온도, 습도값을 저장할 변수

    // 라이브러리를 통하여 측정된 온도, 습도값을 읽어들여 저장

    res = dht11.read(humid, temp);

    if(res == 0 ) { // 온도, 습도가 측정되어 res값이 0이 되면 값이 출력됨

    Serial.print("Temperature : ");

    Serial.print(temp);

    Serial.print(" Humidity : ");

    Serial.print(humid);

    Serial.println();

    }

    delay(DHT11_RETRY_DELAY); // DHT11전용 딜레이 값 설정

    }

  • 115

    Arduino와 함께 하는 40가지 센서

    4.4.3. 적외선 발신 모듈

    적외선 신호를 보낼 수 있는 모듈입니다. 적외선 수신 모듈과 같이 사용할 수 있으며

    라이브러리를 통하여 간단히 사용 가능합니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 센서

    D3 S

    VCC ┼

    GND ―

  • 116

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    #include // IRremote 라이브러리 사용

    IRsend send; // 적외선 신호를 송신하기위한 객체 설정

    void setup() {

    Serial.begin(9600); // 시리얼 통신 시작

    }

    void loop() {

    send.sendSony(0xa90, 12); // 신호 송신

    delay(50); // 0.05초 대기

    }

  • 117

    Arduino와 함께 하는 40가지 센서

    4.4.4. 적외선 수신 모듈

    적외선 신호를 수신할 수 있는 모듈입니다. 적외선 발신 모듈과 같이 사용할 수 있으

    며 라이브러리를 통하여 간단히 사용 가능합니다.

    센서 사진 및 핀 연결

    회로 연결

    아두이노 센서

    D11 S

    VCC ┼

    GND ―

  • 118

    Arduino와 함께 하는 40가지 센서

    소스 코드

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    #include // IRremote 라이브러리 사용

    int sensor = 11; // 11번 핀을 사용

    int data; // 수신된 신호의 정보를 담기위한 변수

    IRrecv irrecv (sensor); // IRremote의 객체 설정

    decode_results res; // 수신된 데이터 저장 공간

    void setup() {

    Serial.begin(9600); // 시리얼 통신 설정

    irrecv.enableIRIn(); // 적외선 신호 수신

    }

    void loop() {

    if(irrecv.decode(&res)) { // 신호가 수신 되었을 경우

    data = res.value; // 수신된 신호를 저장

    Serial.println(data, HEX); // 수신된 data를 16진수로 출력

    irrecv.resume(); // 계속 수신받기 위함

    }

    }

    Chapter 1. Arduino1.1. Arduino에 대해서1.1.1. 아두이노(Arduino)란?1.1.2. Arduino Uno R31.1.3. Arduino 특징1.1.4. Arduino의 응용

    1.2. Arduino 핀 종류1.2.1. 디지털 입출력 핀(0번 ~ 13번 핀)1.2.2. 아날로그 입력 핀 6개(A0~A5)1.2.3. 아날로그 출력 핀 6개(3, 5, 6, 9, 10, 11번 핀)1.2.4. 인터럽트(2, 3번 핀)1.2.5. 그 외의 기능들

    Chapter 2. 아두이노를 다루기 위한 기본지식2.1. 프로그래밍2.1.1. 프로그래밍이란?2.1.2. 프로그래밍 언어2.1.3. 프로그래밍을 왜 배워야 할까?2.1.4. 아두이노 프로그래밍

    2.2. 전기 전자 기초2.2.1. 전기에 대한 이해2.2.2. 직류 전기와 교류 전기2.2.3. 전기의 원리2.2.4. 전기의 성질2.2.5. 옴의 법칙2.2.6. 전압 분배 법칙

    Chapter 3. 개발 환경 구축3.1. Arduino Software 설치3.1.1. Arduino Software 다운로드3.1.2. Arduino IDE 설치3.1.3. Arduino driver 설치

    3.2. 프로그램 작성 및 컴파일3.2.1. 프로그램 작성3.2.2. 파일 열기3.2.3. 컴파일 방법

    3.3. 이미지 로딩 및 디버그3.3.1. 이미지 로딩3.3.2. 디버그 방법

    Chapter 4. 다양한 센서들을 다뤄보자4.1. 디지털 센서류4.1.1. 7컬러 플래시 LED 모듈4.1.2. 피에조 부저 모듈4.1.3. 수동 부저 모듈4.1.4. 레이저 발광 모듈4.1.5. 릴레이4.1.6. 푸시 버튼 모듈4.1.7. 기울기 센서4.1.8. 수은 기울기 센서4.1.9. 디지털 홀 센서4.1.10. 디지털 리드 센서4.1.11. 적외선 장애물 감지 센서4.1.12. 트래킹 센서4.1.13. 터치 센서4.1.14. 노크 센서4.1.15. 충격 센서4.1.16. 포토 인터럽트4.1.17. 초음파 거리 센서4.1.18. 로터리 인코더

    4.2. 아날로그 센서류4.2.1. 듀얼 컬러 LED 모듈 (3mm)4.2.2. 듀얼 컬러 LED 모듈 (5mm)4.2.3. RGB LED 모듈4.2.4. RGB LED SMD 모듈4.2.5. 리니어 홀 센서4.2.6. 아날로그 홀 자기 센서4.2.7. 아날로그 리드 스위치4.2.8. 불꽃 감지 센서4.2.9. 심박 센서4.2.10. 워터 센서4.2.11. 토양 수분 센서4.2.12. CDS 조도 센서4.2.13. 고감도 사운드 센서4.2.14. 마이크로폰 사운드 감지 센서4.2.15. 아날로그 온도 센서4.2.16. 써미스터 온도 센서4.2.17. 매직 라이트 컵 모듈4.2.18. PS2 조이스틱 모듈

    4.3. 아두이노 라이브러리4.3.1. 라이브러리의 종류4.3.2. 라이브러리 사용방법

    4.4. 라이브러리 활용4.4.1. 디지털 온도 센서4.4.2. 디지털 온습도 센서4.4.3. 적외선 발신 모듈4.4.4. 적외선 수신 모듈