Make: 센서
기본기 + 빠르게 훑어보기
나만의 전자제품 만들기
예전에는
어려운 분야라는 인식
나만의 전자제품 만들기
지금은?
Arduino와 Raspberry Pi의 등장으로
누구나 쉽게 제작 가능
아두이노란?
쉬운 개발 환경
뛰어난 안정성
ADC 내장
복잡한 작업에는 불리함 (영상처리 등..)
성능
CPU 16MHz
RAM 8KB
라즈베리파이란?
성능
CPU 700MHz
RAM 256MB
운영체제가 돌아간다
다양한 개발환경
높은 성능과 GPU내장 (HDMI 출력 가능)
ADC 내장X
개발환경이 간단해요
안정성이 뛰어나요
ADC가 내장되어 있어요. (아날로그 센서를 사용하기 쉬워요)
이 PPT에서는…
왜냐하면
아두이노를 기반으로 설명합니다.
본격적으로 들어가기 전에…
센서를 사용하기 전에,
기본지식들을 알아봅시다
GPIO
ADC
풀업/풀다운 저항
GPIO (General Purpose Input/Output)
일반적인 목적으로 사용되는 IO(Input/Output) 핀
1 읽을 것 인가 쓸 것 인가?
2 무슨 값을 읽고 쓸 것인가?
pinMode(핀번호, 읽기/쓰기)
모드 읽기 쓰기
디지털 digitalRead digitalWrite
아날로그 analogRead analogWrite
ADC (Analog-Digital Converter)
아날로그를 디지털로 바꾸어 주는 컨버터
아두이노에는…
10bit ADC가 내장되어 있습니다.
라즈베리파이에는…
ADC가 없기 때문에 MCP3002 를 사용해야 합니다.
아날로그 vs 디지털
연속된 값: 주변 자연 현상에서 볼 수 있는 값.
아날로그 신호를 사용하기 쉽게 0, 1 논리 나눈 값
아날로그 신호
디지털 신호
(전압, 거리, 음량, 광량)
(ON/OFF, LOW/HIGH)
아날로그 vs 디지털
대부분의 센서는 아날로그 신호를 사용합니다
예를 들어
소리센서는 음량에 따라 0V~5V 사이의 전압크기(아날로그)로 표현합니다.
그러나, 컴퓨터는 디지털 신호를 사용합니다.
즉, 센서에서 들어온 아날로그 신호를 디지털 신호로 바꿔야 합니다
아날로그 신호
아날로그 신호는 연속된 값이에요.
연속되었다는 건 끝이 없다는 뜻이에요.
이런 값을 저장하고 다루는 건 쉽지 않죠.
(끝없이 연속되기 때문입니다)
디지털 신호
디지털 신호는 연속된 아날로그 신호를
저장하고 다루기 쉽게 0과 1로 나눕니다.
(‘이산되었다’고 합니다.)
0V~5V를 사용하는 시스템이면
0V~2.5V = 0(OFF)
2.5V~5V = 1(ON)
이렇게 처리를 하면 수치를 다루기 쉽죠
그런데 말입니다
0V~2.5V = 0
2.5V~5V = 1
이렇게 저장을 하게 된다면…
0.1V
1.0V
1.5V
2.0V
모두 0으로 인식을 합니다
즉, 아날로그에서 디지털로 변환을 하게 되면
손실이 발생하게 됩니다.
10bit ADC란?
아날로그-디지털 변환에는
손실이 생기는데 손실에도 정도가 있습니다
아두이노는
10bit ADC를 사용하게 되는데,
이 말은 아날로그 값을 10비트(1024단계)로
쪼갠다는 뜻입니다.
10bit ADC란?
0.0
0.1
0.2
.
.
.
2.4
2.5
2.6
.
.
.
.
4.8
4.9
5.0
0
1
2
3
.
.
.
.
.
.
1021
1022
1023
아날로그 디지털
손실
매핑
아두이노에서의 ADC사용
pinMode(핀번호, INPUT); // INPUT 설정
int value = analogRead(핀번호); // 아날로그 값을 읽어온다.
아날로그 디지털
0.0V 0
…
2.5V 512
…
5.0V 1023
풀업/풀다운 저항
아두이노
전기가
오고 있다~
전기(전류)는 (+)에서 (–)로 흘러가요.
풀업/풀다운 저항
전기가
오고 있는 건가?
차가 막히나?
그러나 끊어져있으면 애매한 상황이 발생합니다.
전기가 흐르는지에 명확한 판단을 할 수가 없는 거죠.
아두이노
풀업/풀다운 저항
오잉! 전기가 흐르네?
또한, 정전기나 주변 전기장에 취약해집니다.
잘못하면 전기신호가 없음에도 정전기 등으로 방해를 받아
전기신호가 있다고 오작동 할 수도 있습니다.
아두이노
정전기/전기잡음
풀업/풀다운 저항
시스템이 불안정 해집니다.
아두이노
판단하기
애매해!
풀업/풀다운 저항
전기가
안 오고 있구나!
그래서! 풀업/풀다운 저항을 이용해
전기가 흐르고 있다/흐르지 않는다는 것을
확실하게 알려줍니다.
아두이노
풀업/풀다운 저항
아두이노는 풀업/풀다운 저항을
내장하고 있습니다
pinMode(핀번호, INPUT_PULLUP)
pinMode(핀번호, INPUT_PULLDOWN)
본격적으로 들어가봅시다!
책에 나온 모든 센서를 다루진 않아요
그렇지만 원리는 대부분 같습니다.
거리 측정 (초음파)
초음파를 발사하고 돌아올 때까지
시간을 측정하여 거리를 계산합니다
거리 측정 (초음파)
HC-SR04 센서는 트리거(trig)에
10us 이하의 HIGH신호를 주면
초음파가 발생합니다.
거리 측정 (초음파)
초음파가 물체에 반사되어
돌아오면 에코(echo)가
HIGH로 바뀝니다
거리(m) = (왕복시간(s) / 2) * 340(m/s)
거리 측정 (초음파)
소리는 실내온도에서 1초에 약 340m를 날아갑니다. (340m/s)
초음파가 돌아온 시간은 (왕복시간)이니까 2로 나누어줍니다.
거리 측정 (초음파)
float distance() {
// 트리거 ON 설정
digitalWrite(트리거핀, LOW);
delayMicroseconds(5);
digitalWrite(트리거핀, HIGH);
delayMicroseconds(5);
digitalWrite(트리거핀, LOW);
// 에코신호 대기; (pulseIn 함수는 펄스 파형이 오기까지의 시간을 구합니다.)
float us = pulseIn(에코핀, HIGH); // ms 단위
float s = (us / 1000.0 / 1000.0); // ms 단위를 s 단위로 변환
s = s / 2; // 왕복시간 이므로 2로 나눔
float d = (s * 340); // (거리) = (시간) * (음속)
return d * 100.0; // 미터를 cm 단위로 바꿈.
}
연기/가스 감지(MQ-2)
MQ-2 센서는…
가연성 가스와 연기의 농도를
(아날로그) 전압 값으로 알려줍니다
연기/가스 감지(MQ-2)
가스와 연기의 농도를 전압의 세기(아날로그 신호)로
알려주기 때문에 ADC를 사용해야 합니다.
아두이노는 내장 ADC를 사용하면 되고,
라즈베리파이는 MCP3002를 별도로 사용해야 합니다.
ADC
0101
0011
연기/가스 감지(MQ-2)
int smokeDensity() {
pinMode(핀번호, INPUT); // INPUT 설정
return analogRead(핀번호); // ADC를 통해 읽어옴
}
연기의 농도가
낮으면 0에 가깝게
높으면 1023에 가깝게
값이 나옵니다
빛 세기 감지 포토레지스터(LDR; light-dependent-resistor)
LDR은 빛의 세기에 따라 저항이 변하는 소자
빛이 강해질수록 저항이 작아집니다.
빛이 강해질수록 전류가 많이 흐릅니다.
빛 세기 감지 포토레지스터(LDR; light-dependent-resistor)
MQ-2와 동일하게 ADC를 사용합니다.
(아날로그 센서의 사용법은 대부분 비슷합니다)
ADC
0101
0011
빛 세기 감지 포토레지스터(LDR; light-dependent-resistor)
pinMode(센서핀번호, INPUT); // INPUT 설정
int value = analogRead(센서핀번호); // ADC를 통해 읽어옴
pinMode(LED핀번호, OUTPUT); // OUTPUT 설정
analogWrite(LED핀번호, value); // PWM을 통해 전압출력
빛의 세기를 ADC를 통해 입력을 받고,
그것을 PWM을 통해 출력하여 LED 밝기를 조절합니다.
빛의 세기에 따라 LED 불빛의 세기가 변하는 예제
디지털 센서
아날로그 센서 뿐만 아니라 디지털 센서도 존재합니다.
(I2C나 USART 통신 등을 사용합니다.)
디지털 센서의 사용법은
아두이노/라즈베리파이 서적을 참고해주세요 
그 외 이야기(1) - 타이머
sleep 함수는 아두이노 전체를 멈추게 합니다.
따라서 다른 작업을 할 수가 없습니다.
이보다 더 좋은 방법은…
타이머를 사용하는 겁니다
그 외 이야기 - 타이머
타이머를 사용하려면,
타이머 인터럽트를 이해해야 하지만
MsTimer2 라는
라이브라리가 있습니다.
그 외 이야기 - 타이머
#include <MsTimer2.h>
void timerCallback() {
// 타이머 수행 코드…
}
void setup() {
MsTimer2::set(500, timerCallback); // 500ms 마다 timerCallback 실행
MsTimer2::start();
}
void loop() {
}
더 많은 이야기는…
이 PPT이 이 책의 10%만을 담고 있습니다.
다양한 센서와 자세한 설명은
Make: 센서
테로 카르비넨, 키모 카르비넨, 빌리 발토카리 지음
남기혁, 지영민 옮김
이 책을 한 줄로 말하자면요…
3.5/5
다양한 센서와 활용법을 접할 수가 있어요.
코드가 첨부되어있어서 좋았어요.
회로가 나와있어서 따라가기 쉬웠어요.
백과사전식 구성으로 돼있어서 찾기가 쉬워요.
센서의 원리에 대해 다루었으면 하는 아쉬움이 있어요.
http://qnrdlqkrwhdgns.canxan.com
같이 보면 좋아요.
아두이노 라즈베리파이

