100
1 알고있노? 아두이노! 알고있노? 아두이노 내용 작성 이진성 디자인

알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

  • Upload
    others

  • View
    10

  • Download
    2

Embed Size (px)

Citation preview

Page 1: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

1

알고있노? 아두이노!

알고있노? 아두이노

내용 작성 이진성

디자인

Page 2: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

2

알고있노? 아두이노!

목차

Chapter 1. 아두이노 ................................................................................................................................................. 4

1.1. 아두이노 ....................................................................................................................................................... 4

1.1.1. 아두이노는? ................................................................................................................................... 4

1.1.2. 아두이노의 종류 .......................................................................................................................... 4

1.1.3. 마이크로컨트롤러, MCU .......................................................................................................... 9

1.1.4. Arduino Uno R3 ........................................................................................................................ 10

1.2. Arduino의 특징 및 응용 .................................................................................................................... 12

1.2.1. Arduino 특징 .............................................................................................................................. 12

1.2.2. Arduino의 응용 ......................................................................................................................... 13

1.3. Arduino 관련 모듈 ............................................................................................................................... 14

Chapter 2. 프로그래밍을 알아보자 ................................................................................................................ 16

2.1. 프로그래밍이란? .................................................................................................................................... 16

2.2. 프로그래밍 언어.................................................................................................................................... 16

2.3. 프로그래밍(코딩)을 왜 배워야 할까? .......................................................................................... 17

2.4. 아두이노 프로그래밍 .......................................................................................................................... 17

Chapter 3. 전기전자 기초 ................................................................................................................................... 18

3.1. 전기에 대한 이해 ................................................................................................................................. 18

3.2. 직류 전기와 교류 전기 ...................................................................................................................... 18

3.3. 전기의 원리 ............................................................................................................................................. 18

3.4. 전기의 성질 ............................................................................................................................................. 19

3.5. 옴의 법칙 ................................................................................................................................................. 19

3.6. 전압 분배 법칙 ...................................................................................................................................... 19

3.7. 아날로그 신호와 디지털 신호 ........................................................................................................ 20

Chapter 4. 개발 환경 구축................................................................................................................................. 21

4.1. Arduino Software 설치 ....................................................................................................................... 21

4.1.1. Arduino Software 다운로드 ................................................................................................. 21

4.1.2. Arduino IDE 설치 ..................................................................................................................... 23

4.1.3. Arduino driver 설치 ................................................................................................................ 26

4.2. 프로그램 작성 및 컴파일 ................................................................................................................. 32

4.2.1. 프로그램 작성 ........................................................................................................................... 32

4.2.2. 파일 열기 ..................................................................................................................................... 34

4.2.3. 컴파일 방법 ................................................................................................................................ 36

Page 3: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

3

알고있노? 아두이노!

4.3. 이미지 로딩 및 디버그 방법 .......................................................................................................... 37

4.3.1. 이미지 로딩 ................................................................................................................................ 37

4.3.2. 디버그 방법 ................................................................................................................................ 39

Chapter 5. 디지털 핀 제어하기 ....................................................................................................................... 42

5.1. 아두이노에서 디지털 신호 입출력이란 ..................................................................................... 42

5.2. 아두이노에서 LED제어 하기............................................................................................................ 43

5.3. 아두이노로 버튼 신호 입력 받기 ................................................................................................. 45

Chapter 6. 아날로그 핀 제어하기 ................................................................................................................... 49

6.1. 아날로그 출력(PWM) 이용하여 LED 밝기 조절하기 ........................................................... 50

6.2. 아날로그 입력을 이용하여 가변저항 읽기 .............................................................................. 52

Chapter 7. 센서 제어하기 ................................................................................................................................... 56

7.1. PIR 모션 센서 신호 입력 받기 ...................................................................................................... 56

7.2. CDS 조도센서를 이용한 밝기 측정하기 .................................................................................... 59

7.3. 초음파 센서로 거리 측정하기 ........................................................................................................ 60

7.4. 온도 측정하기 ........................................................................................................................................ 63

7.5. 기울기 센서 제어하기 ........................................................................................................................ 66

7.6. 불꽃 센서 제어하기 ............................................................................................................................. 68

7.7. QRD1114 센서 제어 하기 ................................................................................................................ 71

Chapter 8. 화면 출력 하기 ................................................................................................................................. 75

8.1. LCD 모듈 제어하기 .............................................................................................................................. 75

8.2. 7 세그먼트 74HC595 를 이용하여 제어하기 .......................................................................... 77

8.3. 4개의 7세그먼트 제어하기 ............................................................................................................... 82

8.4. 8x8 도트 매트릭스 제어하기 ........................................................................................................... 86

Chapter 9. 기타 모듈 제어하기 ....................................................................................................................... 89

9.1. 부저 제어하기 ........................................................................................................................................ 89

9.2. 서보모터 제어하기 ............................................................................................................................... 92

9.3. 조이스틱 모듈 제어하기 ................................................................................................................... 95

9.4. HC-06 블루투스 모듈 제어하기..................................................................................................... 97

Page 4: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

4

알고있노? 아두이노!

Chapter 1. 아두이노

1.1. 아두이노

1.1.1. 아두이노는?

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

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

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

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

제품들을 말합니다. 본 책에서는 Arduino Uno R3 모델을 사용합니다.

1.1.2. 아두이노의 종류

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

에 정품뿐만 아니라 수많은 변종 보드들이 존재합니다. 여기에서는 동일한 아두이노 IDE

를 사용해서 개발할 수 있고 기본적으로 많이 사용되는 보드들 위주로 설명하겠습니다.

Page 5: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

5

알고있노? 아두이노!

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

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

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

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

아두이노 프로와 프로 미니는 다량의 완성품에 장착하기 용이하도록 소형화시키고 USB시

리얼 변환 칩을 제거한 제품입니다. 따라서 프로그래밍을 위한 별도의 USB 시리얼 변환

기가 필요합니다. ATMega328 기반으로서 아두이노 우노와 거의 동일한 스펙을 가집니다.

Page 6: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

6

알고있노? 아두이노!

아두이노 레오나르도 보드는 USB기능이 내장된 ATMega32u4를 메인 프로세서로 사용합

니다. 따라서 프로그램 다운로드와 시리얼 통신 포트가 독립적으로 동작됩니다. 키보드,

마우스, 조이스틱과 같은 주변기기도 인식시킬 수 있어서 활용도가 높습니다. 아두이노

마이크로 보드는 레오나르도 보드와 동일한 프로세서를 사용하지만 소형화 시킨 소형 보

드입니다.

아두이노 메가 2560 및 메가 ADK는 이름에서 알 수 있듯이 ATMega2560 프로세서를 사

용하여 우노 보드보다 기능과 핀 수가 많은 보드입니다.

Page 7: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

7

알고있노? 아두이노!

아두이노 두에는 다른 아두이노 제품들이 8bit 마이크로 컨트롤러인 AVR을 기반으로 한

것과 달리 아두이노 두에는 32bit ARM core 프로세서를 사용합니다. 기능과 성능이 높고

핀 수가 매우 많아서 보다 전문적인 제품개발과 연구 목적으로 사용합니다.

아두이노 제로는 아두이노사와 Atmel사가 공동 개발한 것으로 프로세서는 AVR이 아니라

