Sensor 읽는 법(아두이노)

in #kr-arduino6 years ago

Sensor 읽는 법(아두이노)



오늘은 지금까지 다뤘던 Sensor 들에 대해서 정리하는 시간을 갖도록 하겠습니다. 가상시뮬레이터에서 제공되는 Sensor의 종류들은 극히 일부에 지나지 않습니다. 실제는 더 많은 수십 수백가지이상의 센서들이 존재합니다. 여기서 중요한 것은 종류가 많다고 해서 개별적으로 다르게 접근하는게 아니라 이제 설명하는 기본 세가지 방법으로 Sensor의 값을 읽어 올 수 있습니다. 이 세가지 방법만 알고 있으면 센서 종류만 많지 다루는데 그렇게까지 어려움이 없을 거라 생각합니다.

1. Sensor의 종류


가상시뮬레이터에서는 값을 읽는데 사용하는 부품들입니다. 몇 종류가 되지 않지만 그래도 세가지 방법을 다 실험할 수 있는 부품들로 구성되어 있습니다. 실제로 아두이노키트를 구매하시면 몇십가지의 부품들로 구성되어 판매하지만 사실 종류별로 구분하여 분류하면 종류는 그렇게 많지 않습니다. 개수만 많을뿐이죠. 실제 부품들 사진을 올려야 하는데 제 키트 사진을 찍어서 올리기 힘들고 인터넷 키트 사진을 올리는 것도 문제가 될 것 같아서 그부분은 생략하도록 하겠습니다. 관심있으신 분들은 구글 검색에서 "아두이노센서 종류"라는 키워드로 검색하시면 목록 사진들이 나열된 게시물들을 쉽게 찾을 수 있으니깐 어떤 종류의 센서들이 있는지 개별적으로 살펴보시면 되겠습니다.

2. Sensor의 읽기 구분


Sensor를 읽이 위해서는 크게 세가지 방법으로 구분한다고 했죠. 바로 디지털 읽기, 아날로그 읽기, 시간값 읽기로 나누어 살펴볼 수 있습니다.

1) 디지털 읽기 :

디지털핀에서 센서의 값을 읽는 방법입니다. 기본적으로 디지털핀은 HIGH or LOW의 상태값을 읽을 수 있고 쓸 수 있습니다. 쉽게 말해서, 디지털핀으로 읽을때 HIGH or LOW의 상태값을 읽게 됩니다. Sensor에서 디지털 상태값을 출력하는 종류가 뭐가 있을까요. PIR Sensor(인체감지센서), Tilt Sensor(기울기센서), 스위치버턴 등이 대표적으로 들 수 있겠죠. 이런 종류의 Sensor는 두가지 HIGH or LOW 상태값만 갖게 됩니다.

int val = digitalRead(디지털핀);

val이란 변수에 디지털핀에 연결된 센서의 값을 저장하게 됩니다. 우리는 두가지 상태값 HIGH or LOW의 값을 통해서 아두이노에서 특정 동작을 제어하게 됩니다.

2) 아날로그 읽기 :

아날로그핀에서 센서의 값을 읽는 방법입니다. 기본적으로 아날로그핀은 0~1023사이의 값을 읽게 됩니다. 아날로그 값을 출력하는 종류가 뭐가 있을까요. 위 사진을 보면 대충, Gas Sensor(가스센서), Photoresistor(LDR)(조도센서) 등이 있네요. 이런 종류의 센서는 전류의 값을 출력되는데 아두이노는 0~1023사이의 전류의 세기 값을 읽게 됩니다.

int val = analogRead(아날로그핀) ;

val이란 변수에 아날로그핀에 연결된 센서의 값을 저장하게 됩니다. 우리는 전류의 세기 0~1023의 값을 통해서 특정 동작을 제어하게 됩니다. 참고로 부품에 따라 아날로그 신호와 디지털 신호를 두개 다 내보내는 부품이 있는데 사용목적에 따라서 디지털 신호는 디지털 읽기로 아날로그 신호는 아날로그 읽기 함수를 사용해서 읽으시면 됩니다.

3) 시간값 읽기 :

디지털핀에서 센서의 값을 읽는데 어떤 특정한 상태를 기준으로 해서 그 상태가 유지하는 시간을 추출할 수 있습니다. 대표적으로 초음파 센서를 들 수 있습니다.

int val =pulseIn(디지털핀, HIGH/LOW);

val이란 변수에 디지털 핀에 연결된 센서의 값을 읽어오는데 상태의 값이 HIGH or LOW 중 어떤 상태값이 얼마정도 유지 되었는지 그 시간을 측정하는데 사용됩니다. 가령 pulseIn(디지털핀, HIGH) 라고 하면 디지털핀에 들어오는 HIGH값이 LOW가 될때까지의 시간값을 반환하게 됩니다. 초음파센서에서 초음파를 쏘고 되돌아올때 이때 초음파센서를 통해 HIGH에서 LOW가 될때까지의 시간값을 가지고 거리를 계산 했었죠.

