아두이노:초음파센서: 두 판 사이의 차이
보이기
| (다른 사용자 한 명의 중간 판 22개는 보이지 않습니다) | |||
| 2번째 줄: | 2번째 줄: | ||
==개요== | ==개요== | ||
초음파를 이용하여 일반적으로 거리를 측정한다. 보통 VCC로 5V, 15mA전원을 받고, GND를 접지시킨다. | |||
=== 의미 === | |||
감각을 통한 어림짐작이 아닌, 디지털 장비를 통한 보다 정확하고 객관적인 측정을 위하여. | |||
===원리=== | |||
{| class="wikitable" | |||
!원리 | |||
!설명 | |||
|- | |||
|과학적 원리 | |||
|초음파를 방출한 후, 수신되기까지의 시간을 계산하여 측정한다. | |||
소리의 속도는 <math>v=\sqrt{\tfrac{B}{\rho}}</math> (B는 부피탄성, rho는 밀도)이다. 대충 <math>v=331.5 + 0.61T</math>(T는 섭씨온도)가 된다. ∴상온에선 대강 340m/s 이라고 보면 된다. | |||
거리는 <math>d= (v * time) / 2</math> 이므로 이를 계산해내면 거리를 알 수 있다. | |||
|- | |||
|공학적 원리 | |||
|Trig핀에 5V를 입력해주면 초음파를 낸다. 여기서 나온 초음파는 수신부로 돌아와 Echo핀으로 그 값이 입력된다.(디지털 5V) 이를 이용해 거리를 측정한다. | |||
|} | |||
<br /> | <br /> | ||
=사용법= | |||
==연결방법 및 하드웨어 스펙== | |||
https://www.mfgrobots.com/article/uploadfiles/202204/2022042215404956.png | |||
{| class="wikitable" | |||
!종류 | |||
!설명 | |||
!연결예시 | |||
|- | |||
|HC-SR04 | |||
|5V를 받아 2cm~450cm까지 측정한다. | |||
정밀도: ±3 mm | |||
|[https://postfiles.pstatic.net/MjAxNzAxMDlfMjAw/MDAxNDgzOTQwOTUxNjU3.bH4kF3l7KcGev6_sGRBirdeOFPsHvci5kuYtTXY-y2sg.XOKICjFdglemqkMMdOjJ3rIh0t16ALj3PWGm9za0K90g.JPEG.roboholic84/HC-SR04-Example_bb.jpg?type=w2 링크] | |||
|- | |||
|HC-SR04+ | |||
|HC-SR04과 사용법은 동일. | |||
2~450cm (5V 기준), 2~400cm (3.3V 기준) | |||
조금 더 안정적으로 멀리 | |||
정밀도: ±2 mm | |||
| | |||
|- | |||
|US-015 | |||
|HC-SR04보다 정밀함. 사용법은 위와 동일. | |||
측정 범위: 2~400cm, 정밀도: 약 1mm | |||
| | |||
|- | |||
|US-100 | |||
|등등등 | |||
| | |||
|- | |||
|방수 초음파 거리센서 | |||
|작동 온도: -10~70℃, 최대 측정거리: 약 5m | |||
|[https://mechasolution.com/shop/goods/goods_view.php?goodsno=583208&category= 링크] | |||
|} | |||
= 활동 예시 = | |||
=== 준비물 === | |||
* 아두이노(보통 우노) + 아두이노 우노용 케이스([https://www.thingiverse.com/thing:3366898 링크], 1개 출력에 대략 1시간 생각하면 됨) | |||
* 노트북(아두이노 IDE 설치해 코드 전달용) + USB 연결(R3는 USB B타입, R4는 USB C타입) | |||
* 초음파 센서 | |||
* 점퍼선 암-수 4개 | |||
<youtube>https://www.youtube.com/watch?v=d3_SChekcEI</youtube> | |||
==코드== | |||
===해설 없는 원본=== | |||
<syntaxhighlight lang="c++">int trigPin = 13; | |||
int echoPin = 12; | |||
void setup() | |||
{ | |||
Serial.begin(9600); | |||
pinMode(trigPin, OUTPUT); | |||
pinMode(echoPin, INPUT); | |||
} | |||
void loop() | |||
{ | |||
long duration, distance; | |||
digitalWrite(trigPin, LOW); | |||
delayMicroseconds(2); | |||
digitalWrite(trigPin, HIGH); | |||
delayMicroseconds(10); | |||
digitalWrite(trigPin, LOW); | |||
duration = pulseIn(echoPin, HIGH); | |||
distance = duration * 17 / 1000; | |||
Serial.println(distance); | |||
delay(100); | |||
}</syntaxhighlight> | |||
===해설본=== | |||
<syntaxhighlight lang="c++"> | |||
int trigPin = 13; // trig와 연결되는 핀 번호. | |||
int echoPin = 12; // echo와 연결되는 핀 번호. | |||
void setup() | |||
{ | |||
Serial.begin(9600); | |||
pinMode(trigPin, OUTPUT); | |||
pinMode(echoPin, INPUT); | |||
} | |||
void loop() | |||
{ | |||
// 변수 정의 | |||
long duration, distance; | |||
// trig에서 초음파 발사~ | |||
digitalWrite(trigPin, LOW); | |||
delayMicroseconds(2); | |||
digitalWrite(trigPin, HIGH); | |||
delayMicroseconds(10); | |||
digitalWrite(trigPin, LOW); // 발사 멈추기. | |||
// 거리 계산. | |||
duration = pulseIn(echoPin, HIGH); // 되돌아온 시간을 저장. 단위는 μs. | |||
distance = duration * 17 / 1000; | |||
/* 코드에 17이라는 수가 붙는데, 이는 소리의 속도를 340으로 가정한 후 계산한 값이다. | |||
초음파센서에서 측정된 시간은 음파가 갔다 오기까지의 거리. | |||
- cm단위로 나타내면 34,000cm/s 이다. 거리*2 만큼 측정되고, 거리를 구하기 위해 2로 나누어 17이 나왔다. | |||
- 그런데, duration은 마이크로초 단위이다. 때문에 초단위로 변화시키기 위해 10^-6을 곱한다. | |||
-> 최종적으로 17/1000 | |||
*/ | |||
Serial.println(distance); | |||
delay(100); | |||
} | |||
</syntaxhighlight> | |||
== 생각해볼 만한 것 == | |||
== 해볼 만한 과제 == | |||
*과학적 원리에 대해 조사 발표. | |||
*오차의 원인에 대해 살피기. | |||
*위 코드를 해석, 발표. | |||
*온도센서를 통해 온도값 T를 얻는다면 코드를 어떻게 고치면 좋을까? | |||
*시리얼모니터에 단위가 뜨지 않아 헷갈린다. 단위까지 띄우려면 어떻게 해야 할까? | |||
*이것으로 할 수 있는 활동은 어떤 것들이 있을까?(진자 주기운동이라든가 충돌이라든가 등등등) | |||
=== 여담 === | |||
* 주차장에서 차량 주차 되었는지 어떻게 확인하나 궁금해서 봤더니.. 초음파 센서로 추정되는 것이 있었음. | |||
= 응용 아이디어 = | |||
* 키재기: 바닥에서 천장까지 잰 후에, 머리 위에서 천장까지 측정. | |||
* 쓰레기통: 50cm 이내 등 가까이 다가오면 서보모터 등을 이용해 뚜껑 열리게. 초음파 센서 이용해서 문 사이에 장애물 있으면 문이 안닫히게. | |||
* 문: 초음파 센서를 이용해 문이 여닫힘 여부를 확인하고 문을 닫게끔 명령 혹은 음성 알림. | |||
* 역학실험: 빗면에서 속도, 가속도를 측정해서 기울기, 중력가속도, | |||
2026년 1월 13일 (화) 02:40 기준 최신판
아두이노 관련 정보를 모으기 위한 틀. 틀:아두이노
- 아두이노:개요
- 아두이노:하드웨어
- 아두이노:코드
- 아두이노:핀 사용
- 아두이노:시리얼 통신
- 아두이노:편의함수
- 센서 사용
- 아두이노:LCD 사용
- 아두이노:스위치 사용
- 아두이노:릴레이
- 통신 관련, 정보 교환
- 아두이노:해결되지 않은 다양한 의문들
- 수업용 간단 실습
- 아두이노 모터 출력
- 미완문서
- 아두이노:스테핑 모터(미완)
- 분류:아두이노 프로젝트
초음파를 이용하여 일반적으로 거리를 측정한다. 보통 VCC로 5V, 15mA전원을 받고, GND를 접지시킨다.
감각을 통한 어림짐작이 아닌, 디지털 장비를 통한 보다 정확하고 객관적인 측정을 위하여.
| 원리 | 설명 |
|---|---|
| 과학적 원리 | 초음파를 방출한 후, 수신되기까지의 시간을 계산하여 측정한다.
소리의 속도는 (B는 부피탄성, rho는 밀도)이다. 대충 (T는 섭씨온도)가 된다. ∴상온에선 대강 340m/s 이라고 보면 된다. 거리는 이므로 이를 계산해내면 거리를 알 수 있다. |
| 공학적 원리 | Trig핀에 5V를 입력해주면 초음파를 낸다. 여기서 나온 초음파는 수신부로 돌아와 Echo핀으로 그 값이 입력된다.(디지털 5V) 이를 이용해 거리를 측정한다. |
| 종류 | 설명 | 연결예시 |
|---|---|---|
| HC-SR04 | 5V를 받아 2cm~450cm까지 측정한다.
정밀도: ±3 mm |
링크 |
| HC-SR04+ | HC-SR04과 사용법은 동일.
2~450cm (5V 기준), 2~400cm (3.3V 기준) 조금 더 안정적으로 멀리 정밀도: ±2 mm |
|
| US-015 | HC-SR04보다 정밀함. 사용법은 위와 동일.
측정 범위: 2~400cm, 정밀도: 약 1mm |
|
| US-100 | 등등등 | |
| 방수 초음파 거리센서 | 작동 온도: -10~70℃, 최대 측정거리: 약 5m | 링크 |
- 아두이노(보통 우노) + 아두이노 우노용 케이스(링크, 1개 출력에 대략 1시간 생각하면 됨)
- 노트북(아두이노 IDE 설치해 코드 전달용) + USB 연결(R3는 USB B타입, R4는 USB C타입)
- 초음파 센서
- 점퍼선 암-수 4개
int trigPin = 13;
int echoPin = 12;
void setup()
{
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop()
{
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 17 / 1000;
Serial.println(distance);
delay(100);
}
int trigPin = 13; // trig와 연결되는 핀 번호.
int echoPin = 12; // echo와 연결되는 핀 번호.
void setup()
{
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop()
{
// 변수 정의
long duration, distance;
// trig에서 초음파 발사~
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW); // 발사 멈추기.
// 거리 계산.
duration = pulseIn(echoPin, HIGH); // 되돌아온 시간을 저장. 단위는 μs.
distance = duration * 17 / 1000;
/* 코드에 17이라는 수가 붙는데, 이는 소리의 속도를 340으로 가정한 후 계산한 값이다.
초음파센서에서 측정된 시간은 음파가 갔다 오기까지의 거리.
- cm단위로 나타내면 34,000cm/s 이다. 거리*2 만큼 측정되고, 거리를 구하기 위해 2로 나누어 17이 나왔다.
- 그런데, duration은 마이크로초 단위이다. 때문에 초단위로 변화시키기 위해 10^-6을 곱한다.
-> 최종적으로 17/1000
*/
Serial.println(distance);
delay(100);
}
- 과학적 원리에 대해 조사 발표.
- 오차의 원인에 대해 살피기.
- 위 코드를 해석, 발표.
- 온도센서를 통해 온도값 T를 얻는다면 코드를 어떻게 고치면 좋을까?
- 시리얼모니터에 단위가 뜨지 않아 헷갈린다. 단위까지 띄우려면 어떻게 해야 할까?
- 이것으로 할 수 있는 활동은 어떤 것들이 있을까?(진자 주기운동이라든가 충돌이라든가 등등등)
- 주차장에서 차량 주차 되었는지 어떻게 확인하나 궁금해서 봤더니.. 초음파 센서로 추정되는 것이 있었음.
- 키재기: 바닥에서 천장까지 잰 후에, 머리 위에서 천장까지 측정.
- 쓰레기통: 50cm 이내 등 가까이 다가오면 서보모터 등을 이용해 뚜껑 열리게. 초음파 센서 이용해서 문 사이에 장애물 있으면 문이 안닫히게.
- 문: 초음파 센서를 이용해 문이 여닫힘 여부를 확인하고 문을 닫게끔 명령 혹은 음성 알림.
- 역학실험: 빗면에서 속도, 가속도를 측정해서 기울기, 중력가속도,