ATSAMD21 이라는 ARM 계열의 32bit 프로세서를 채용했습니다. 48MHz의 클럭 주파수로

동작하는데 이것만 놓고 보면 우노 성능의 3배입니다. 클럭 속도 외에 우노와 비교하여

특이한 점은 0번 핀과 1번 핀을 제외한 모든 디지털 핀에서 PWM기능을 사용할수 있다

는 점과 플래시 메모리가 256KB로서 우노의 8배 정도로 늘었다는 점입니다. 개발 환경에

서도 별도의 USB통신 단자를 통해서 Atme사의 Embedded Debugger기능을 사용할수 있

어서 디버깅에 별도의 장치가 필요없다는 점도 있습니다.

Page 8: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

8

알고있노? 아두이노!

아두이노 융(YUN) 보드는 레오나르도 기판과 HTTP통신과 온갖 텍스트 기반의 작업을 처

리하는 Linino(리눅스 변형 OS)를 구동하는 WIFI 리눅스 기판을 내장하고 있습니다. USB

통신뿐만 아니라 와이파이를 통해 프로그램이 가능합니다.

갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환

보드입니다. 최대 400MHz의 클럭속도를 가지는 x86기반의 초전력 프로세서입니다. 아두

이노 우노의 핀 배열을 가지며 유사한 개발환경을 이용할 수 있습니다. 별도의 갈릴레오

보드 전용 IDE가 제공 되지만 사용법은 아두이노 IDE와 동일합니다.

이 외에도 많은 보드들이 있습니다. 하지만 ‘아두이노’는 등록된 상표이기 때문에 정품 보

드만 이 이름을 사용 할수 있습니다. 그래서 보통 파생 제품들은 ‘두이노’라는 접미어로

새오운 이름을 만들어서 사용합니다. 그 중엔 공식 아두이노와 완벽하게 호환이 되면서

가격은 더 저렴한 것들이 많으므로 이것을 사용해도 같은 개발도구와 라이브러리로 작업

을 할 수 있습니다. 더 자세한 정보는 인터넷을 검색해보면 각 디바이스의 스팩과 가격을

알아 볼수 있으니 검색해보시기 바랍니다.

Page 9: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

9

알고있노? 아두이노!

1.1.3. 마이크로컨트롤러, MCU

마이크로 컨트롤러(Microcontroller) 또는 마이크로 컨트롤러 유닛(Micro Controller Unit)은

같은 말이며, 줄여서 MCU라고도 합니다.

집적 회로 안에 프로세서와 메모리, 입출력 버스 등의 최소한의 컴퓨팅 요소를 내장한 초

소형 컨트롤러입니다. PC의 CPU와 비슷하나 저성능, 저전력에 저렴한 가격으로 제작된다

는 점과 자동제어에 이용되기 위한 많은 주변 장치를 포함하고 있다는 점이 다릅니다. 경

우에 따라서 스마트폰 등에 사용 되는 고성능/저전력 프로세서 제품도 포함합니다.

마이크로프로세서(Microprocessor, MPU)와 비교해서 설명을 드리겠습니다.

MPU는 일반 컴퓨터용 CPU로 연산목적에 비중을 둔 CPU와 메모리, I/O가 분리된 형태입

니다. MCU는 가전제품이나 로봇에 많이 쓰이는 User controller CPU로 CPU Core 뿐만 아

니라 주변 장치들이 내장된 것이라 할수 있습니다.

보통 임베디드 시스템에 적합하게 디자인되어 단순하고 신뢰성 있으며 전력소모가 적으

며 저렴하다는 장점을 가지고 있어 냉장고, 전자레인지 등의 제품에 주로 사용됩니다.

Page 10: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

10

알고있노? 아두이노!

1.1.4. Arduino Uno R3

우리가 사용할 아두이노 우노 R3보드입니다. 내부적으로 5V에 동작합니다.

1.1.4.1. 전원을 켜는 방법으론 3가지가 있습니다.

1. USB로부터 5V전원을 공급받아서 동작할 수 있습니다. 따라서 이 보드를 PC와

USB로 연결하면 기본적인 하드웨어 세팅은 끝났습니다.

2. 외부 전원 소켓에 전압 범위가 맞는 DC어댑터를 연결하여 전원을 공급할 수도

있다. 물론 건전지를 직렬 연결하여 사용할 수도 있습니다.

3. Voltage In 핀에 5V 전원을 연결하고 접지 핀에 GND를 연결해도 전원이 공급되

어 아두이노가 동작합니다.

만약 USB와 외부 전원 소켓에 둘 다 연결되어 있다면 외부전원 소켓에서 공급되는 전원

을 자동으로 사용하게 됩니다.

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

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

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

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

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

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

Page 11: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

11

알고있노? 아두이노!

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

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

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

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

다.(모터를 돌릴 수 있다는 이야깁니다.)

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

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

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

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

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

있습니다

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

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

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

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

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

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

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

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

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

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

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

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

1.1.4.6. 그 외의 기능들

SPI 통신: ICSP 헤더핀

TWI(I2C)통신: A0, A1핀

Page 12: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

12

알고있노? 아두이노!

1.2. Arduino의 특징 및 응용

1.2.1. Arduino 특징

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

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

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

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

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

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

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

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

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

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

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

제에서 실행됩니다.

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

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

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

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

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

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

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

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

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

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

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

Page 13: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

13

알고있노? 아두이노!

1.2.2. Arduino의 응용

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

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

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

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

Page 14: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

14

알고있노? 아두이노!

1.3. Arduino 관련 모듈

Arduino 관련 모듈을 살펴보면 공식 사이트(www.arduino.cc)에서도 구입할 수 있으며 그

외 인터넷 사이트를 검색해보면 무수히 많은 모듈들을 찾아볼 수 있습니다. 보드부터 시

작해서 확장 쉴드, 킷 등등 많은 모듈을 제공하고 있으며 공식 사이트의 모듈을 참고로

관련 모듈에 대해 알아보겠습니다. Arduino 공식 사이트에 보면 모듈을 보면 Boards,

SHIELDS, KITS, ACCESSORIS 4가지로 분류하고 있습니다.

Page 15: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

15

알고있노? 아두이노!

SHIELDS

ACCESSORIES

이렇게 정식 사이트에서만 판매하는 모듈만 하더라도 다양한 종류가 있으며 그 외 사이

트에서도 아두이노 관련 모듈을 다양하게 판매하고 있습니다.

Page 16: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

16

알고있노? 아두이노!

Chapter 2. 프로그래밍을 알아보자

2.1. 프로그래밍이란?

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

니다. 우선 다음의 그림을 보면서 프로그램이 무엇인지 설명드리겠습니다.

사과를 박스포장하는 프로그램을 간략화한 과정입니다. 이 프로그램을 만들어서 로봇에

입력한다면 사과를 박스포장하는 로봇이 되겠지요. 즉, 우리가 스마트폰이나 컴퓨터에서

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

C언어, 파이썬, 자바, 등의 프로그래밍 언어를 사용하여 프로그래밍함으로써 프로그램을

만드는 것입니다.

2.2. 프로그래밍 언어

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

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

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

쉽지 않습니다. 그렇기 때문에 만들어진 것이 C, C++, JAVA 등과 같은 프로그래밍