원래는 디지털 읽기와 아날로그 읽기로 두가지로 구분하시면 됩니다. 시간값 읽기는 특수한 경우이고요. 다양한 부품들이 있는데 대부분 디지털 값을 출력하거나 아날로그 값을 출력하는 부품들이고 우리는 digitalRead()함수와 analogRead()함수로 센서의 값을 읽게 됩니다.

추가적으로 통신에서 '1'과 '0'의 신호값으로 읽기도 합니다. 가령 1byte의 값을 전송한다면 '00000000'의 범위의 전기신호를 보내는데 '1'이라는 값을 보낸다고 치면 '00000001'이렇게 2진수로 보낸다면 전기 신호가 'LOW' 7번, 'HIGH' 1번으로 짧게 끈어서 8bit의 신호를 보내겠죠. 통신에서는 읽을때 이 전기신호를 읽어서 다시 복호화하여 1이란 숫자로 저장하게 됩니다. 통신 부분이기 때문에 이 부분은 간단히 전기신호로 읽는 방법정도만 이해하시면 되겠습니다.

SoftwareSerial mySerial(RX,TX);
byte val = mySerial.read();

Serial 통신핀을 통해서 1byte의 신호값을 val에 저장합니다. 센서값을 읽은 기기에서 통신을 통해서 그 값을 아두이노우노에서 읽을때 사용 됩니다. 이부분은 통신 부분이니깐 별도로 알아두시기 바랍니다.

마무리


오늘은 간단히 센서의 값을 읽는법을 정리하는 시간으로 채웠습니다. 어떤 Sensor를 사용하시더라고 기본 골격은 디지털 읽기와 아날로그 읽기 뿐이 없습니다. 별도로 라이브러리리 제공 될 경우 해당 라이브러리 객체에 사용핀을 던져주기만 하면 별도의 코딩은 필요 없겠지만 실제 여러분들이 코딩을 하실 경우는 대표적으로 이 두가지 방법으로 접근이 이루어지기 때문에 두 함수만 이해하시면 사용해보지 않는 센서들일지라도 대부분 사용하실 수 있을 꺼에요.

오늘은 정리하는 시간으로 간단히 포스팅을 했네요.

Sort:  

어서 집에 있는 아두이노 우노가 부활해야 될텐데 ...
늘 좋은 포스팅 감사요

가상시뮬레이터 파트는 모터파트뿐이 안남았네요. 응용편은 무궁무진하지만요.
실전 부품편으로 가자지 가상시뮬레이터 실험 포스팅에서 벗어나는거라 참 고민되는 시점이네요
가상응용편으로 계속 나갈지 아니면 코딩편으로 채울지 아니면 그냥 실전편으로 넘어갈지 고민되는 시점에 오늘 포스팅은 그냥 정리하는 포스팅을 채웠네요.

음..아두이노라고 해도 기본적으로 ADC나 PWM, 타이밍 쪼개기등은 정확하게 알고 가야 한다는 생각이..나중에 아트멜 스타일로 코딩할 경우도 있구요..
실전이 많이 기대되네요:)

아두이노키드 보시면 수십가지의 수많은 부품들이 있잖아요 기본적으로 디지털, 아날로그 읽기를 통해서 대부분 제어가 된다는 의미로 저 둘만 정확히 이해하시면 새로운 부품을 실제 다루지 않더라도 사용할 수 있다는 의미가 되는 것이죠.

코딩맨님, 프사가 가면인가요?

네! 무료이미지 사이트에서 맘에 들어서 사용하고 있네요.
인텃넷 공간이나 실생활에서 우리는 살아가면여 여러개의 보여지는 이미지 페르소나(가면)을 쓰고 살잖아요.
스티미언 활동하는 나의 이미지도 스팀이라는 세상에서 만들어진 또다른 페로소나를 쓰고 활동하는 것이 아닐까 하는 생각에 상징적 의미로 가면을 프사로 하게 되었네요.

codingman 님. 이거 두꺼운 글자 쓰는 거 어떻게 하는 건가요? 얇은 선으로 화면 나누는 거 하구요. 내용도 좋은데 불현듯 그게 궁금합니다. ㅎㅎ

음! 그냥요. 전용 스팀 편집기에 설명서 나와 있어요 그거 보시고 따라하시면 돼요.
http://www.steemstyle.com

이곳에 가셔서 물음표 아이콘 누르시면 사용설명서 나와 있어요.

markdown 편집기 종류는 많은데 문제는 몇가지 기능이 적용이 안되어서 다른 편집기로 다양하게 표현했는데 일부 기능들이 적용이 안되어서 실제 보여지는 모습이 이상하게 나타나는 경우가 있거든요.

그래서 그냥 포스트 쓸때에 미리 원고를 여기에서 위 링크된 편집기로 편집한 다음 올리네요.

오옷 꿀팁 감사염 호홓

Coin Marketplace

STEEM 0.20
TRX 0.16
JST 0.030
BTC 65834.12
ETH 2676.99
USDT 1.00
SBD 2.89