Make: 센서

  • 1.
    Make: 센서 기본기 +빠르게 훑어보기
  • 2.
  • 3.
    나만의 전자제품 만들기 지금은? Arduino와Raspberry Pi의 등장으로 누구나 쉽게 제작 가능
  • 4.
    아두이노란? 쉬운 개발 환경 뛰어난안정성 ADC 내장 복잡한 작업에는 불리함 (영상처리 등..) 성능 CPU 16MHz RAM 8KB
  • 5.
    라즈베리파이란? 성능 CPU 700MHz RAM 256MB 운영체제가돌아간다 다양한 개발환경 높은 성능과 GPU내장 (HDMI 출력 가능) ADC 내장X
  • 6.
    개발환경이 간단해요 안정성이 뛰어나요 ADC가내장되어 있어요. (아날로그 센서를 사용하기 쉬워요) 이 PPT에서는… 왜냐하면 아두이노를 기반으로 설명합니다.
  • 7.
    본격적으로 들어가기 전에… 센서를사용하기 전에, 기본지식들을 알아봅시다 GPIO ADC 풀업/풀다운 저항
  • 8.
    GPIO (General PurposeInput/Output) 일반적인 목적으로 사용되는 IO(Input/Output) 핀 1 읽을 것 인가 쓸 것 인가? 2 무슨 값을 읽고 쓸 것인가? pinMode(핀번호, 읽기/쓰기) 모드 읽기 쓰기 디지털 digitalRead digitalWrite 아날로그 analogRead analogWrite
  • 9.
    ADC (Analog-Digital Converter) 아날로그를디지털로 바꾸어 주는 컨버터 아두이노에는… 10bit ADC가 내장되어 있습니다. 라즈베리파이에는… ADC가 없기 때문에 MCP3002 를 사용해야 합니다.
  • 10.
    아날로그 vs 디지털 연속된값: 주변 자연 현상에서 볼 수 있는 값. 아날로그 신호를 사용하기 쉽게 0, 1 논리 나눈 값 아날로그 신호 디지털 신호 (전압, 거리, 음량, 광량) (ON/OFF, LOW/HIGH)
  • 11.
    아날로그 vs 디지털 대부분의센서는 아날로그 신호를 사용합니다 예를 들어 소리센서는 음량에 따라 0V~5V 사이의 전압크기(아날로그)로 표현합니다. 그러나, 컴퓨터는 디지털 신호를 사용합니다. 즉, 센서에서 들어온 아날로그 신호를 디지털 신호로 바꿔야 합니다
  • 12.
    아날로그 신호 아날로그 신호는연속된 값이에요. 연속되었다는 건 끝이 없다는 뜻이에요. 이런 값을 저장하고 다루는 건 쉽지 않죠. (끝없이 연속되기 때문입니다)
  • 13.
    디지털 신호 디지털 신호는연속된 아날로그 신호를 저장하고 다루기 쉽게 0과 1로 나눕니다. (‘이산되었다’고 합니다.) 0V~5V를 사용하는 시스템이면 0V~2.5V = 0(OFF) 2.5V~5V = 1(ON) 이렇게 처리를 하면 수치를 다루기 쉽죠
  • 14.
    그런데 말입니다 0V~2.5V =0 2.5V~5V = 1 이렇게 저장을 하게 된다면… 0.1V 1.0V 1.5V 2.0V 모두 0으로 인식을 합니다 즉, 아날로그에서 디지털로 변환을 하게 되면 손실이 발생하게 됩니다.
  • 15.
    10bit ADC란? 아날로그-디지털 변환에는 손실이생기는데 손실에도 정도가 있습니다 아두이노는 10bit ADC를 사용하게 되는데, 이 말은 아날로그 값을 10비트(1024단계)로 쪼갠다는 뜻입니다.
  • 16.
  • 17.
    아두이노에서의 ADC사용 pinMode(핀번호, INPUT);// INPUT 설정 int value = analogRead(핀번호); // 아날로그 값을 읽어온다. 아날로그 디지털 0.0V 0 … 2.5V 512 … 5.0V 1023
  • 18.
  • 19.
    풀업/풀다운 저항 전기가 오고 있는건가? 차가 막히나? 그러나 끊어져있으면 애매한 상황이 발생합니다. 전기가 흐르는지에 명확한 판단을 할 수가 없는 거죠. 아두이노
  • 20.
    풀업/풀다운 저항 오잉! 전기가흐르네? 또한, 정전기나 주변 전기장에 취약해집니다. 잘못하면 전기신호가 없음에도 정전기 등으로 방해를 받아 전기신호가 있다고 오작동 할 수도 있습니다. 아두이노 정전기/전기잡음
  • 21.
    풀업/풀다운 저항 시스템이 불안정해집니다. 아두이노 판단하기 애매해!
  • 22.
    풀업/풀다운 저항 전기가 안 오고있구나! 그래서! 풀업/풀다운 저항을 이용해 전기가 흐르고 있다/흐르지 않는다는 것을 확실하게 알려줍니다. 아두이노
  • 23.
    풀업/풀다운 저항 아두이노는 풀업/풀다운저항을 내장하고 있습니다 pinMode(핀번호, INPUT_PULLUP) pinMode(핀번호, INPUT_PULLDOWN)
  • 24.
    본격적으로 들어가봅시다! 책에 나온모든 센서를 다루진 않아요 그렇지만 원리는 대부분 같습니다.
  • 25.
    거리 측정 (초음파) 초음파를발사하고 돌아올 때까지 시간을 측정하여 거리를 계산합니다
  • 26.
    거리 측정 (초음파) HC-SR04센서는 트리거(trig)에 10us 이하의 HIGH신호를 주면 초음파가 발생합니다.
  • 27.
    거리 측정 (초음파) 초음파가물체에 반사되어 돌아오면 에코(echo)가 HIGH로 바뀝니다
  • 28.
    거리(m) = (왕복시간(s)/ 2) * 340(m/s) 거리 측정 (초음파) 소리는 실내온도에서 1초에 약 340m를 날아갑니다. (340m/s) 초음파가 돌아온 시간은 (왕복시간)이니까 2로 나누어줍니다.
  • 29.
    거리 측정 (초음파) floatdistance() { // 트리거 ON 설정 digitalWrite(트리거핀, LOW); delayMicroseconds(5); digitalWrite(트리거핀, HIGH); delayMicroseconds(5); digitalWrite(트리거핀, LOW); // 에코신호 대기; (pulseIn 함수는 펄스 파형이 오기까지의 시간을 구합니다.) float us = pulseIn(에코핀, HIGH); // ms 단위 float s = (us / 1000.0 / 1000.0); // ms 단위를 s 단위로 변환 s = s / 2; // 왕복시간 이므로 2로 나눔 float d = (s * 340); // (거리) = (시간) * (음속) return d * 100.0; // 미터를 cm 단위로 바꿈. }
  • 30.
    연기/가스 감지(MQ-2) MQ-2 센서는… 가연성가스와 연기의 농도를 (아날로그) 전압 값으로 알려줍니다
  • 31.
    연기/가스 감지(MQ-2) 가스와 연기의농도를 전압의 세기(아날로그 신호)로 알려주기 때문에 ADC를 사용해야 합니다. 아두이노는 내장 ADC를 사용하면 되고, 라즈베리파이는 MCP3002를 별도로 사용해야 합니다. ADC 0101 0011
  • 32.
    연기/가스 감지(MQ-2) int smokeDensity(){ pinMode(핀번호, INPUT); // INPUT 설정 return analogRead(핀번호); // ADC를 통해 읽어옴 } 연기의 농도가 낮으면 0에 가깝게 높으면 1023에 가깝게 값이 나옵니다
  • 33.
    빛 세기 감지포토레지스터(LDR; light-dependent-resistor) LDR은 빛의 세기에 따라 저항이 변하는 소자 빛이 강해질수록 저항이 작아집니다. 빛이 강해질수록 전류가 많이 흐릅니다.
  • 34.
    빛 세기 감지포토레지스터(LDR; light-dependent-resistor) MQ-2와 동일하게 ADC를 사용합니다. (아날로그 센서의 사용법은 대부분 비슷합니다) ADC 0101 0011
  • 35.
    빛 세기 감지포토레지스터(LDR; light-dependent-resistor) pinMode(센서핀번호, INPUT); // INPUT 설정 int value = analogRead(센서핀번호); // ADC를 통해 읽어옴 pinMode(LED핀번호, OUTPUT); // OUTPUT 설정 analogWrite(LED핀번호, value); // PWM을 통해 전압출력 빛의 세기를 ADC를 통해 입력을 받고, 그것을 PWM을 통해 출력하여 LED 밝기를 조절합니다. 빛의 세기에 따라 LED 불빛의 세기가 변하는 예제
  • 36.
    디지털 센서 아날로그 센서뿐만 아니라 디지털 센서도 존재합니다. (I2C나 USART 통신 등을 사용합니다.) 디지털 센서의 사용법은 아두이노/라즈베리파이 서적을 참고해주세요 
  • 37.
    그 외 이야기(1)- 타이머 sleep 함수는 아두이노 전체를 멈추게 합니다. 따라서 다른 작업을 할 수가 없습니다. 이보다 더 좋은 방법은… 타이머를 사용하는 겁니다
  • 38.
    그 외 이야기- 타이머 타이머를 사용하려면, 타이머 인터럽트를 이해해야 하지만 MsTimer2 라는 라이브라리가 있습니다.
  • 39.
    그 외 이야기- 타이머 #include <MsTimer2.h> void timerCallback() { // 타이머 수행 코드… } void setup() { MsTimer2::set(500, timerCallback); // 500ms 마다 timerCallback 실행 MsTimer2::start(); } void loop() { }
  • 40.
    더 많은 이야기는… 이PPT이 이 책의 10%만을 담고 있습니다. 다양한 센서와 자세한 설명은 Make: 센서 테로 카르비넨, 키모 카르비넨, 빌리 발토카리 지음 남기혁, 지영민 옮김
  • 41.
    이 책을 한줄로 말하자면요… 3.5/5 다양한 센서와 활용법을 접할 수가 있어요. 코드가 첨부되어있어서 좋았어요. 회로가 나와있어서 따라가기 쉬웠어요. 백과사전식 구성으로 돼있어서 찾기가 쉬워요. 센서의 원리에 대해 다루었으면 하는 아쉬움이 있어요. http://qnrdlqkrwhdgns.canxan.com
  • 42.