Page 17: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

17

알고있노? 아두이노!

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

바꿔주는 언어입니다.

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

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

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

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

2.3. 프로그래밍(코딩)을 왜 배워야 할까?

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

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

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

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

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

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

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

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

을 일깨워 줍니다.

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

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

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

2.4. 아두이노 프로그래밍

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

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

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

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

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

Page 18: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

18

알고있노? 아두이노!

Chapter 3. 전기전자 기초

3.1. 전기에 대한 이해

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

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

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

일상에서 사용하는 전자 제품이나 부품들은 각각 사용하는 전기의 세기나 양이 정해져

있으므로 잘못 사용한다면 제품들이 고장이 나서 화재가 나거나 감전당할 수 있습니다.

우리가 앞으로 사용할 아두이노 보드나 센서, 모터 등의 전자 부품들 또한 전기에너지를

사용하니 올바른 방법으로만 사용하시기 바랍니다.

3.2. 직류 전기와 교류 전기

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

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

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

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

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

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

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

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

다.

3.3. 전기의 원리

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

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

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

니다.

Page 19: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

19

알고있노? 아두이노!

3.4. 전기의 성질

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

하여 나타낼 수 있습니다.

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

전류는 물의 흐름입니다.

3.5. 옴의 법칙

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

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

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

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

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

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

3.6. 전압 분배 법칙

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

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

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

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

수 있습니다.

Page 20: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

20

알고있노? 아두이노!

3.7. 아날로그 신호와 디지털 신호

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

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

Page 21: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

21

알고있노? 아두이노!

Chapter 4. 개발 환경 구축

4.1. Arduino Software 설치

4.1.1. Arduino Software 다운로드

Arduino IDE(통합개발환경)는 Arduino 홈페이지(www.arduino.cc)에서 제공하고 있으며 무료

로 다운받아 설치 할 수 있습니다. 개발 하는 환경에 따라서 다운로드 받아야 할 파일이

상이합니다만 본 매뉴얼에서는 Windows 운영체제 개발 환경에 필요한 IDE를 다운받는

방법을 보여드리겠습니다.

다운로드 방법은 다음과 같습니다.

1. 홈페이지에 접속 후 SOFTWARE - DOWNLOADS 탭을 클릭합니다.

Page 22: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

22

알고있노? 아두이노!

2. Windows Installer, for Windows XP and up을 클릭합니다.

3. JUST DOWNLOAD를 클릭합니다.

Page 23: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

23

알고있노? 아두이노!

4.1.2. Arduino IDE 설치

다운이 완료되면 Arduino-1.8.6-windows을 눌러 설치를 시작합니다.

Page 24: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

24

알고있노? 아두이노!

Page 25: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

25

알고있노? 아두이노!

설치가 완료되면 폴더를 열어 Arduino 응용프로그램을 실행합니다.

우노 보드에 USB를 연결해 전원을 연결합니다.

Page 26: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

26

알고있노? 아두이노!

4.1.3. Arduino driver 설치

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

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

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

바랍니다.

Page 27: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

27

알고있노? 아두이노!

Page 28: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

28

알고있노? 아두이노!

Page 29: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

29

알고있노? 아두이노!

Page 30: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

30

알고있노? 아두이노!

Page 31: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

31

알고있노? 아두이노!

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

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

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

Page 32: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

32

알고있노? 아두이노!

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

4.2.1. 프로그램 작성

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

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

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

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

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

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

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

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

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

Page 33: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

33

알고있노? 아두이노!

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

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

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

드를 작성해보세요.

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

정하고 1초마다 HIGH와 LOW를 쓰는 소스입니다. 다음에 설명할 블링크 예제와 같은 소

스입니다.

Page 34: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

34

알고있노? 아두이노!

4.2.2. 파일 열기

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

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

Page 35: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

35

알고있노? 아두이노!

[그림 3-9]예제 Blink

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

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

선 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() 함수를 실행합니다.

Page 36: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

36

알고있노? 아두이노!

4.2.3. 컴파일 방법

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

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

Page 37: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

37

알고있노? 아두이노!

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

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

됩니다.

4.3. 이미지 로딩 및 디버그 방법

4.3.1. 이미지 로딩

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

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

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

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

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

Page 38: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

38

알고있노? 아두이노!

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

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

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

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

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

니다.

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

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

Page 39: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

39

알고있노? 아두이노!

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

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

4.3.2. 디버그 방법

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

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

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

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

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

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

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

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

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

코드는 아래그림과 같습니다.

Page 40: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

40

알고있노? 아두이노!

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

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

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

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

Page 41: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

41

알고있노? 아두이노!

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

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

가능합니다.

Page 42: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

42

알고있노? 아두이노!

Chapter 5. 디지털 핀 제어하기

5.1. 아두이노에서 디지털 신호 입출력이란

아두이노의 우노 보드는 총 14개(0~13번) 의 디지털 입출력 핀을 가지고 있습니다. 이 디

지털 핀을 통해 신호를 출력 하거나 입력 받을 수 있습니다. 여기서 신호라는 의미는 일

정 전압을 의미하고(0~5V) 출력은 5V 전압을 핀을 통해 내보는 것이고 입력은 핀에 일정

전압이 들어오는지를 판단하는 것입니다. 이를 통해 0(LOW) 이나 1(HIGH) 이 두가지 신

호로 구분됩니다.

디지털 신호의 출력이란 HIGH로 설정 한 경우 해당핀에 5V 전압이 출력되고 LOW로 설

정 한경우 0V를 출력 합니다. 이 전압은 외부 기기의 전원이 될 수 있어 LED 같은 저 전

류 디바이스를 제어 할 수 있습니다. 그러나 디지털 핀에 공급될 수 있는 최대 전류가

40mA로 제한 되어 있기 때문에 전류 사용량이 높은 외부기기는 전원 공급용으로 사용

불가 합니다. 대신 신호 전달용으로 사용이 가능합니다.

Page 43: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

43

알고있노? 아두이노!

디지털 신호의 입력이란 외부 기기에서 아두이노 보드로 신호를 보내는 경우 이를 인식

하는 것입니다. 입력으로 들어오는 신호는 전압에 따라 HIGH 또는 LOW 로 인식되고 그

기준은 3~5V 전압 HIGH 0~1.5V 전압은 LOW로 인식됩니다. 이렇게 인식된 신호로 다양

한 제어가 가능 합니다.

5.2. 아두이노에서 LED제어 하기

아두이노의 디지털 핀을 이용하여 LED 를 제어하기 위해 필요 물품 및 회로 구성은 어떻

게 되는지 살펴 봅시다.

- 필요 물품

우노 보드

Page 44: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

44

알고있노? 아두이노!

브레드보드

점퍼케이블 MM타입

LED

220Ω 저항

- 회로 구성

아두이노 UNO LED

Page 45: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

45

알고있노? 아두이노!

7 긴 단자(220옴 저항)

GND 짧은 단자

소스코드 LedControl.ino

1 void setup() {

pinMode(7,OUTPUT); // 7번핀을 출력으로 설정

}

void loop() {

digitalWrite(7, HIGH); // 7번핀에 HIGH 출력

delay(1000); // 1초 지연

digitalWrite(7, LOW); // 7번핀에 LOW 출력

delay(1000); // 1초 지연

}

