본문으로 이동

아두이노:초음파센서

학교의 모든 지식. SMwiki

아두이노 관련 정보를 모으기 위한 틀. 틀:아두이노

  1. 아두이노:개요
  2. 아두이노:하드웨어
    1. 아두이노:우노보드
    2. 아두이노:ESP32
  3. 아두이노:코드
    1. 아두이노:컴퓨터에서 보드로
    2. 아두이노:안드로이드에서 보드로
    3. 아두이노:기초 문법
    4. 아두이노:라이브러리
  4. 아두이노:핀 사용
    1. 아두이노:전원공급
  5. 아두이노:시리얼 통신
    1. 아두이노:엑셀기록
    2. 아두이노:파이썬과 통신
  6. 아두이노:편의함수
  7. 센서 사용
    1. 아두이노:모션센서
    2. 아두이노:온습도센서
    3. 아두이노:조도센서
    4. 아두이노:인체감지센서
    5. 아두이노:pH미터 만들기(Gravity 아날로그 pH센서)
  8. 아두이노:LCD 사용
  9. 아두이노:스위치 사용
  10. 아두이노:릴레이
  11. 통신 관련, 정보 교환
    1. 아두이노:WIFI
    2. 아두이노:블루투스(외장모듈)
    3. 아두이노:IR 송수신
    4. 아두이노:RFID
  12. 아두이노:해결되지 않은 다양한 의문들
  13. 수업용 간단 실습
    1. 아두이노:LED
    2. 아두이노:초음파센서
    3. 아두이노:전압계 만들기
    4. 아두이노:저항계 만들기
  14. 아두이노 모터 출력
    1. 아두이노:서보 모터
    2. 아두이노:DC 모터
    3. 아두이노:BLDC 모터
  15. 미완문서
    1. 아두이노:스테핑 모터
  16. 분류:아두이노 프로젝트

초음파를 이용하여 일반적으로 거리를 측정한다. 보통 VCC로 5V, 15mA전원을 받고, GND를 접지시킨다.

감각을 통한 어림짐작이 아닌, 디지털 장비를 통한 보다 정확하고 객관적인 측정을 위하여.

원리 설명
과학적 원리 초음파를 방출한 후, 수신되기까지의 시간을 계산하여 측정한다.

소리의 속도는 v=Bρ (B는 부피탄성, rho는 밀도)이다. 대충 v=331.5+0.61T(T는 섭씨온도)가 된다. ∴상온에선 대강 340m/s 이라고 보면 된다.

거리는 d=(v*time)/2 이므로 이를 계산해내면 거리를 알 수 있다.

공학적 원리 Trig핀에 5V를 입력해주면 초음파를 낸다. 여기서 나온 초음파는 수신부로 돌아와 Echo핀으로 그 값이 입력된다.(디지털 5V) 이를 이용해 거리를 측정한다.


사용법

[편집 | 원본 편집]

연결방법 및 하드웨어 스펙

[편집 | 원본 편집]

2022042215404956.png

종류 설명 연결예시
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를 얻는다면 코드를 어떻게 고치면 좋을까?
  • 시리얼모니터에 단위가 뜨지 않아 헷갈린다. 단위까지 띄우려면 어떻게 해야 할까?
  • 이것으로 할 수 있는 활동은 어떤 것들이 있을까?(진자 주기운동이라든가 충돌이라든가 등등등)