일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Gentoo
- 해외송금
- 모인유럽송금
- client
- 리눅스
- network
- 모인해외송금
- 해커스쿨
- 프랑스교환학생
- 해킹
- 웹해킹
- 프랑스송금
- 백도어
- 포너블
- 루트미
- WebHacking
- 프랑스 교환학생
- pwnable.kr
- FTZ
- Challenge
- Linux
- web
- wargame
- 네트워크해킹
- rootme
- 모인유럽서포터즈
- 유로송금
- pwnable
- EPITA
- 보안
- Today
- Total
Securing Keys
[아두이노] 초음파센서 측정값을 바탕으로 LED 제어하기 본문
초음파센서
- 초음파를 이용하여 사물이나 벽까지의 거리를 알려주는 센서
- trig (발사하는 부분) + echo (받는 부분) 을 통해 초음파가 일정한 속도(340m/s)로 똑바로 날아감 (단, 경우에 따라 굴절 방향이 달라질 수 있음)
- trig핀의 전압이 HIGH = 초음파 발사
- echo핀의 전압이 HIGH = 초음파가 사물이나 벽을 맞고 돌아옴
- 시간을 거리로 환산하는 방식으로 제어 가능
준비물
- Arduino UNO R3
- 초음파센서 (HC-SRO4)
- 점퍼선
- 브레드보드 (빵판)
- UNO 케이블
- LED 3개
- (권장) 220Ω 저항
아두이노 GND는 브레드보드 - 라인, 아두이노 5V는 브레드보드 + 라인에 연결하여 아두이노의 전원과 브레드보드를 연결합니다
LED의 +극을 구부려 짧은 다리와 길이를 맞춰줍니다
LED를 브레드보드에 꽂아줍니다. 이때 저항이 있다면 저항도 +에 맞게 꽂아줍니다. 저는 급하게 저항이 없는 상황이라 그냥 진행했습니다.
보기 쉽게 색깔에 맞는 선을 점퍼선을 연결해주었습니다. 빨간 LED는 디지털 13번에, 노란 LED는 디지털 10번에, 초록 LED는 디지털 7번에 연결했습니다.
이제 초음파 센서를 연결하겠습니다. 초음파 센서 HC-SRO4는 vcc, trig, echo, gnd 이렇게 4개의 핀으로 이루어져 있습니다.
초음파 센서를 브레드보드에 핀이 서로 연결되지 않는 범위에서 꽂아주었습니다.
초음파 센서의 vcc를 아두이노 5V와 연결된 +라인에 꽂아주었습니다. 그리고 gnd는 아두이노 GND와 연결된 -라인에 꽂아주었습니다. 초음파를 발사하는 trig 핀은 아두이노 디지털 2번과 연결해주었습니다. 마지막으로 초음파를 받아주는 echo핀은 아두이노 디지털 3번과 연결해주었습니다.
여기까지 했으면 초기 세팅은 끝입니다. 이제 코딩으로 넘어가면 됩니다.
int trig = 2, echo = 3;
int red = 13, yellow = 10, green = 7;
자신이 설정한 세팅에 맞게 위와 같이 변수를 저장해줍니다.
void setup() {
Serial.begin(9600);
// 핀모드 설정
pinMode(trig, OUTPUT); // 초음파 발사하는 trig 핀은 OUTPUT
pinMode(echo, INPUT); // 초음파 받아들이는 echo 핀은 INPUT
pinMode(red, OUTPUT); // 빨간 LED
pinMode(yellow, OUTPUT);// 노란 LED
pinMode(green, OUTPUT); // 초록 LED
}
초음파는 눈에 보이지 않기 때문에 시리얼 통신을 설정해주었습니다.
그리고 디지털 핀들을 위와 같이 핀모드로 초기설정 해줍니다.
초음파를 발사하는 trig와 LED들은 OUTPUT, 초음파를 받아들이는 echo는 INPUT으로 설정해줍니다.
void loop() {
float duration, distance; // 초음파 갔다가 돌아오는 시간과 거리 변수
// 초음파 발사
digitalWrite(trig, HIGH); // 초음파 발사
delay(1); // 초음파 발사가 계속되지 않도록 제한
digitalWrite(trig,LOW);
// 초음파가 갔다가 돌아온 시간 저장
duration = pulseIn(echo, HIGH); // trig 핀 HIGH ~ echo 핀 HIGH 사이의 시간 측정
// 시간 → 거리(cm)로 환산
distance = ((float)(duration * 340) / 10000) / 2;
// 시리얼 모니터에 거리 출력
Serial.print("Distance: ");
Serial.print(distance);
Serial.println("cm");
// 거리에 따라 LED 제어
if (distance <= 10){ // 10cm 이내
digitalWrite(green, LOW);
digitalWrite(yellow, LOW);
digitalWrite(red, HIGH); // 빨간 LED on
}else if(distance <= 20){ // 20cm 이내
digitalWrite(green, LOW);
digitalWrite(yellow, HIGH); // 노란 LED on
digitalWrite(red, LOW);
}else {
digitalWrite(green, HIGH); // 초록 LED on
digitalWrite(yellow, LOW);
digitalWrite(red, LOW);
}
}
아두이노로 작성된 코드를 컴파일 해준 후, 오류를 수정해줍니다.
이제 아두이노로 코드를 업로드 해줍니다. (이때, 보드랑 포트 올바른지 확인 필수)
결과물입니다.
장애물이 가까이 접근할수록 빨간불이 들어오고, 멀수록 초록불이 들어오게끔 설정했습니다.
'IT > IoT' 카테고리의 다른 글
[DB] 맥북에 MySQL 설치 및 DB 생성하기 (0) | 2021.04.25 |
---|---|
[아두이노] 아두이노 프로 미니 - 컴퓨터 연결 (1) | 2021.01.11 |
[AI] 딥러닝 기반 우리집 맞춤형 물걸레 청소 로봇! LG 코드제로 M9 ThinQ 출시 (0) | 2020.09.05 |
[아두이노] 초음파센서 측정값을 바탕으로 서보모터 제어하기 (0) | 2020.06.07 |