2

3

4

5

6

7

8

9

10

참고

pinMode(핀번호, 설정모드) – 핀의 모드를 설정하는 함수

- 핀번호: 설정할 핀 번호

- 설정 모드: OUTPUT(출력) or INPUT(입력)

digitalWrite(핀번호, 신호모드) – 핀의 신호를 출력하는 함수

- 핀번호: 설정할 핀 번호

- 신호모드: HIGH(5V) or LOW(0V)

delay(시간) – 입력된 시간 동안 동작을 기다리는 함수, 시간 단위는 ms

LED에 직렬 저항을 연결하는 이유 – LED는 다이오드의 특성을 가지고 있기 때문에 정격

종작전압보다 조금이라도 높은 전압이 흐르게 되면 과전류가 흐르면서 파손 될 수 있습

니다. 그렇기에 LED를 보호하기 위해 저항을 연결하여 과전류를 방지하는 것입니다.

5.3. 아두이노로 버튼 신호 입력 받기

아두이노의 디지털 핀을 이용하여 푸시버튼의 신호를 입력 받기 위해 필요 물품 및 회로

구성은 어떻게 되는지 살펴 봅시다.

Page 46: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

46

알고있노? 아두이노!

- 필요 물품

우노 보드

브레드보드

점퍼케이블 MM타입

푸시 버튼

10K 저항

- 회로 구성

Page 47: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

47

알고있노? 아두이노!

아두이노 UNO Button

5번 핀 3

GND 2

5v 1

소스 코드 buttonDetect.ino

1 void setup() {

pinMode(5,INPUT); //5번핀을 입력으로 설정

Serial.begin(115200); //시리얼 통신 속도 115200 설정

}

void loop() {

if(!digitalRead(5)) //5번핀의 상태값 Read

{

Serial.println("buttonDetect"); //문자열 시리얼 모니터에 출력

}

}

2

3

4

5

6

7

8

9

10

참고

digitalRead(핀번호) – 핀의 신호를 확인하는 함수

- 핀번호: 확인 할 핀 번호

- 신호가 3V 이상이면 1이 반환되고 1.5V이하 이면 0이 반환 됩니다.

Page 48: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

48

알고있노? 아두이노!

버튼에 풀업 저항을 연결하는 이유 – 풀업이라는 말의 의미는 플로팅 상태일때의 값을

끌어올린다는 의미입니다. 즉 스위치가 열려있을때 상태는 값이 1이 됩니다. 이런 저항

연결이 없다면 플로팅 상태가 되어 버튼의 상태를 정확하게 인지 할 수 없다. 플로팅 이

란 떠있다, 부유하다, 미끄러지다, 유동적이다 라는 사전적 의미를 가지고 있다. 즉 버튼

의 상태를 정확히 알 수 없게 전압이 정확히 0이나 5V 가 아니고 중간에 떠있는 현상을

말합니다.

Page 49: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

49

알고있노? 아두이노!

Chapter 6. 아날로그 핀 제어하기

아날로그는 디지털의 1과 0의 형태가 아닌 다양한 형태로 입력되거나 출력됩니다. 디지

털 핀은 신호 입출력이 모두 가능했으나 아날로그 핀은 입력과 출력이 서로 다른핀에서

이뤄 집니다. 아두이노 우노를 기준으로 아날로그 입력은 A0~A5번 핀에서 가능하고 아날

로그 출력은 디지털 핀 숫자 옆에 ~모양이 붙은 핀에서 PWM 형태 출력됩니다.

PWM이란 Pulse Width Modulation의 준말로 펄스의 폭을 컨트롤 하는 주기 제어방법 입

니다. 출력되는 전압값을 일전한 비율 동안은 HIGH를 유지하고, 나머지는 LOW를 출력하

여 아래와 같은 사각파의 출력을 만들어 냅니다. PWM을 사용하면 0V와 5V 사이의 아날

로그 값을 묘사할 수도 있으며 제어 및 통신에서도 많이 사용합니다.

그림 4-2 PWM 출력 파형

아두이노는 외부기기로부터 0~5V의 아날로그 신호가 입력되면 0~1023값 즉 10Bit 값으

Page 50: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

50

알고있노? 아두이노!

로 변환되어 디지털 값으로 인식합니다.

6.1. 아날로그 출력(PWM) 이용하여 LED 밝기 조절하기

아두이노는 PWM을 이용하여 0~5V의 전압을 가변하여 출력할 수 있습니다. 이를 통해

LED에 전원을 가변 하여 밝기를 조절해 보도록 합니다. 위에서 설명 하였듯이 디지털 핀

중 3, 4, 5, 9, 10, 11중 하나를 선택하여 출력 합니다.

- 필요 물품

우노 보드

브레드보드

점퍼케이블 MM타입

LED

220Ω 저항

Page 51: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

51

알고있노? 아두이노!

- 회로 구성

그림 3-4 LED 회로 구성

아두이노 UNO LED

3 긴 단자(220옴 저항)

GND 짧은 단자

소스코드 PwmByLed.ino

1 void setup() {

pinMode(3,OUTPUT); // 3번핀을 출력으로 설정

}

void loop() {

analogWrite(3,0); //3번핀에 0V 출력

2

3

4

5

Page 52: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

52

알고있노? 아두이노!

6 delay(1000);

analogWrite(3,51); //3번핀에 1V 출력

delay(1000);

analogWrite(3,102); //3번핀에 2V 출력

delay(1000);

analogWrite(3,153); //3번핀에 3V 출력

delay(1000);

analogWrite(3,204); //3번핀에 4V 출력

delay(1000);

analogWrite(3,255); //3번핀에 5V 출력

delay(1000);

}

7

8

9

10

11

12

13

14

15

16

17

참고

analogWrite(핀번호, 설정값) – 핀 번호에 설정값의 아날로그 신호를 출력하는 함수

- 핀번호: 설정할 핀 번호

- 값 : 0~255 의 아날로그 출력 값

6.2. 아날로그 입력을 이용하여 가변저항 읽기

가변저항은 회전부를 조절하여 저항 값의 임의로 바꿀 수 있는 저항기 입니다. 가변저항

의 최대 크기는 각각 다르며 0~최대값까지 조절 할 수 있습니다. 가변저항은 3개의 핀과

회전부로 구성되어 있어 회전부를 돌리면 변형된 저항값이 신호 핀으로 출력됩니다

Page 53: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

53

알고있노? 아두이노!

가변 저항은 저항 값을 가변하는 조절부와 3개의 핀으로 구성되어 있습니다. 가변 저항의

전체 저항 값은 정해져있고 회전 막대를 어느방향으로 회전하느냐에 따라 신호핀과 양옆

핀 사이에 걸리는 저항값이 변하게 됩니다.

출력된 신호를 아두이노 아날로그 핀을 통해 입력 받고 시리얼 모니터로 출력해보로록

합시다.

- 필요 물품

우노 보드

브레드보드

점퍼케이블 MM타입

10K 가변저항

- 회로 구성

Page 54: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

54

알고있노? 아두이노!

아두이노 UNO 10K 가변저항

A0 신호 핀

5V VCC

GND GND

소스코드 PotentiometerRead.ino

