본문 바로가기
대한상공회의소 스마트팩토리 교육/IoT 디바이스 개발

[IoT 디바이스 개발] 아두이노«수업-6» : 각종 입력 소자 및 센서 (가변저항(Variable Resistance) / 조도 센서(CDS) / 온도 센서(LM35) / 초음파 센서(HC-SR04)

by 나는영하 2022. 1. 30.

※ 주의사항 

본 블로그는 수업 내용을 바탕으로 제가 이해한 부분을 정리한 블로그입니다.
본 내용을 참고로만 보시고, 틀린 부분이 있다면 지적 부탁드립니다!

감사합니다😁

 

안녕하세요!!

오늘은 아래와 같은 내용을 확인해보겠습니다.

 

각종 입력 소자 및 센서

가변 저항(Variable Resistance)

조도 센서 (CDS)

온도 센서 (LM35)

초음파 센서 (HC-SR04)


이번 수업에는 가변저항을 비롯한 입력 소자 및 센서들의 사용방법과 

아두이노내에 내장되어있는 USB to UART 컨버터를 활용해서 Serial 통신 방법을 배웠습니다.

Serial 통신 방법에 대해선 지난 아두이노«독학-2» 시간에 사용자 입력 기능에 대해 배운관계로 이번 글에는 생략하겠습니다. 모든 센서나 입력 소자들은 이제부터 Serial 통신을 통해 값을 받아보도록 하겠습니다!!😁 

1.  가변 저항 (Variable Resistance)

- 가변저항은 0~5V 범위에서 전압이 변화 합니다.

- 아날로그 입력핑을 통해 ADC 되어 0 ~ 1023 사이의 값을 가지게 됩니다.

1-1. 가변저항 결선 방법

가변저항의 극성과 레버 방향에 따른 값(좌) / 아두이노 MEGA의 아날로그 핀 위치

- 가변저항의 결선방법은 간단합니다.

가운데가 AnalogPIN이고 양옆으로 VCC와 GND가 결선된다고 생각하시면 됩니다.

그래서 가변저항의 레버를 GND쪽으로 돌리면 저항이 0에 수렴하고 5V 쪽을 돌리면 1023의 값에 수렴하게됩니다.

 

- AnalogPIN은 아두이노 MEGA 기준 16개가 있습니다.(A0 ~ A15) 

 

1-2. 가변저항 사용 코드

가변저항 사용 사진(좌) / 가변저항 관련 코드 및 Serial 통신창(우)

1) 사용함수

map()

- map(val, 0, 1023, 0, 255) : val 변수에 저장되어 있는 값에서 0 ~ 1023 사이의 값을 0 ~ 255 사이의 값으로 변환합니다. → ADC를 통해 가변저항의 값을 1024 Step으로 받는데, WDM을 통해 AnalogWrite 함수로 LED의 값을 출력할 수 있는 범위는 255 Step이라서 해당 함수를 사용하여 변환하는 과정을 거쳐줘야 합니다. 

 

2) 코드설명

Line 10 ~ 12 : 가변저항을 아날로그 핀 A2에 연결하고 값을 'val' 변수에 저장합니다.
Line 13 ~ 15 : map 함수를 통해 0 ~ 1024의 값을 0 ~ 100(%)값으로 변환하고 시리얼 통신을 통해 출력합니다.

Line 16 ~ 19 : map 함수를 통해 0 ~ 1024 값을 0 ~ 255 값으로 변환하고 AnalogWrite 함수를 통해 LED로 출력합니다.

Line 22 ~ 30 : 가변저항에 들어가는 전압의 레벨 값을 구하는 과정입니다.

그동안은 INT형 값을 받아왔다면 이번에는 소수점까지 받아야하기 때문에 double을 통해 실수형 변수를 선언했씁니다.

주석처리한 Line은 map 함수를 통해 실수형 값을 받기위한 과정입니다. (Line 22 방법이 더 쉽고 간편합니다!) 

 


 

2.  조도 센서 (CDS)

- CDS(조도센서)는 측정된 빛의 세기에 따라 값이 변하는 센서입니다.

- 결선법은 한쪽 다리에는 VCC, 한쪽 다리에는 저항과 GND를 연결해줍니다.

그리고 병렬로 GND쪽 다리에 아두이노 Analog PIN과 결선을 하면 됩니다. 

 


 

3. 온도 센서 (LM35)

- 아날로그 온도센서 LM35

- 온도센서의 평평한 면을 바라봤을때 왼쪽다리부터 VCC, OUTPUT, GND 이다.

- Line 8에서 온도를 구할때 '9.31'이라는 값으로 나누어 주었는데 이는 온도센서에 사용되는 전압에 따라 달라지는 상수값으로 알고 있습니다. 

- 온도를 구하기 위해 나눠지는 계수값에 대해서는 조금 더 공부가 필요할 것 같습니다..ㅠ


 

4.  초음파 센서 (HC-SR04)

- 초음파 센서는 약 20kHz 이상의 높은 주파수의 소리를 보낸 후 반사되어 돌아오는 시간차를 측정해서 거리를 알수 있는 센서

- 초음파의 속도는 340m/sec → 이따 물체와의 거리를 산출할때 꼭 필요한 수치입니다!!😁

- 초음파 센서의 송신부(TRIG)에서 초음파 펄스를 방사하고, 수신부(ECHO)에서 펄스를 받아서 그 시간차로 거리를 산출하는 방식입니다.

 

4-1. 초음파 센서 결선방식

- TRIG : Digital OUTPUT  (아두이노에 Digital PIN에 연결 후 pinMode로 OUTPUT 설정)

- ECHO : Digital INPUT (아두이노에 Digital PIN에 연결 후 pinMode로 INPUT 설정)

 

 

4-1. 초음파 센서 관련 코드

1) 함수

pulseIn()

- pulseIn(EHCO, HIGH) : 초음파센서 트리거 핀에서 보낸 펄스파의 HIGH 지속 시간을 에코 핀에서 읽는다.

즉, 물체에 반사되어서 되돌아오는 시간을 측정한다 ( 왕복시간)

 

2) 코드 설명 

Line 1,6 : 초음파 센서의 TRIG 부분을 OUTPUT으로 설정한다. (펄스파를 보내는 역할)

Line 2,7 : 초음파 센서의 EHCO 부분을 INPUT으로 설정한다. (펄스파를 받는 역할)

Line 12~16 : TRIG에서 펄스파를 보내는 과정

Line 18 : TRIG에서 보낸 펄스파를 ECHO에서 받고 HIGH가 지속된 시간을 읽는다.

Line 19 : 받은 시간에서 58로 나누어 주면 물체간의 거리(cm)를 구할 수 있다.

Line 24~27 : 물체의 거리가 10cm 미만이면 LED를 ON 하고 이상이면 OFF한다.

 

※ 왜!! 거리를 구하는데 시간에서 나누기 58을 해주어야 하는가??

- 초음파 센서의 매뉴얼상 나온 산출 방법입니다. (아래의 매뉴얼 발췌본 참고)

초음파센서 매뉴얼 발췌

 


 

5.  응용문제 (Serial 통신 + 초음파 센서 + Buzzer)

5-1. 문제

초음파 센서로 거리를 받아서 10cm 이상이면 LED를 점등하고, 10cm 미만이면 부저를 울린다.

 

 

5-2. 코드

 

댓글