Download presentation
Presentation is loading. Please wait.
1
CHAPTER 1. INTRODUCTION
2
Chapter 1. 1 WHAT IS ARDUINO?
아두이노: AVR 기반의 마이크로컨트롤러 하드웨어 + 소프트웨어 개발을 쉽게 해주는 개발환경 (IDE) 아두이노 소프트웨어는 무료, 오픈소스 아두이노 하드웨어 디자인도 무료 공개되어서 나만의 아두이노도 제작이 가능 아두이노는 창의적인 아이디어는 있지만 프로그래밍 및 하드웨어에 대한 지식이 부족한 초보자들이 쉽게 이해하고 저렴한 가격에 아이디어를 구현하고자 할 때 사용할 수 있다. UNO R3 MEGA2560 NANO DUE 다양한 종류의 아두이노 보드가 디자인 및 개발되고 있고, 구현하려는 시스템의 사이즈 및 요구되는 성능에 맞게 선택할 수 있다. 일반적으로 UNO R3 (우노) 보드 사용! LILYPAD FIO YUN
3
Chapter 1. 2 WHAT CAN YOU DO WITH ARDUINO?
아두이노로 할 수 있는 일은 매우 광범위하다. 로봇공학 (모바일 로봇, 휴머노이드 로봇, 물고기 로봇 등등) 음악 및 사운드 장치 다양한 센서와의 연동 (온도, 습도, 기울기 등등) 게임 분야와의 연동 모바일 애플리케이션 (스마트폰과의 통신) 네트워킹 시스템 (유선 혹은 무선 통신망 구축) 스마트 홈 구현 (조명 제어 및 실시간 모니터링) 그 밖에도 무수히 많은 아이디어를 구현할 수 있다 1 2 이미지 출처: 1. 2. aiosphere.com
4
Chapter 1. 3 WHAT IS ARDUINO SHIELD?
아두이노 + 아두이노 쉴드 = 보다 다양한 아이디어의 구현 가능성 아두이노 쉴드란 다양한 센서, LCD, 모터, 네트워크 등을 아두이노 보드 위에 적층하여서 사용 할 수 있도록 모듈화한 제품을 일컬으며, 일반적으로 UNO R3 보드를 기준으로 만들어지고 있다.
5
Chapter 1. 4 ARDUINO ULTIMATE KIT
많이 사용되는 센서, 디스플레이, 모터, 기초전자 부품들을 통해 초보자들이 쉽게 아두이노를 배울 수 있도록 구성. 구성물품 UNO R3, USB CABLE, 브레드보드, 8X8 LED MATRIX KIT, 10 빨강 LED, 10 녹색 LED, 10 노랑 LED, 5 흰 LED, RGB LED, 74HC595, 피에조버저, 1-DIGIT 세그먼트, 4-DIGIT 세그먼트, 중형 푸시버튼, 미니 푸시버튼, 조도센서, 10K옴 저항, 1K옴 저항, 220옴 저항, 5K 가변저항, 10K 가변저항, LM35, 16X2 캐릭터 LCD, 조이스틱 모듈, 미니서보모터, 점퍼케이블, 암-암 케이블, 헤더소켓(수), 헤더소켓(암), 기울기센서, 불꽃센서, 초음파거리센서, 인체감지센서, QRD1114 근접물체감지센서, 9V 배터리 홀더, 케이스 아두이노 실습 매뉴얼은 아두이노 종결 키트와 함께 실습할 수 있는 교육 자료로서 33가지의 프로젝트를 구현할 수 있으며, 기본적인 전기전자에 대한 공부도 겸할 수 있습니다. 목차 1. 아두이노 시작하기 B. 소프트웨어 설치하기 A. 아두이노란? C. 통합개발환경에 대하여 2. 첫번째 아두이노 프로젝트 A. 구조, 변수, 함수 B. LED 깜박이기 C. “Hello Arduino” D. 키 입력으로 LED 켜기 3. 브레드보드와 쉴드 A. 브레드보드 사용 방법 C. 풀업 저항과 풀다운 저항 B. 아두이노 쉴드란? D. 버튼입력 E. 어떻게 저항값을 결정하는가? F. 신호등 만들기 4. 아날로그 센서 A. 조도센서 B. 온도 측정하기 C. 포텐시오미터로 LED 밝기 조절하기 D. PS2 Joystick module 5. 디지털 센서 A. 기울기센서로 LED 켜기 B. HC-SR04 초음파 거리센서 C. PIR 모션센서 D. QRD1114 짧은 거리센서 6. 디스플레이 A. 라이브러리 추가하기 B. 16x2 LCD C. 74HC595 시프트 레지스터를 이용한 7 세그먼트 E. MAX7219를 이용한 8x8 도트매트릭스 D. 7 세그먼트 4개 사용하기 F. LED 이동 디스플레이 만들기 G. 디지털 온도계 만들기 7. 소리 B. 빛 감지 알람 A. 슈퍼마리오 재생하기 8. 모터 A. Pulse Width Modulation이란? B. 어떻게 서보모터가 회전하는가 C. 포텐시오미터로 서보모터 조종하기 아두이노키트 구독 인쇄 밴드 북마크 블로그 덧글 1 엮인글 공감 1 공감하기 보내기 [출처] 입문자를 위한 아두이노 종결 키트 (Arduino Ultimate Kit for Beginners)|작성자roboholic84
6
Chapter 1. 5 UNO R3 하드웨어 구성 리셋버튼 디지털핀13번에 연결된 LED 디지털핀(물결표시는 PWM)
USB 전원 공급 및 프로그래밍 (컴퓨터에 연결) 전원 LED ICSP핀: 부트로더 업로드 시리얼통신 확인 LED 메인프로세서 ATMEGA328P 정전압 레귤레이터 7-12V DC 입력 아날로그핀 3.3V 및 5V 출력 핀을 통한 전원 공급도 가능
7
Chapter 1. 6 UNO R3 전원공급 아두이노 보드에 전원을 공급하기 위한 방법은 3가지가 있다.
배럴잭을 통한 전원 공급 (DC 어댑터를 사용하거나 배터리와 배터리홀더를 사용한 방법) USB 케이블을 통한 전원 공급 (컴퓨터에 USB 케이블을 연결) VIN과 GND를 통한 전원 공급 (배럴잭이 아닌 일반 전선을 사용할 경우) DC 어댑터의 배럴잭을 통한 전원 공급 9V 배터리와 배럴잭홀더를 통한 전원 공급 컴퓨터에 연결된 USB 케이블을 통한 전원 공급 배터리의 전선을 보드의 VIN과 GND 에 직접 연결하여 전원 공급
8
Chapter 1. 7 소프트웨어 설치하기 시작하기에 앞서 아두이노 소프트웨어를 설치한다.
아두이노 통합개발환경(IDE)이라는 소프트웨어는 무료로, 인터넷을 통해 다운로드 받을 수 있다. 에 접속한다 Windows ZIP file을 다운로드 받는다 (압축파일이므로, 다운로드 후 압축을 풀어준다.)
9
Chapter 1. 7 소프트웨어 설치하기 압축을 풀게 되면, arduino.exe 파일을 실행해본다.
위와 같은 창이 열리게 되며, Sketch라 부른다.
10
Chapter 1. 8 PC와의 연결 확인하기 PC와의 연결이 되었는지 확인하기 위해서 아두이노와 PC를 USB를 통해 연결한다. 설치한 통합개발환경의 Sketch 창에서 도구(Tools) – 시리얼포트 (Serial Port)에 COM으로 시작되는 새로운 포트가 올라와 있는지 확인한다. USB를 끼우면 자동으로 새로운 포트가 설치되어 있는지 윈도우의 오른쪽 하단에 업데이트되는데, 만약 포트가 잡히지 않는다면 드라이버를 업데이트 해주면 된다.
11
Chapter 1. 9 아두이노 드라이버 업데이트하기
만약, USB를 통해 PC에 연결한 아두이노의 드라이버가 잡히지 않을 경우에는 제어판 – 장치관리자로 가서 “알 수 없는 장치” 혹은 “Unknown device”를 선택한 후, “드라이버 소프트웨어 업데이트” 혹은 “Update Driver Software”를 선택한다. 2. 그리고 컴퓨터에서 드라이버 소프트웨어 찾아보기를 선택한 후, 아두이노가 설치된 폴더의 drivers 라는 서브폴더를 지정한다. 그리고 설치한다.
12
Chapter Blink 예제 실행해보기 보드에 따라서 아두이노 스케치에서 설정을 해주어야 한다. UNO R3를 사용할 것이기 때문에 메뉴에서 “도구/보드/Arduino Uno”를 선택한다. 소프트웨어에서 기본적으로 많은 예제를 제공하는데, 그 중 하나인 LED 깜빡이기 예제를 구현 하기 위해서, 메뉴의 “파일(File)/예제(Examples)/0.1 Basics/Blink를 선택한다. 선택한 후에 메뉴의 File 아래에 있는 V 모양의 아이콘 을 클릭하여 업로드 해본다. 이 예제는 아두이노에 기본적으로 담겨 있는 프로그램 으로써, 전원 공급만 해줘도 LED가 깜빡이는 것을 이미 확인했다. 따라서, delay(1000)이라는 함수를 변경해서 프로그램이 변경되는 것을 확인해보도록 한다. delay(1000)는 1000ms 즉 1초간 기다리라는 의미로, digitalWrite(led, HIGH)로 설정된 값을 1초간 유지했다가, digitalWrite(led, LOW)로 변경하라는 이야기이다. 이것을 두 delay 함수값을 delay(50)으로 변경해서 더 빠르게 LED가 깜빡이는 것을 확인해본다. 변경 후에는 업로드 버튼을 누르는 것을 잊지 말고, 업로드가 잘 동작하면 아두이노 보드의 TX, RX LED가 빠르게 깜빡이는 것을 확인할 수 있다.
13
CHAPTER 2. 기초 전기 전자
14
Chapter 2. 1 Ohm’s law 𝑉=𝐼𝑅 𝐼= 𝑉 𝑅 𝑅= 𝑉 𝐼
위의 회로에서 V = I x R이다. 예컨대, I = 0.02A이고, R = 100Ω이라면 저항에 걸려있는 전압은 2 Volt가 된다. 𝑉=𝐼𝑅 𝐼= 𝑉 𝑅 𝑅= 𝑉 𝐼 전위는 음의 전하가 많은 곳은 전위가 낮고, 양의 전하가 많은 곳이 전위가 높다. (+)쪽에서 (-)쪽으로의 전기의 흐름을 전류라고 하며, (+)극과 (-)극 사이의 전위차를 전압이라고 한다. 저항은 극성이 없고 전류의 흐름을 억제하는 기능을 가진 전자 부품이다. 일반적으로 멀티미터/테스터기를 통해서 저항 값을 측정할 수 있지만, 색 띠를 통해서도 그 값을 알 수 있다. 저항은 단면적에 반비례하고 길이에 비례하는데, 이러한 성질은 최근 시중에 판매되는 전도성 펜으로 쉽게 확인할 수 있다.
15
Chapter 2. 2 저항 읽기 560KΩ 저항은 초록색, 파란색, 노란색으로 구성
즉, 5 (초록색), 6 (파란색)으로 구성된 값 56에 노란색인 승수 4 즉 10K를 곱하여 560K의 저항값 을 갖게 된다. 예) 220Ω: 빨강-빨강-갈색 1KΩ: 갈색-검정-빨강 10KΩ: 갈색-검정-주황
16
Chapter 2. 3 LED LED는 아두이노 실험에서 많이 사용하는 전기 소자로서 빛을 뿜어내는 반도체(Light Emitting Diode)이다. 큰 특징으로는 열을 적게 발생한다는 것과 이로 인한 열손실이 적어서 에너지 낭비가 적다는 것이다. LED는 다음과 같이 극을 가지게 되는데, 다리가 긴 쪽이 (+) 즉 애노드(Anode)라고 하며, 다리가 짧은 쪽은 (-) 즉 캐소드(Cathode)라고 한다. 일반적으로 LED를 사용할 때는 저항을 사용하곤 하는데, 그 이유는 LED가 허용하는 최대 전류 값을 초과하는 전류로 인해서 LED가 고장 나기 때문이다.
17
𝑅= (공급전압−𝐿𝐸𝐷 전압) 전류 = 5−2 0.02 =150𝑜ℎ𝑚
Chapter 2. 4 LED에 연결될 저항 값 구하기 LED의 데이터시트나 매뉴얼을 통해서 공급전압, LED 전압, 공급전류 등을 알 필요가 있다. 5mm 적색 LED의 데이터시트를 보면, LED 전압은 약 1.8~2.2V이고, 전류는 20mA이다. 옴의 법칙에 의해서 𝑅= 𝑉 𝐼 이고, 필요한 저항 값은 𝑅= (공급전압−𝐿𝐸𝐷 전압) 전류 = 5− =150𝑜ℎ𝑚
18
Chapter 2. 5 Kirchhoff’s current law
전류가 흐르는 분기점에서 들어오는 전류의 합은 나가는 전류의 합은 같다. 즉, 들어오는 전류가 양의 정수, 나가는 전류가 음의 정수라면, 𝑘=1 𝑛 𝐼 𝑘 =0
19
Chapter 2. 6 Kirchhoff’s voltage law
닫힌 루프 안에서의 전압의 합은 0이다. 𝑘=1 𝑛 𝑉 𝑘 =0 즉, 𝑣 1 + 𝑣 2 + 𝑣 3 − 𝑣 4 =0
20
Chapter 2. 7 HOW TO USE BREADBOARD?
연결되어 있음 연결되어 있음
21
Chapter 2. 8 HOW TO USE MULTIMETER?
DC 전압측정 단락 테스트 0으로 가면 연결됨 혹은 “삐” 소리 DC 전류측정 저항 측정
22
Chapter 2. 9 FREQUENTLY USED TOOLS
핀셋은 조그만 부품을 집거나 납땜을 보조할 때 사용됩니다. 와이어스트리퍼는 전선의 피복을 벗길 때 사용됩니다. 니퍼는 전선을 자르거나 전자부품의 다리를 자를 때 사용됩니다. 납흡착기는 잘못 납땜한 것을 떼어낼 때 사용되며, 인두기로 납을 녹인 다음에 흡입하여 제거합니다.
23
CHAPTER 3. 프로그래밍 이해
24
Chapter 3. 1 아두이노의 기본 골격 #include < > int variables 라이브러리
void setup() { } void loop() 라이브러리 변수 선언 한번만 실행되는 코드 ex) 보드의 설정 작업 계속 반복되는 코드
25
Chapter 3. 2 라이브러리 사용하기 다양한 센서, 디스플레이, 액츄에이터 및 통신 모듈과 손쉬운 프로그래밍을 위해서 특정 목적에 맞는 파일들을 헤더파일 및 기타 함수 등으로 저장한 집합을 라이브러리라 한다. 이미 내장된 라이브러리도 있는 반면, 새로운 모듈과 이에 대한 라이브러리를 개발 혹은 제공하는 사람들에 의해서 새로운 라이브러리를 다운로드 받은 후 아두이노 소프트웨어에 추가하여 사용 할 수 있다. 예) Neopixel이라는 드라이버가 내장된 LED를 사용하기 위해서는 다음의 링크에서 라이브러리를 다운로드 받을 수 있는데, 이 링크는 구글에서 “Neopixel library” 등으로 검색하여 찾을 수 있다.
26
Chapter 3. 2 라이브러리 사용하기 다운로드 받을 수 있다.
27
Chapter 3. 2 라이브러리 사용하기 압축을 푼 후에…
라이브러리를 사용하기 전에 폴더 명이 기본 문자들과 숫자로 이루어 져 있는지 확인해야 한다. Adafruit_NeoPixel-master는 이름을 바꾸거나, _와 –를 제거(AdafruitNeoPixelmaster) 해 주어야 아두이노 소프트웨어에서 인식한다. Arduino – libraries 폴더에 폴더를 복사. 그리고 아두이노 소프트웨어를 다시 시작. 파일 – 예제에서 설치된 라이브러리와 예제를 확인 가능.
28
Chapter 3. 3 아두이노의 변수들 데이터형태 Byte 범위 int (숫자형) 2 -32768 ~ 32767
unsigned int (숫자형) 0 ~ 65535 long (숫자형) 4 ~ unsigned long (숫자형) 0 ~ float (숫자형) E+38 ~ E+38 double (숫자형) boolean (숫자형) 1 false / true char (숫자형) -128 ~ 127 byte (숫자형) 0 ~ 255 string (문자형) 배열 내의 문자를 지원한다. 가장 많이 사용하는 데이터 유형은 int
29
Chapter 3. 4 아두이노의 배열 및 문자열 여러 개의 값을 만들어서 사용할 때 좀 더 스마트하게 프로그래밍을 할 때
>> 배열 int inputs[3] = {2, 3, 4}; //입력 핀을 배열로 지정 int outputs[3] = {5, 6, 7}; //출력 핀을 배열로 지정 void setup() { for (int i = 0; i < 3; i++) // i가 0에서 3보다 작을 때까지 1씩 증가시킴 pinMode(inputs[i], INPUT); pinMode(outputs[i], OUTPUT); digitalWrite(inputs[i], HIGH); // 풀업저항을 만들어서 버튼이 눌렸을 때 로직값이 분명하게 함 } void loop() { for (int i = 0; i < 3; i++) int val = digitalRead(inputs[i]); if (val == LOW) digitalWrite(outputs[i], HIGH); } else digitalWrite(outputs[i], LOW);
30
Chapter 3. 4 아스키 코드 (ASCII) 의 이해
아스키(ASCII)는 American Standard Code for Information Interchange의 약자로써, 문자를 숫자로 변형해서 전송하는 표준 코드이다. 아두이노에서 시리얼통신을 통해서 문자를 전송하고, 이를 받아서 처리하는 경우, 아스키코드를 사용한다. 즉, A를 보내기 위해서는 65라는 값을 비트로 처리해서 전송한다.
31
Chapter 3. 5 아두이노 함수 만들기 void setup(){ Serial.begin(9600); } void loop() { int i = 2; int j = 3; int k; k = myMultiplyFunction(i, j); // 함수를 부르며, 결과값 (리턴값)을 k 변수에 저장 Serial.println(k); } // 함수를 정의한다. myMultiplyFunction이라는 함수는 x 와 y 라는 인자를 받아서 // 곱한 후에 그 결과인 result를 리턴한다. int myMultiplyFunction(int x, int y){ int result; result = x * y; return result; }
32
Chapter 3. 6 IF 구문 If 구문은 많이 사용하는 구문으로써, “조건”을 프로그래밍하기 위해 사용.
예를 들어, 밝기 센서가 플래시 등의 밝은 조명을 인식했을 때, 양쪽 모터를 구동하고 조명이 없을 때, 모터를 정지하는 프로그래밍을 해야 한다면, If (조도센서의 밝기 > 어떤 값) { 모터1과 2를 회전; } else 모터1과 2를 정지;
33
Chapter 3. 6 IF 구문 조건이 추가 될 경우에는 else if를 사용할 수 있다.
{ 모터1을 회전; 모터2는 정지; } else if (조도센서1의 밝기 < 어떤 값1 && 조도센서2의 밝기 > 어떤 값2) 모터1을 정지; 모터2를 정지; else 모터1과 2를 정지;
34
Chapter 3. 7 While, For loop 반복적인 조건이 필요로 될 경우에는 While이나 For 구문을 사용한다.
예를 들어, 조도센서의 밝기가 어떤 값3보다 작을 때는 언제나 실행한다면, While(조도센서의 밝기 < 어떤 값3) { 모터1과 2를 회전 } // While 구문에서 나오는 경우는 조도센서의 밝기가 어떤 값3보다 크거나 같을 경우이다. For (int i=0; i < 10; i++) 모터1과 2를 회전; // i라는 변수를 사용하여 i가 0에서 9까지 증가하면서 모터1과 2를 회전시키며, i=10이 되면, For loop에서 벗어난다.
35
Chapter 3. 8 Switch - case 구문
Switch – case 구문은 If 구문과 비슷하게 조건을 수반한다. 예를 들어, switch (변수) { case 1: 변수가 1일 경우 실행하는 코드가 위치한다. break; case 2: 변수가 2일 경우 실행하는 코드가 위치한다. default: 변수가 1이나 2가 아닐 경우 실행하는 코드가 위치한다. }
36
Chapter 3. 9 일반 연산자 = (assignment operator: 할당 연산자)
“=“ 기호는 같다는 의미가 아닌 오른쪽의 변수 혹은 수식의 값을 왼쪽에 넣으라는 의미이다. +, - “+”, “-”는 더하기 및 빼기 연산자이다. *, / “*”, “/”는 곱하기와 나누기 연산자이다. % (modulo operator) “%” 연산자는 영어로 modulo라 하며 나머지를 의미한다. 예를 들어 5%3의 값은 2가 된다. “=“기호와 함께 사용하면 예) A = 5%3; 위의 문장은 5에서 3을 나눈 나머지를 A에 저장하라는 의미이다.
37
Chapter 3. 10 비교 연산자 == (equal to) “==“ 는 같다는 연산자이다. 좌우의 값이 같은지 비교한다.
!= (not equal to) 좌우가 같지 않은지 비교한다. 예를 들어 3!=4는 참이기 때문에 1(true)를 가지며, 3!=3은 거짓이기 때문에 0(false)를 가진다. <, <=, >, >= 좌우를 비교하여 왼쪽이 오른쪽에 비해 작은지, 작거나 같은지, 큰지, 혹은 크거나 같은지를 비교한다.
38
Chapter 3. 11 논리 연산자 && (and) 좌우의 값이 모두 참일 때, 1을 가지며, 다르면 0을 가진다.
예) 거짓 && 거짓: 0 참 && 거짓: 0 거짓 && 참: 0 참 && 참: 1 || (or) 좌우의 값 중 어느 하나라도 참이 있다면 결과는 참이다. 예) 거짓 || 거짓: 0 참 || 거짓: 1 거짓 || 참: 1 참 || 참: 1 ! 참이면 거짓을 거짓이면 참을 가진다. !거짓: 1, !참: 0
39
Chapter 3. 12 비트 연산자 XAND 논리표 & (bitwise and) 비트 단위로 and 연산을 한다.
예) a= ; b= ; c=a&b; c는? c= 이 된다. | (bitwise or) 예) a= ; b= ; c=a|b; c는? c= 이 된다. ! (bitwise not) a= ; b=!a b는? b= 이 된다. ^(bitwise xor) 두 값이 같으면 거짓, 다르면 참이 된다. a b 결과 1 XOR 논리표 a b 결과 1
40
Chapter 3. 12 비트 연산자 << (bitshift left) 각 자리를 원하는 수만큼 왼쪽으로 이동한다.
새로 생긴 자리는 0으로 채우게 된다. 예) a= ; b=a<<3, b는? c= 이 된다. >> (bitshift right) 각 자리를 원하는 수만큼 오른쪽으로 이동한다. 예) a= ; b=a>>3, b는? c= 이 된다.
41
CHAPTER 4. 디지털 입출력
42
Chapter 4. 1 디지털 출력 (Digital Output)
우노의 경우 0~13번까지 사용할 수 있으며, 0번과 1번은 통신포트이고, ~표시가 있는 것은 PWM포트로도 사용할 수 있다. 디지털 출력은 0 (Low) 혹은 1 (HIGH)를 포트를 통해서 내보내는 것인데, 로직상으로는 0과 1이지만, 실제로 전압으로 그 값을 내보내는 것이기 때문에, 5V 출력을 하기 위해서 HIGH, 0V를 출력하기 위해서 LOW를 사용한다. Ex) digitalWrite(핀번호, HIGH); 13번핀은 일반적으로 내장된 LED에 연결되어 있기 때문에, 아두이노의 기본 예제인 Blink를 통해서 디지털 출력에 대해서 이해해볼 수 있다. int led = 13; void setup() { pinMode(led, OUTPUT); // 13번 핀을 출력(OUTPUT)으로 함 } void loop() { digitalWrite(led, HIGH); // 13번 핀에 5V를 인가함 (HIGH) delay(1000); // 1초 (1000ms)간 상태를 유지함 digitalWrite(led, LOW); // 13번 핀에 0V를 인가함 (LOW) 기본적으로 디지털 출력에 관여하는 함수는 크게 두가지이다. 하나는 핀을 출력으로 사용할지 입력으로 사용할 지 결정하는 pinMode이고, 다른 하나는 출력값을 HIGH로 할지 LOW로 할지 결정하는 digitalWrite이다. 1초에 한번씩 13번에 연결된 LED가 깜빡이는 데모
43
Chapter 4. 2 신호등 만들기 3개의 LED와 저항을 이용한 신호등 빨강은 5초, 노랑은 1초, 초록은 5초씩 점멸됨
int REDpin = 6; int YELLOWpin = 5; int GREENpin = 4; void setup() { pinMode(REDpin, OUTPUT); pinMode(YELLOWpin, OUTPUT); pinMode(GREENpin, OUTPUT); } void loop() digitalWrite(REDpin, HIGH); delay(5000); digitalWrite(REDpin, LOW); digitalWrite(YELLOWpin, HIGH); delay(1000); digitalWrite(YELLOWpin, LOW); digitalWrite(GREENpin, HIGH); digitalWrite(GREENpin, LOW); 준비물: Uno R3, USB cable, 브레드보드, 빨강 노랑 초록 LED, 220Ohm 저항 (3개), 점퍼선
44
Chapter 4. 3 PWM (Pulse Width Modulation)
출력되는 신호의 High와 Low의 비율을 이용하여 전체적인 전압을 제어해주는 방식 PWM의 사용 용도: LED 흐리게 하기 아날로그 출력하기 오디오 신호 만들기 모터 공급용 속도조절하기 PWM의 사용 방법: Ex) analogWrite(11, 127); //11번핀, 2.5V를 출력 8비트, 즉 0~255까지의 숫자로 0~5V의 전압을 출력할 수 있기 때문에 127은 약2.5V의 전압이 출력된다.
45
Chapter 4. 4 포텐쇼미터로 LED 밝기 조절하기
포텐쇼미터의 값은 analogRead를 통해서 읽고, analogWrite를 통해 LED에 PWM 출력한다. int potpin=0;//Define analogue interface.#0 int ledpin=11;//Define digital interface #11.(PWM output) int val=0;//temporary storage the Variable value from the sensor void setup() { pinMode(ledpin,OUTPUT);// Define digital interface #11 as output Serial.begin(9600);//Setup Baud rate as 9600 } void loop() val=analogRead(potpin);// Read analogue value from sensor and assign to val Serial.println(val);//Show val variable. analogWrite(ledpin,val/4); delay(10);//Delay 0.01 sec. 준비물: Uno R3, USB cable, 브레드보드, 포텐시오미터, 220Ohm 저항,빨간 LED, 점퍼선
46
Chapter 4. 5 포텐쇼미터로 서보모터 조종하기
서보모터의 PWM 제어 반이중 시리얼 통신을 사용하는 서보모터인 Dynamixel이나 Herkulex는 제외한 일반적인 서보모터는 대부분 PWM으로 제어되는데, 다음과 같이 PWM에 의해서 각도가 변한다. 아두이노에는 내장된 라이브러리인 Servo.h 라는 것이 있어서 편리하게 서보 모터 제어를 할 수 있다.
47
Chapter 4. 5 포텐쇼미터로 서보모터 조종하기
포텐쇼미터를 돌리면 그 값을 읽고 값에 따라 LED의 밝기를 조절한다. 포텐쇼미터의 값은 analogRead를 통해서 읽고, analogWrite를 통해 LED에 PWM 출력한다. #include <Servo.h> Servo myservo; // 서보 오브젝트를 생성 // myservo는 변경할 수 있음 int potpin = 0; int val; void setup() { myservo.attach(11); // 11번에 모터를 연결 } void loop() val = analogRead(potpin); // 포텐쇼미터로부터 값을 읽음 val = map(val, 0, 1023, 0, 179); // 읽은 값 (0~1023)을 0~179로 매칭시킴 myservo.write(val); // 모터를 회전시킴 delay(15); 준비물: Uno R3, 브레드보드, USB cable, 미니 서보모터, 포텐시오미터, 점퍼선
48
Chapter 4. 6 디지털 입력 (Digital Input)
디지털 입력을 통해서 논리적으로 HIGH인지 LOW인지를 판단할 수 있다. pinMode 함수를 통해서 입력으로 설정한 후에, digitalRead 함수를 통해서 값을 얻을 수 있다. Ex) pinMode(7, INPUT); value = digitalRead(7); 아날로그 입력핀들은 디지털핀처럼 사용할 수도 있다. Ex) value = digitalRead(A0);
49
Chapter 4. 7 풀업 저항과 풀다운 저항 풀업 저항이나 풀다운 저항은 은소위 애매모호한 논리값이 들어오지 않도록 하기 위해서 저항을 + 혹은 – 쪽에 연결하여 장치가 연결되지 않았을 때도 논리적으로 안정된 값을 보내줄 수 있도록 함. 풀업저항 풀다운저항 풀업저항은 아두이노에 장착된 외부 장치가 끊어지거나 높은 저항을 가질때 전자회로에 입력을 보장해 주기 위한 장치로 사용. 입력 핀에 아무것도 연결되어 있지 않다면 논리적으로 1인 상태. 풀업저항은 다른 부품이 동작하고 있지 않을 때 그 전원 공급선과 연결되어 있기 때문에 전압을 약하게 당김. 스위치가 눌려지고 전류가 흐르면 그것은 매우 높은 저항이 되며, 끊어진 것처럼 동작. 풀다운 저항은 똑같이 작동하지만 ground와 연결되어 있음. 그것은 동작하지 않는 장치가 연결되어 있을 때 논리신호 0인 상태.
50
Chapter 4. 8 버튼 입력 푸쉬버튼이 열려 있을 때 (안눌려진 상태) 버튼의 두 다리 사이는 연결되지 않은 상태.
풀다운 저항을 쓰지 않으면, 핀의 논리적인 값은 매우 애매모호해짐(float 상태). 아두이노의 핀이 LOW 신호라는 확신을 주기 위해 10K 저항을 풀다운 저항으로 사용. 풀업저항이 HIGH 상태를 유지 해 줄 것이고 버튼이 눌리게 되면 LOW가 됨. int buttonpin = 2; int LED = 11; void setup() { pinMode(buttonpin, INPUT); pinMode(LED, OUTPUT); } void loop() int buttoninput = digitalRead(buttonpin); if (buttoninput == HIGH) digitalWrite(LED, HIGH); else digitalWrite(LED, LOW); 준비물: Uno R3, USB cable, push button, 10K 저항, red LED, 220Ohm 저항, 점퍼선 다리가 긴 쪽이 anode (+) 짧은 쪽이 cathode (-)
51
Chapter 4. 9 기울기센서로 LED 켜기 센서가 기울어지면 LED가 꺼짐
int LED = 2; int tilt = 12; void setup() { pinMode(LED,OUTPUT); // set digital 2 for LED output pinMode(tilt, INPUT); // set digital 12 for tilt sensing } void loop() if(digitalRead(tilt) == HIGH) digitalWrite(LED,HIGH);//light up led else//otherwise digitalWrite(LED,LOW);//turn off led 준비물: Uno R3, USB cable, 브레드보드, 기울기 센서, 빨간 LED, 220Ohm, 점퍼선 수은 기울기 센서 원리
52
Chapter HC-SR04 초음파 거리센서 초음파를 이용하여 거리를 측정하며, 시리얼모니터를 통해서 값을 확인할 수 있다. 준비물: Uno R3, USB cable, 브레드보드, HC-SR04 초음파 거리센서, 점퍼선
53
Chapter 4. 10 HC-SR04 초음파 거리센서 const int TriggerPin = 8; //Trig pin
const int EchoPin = 9; //Echo pin long Duration = 0; void setup(){ pinMode(TriggerPin,OUTPUT);//Trigger is an output pin pinMode(EchoPin,INPUT); // Echo is an input pin Serial.begin(9600); // Serial Output } void loop(){ digitalWrite(TriggerPin, LOW); delayMicroseconds(2); digitalWrite(TriggerPin, HIGH); // Trigger pin to HIGH delayMicroseconds(10); // 10us high digitalWrite(TriggerPin, LOW); // Trigger pin to HIGH Duration = pulseIn(EchoPin,HIGH); // Waits for the echo pin to get high // returns the Duration in microseconds long Distance_mm = Distance(Duration); // Use function to calculate the distance Serial.print("Distance = "); // Output to serial Serial.print(Distance_mm); Serial.println(" mm"); delay(1000); // Wait to do next measurement } long Distance(long time) { // Calculates the Distance in mm // ((time)*(Speed of sound))/ toward and backward of object) * 10 long DistanceCalc; // Calculation variable DistanceCalc = ((time /2.9) / 2); // Actual calculation in mm //DistanceCalc = time / 74 / 2; // Actual calculation in inches return DistanceCalc; // return calculated value
54
Chapter PIR 모션센서 PIR 모션센서의 원리: 프리넬 렌즈를 통해서 움직임을 감지하며, 감지하면 디지털 신호를 출력한다. PIR 센서 안의 적외선 모듈 PIR 센서 뒷면
55
Chapter 4. 11 PIR 모션센서 움직임이 감지되면 내장된 LED를 점멸함
int ledPin = 13; // choose the pin for the LED int inputPin = 2; // choose the input pin (for PIR sensor) int pirState = LOW; // we start, assuming no motion detected int val = 0; // variable for reading the pin status void setup() { pinMode(ledPin, OUTPUT); // declare LED as output pinMode(inputPin, INPUT); // declare sensor as input Serial.begin(9600); } void loop(){ val = digitalRead(inputPin); // read input value if (val == HIGH) { // check if the input is HIGH digitalWrite(ledPin, HIGH); // turn LED ON if (pirState == LOW) { // we have just turned on Serial.println("Motion detected!"); // We only want to print on the output change, not state pirState = HIGH; } else { digitalWrite(ledPin, LOW); // turn LED OFF if (pirState == HIGH){ // we have just turned of Serial.println("Motion ended!"); pirState = LOW; 준비물: Uno R3, USB cable, PIR 모션센서, M-F 케이블
56
Chapter 4. 12 QRD1114 근거리센서 센서를 손가락으로 막으면 값이 1로 변하며, 막지 않으면 0으로 출력된다.
int signal = 4; int onoff; void setup() { Serial.begin(9600); } void loop() onoff = digitalRead(signal); Serial.println(onoff); 적외선 발신기에서 전송된 적외선이 사물에 의해서 반사되며, 이를 포토 트렌지스터가 값을 읽는다. 약 0~3cm 안에서 감지가 가능 준비물: Uno R3, USB cable, 브레드보드, 빨강 노랑 초록 LED, 220Ohm 저항 (3개), 점퍼선
57
Chapter 4. 13 슈퍼마리오 재생하기 슈퍼마리오 배경음이 재생됨
//소스코드는 종결키트의 코드를 참고 //길이가 길어서 생략함 준비물: Uno R3, 브레드보드, 버저 , 100 Ohm 저항, 점퍼선
58
Chapter 4. 14 빛 감지 알람 빛을 감지하면 버저가 울림
int flame=A0; int Buzzer=8; int val=0; void setup() { pinMode(Buzzer,OUTPUT); //Set LED as output pinMode(flame,INPUT); //Set buzzer as input Serial.begin(9600); //Set baud rate as 9600 } void loop() val=analogRead(flame); //Read the analog value Serial.println(val); //Output analog value and print it out if(val>=600) // When analog value 〉600,buzzer make sound digitalWrite(Buzzer,HIGH); else digitalWrite(Buzzer,LOW); 준비물: Uno R3, USB cable, 브레드보드, 빛 센서, 버저, 10K 저항, 100 Ohm 저항, 점퍼선
59
CHAPTER 5. 아날로그 센서
60
Chapter 5. 1 아날로그 입출력 아날로그 출력은 Chapter 4에서 소개되었던 PWM에 의해 가변적으로 전압 값을 사용할 수 있다. 대부분의 아날로그 입력은 아날로그 센서를 사용할 때 이용되거나, 배터리의 전압을 측정할 때 사용되기도 한다. A0, A1 등으로 표기된 포트가 아날로그 입력으로 사용될 수 있으며, 사용되는 함수는 analogRead이다. ex) Val = analogRead(A0); 아날로그로 읽은 값은 0~1023까지의 값을 가지게 되는데 일반적으로 5V를 사용하는 아두이노 보드에서는 이 0~1023이라는 숫자가 0~5V로 매칭이 된다. 5V 실제전압 analogRead() 1023
61
Chapter 5. 2 조도 센서로 빛 감지 황화 카드뮴 셀(이하 CdS)은 저항의 일종이며 광전자를 이용한 반도체 효과를 이용하여 외부 빛의 조도에 의해 저항값이 결정. 빛이 강해지면 저항값이 약해짐. int potpin=0; //set analog interface #0 to connect photocell int ledpin=13; int val=0; //define variable val void setup() { pinMode(ledpin,OUTPUT);//set digital interface #11 as output Serial.begin(9600);//set baud rate as 9600 } void loop() val=analogRead(potpin);//read analog Serial.println(val); delay(10);//delay 0.01 s 준비물: Uno R3, USB cable, 브레드보드, 황화 카드뮴 셀, 10K 저항, 점퍼선
62
Chapter 5. 2 LM35로 온도 측정하기 LM35는 사용하기 매우 간편한 온도 센서로써 -55도에서 +150도 사이로 0.5도 간격으로 아날로그 신호를 출력함 int potPin = 0; //Set analog interface #0 accessed to LM35 void setup() { Serial.begin(9600);//Set baud rate as 9600 } void loop() int val;// int dat;//define variable val=analogRead(0);// read the analog value and assign to val dat=(125*val)>>8;//temperature calculation formula Serial.print("Tep:"); Serial.print(dat);//output dat value Serial.println("C");//output character string C delay(500);//delay 0.5 s 준비물: Uno R3, USB cable, 브레드보드, LM35 온도센서, 점퍼선
63
Chapter 5. 2 PS2 조이스틱 모듈 사용하기 PS2 joystick module은 RC 자동차나 게임장치로 사용 할 수 있으며 x와 y방향으로 2개의 아날로그 신호를 출력하며 1개의 출력버튼을 가지고 있음. int xpin = A0; int ypin = A1; int buttonpin = 2; void setup() { Serial.begin(9600); pinMode(buttonpin, INPUT); } void loop() int xval = analogRead(xpin); int yval = analogRead(ypin); int buttonpressed = digitalRead(buttonpin); Serial.print(xval); Serial.print(" "); Serial.print(yval); Serial.println(buttonpressed); 준비물: Uno R3, USB cable, 브레드보드, PS2 joystick module, 점퍼선
64
CHAPTER 6. 디스플레이
65
Chapter x2 캐릭터 LCD 사용하기 16x2 LCD 모듈 16x2 LCD 모듈과 아두이노의 배선도
66
Chapter x2 캐릭터 LCD 사용하기 16x2 LCD 디스플레이는 각각 줄에 16개씩 32개의 문자를 표현 할 수 있다. 0 ~ 255사이의 ASCII코드의 문자면 전부 표현이 가능하며, 모듈의 뒷면에는 PCB가 붙어 있고 신호를 처리할 수 있게 회로들이 포함되어 있다. 회로의 주요 부품은 저장공간과 제어기구. #include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. lcd.print("hello, world!"); } void loop() { // set the cursor to column 0, line 1 // (note: line 1 is the second row, since counting begins with 0): lcd.setCursor(0, 1); // print the number of seconds since reset: lcd.print(millis()/1000); 준비물: Uno R3, USB cable, 브레드보드, 16x2 LCD, 수 헤더핀, 포텐시오미터, 점퍼선 데모를 구현하였을 때, 글자가 나오지 않으면 포텐쇼미터 를 돌려서 밝기를 조정해준다.
67
Chapter 6. 2 74HC595 시프트 레지스터를 이용한 7 세그먼트
공통 캐소드 방식 74HC595는 8비트의 시프트레지스터로써, 7-Segment나 8-Segment(점 포함)에 7개 혹은 8개의 디지털 포트가 필요하고 이것을 74HC595가 3개의 핀(datain, latch, clk)을 이용하여 8비트로 만들어 준다.
68
Chapter 6. 2 74HC595 시프트 레지스터를 이용한 7 세그먼트
16x2 LCD 디스플레이는 각각 줄에 16개씩 32개의 문자를 표현 할 수 있다. 0 ~ 255사이의 ASCII코드의 문자면 전부 표현이 가능하며, 모듈의 뒷면에는 PCB가 붙어 있고 신호를 처리할 수 있게 회로들이 포함되어 있다. 회로의 주요 부품은 저장공간과 제어기구. int dataPin = 10; int latchPin = 11; int clockPin = 12; byte dec_digits[] = {0b ,0b ,0b ,0b ,0b ,0b ,0b ,0b ,0b ,0b }; void setup() { //set pins to output so you can control the shift register pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { for (int numberToDisplay = 0; numberToDisplay < 10; numberToDisplay++) { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, dec_digits[numberToDisplay]); digitalWrite(latchPin, HIGH); delay(300); 준비물: Uno R3, USB cable, 브레드보드, 220Ohm 저항, 7-segment, 74HC595 시프트 레지스터, 점퍼선 커먼캐소드가 아닌 커먼애노드를 사용할 때는 digits[]의 0과 1을 반전시킨다. Ex) 0b > 0b
69
Chapter 6. 3 7 세그먼트 4개 사용하기 준비물: Uno R3, USB cable, 브레드보드, 4-세그먼트,
소스코드는 종결키트 매뉴얼 참조 준비물: Uno R3, USB cable, 브레드보드, 4-세그먼트, 220Ohm 저항 8개
70
Chapter 6. 4 MAX7219를 이용한 8x8 도트매트릭스
소스코드는 종결키트 매뉴얼 참조 준비물: Uno R3, USB cable, 8x8 도트매트릭스 키트, 암-암 케이블, 점퍼선 Uno R3 MAX7219 LED matrix kit 5V VCC GND D12 DIN D10 CS D11 CLK
71
Chapter 6. 5 LED 이동 디스플레이 만들기 (전광판)
소스코드는 종결키트 매뉴얼 참조 준비물: Uno R3, USB cable, 8x8 도트매트릭스 키트, 암-암 케이블, 점퍼선
72
Chapter 6. 6 디지털 온도계 준비물: Uno R3, USB cable, 브레드보드, 포텐시오미터,
#include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2); int lm35 = A0; void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. lcd.print("hello, world!"); } void loop() { // set the cursor to column 0, line 1 // (note: line 1 is the second row, since counting begins with 0): lcd.setCursor(0, 0); int val = analogRead(lm35); int dat = (125*val)>>8; //temperature calculation formula lcd.print("Temperature"); lcd.setCursor(0, 1); lcd.print(dat); 준비물: Uno R3, USB cable, 브레드보드, 포텐시오미터, LM35, 점퍼선, 16x2 LCD 모듈
Similar presentations