1 int AnalogReadVal = 0; //AnalogReadVal 변수 선언 후 0 초기화

void setup() {

Serial.begin(115200); //시리얼 통신 115200 속도로 시작

}

void loop() {

AnalogReadVal = analogRead(A0); //A0 핀에 입력되는 신호 변수에 대입

Serial.println(AnalogReadVal); //시리얼 모니터에 변수 출력

delay(500); //500ms 동안 지연

}

2

3

4

5

6

7

8

9

10

참고

analogRead(핀번호) – 핀 번호로 입력되는 아날로그 신호값을 반환하는 함수

- 핀번호: 설정할 핀 번호

Page 55: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

55

알고있노? 아두이노!

- 반환값: 0~1024 의 아날로그 값

Page 56: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

56

알고있노? 아두이노!

Chapter 7. 센서 제어하기

센서란 무언가를 느끼고, 그 감각으로부터 무언가를 알아내는 것입니다. 빛, 소리, 화학물

질, 온도 등과 같은 감각과 관련된 신호들을 수집하여 이것들을 수치로 출력하는 장치들

을 말합니다.

센서 이미지 추가

이러한 센서들에서 출력되는 신호를 아두이노에서 분석하여 표현하는 방법을 알아보도록

합니다.

7.1. PIR 모션 센서 신호 입력 받기

PIR(수동 적외선 센서) 움직임 센서는 적외선을 이용하여 각도 내에 움직임이 발견되면

HIGH 신호를 출력하고 움직임이 없다면 LOW를 출력합니다.

- 필요 물품

우노 보드

브레드보드

점퍼케이블 MM타입

220옴 저항

PIR 모션센서

LED

Page 57: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

57

알고있노? 아두이노!

- 회로 구성

아두이노 UNO PIR 모션 센서

7 신호 핀

5V VCC

GND GND

Page 58: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

58

알고있노? 아두이노!

아두이노 UNO LED

3 긴 단자(220옴 저항)

GND 짧은 단자

소스코드 PirMotion.ino

1 void setup() {

pinMode(7,INPUT); //7번핀 입력으로 설정

pinMode(3,OUTPUT); //3번핀 출력으로 설정

Serial.begin(115200); //시리얼 통신 115200 속도로 시작

}

void loop() {

if(digitalRead(7)) //7번핀에 입력된 신호가 HIGH이면

{

digitalWrite(3,HIGH); //3번핀에 HIGH 출력

Serial.println("Motion Detect"); //시리얼 모니터에 문자열 출력

}

else //7번핀에 입력된 신호가 LOW이면

{

digitalWrite(3,LOW); //3번핀에 HIGH 출력

Serial.println("Motion Detect"); //시리얼 모니터에 문자열 출력

}

}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

참고

digitalRead(핀번호) – 핀의 신호를 확인하는 함수

- 핀번호: 확인 할 핀 번호

- 신호가 3V 이상이면 1이 반환되고 1.5V이하 이면 0이 반환 됩니다.

모션센서에 움직임이 감지되면 아두이노에 신호가 입력되고 이 신호를 바탕으로 LED가

동작합니다. 신호가 정상적으로 감지되지 않는다면 센서의 가변부를 조절하여 튜닝을 하

고 시리얼 모니터를 통해 확인합니다.

Page 59: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

59

알고있노? 아두이노!

7.2. CDS 조도센서를 이용한 밝기 측정하기

CDS(황화카드뮴)센서는 주변의 밝기를 측정하는 센서로 광에너지를 받으면 내부에 움직

이는 전자가 발생하여 전도율이 변하는 원리를 이용한 것입니다. 들어오는 빛의 양에 따

라 내부 저항값이 변하여 가변저항과 비슷합니다. CDS 센서는 극성이 없으며 밝으면 저

항 값이 낮아지고 어두울 경우 저항값이 올라는 특징이 있어 신호선에 출력되는 전압을

가지고 밝기를 측정합니다.

- 필요 물품

우노 보드

브레드보드

점퍼케이블 MM타입

10K옴 저항

CDS 조도센서

- 회로 구성

Page 60: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

60

알고있노? 아두이노!

아두이노 UNO CDS 센서

A0 CDS센서 오른쪽

5V CDS센서 왼쪽(10K저항)

GND 10K 저항

소스코드 CDSRead.ino

1 int AnalogVal = 0; //변수 선언 후 0 저장

void setup() {

Serial.begin(115200); //시리얼 통신 115200 속도로 시작

}

void loop() {

AnalogVal = analogRead(A0); //A0에 입력되는 신호값 변수에 저장

Serial.println(AnalogVal); //시리얼 모니터에 변수값 출력

delay(500); //500ms 동안 대기

}

2

3

4

5

6

7

8

9

7.3. 초음파 센서로 거리 측정하기

인산이 들을수 있는 주파수는 약 20~20KHz 입니다. 이것보다 높은 주파수를 초음파라고

합니다. 초음파의 속도는 약 340m/s 이고 이 속도를 이용하여 초음파가 반사되서 돌아오

는 시간을 계산하여 거리를 측정합니다. 예제에서 사용한 초음파 센서는 40KHz 정도의

주파수를 생성하여 4m 정도 까지 거리를 측정할 수 있습니다.

Page 61: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

61

알고있노? 아두이노!

초음파 센서를 송신부에서 일정한 시간 간격을 둔 초음파 펄스를 출력하고 대상물에 반

사되어 돌아오는 신호를 수신부에서 받아 그 시간만큰 echo 핀으로 출력합니다.

예를 들어 1cm를 이동하는데 걸리는 시간은 아래와 같이 구할 수 있습니다.

𝑡𝑡 =2 ∗ 𝐿𝐿(물체와의 거리 𝑚𝑚)

Vs(음속 m/s)

t: 신호가 되돌아 올 때까지 걸리는 시간(s)

- 필요 물품

우노 보드

브레드보드

점퍼케이블 MM타입

초음파 센서

Page 62: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

62

알고있노? 아두이노!

- 회로 구성

아두이노 UNO 초음파 센서

7 Trig

6 Echo

5V VCC

GND GND

소스코드 SonicSensor.ino

1 #define TP 7 //Trig_pin 정의

#define EP 6 //Echo_pin 정의

void setup(){

2

3

4

Page 63: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

63

알고있노? 아두이노!

5 pinMode(TP,OUTPUT); //TP핀을 출력으로 설정

pinMode(EP,INPUT); //EP핀을 입력으로 설정

Serial.begin(115200); //시리얼 통신 115200 속도로 시작

}

void loop(){

long microseconds = TP_init(); //EP 핀에 HIGH가 입력되는 시간 반환

long distance_cm = Distance(microseconds); //시간을 이용해서 CM 단위로 변환

Serial.print("Distacne_CM = "); //시리얼 모니터에 문자열 출력

Serial.println(distance_cm); //시리얼 모니터에 거리 출력

delay(1000); //1초 대기

}

long Distance(long time)

{

long distance; //변수 선언

distance = time /29 / 2; //CM단위로 변환 ((time)*(Sonic :340m/s))/2

return distance; //CM 거리 반환

}

long TP_init()

