임베디드시스템개론 -...

25
임베디드시스템개론 : Arduino 활용 Lecture #4: Analog Input 활용 2012. 3. 23 by 김영주

Upload: others

Post on 06-Mar-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

임베디드시스템개론: Arduino 활용

Lecture #4: Analog Input 활용

2012. 3. 23 by 김 영 주

Page 2: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

강의 목차

아두이노 Analog Input아두이노 시리얼 입출력(Serial I/O)가변 저항(Potentiometer) 입력조도(CdS) 센서 입력

2

Page 3: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

아날로그 입력 개요 (1)아날로그 입력(Analog Input) : 아날로그 신호

자연현상에 대한 센서의 입력디지털 컴퓨터에서는 하나의 신호 덩어리

디지털 값으로 변환하여 처리

3

Page 4: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

아날로그 입력 개요 (2)아날로그 입력(Analog Input) : ADC(Analog-to-Digital Converter)

한 시점의 아날로그 신호값을 여러 비트의 디지털 값으로 변환

정밀도(Resolution) :디지털 값(또는 상태)의 수

아날로그 신호값을 표현하기 위해 사용한 비트 수에 의해 결정

일반적인 resolutions8 bits = 256 values16 bits = 65,536 values32 bits = 4,294,967,296 values

4

Page 5: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

아날로그 입력 개요 (3)아두이노 Analog Input

Arduino Mega : 15’s ADC 입력 지원변환 가능 전압 범위 : 0 ~ 5 volts정밀도(Resolution) : 10 bits (1024 (0~1023) values)

5V/1024=4.8mV의 작은 전압 변화까지 측정 가능

analogRead(port) 함수지정된 port로 입력되는 전압값을 0~1023 사이의 값으로 변환하여 반환

아날로그 입력 활용가변저항 입력

조도 , 온도, 무게, 휨 센서 등의 아날로그 센서 입력

피에조 센서, 마이크 등의 소리 입력 등

5

Page 6: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

아두이노 시리얼 I/O (1)아두이노 Serial I/O

ISP(Falsh Programming)과 Host와 통신하기 위해 USB I/F를 사용

실제 USB 프로토콜에 기반하여 통신하는 것이 아님UART Serial 통신 신호를 USB 인터페이스 신호로 변환하여 전달하는 방식으로 Serial 통신을 수행

Serial 통신데이터를 비트(bit) 단위로 전송하는 방식

예: ASCII 문자 ‘B’ 전송

기본적으로 2개의 신호선(송신Transmitter/수신 Receiver)을 사용

6

Page 7: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

아두이노 시리얼 I/O (2)Arduino USB-to-serial H/W

7

Serial Comm. Indicator

Page 8: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

아두이노 시리얼 I/O (3)Arduino와 Host의 연결

8

Host는 아두이노를serial 통신 장치로 인식

Page 9: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

아두이노 시리얼 I/O (4)Arduino “Serial” 객체

Serial 통신을 구현한 클래스의 객체 “Serial”을 지원Arduino Mega에서는 “Serial”, “Serial1”, “Serial2”, Serial3”의 4 개의 객체를지원

“Serial” 객체의 메소드(Methods)begin() / end() – serial 통신 준비 및 종료

available() – serial input buffer의 데이터 존재 여부 확인

read() / peek() – serial input buffer에서 데이터 읽기

write() / print() / println() – serial output buffer에 데이터 쓰기(format 허용)flush() – serial buffer를 비움

9

Page 10: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

아두이노 시리얼 I/O (5)Serial 데이터 송신

“SerialHelloWorld”

10

데이터 전송속도 설정

1. 임의의 데이터타입 출력 가능

2. 정수값에 대해 출력형식을 지정 가능

Page 11: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

아두이노 시리얼 I/O (6)Serial 데이터 송신

print() 메소드 :센서 데이터, 프로그램 실행상태 등을 Host로 전송할 때 사용 가능

다양한 출력 형식을 지원(Function Overriding)

write() 메소드바이트 단위의 데이터 송신에 사용

write(val) – 1 byte 값 송신

