[Arduino] 초음파 센서 LED, 온도계 센서 온습도계 만들기

2019. 7. 4. 21:03

학교에서 있을 교육 봉사를 준비하며 아두이노를 미리 예습해보았다. 학습 내용은 아래와 같다.

 

1. 초음파 센서 기본 동작 확인

2. 초음파 센서+RGB LED를 활용한 거리별 신호등 만들기

3. 온습도계 센서를 이용하여 현재 장소 온도, 습도 측정하기

 

1.

우선 초음파 센서 기본 동작을 구현해보았다. 자료는 아두이노 무료 배포 자료를 다운받아 아래의 회로를 참고하였다.

 

[초음파 센서 기본 회로]

코드는 아래와 같이 작성하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
int trig=2;  //디지털 2번 핀을 변수 trig에 대입
int echo=3//3번 핀 변수 echo에 대입
 
void setup() {
  Serial.begin(9600); //시리얼 통신 시작, 통신 속도 9600
  pinMode(trig, OUTPUT); //tirg(2번)핀을 출력 모드로
  pinMode(echo,INPUT); //echo(3번)핀을 입력 모드로
}
 
void loop() {
  digitalWrite(trig,HIGH);
  delayMicroseconds(10);//10마이크로초(1/100,000초)동안
  digitalWrite(trig,LOW); //trig핀에 LOW(0V) 신호를 보낸다
  int distance = pulseIn(echo,HIGH) *17/1000;
  //거리=시간*속도이므로 거리를 구하기 위해서는 시간과 속도를 구해야 한다
  //pulseIn()이라는 함수
  //코드 해석: echo핀이 HIGH 상태에서 LOW신호를 받고 다시 HIGH를 받기까지의 시간을 반환(초음파가 돌아오는 시간)
  //17은 초음파의 속도 340을 반으로 나눈 값(왕복시간을 구하기 떄문에 34/2)
  //1000을 나누는 이유는 cm단위에 맞게 자릿수를 맞추기 위해
 
  Serial.print(distance); //distance를 시리얼 모니터에 출력한다
  Serial.println("cm"); //문자열 cm 출력
  delay(100); //0.1초 지연
  
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

 

 

그러나 뭔가 합선 과정인지 팬아웃이 있었는지 전선을 이리저리 눌러줘야지 제대로 작동하는 모습이 보였다. 다행히 결과는 제대로 나왔다. 만약에 시리얼 모니터에 계속 0이라는 숫자가 뜬다면 전선을 이리저리 만져보길 바란다.

 

2. 

다음은 초음파센서와 RGB LED를 가지고 거리별로 색이 파란색, 빨간색, 초록색으로 변하는 회로를 구현해 보았다.

결과는 동영상과 같다. 아래와 같은 코드로 실험했으며, 회로도는 이곳을 참고하였다.

회로도는 이곳에서 볼 수 있다. https://m.blog.naver.com/dokkosam/221190611475

 

[아두이노 중급] 거리에 따라 삼색LED 제어하기

거리에 따라 삼색LED 제어하기 안녕하세요. 아토플래닛의 가현쌤입니다. 오늘도 까먹지 않고 아토플래닛...

blog.naver.com

실험 결과는 동영상으로 참고하길 바란다. 

참고로, 내가 참고하던 교육 자료는 조금 기간이 있던 터라 라이브러리같은 것들은 업데이트 되어 코드에 약간 변경이 필요하다. 최신의 코드 자료를 참고하려면 역시 검색이 좋은 것 같다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
int trig = 2//trig라는 변수에 2저장
int echo = 3//echo라는 변수에 3저장
 
void setup() {
  pinMode(trig, OUTPUT); //trig 출력으로 설정
  pinMode(echo, INPUT); //echo 입력으로 설정
}
 
void loop() {
  analogWrite(90); //9번 핀에 0V 출력
  analogWrite(100); //10번 핀에 0V 출력
  analogWrite(110); //11번 핀에 0V 출력
 
  digitalWrite(trig, LOW); //trig 초음파 출력x
  delayMicroseconds(2);
  digitalWrite(trig, HIGH); //trig 초음파 출력○
  delayMicroseconds(10);
  digitalWrite(2, LOW); //trig 초음파 출력x
 
  long duration = pulseIn(echo, HIGH); 
  //echo가 HIGH될때까지의 시간 = 초음파가 되돌아올때까지의 시간
 
  long distance = (duration * 340/ 2 / 10000;
  //시간을 가지고 distance(거리) 구하기
 
  if (distance<10) {
    analogWrite(9255); //거리가 10cm일때 9번 핀에 5V 출력
  } else if(distance<20) {analogWrite(10255); //거리가 20일떄 10번 핀에 5V 출력
  } else if(distance<30) {analogWrite(11255);} //거리가 30일떄 11번 핀에 5V 출력
 
delay(100); //0.1초 지연
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

 

3.

이번에는 온습도계 센서를 이용한 온도와 습도를 출력하는 온도계를 만들어봤다.

출력은 시리얼 모니터로 진행했다. 사실 회로도를 꼽는 것은 어렵지 않았으나 라이브러리가 업데이트 되어 살짝 애를 먹었다. 라이브러리는 아래의 zip파일을 다운받은 후 라이브러리에 zip 파일로 추가를 해주면 된다.

아래 사진은 실제 구현 사진이다.

 

DHT11.zip
0.00MB

코드는 아래와 같다.

이와 같은 회로와 결과를 사용하여 코드는 아래와 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <DHT11.h>
#define DHTPIN 4 //DHTPIN을 디지털 2번 핀으로 정의
DHT11 dht(DHTPIN); //DHT 설정-dht(디지털 2, dht11)
 
void setup() {
  Serial.begin(9600);
  //시리얼 통신 시작
}
 
void loop() {
 
  int err;
  float temp, humi;
 
  if((err=dht.read(humi, temp))==0)
  {
  Serial.print("Humidity: ");
  Serial.print(humi); //습도값 출력
  Serial.print("%\t"); //문자 % 출력
  Serial.print("Temperature: ");
  Serial.print(temp);//온도 출력
  Serial.println(" C"); //문자 C를 출력후 줄바꿈
  } else{
    Serial.println();
    Serial.print("ERROR NO: ");
    Serial.println();
  }
  delay(DHT11_RETRY_DELAY); //읽는데 딜레이 주기
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

 

회로와 코드의 결과 무사히 잘 작동하는 것을 볼 수 있다.

오늘은 이렇게 아두이노 예습을 해 보았다. 다음은은 온도계를 응용하여 온도계 결과를 디스플레이에 표시해보고, 마음 차시에는 아두이노와 타기기간의 무선통신 기능을 구현해 볼 예정이다.

'Undergraduate Records' 카테고리의 다른 글

[Baekjoon] for문 문제  (0) 2019.07.08
[Baekjoon] if문 알고리즘 문제  (0) 2019.07.06
[Algorithm]알고리즘 시간 복잡도 계산하기  (0) 2019.07.06
Mysql/php 게시판 만들기  (0) 2019.07.03
Login Page 만들기  (0) 2019.07.02

BELATED ARTICLES

more