{

digitalWrite(TP, HIGH); //TP 핀에 HIGH 출력

delayMicroseconds(10); //10 us 대기

digitalWrite(TP, LOW); //TP 핀에 LOW 출력

long microseconds = pulseIn(EP,HIGH); //EP핀에 HIGH 입력되는 시간을 변수에 저장

return microseconds; //변수 반환

}

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

7.4. 온도 측정하기

LM35 온도센서를 외부온도에 따라 비례하는 전압을 출력하는 센서로 0도에서는 0V가 출

력되고 1도 증가시 10mV단위로 전압이 증가 합니다. 이런 원리를 이용하여 온도를 즉정

할 수 있습니다.

Page 64: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

64

알고있노? 아두이노!

- 필요 물품

우노 보드

브레드보드

점퍼케이블 MM타입

LM35 온도 센서

Page 65: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

65

알고있노? 아두이노!

- 회로 구성

아두이노 UNO LM35 온도 센서

VCC 왼쪽핀

A0 가운데 핀

GND 오른쪽 핀

소스코드 Temp_Read.ino

1 int analogVal = 0; //변수 선언

float temperature; //변수 선언

void setup() {

Serial.begin(115200); //시리얼 통신 115200 속도로 시작

}

void loop() {

analogVal = analogRead(A0); //A0에 입력되는 신호값 변수에 저장

temperature = (5.0 * analogVal * 100.0)/1024; //변수값을 온도로 변환

Serial.print(temperature); //시리얼 모니터에 온도값 표시

Serial.println(" C"); //시리얼 모니터에 “C” 문자 표시

delay(1000); //지연 1초

}

2

3

4

5

6

7

8

9

10

11

12

13

Page 66: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

66

알고있노? 아두이노!

7.5. 기울기 센서 제어하기

기울기 센서는 기울기를 감지하면 회로가 연결되어 전기를 흐르게 하는 일종의 스위치

역할을 하는 센서입니다. 게울기 센서 안에는 전도성 구가 들어 있어 위를 행했을 경우

센서속에 있는 전도성구가 양쪽 단자 사이를 연결시켜 줘서 전류가 흘러 신호를 발생 시

킵니다.

이런 원리를 이용하여 기울기가 감지되면 LED를 제어하는 동작을 확인해 봅니다.

- 필요 물품

우노 보드

브레드보드

점퍼케이블 MM타입

LED

기울기 센서

220 저항

10K 저항

Page 67: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

67

알고있노? 아두이노!

- 회로 구성

아두이노 UNO 기울기 센서

VCC 왼쪽핀(10K 저항)

7 왼쪽핀

Page 68: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

68

알고있노? 아두이노!

GND 오른쪽 핀

아두이노 UNO LED

5 긴 단자(220 저항)

GND 짧은 단자

소스코드 TiltSensorRead.ino

1 void setup() {

pinMode(7,INPUT); //7번핀 입력으로 설정

pinMode(5,OUTPUT); //5번핀 출력으로 설정

}

void loop() {

if(digitalRead(7)) //7번핀에 HIGH가 입력되면

{

digitalWrite(5,HIGH); //5번핀에 HIGH 출력

}

else //7번핀에 LOW가 입력되면

{

digitalWrite(5,LOW); //5번핀에 LOW 출력

}

}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

7.6. 불꽃 센서 제어하기

불꽃 센서는 적외선을 이용하여 빛(불꽃)을 검출하는 센서입니다. 긴다리가 에미터 짧은

다리가 콜렉터 입니다.

Page 69: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

69

알고있노? 아두이노!

- 필요 물품

우노 보드

브레드보드

점퍼케이블 MM타입

LED

불꽃센서

220 저항

10K 저항

Page 70: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

70

알고있노? 아두이노!

- 회로 구성

아두이노 UNO 불꽃 센서

VCC 짧은 단자

Page 71: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

71

알고있노? 아두이노!

A0 긴 단자

GND 긴 간자(10K 저항)

아두이노 UNO LED

5 긴 단자(220 저항)

GND 짧은 단자

소스코드 FlameSensorRead.ino

1 int analogVal = 0; //변수 선언 후 0 대입

void setup() {

pinMode(5,OUTPUT); //5번핀 출력으로 설정

Serial.begin(115200); //시리얼 115200속도로 시작

}

void loop() {

analogVal = analogRead(A0); //A0 핀의 아날로그 값 변수에 저장

if(analogVal>300) //아날로그 값이 300 이상이면

{

digitalWrite(5,HIGH); //5번핀에 HIGH 출력

}

else //아날로그 값이 300이하 이면

{

digitalWrite(5,LOW); //5번핀에 LOW 출력

}

Serial.println(analogVal); //시리얼모니터에 아날로그 값 출력

}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

7.7. QRD1114 센서 제어 하기

QRD1114 센서는 짧은 거리는 측정하는 센서로 0~3cm 범위를 가지고 습니다. 적외선을

이용하여 물체가 가까울수록 많은 빛이 튀게 됩니다. 근거리 상에 물체 있으면 HIGH를

출력하고 없으면 LOW를 출력합니다. 4개의 핀으로 구성되어 있고 핀 번호는 1번을 기

준으로 시계 방향 순입니다. 1번 핀에는 조그마한 표시 가 있습니다.

Page 72: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

72

알고있노? 아두이노!

- 필요 물품

우노 보드

브레드보드

점퍼케이블 MM타입

QRD1114 센서

220 저항

10K 저항

Page 73: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

73

알고있노? 아두이노!

- 회로 구성

아두이노 UNO QRD1114 센서

5V 1(10K)

GND 2

A0 3(220)

GND 4

소스코드 QRD1114Read.ino

1 void setup()

{

Serial.begin(115200); //시리얼 115200 속도로 시작

}

2

3

4

5

Page 74: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

74

알고있노? 아두이노!

6 void loop()

{

int proximityADC = analogRead(A0); //A0의 아날로그 신호 값 변수에 저장

float proximityV = (float)proximityADC * 5.0 / 1023.0; //전압으로 변환

Serial.println(proximityV); //시리얼 모니터에 전압값 출력

delay(100); //지연 100ms

}

7

8

9

10

11

12

Page 75: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

75

알고있노? 아두이노!

Chapter 8. 화면 출력 하기

8.1. LCD 모듈 제어하기

LCD 모듈은 가로가 16칸 세로가 2칸으로 구성된 디스플레이 모듈로 총 32개의 문자를

표시 할수 있습니다. LCD는 패널과 제어기가 함께 모듈 형태로 되어 있으며 제어기는 여

러가지 RAM 과 ROM으로 구성되어 습니다. 이 LCD를 제어하기 위해서는 초보자가 하기

에는 복잡한 프로그램이 작성되어야 합니다. 이 부분을 아두이노에서 제공 하는 라이브러

리를 활용하여 간단하게 제어가 가능합니다.

- 필요 물품

우노 보드

브레드보드

점퍼케이블 MM타입

TEXT LCD

10K 가변 저항

- 회로 구성

Page 76: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

76

알고있노? 아두이노!

아두이노 UNO TEXT LCD

GND VSS

5V VDD

A0 VO

12 RS

GND RW

11 E

5 D4

4 D5

3 D6

2 D7

아두이노 UNO 10K 가변 저항

GND GND

5V VCC

A0 신호 핀

소스코드 TextLcd.ino