write(string) – 문자열 데이터 송신

write(buf, length) – 버퍼 데이터를 지정된 길이만큼 전송

11

Page 12: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

아두이노 시리얼 I/O (7)Serial 데이터 수신

“SerialReadBasic”

12

입력 버퍼의 데이터 수신여부 확인

입력 버퍼로부터 1 바이트데이터를 읽어옴. 읽혀진데이터는 버퍼에서 제거.cf) peek()

Page 13: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

아두이노 시리얼 I/O (8)Serial 데이터 수신

문자열(String) 읽어오기

13

Page 14: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

가변저항(Potentiometer) 활용 (1)실험 목표

가변저항(potentiometer)의 활용 방법 이해가변저항으로 LED 출력 밝기를 조정

아두이노 아날로그 입력 처리 이해

14

Page 15: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

가변저항(Potentiometer) 활용 (2)가변저항(Potentiometer)

저항값을 조절할 수 있는 부품가변 전압을 생성할 때 사용

15

+5VmeasureGND

Page 16: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

가변저항(Potentiometer) 활용 (3)가변저항(Potentiometer)

일정한 범위를 가진 입력으로 사용현재 상태를 조절하기 위해 일정한 범위를 가진 입력이 필요노브 등을 이용하여 직접 제어

회전 위치 측정회전 바퀴(또는 축), 로보 조인트(joint) 등의 위치 측정

Resistive Sensor(저항 센서)와 동일하게 동작Voltage divider : 하나의 전압을 두 개의 전압으로 분할

16

Page 17: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

가변저항(Potentiometer) 활용 (4)회로도 및 회로 구성

17

회로 연결회로도

Page 18: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

가변저항(Potentiometer) 활용 (5)아누이노 프로그램 : PotDimmer

18

int potPin = a2;Int ledPin = 9;int val = 0;

void setup(){

pinMode(ledPin, OUTPUT);}

void loop(){

val = analogRead(potPin);val = val / 4;analogWrite(ledPin, val);

}

Page 19: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

가변저항(Potentiometer) 활용 (6)실험 개선

PotDimmer 프로그램에서 읽은 가변저항 값을 Host의 Serial Monitor에 출력하여라.

실험 리뷰

19

To turn On : digitalWrite(9, HIGH)To turn OFF : digitalWrite(9, LOW)

To set brightness : analogaWrite(9, val)

To turn On : digitalWrite(9, LOW)To turn OFF : digitalWrite(9, HIGH)

To set brightness : analogaWrite(9, 255-val)

Page 20: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

조도센서(CdS Sensor) 활용 (1)실험 목표

조도 센서의 동작 및 활용 방법 이해조도 센서 값을 읽어 출력하고 LED 밝기를 조절

Resistive sensor의 분압 동작 이해

20

Page 21: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

조도센서(CdS Sensor) 활용 (2)사전 지식

조도 센서(CdS Sensor)Photocell, Photo-resistor, Light sensor 등

21

Page 22: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

조도센서(CdS Sensor) 활용 (3)사전 지식

조도 센서(CdS Sensor) 사용 예:

22

Page 23: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

조도센서(CdS Sensor) 활용 (4)회로도 및 회로 구성

23

회로 연결회로도

Page 24: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

조도센서(CdS Sensor) 활용 (5)아누이노 프로그램 : CdsDimmer

24

int cdsPin = a2;Int ledPin = 9;int val = 0;

void setup(){

pinMode(ledPin, OUTPUT);}

void loop(){

val = analogRead(cdsPin);val = val / 4;analogWrite(ledPin, val);

}

Page 25: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201201/es/es-arduino-lecture... · 2014-05-18 · 가변저항(Potentiometer) 활용(3) ` 가변저항(Potentiometer)

조도센서(CdS Sensor) 활용 (6)실험 개선

CdsDimmer 프로그램에서 다음과 같이 동작하도록 수정하여라.주변 밝기가 일정 이상으로 높으면 LED를 off한다.주변 밝기에 반비례하여 LED의 밝기를 조절한다.

25