1 #include <LiquidCrystal.h> //LCD 관련 라이브러리 포함

//LCD 의 각 핀번호 변수에 저장

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;

2

3

4

Page 77: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

77

알고있노? 아두이노!

5 LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //LCD 관련 핀번호 설정

void setup() {

lcd.begin(16, 2); //LCD 의 종류 설정

lcd.print("hello, world!"); //LCD에 문자열 출력

}

void loop() {

lcd.setCursor(0, 1); //LCD의 커서를 2번째 라인의 맨 왼쪽으로 이동

lcd.print(millis() / 1000); //1초 단위로 LCD에 출력

}

6

7

8

9

10

11

12

13

14

15

8.2. 7 세그먼트 74HC595 를 이용하여 제어하기

7 세그먼트는 7개의 획으로 숫자나 문자를 나태닐 수 있는 표시 장치로 FND 라고도 불

립니다. 각각의 획은 LED로 구성되어 있으며 이중 일부를 켜고 끄는 것으로 준자를 표시

할 수 있습니다. 모든 LED가 켜지면 숫자 8과 같고 오른쪽 세로 LED만 켜지면 숫자 1과

같이 표시 됩니다.

7 세그먼트는 동작하는 방식에 따라 애노드형과 캐소드 형으로 나뉘며 애노드형은 LOW

신호로 LED가 켜지며 캐소드 형은 HIGH 신호로 LED가 켜집니다.

Page 78: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

78

알고있노? 아두이노!

74HC595 라는 IC는 8bit 쉬프트 레지스터로 클럭과 데이터 레치 핀을 이용하여 8비트를

만들어 줍니다.

Page 79: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

79

알고있노? 아두이노!

- 필요 물품

우노 보드

브레드보드

점퍼케이블 MM타입

7-세그먼트

74HC595

220 옴 저항 x 8

Page 80: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

80

알고있노? 아두이노!

- 회로 구성

아두이노 UNO 74HC595

GND GND

5V Vcc

7 SH_CP

6 ST_CP

5 DS

74HC595 7-세그먼트

Q0 a

Page 81: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

81

알고있노? 아두이노!

Q1 b

Q2 c

Q3 d

Q4 e

Q5 f

Q6 g

Q7 dp

소스코드 7Segment.ino

1 int clockPin = 7; //클럭 핀 관련 변수 선언 및 번호 초기화

int latchPin = 6; //레치 핀 관련 변수 선언 및 번호 초기화

int dataPin = 5; //데이터 핀 관련 변수 선언 및 번호 초기화

//0~9 까지 데이터 배열 선언

byte dec_digits[] = {

0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110,

0b01101101, 0b01111100, 0b00000111, 0b01111111, 0b01100111,0b10000000

};

void setup() {

pinMode(latchPin, OUTPUT); //레치 핀 출력으로 설정

pinMode(clockPin, OUTPUT); //클럭 핀 출력으로 설정

pinMode(dataPin, OUTPUT); //데이터 핀 출력으로 설정

}

void loop(){

for (int numberToDisplay = 0; numberToDisplay < 11; numberToDis-

play++) //표시될 문자 수 만큼 for 제어문 설정

{

digitalWrite(latchPin, LOW); //레치 핀에 LOW 출력

shiftOut(dataPin, clockPin, MSBFIRST, dec_digits[numberToDisplay]);

//표시할 문자 배열의 데이터를 비트별로 데이터 핀에 전송

digitalWrite(latchPin, HIGH); //레치 핀에 LOW 출력

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

Page 82: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

82

알고있노? 아두이노!

25 delay(500); //500ms동안 대기

}

}

26

27

8.3. 4개의 7세그먼트 제어하기

7 세그먼트 4개가 배열되어 있는 모듈로서 1개의 7 세그먼트를 제어하는 방식과 비슷 하

나 어떠한 세크먼트를 제어할 지에 대한 선택을 할수 있는 핀이 존재 합니다. 그 핀들에

신호를 인가 하고 Data 핀들에 신호를 입력하면 해당 세그먼트가 제어 됩니다.

- 필요 물품

우노 보드

브레드보드

점퍼케이블 MM타입

4 x 7 세그먼트

220옴 저항 x 8

Page 83: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

83

알고있노? 아두이노!

- 회로 구성

아두이노 UNO TEXT LCD

Page 84: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

84

알고있노? 아두이노!

13 D1

12 D2

11 D3

19 D4

9 A

8 B

7 C

6 D

5 E

4 F

3 G

2 dp

소스코드 7Segment.ino

1 char number[10][8] = { //{a,b,c,d,e,f,g,dp}

{1,1,1,1,1,1,0,0}, //0

{0,1,1,0,0,0,0,0}, //1

{1,1,0,1,1,0,1,0}, //2

{1,1,1,1,0,0,1,0}, //3

{0,1,1,0,0,1,1,0}, //4

{1,0,1,1,0,1,1,0}, //5

{1,0,1,1,1,1,1,0}, //6

{1,1,1,0,0,0,0,0}, //7

{1,1,1,1,1,1,1,0}, //8

{1,1,1,1,0,1,1,0}, //9

};

void setup() {

for(char i = 2; i<10; ++i)

pinMode(i,OUTPUT);

for(char i = 10; i<14; ++i)

pinMode(i,OUTPUT);

}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

Page 85: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

85

알고있노? 아두이노!

20 void loop() {

digitalWrite(10,LOW);

digitalWrite(11,LOW);

digitalWrite(12,LOW);

digitalWrite(13,LOW);

for(char i = 0; i<10; ++i)

{

for(char k = 0; k<8; ++k)

digitalWrite(k+2,number[i][k]);

delay(1000);

}

}

21

22

23

24

25

26

27

28

29

30

Page 86: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

86

알고있노? 아두이노!

8.4. 8x8 도트 매트릭스 제어하기

도트매트릭스는 문자를 표시하기 위한 출력장치로서 가로 세로 각 점을 매트릭스상으로

바치하고 각점을 발광시키는 방법으로 글자를 만듭니다. 여기서는 외부 라이브러리를 사

용하며 라이브러리 폴더를 아두이노가 설치된 경로의 libraries 폴더 안에 복사 합니다.

라이브러리는 소스파일과 같이 포함 되어 있습니다.

라이브러리 : LedControl-master

C:\Program Files (x86)\Arduino\libraries

- 필요 물품

우노 보드

점퍼케이블 MF타입

8x8 도트매트릭스

Page 87: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

87

알고있노? 아두이노!

- 회로 구성

아두이노 UNO 74HC595

GND GND

5V Vcc

7 SH_CP

6 ST_CP

5 DS

Page 88: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

88

알고있노? 아두이노!

소스코드 7Segment.ino

1 #include "LedControl.h"

LedControl lc=LedControl(12,11,10,8);

unsigned long delaytime=10;

void setup() {

int devices=lc.getDeviceCount();

for(int address=0;address<devices;address++) {

lc.shutdown(address,false);

lc.setIntensity(address,8);

lc.clearDisplay(address);

}

}

void loop() {

int devices=lc.getDeviceCount();

for(int row=0;row<8;row++) {

for(int col=0;col<8;col++) {

for(int address=0;address<devices;address++) {

delay(delaytime);

lc.setLed(address,row,col,true);

delay(delaytime);

lc.setLed(address,row,col,false);

}

}

}

}

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

Page 89: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

89

알고있노? 아두이노!

Chapter 9. 기타 모듈 제어하기

9.1. 부저 제어하기

부저는 소리를 내는 모듈로써 아두이노에서는 tone()함수를 통해 PWM을 출력하여 지정

된 주파수를 재생할 수 있습니다. 주파수에 따라 원하는 음계를 만들어 음악을 재생할 수

있습니다.

- 필요 물품

우노 보드

브레드보드

점퍼케이블 MM타입

피에조 부저

Page 90: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

90

알고있노? 아두이노!

- 회로 구성

아두이노 UNO 피에조 부저

GND -단자

5V +단자

소스코드 BuzzerContol.ino

1 #include "pitches.h"

//멜로디 배열 선언

int melody[] = {

NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4

};

// 각 음 시간 설정

int noteDurations[] = {

2

3

4

5

6

7

Page 91: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

91

알고있노? 아두이노!

8 4, 8, 8, 4, 4, 4, 4, 4

};

void setup() {

// iterate over the notes of the melody:

for (int thisNote = 0; thisNote < 8; thisNote++) {

int noteDuration = 1000 / noteDurations[thisNote]; //음길이 계산

tone(3, melody[thisNote], noteDuration); //PWM 파형 출력

int pauseBetweenNotes = noteDuration * 1.30; //각 음간 지연시간 설정

delay(pauseBetweenNotes); //지연

// stop the tone playing:

noTone(3); //PWM 파형 출력 중단

}

}

void loop() {

}

9

10

11

12

13

14

15

16

17

18

19

20

21

22

Page 92: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

92

알고있노? 아두이노!

9.2. 서보모터 제어하기

서보 모터는 PWM 을 이용하여 제어되는 모터로 위치를 펄스의 길이에 따라 결정 합니

다. 서보모터는 대략 20ms 마다 펄스를 받고 이 펄스가 1ms 동한 HIGH이면 각도는 0도

이며 1.5ms 이면 가운데 2ms 이면 180도가 됩니다. 서보모터의 케이블중 금은색이나 갈

색은 그라운드이며 전화는 빨강, 신호는 노랑이나 주황입니다.

- 필요 물품

우노 보드

피에조 부저

점퍼케이블 MM타입

Page 93: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

93

알고있노? 아두이노!

- 회로 구성

아두이노 UNO 서보 모터

GND 갈색

5V 빨간색

9 주황색

소스코드 ServoControl.ino

1 #include <Servo.h> //서보 라이브러리 추가

int servoPin = 9; //서보 제어 핀 변수 선언

Servo servo; //서보 라이브러리 가져오기

2

3

Page 94: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

94

알고있노? 아두이노!

4

int angle = 0; // 서보 모터 각도 변수 초기화

void setup()

{

servo.attach(servoPin); //서보핀 설정

}

void loop()

{

for(angle = 0; angle < 180; angle++) //0~180도 까지

{

servo.write(angle); //서보 모터 각도 제어

delay(15); //지연 15ms

}

for(angle = 180; angle > 0; angle--) //180~0도 까지

{

servo.write(angle); //서보 보터 각도 제어

delay(15); //지연 15ms

}

}

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

Page 95: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

95

알고있노? 아두이노!

9.3. 조이스틱 모듈 제어하기

조이스틱 모듈은 X와 Y방향으로 2개의 아날로그 신호 값을 출력하며 1개의 버튼 출력을

가지고 있습니다. 그것을 이용하여 RC자동차나 게임 컨트롤 장치로 이용할 수 있습니다.

- 필요 물품

우노 보드

점퍼케이블 MM타입

조이스틱 모듈

- 회로 구성

아두이노 UNO 서보 모터

GND 갈색

Page 96: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

96

알고있노? 아두이노!

5V 빨간색

9 주황색

소스코드 JoyStick.ino

1 int X = A0; //x 축 핀설정

int Y = A1; //Y 축 핀설정

int ButtonPin = 7; //버튼 핀 설정

void setup()

{

Serial.begin(9600); //시리얼 모니터 9600속도로 시작

pinMode(ButtonPin, INPUT); //버튼핀 입력으로 설정

}

void loop()

{

int xval = analogRead(X); //X축 값 읽고 변수에 저장

int yval = analogRead(Y); //Y축 값 읽고 변수에 저장

int buttonVal = digitalRead(ButtonPin); //버튼핀 읽고 변수에 저장

Serial.print("X = "); //시리얼 모니터 출력 이하 생략

Serial.print(xval);

Serial.print("Y = ");

Serial.print(yval);

Serial.print("Buttoun = ");

Serial.println(buttonVal);

}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

Page 97: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

97

알고있노? 아두이노!

9.4. HC-06 블루투스 모듈 제어하기

HC-06 블루투스 모듈은 AT CMD 로 제어되는 블루투스 모듈로 슬레이브와 마스터 모듈

이 있습니다. HC – 06 은 슬레이브 모듈로 동작 합니다. 아두이노로 스마트폰과 블루투스

통신을 할 때 사용됩니다.

- 필요 물품

우노 보드

점퍼케이블 MF타입

HC-06 블루투스 모듈

- 회로 구성

}

Page 98: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

98

알고있노? 아두이노!

아두이노 UNO HC 06

GND GND

5V VCC

2 RXD

3 TXD

소스코드 HC-06.ino

1 #include <SoftwareSerial.h> // SoftwareSerial 라이브러리 포함

/*

* RXD = 아두이노 2번핀에 연결

* TXD = 아두이노 3번핀에 연결

*/

SoftwareSerial BTSerial(3,2); // SoftwareSerial 2,3 핀Rx,Tx 로 설정

void setup()

{

Serial.begin(9600); //Serial 모니터 9600시작

BTSerial.begin(9600); //Serial 모니터 9600시작

}

void loop()

{

if(BTSerial.available()) //BT 시리얼에 입력된 DATA가 있다면

{

Serial.write(BTSerial.read()); //시리얼 모니터에 출력

}

if(Serial.available()) //시리얼 모니터에 입력된 Data가 있다면

{

BTSerial.write(Serial.read()); //BT시리얼에 출력

}

}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

Page 99: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

99

알고있노? 아두이노!

작성을 완료 하였다면 업로드 후 블루투스가 아두이노에 잘 연결되었는지를 확인하기 위

해 입력폼에 ‘AT’ 라고 입력후 전송 버튼을 누릅니다.

연결이 확인되었다면 스마트폰에 블루투스 통신 테스트를 위한 앱을 설치 합니다.

본 교재에서는 Bluetooth Terminal 아리는 앱을 설치 하였습니다.

Page 100: 알고있노 아두이노 · 2019-01-28 · 년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기 위해 아두이노(이하

100

알고있노? 아두이노!

앱을 실행 시킨 후 지정한 블루투스 이름이 보이는지를 확인 합니다. 본 교재에서 HC-06

이라는 이름이 보이고 만약 안보인다면 안드로이드 블루투스 설정에서 scan 후 접속 하

면 pin 번호를 입력하게 되는데 이때 핀번호는 1234 입니다. 이렇게 접속 후 터미널에

문자를 입력하면 시리얼 모니터에 출력됩니다.