초음파 센서의 기초 개념에 대해 살펴보고 초음파 센서를 이용한 거리를 측정해본다.
1. 회로도 구성
- HC-SR04 초음파 센서는 신호발생신호인 Trigger와 수신신호인 Echo를 아래와 같이 연결한다.전원은 아두이노의 5V 전원을 연결해서 사용한다.
TRIG : A4
ECHO : A3
2. 기초개념
1) 초음파센서
- 초음파 센서는 초음파를 발사하고 장애물에서 반사된 신호를 수신하여 물체의 형태를 보거나 거리를 측정하는데 사용
- 초음파는 물 속에서 전달이 잘 되는 특성이 있어 잠수함이나 해상 선박에 많이 사용
- 초음파센서의 신호
Trigger: 초음파 센서에 송신의 시작을 알리는 신호, 10us 펄스폭을 가지는 신호를 초음파 모듈로 보냄
Echo: 송신 시작에서 반사후 수신된 신호까지의 시간을 펄스 형태의 신호로 발생
품명 | HC-SR04 |
동작 전압 | 5V |
소모 전류 | 15mA |
동작 주파수 | 40KHz |
측정거리 | 2~400cm |
2) 초음파 센서를 이용한 거리측정
- 초음파 대역은 20kHz이상의 주파수를 말함
- 초음파 센서의 거리측정 방법
① 10us 펄스폭을 가지는 Trigger 신호를 초음파 모듈로 보냄
② 초음파 센서는 40Khz 주기의 펄스 8개를 burst 형태로 송신함
③ 물체에서 반사된 펄스들이 초음파 센서로 수신됨
④ 초음파 센서는 송신부터 수신된 시간에 해당되는 펄스폭을 Echo 신호로 출력함
* 거리 계산하는 방법
- 초음파 센서에서 왕복거리에 해당되는 시간을 알게 되면 음파의 속도는 대략 340m/s이므로 아래 식을 이용하여 거리를 측정할 수 있음
- 초음파 센서가 측정하는 거리는 2~400cm로 짧은 거리만 측정이 가능하므로 속도의 단위를 34000/1000000 cm/us으로 변경할 수 있음
3. 소스코드
/*****************************************************/ /* Project : Arduino Basic Training Course /* Title : 08_UltraSensor /* Descript : Range measurement using ultra sensor /* Platform : Arduion UNO /* IDE: Arduino Sketch 1.6/1.8 or vMicro /* Author : Imported by Arduino example /* History : Rev 1.0 2020.02.11 - Initial release /* /*****************************************************/ #include #include // modify I2C address after finding your I2C address LiquidCrystal_I2C lcd(0x27, 16, 2); #define TRIG_PIN 4 #define ECHO_PIN 3 #define TIME 10 #define USEC_PER_CENTIMETER 2941.17647 // 1000000/340 #define LED_PIN 13 int tau = 0; float Range = 0.0; void setup() { pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); pinMode(LED_PIN, OUTPUT); Serial.begin(9600); lcd.init(); lcd.backlight(); lcd.clear(); lcd.setCursor(0,0); lcd.print("UltraSensor Test"); } void loop() { digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(TIME); digitalWrite(TRIG_PIN, LOW); tau = pulseIn(ECHO_PIN, HIGH); Range = (float)(tau/USEC_PER_CENTIMETER/2); Serial.print("Range = "); Serial.print(Range); Serial.println("m"); lcd.setCursor(0,1); lcd.print(" Range : +"); lcd.print(Range); lcd.print("m "); } |
'엔지니어링 > 임베디드' 카테고리의 다른 글
[STM32] printf를 시리얼로 출력하기 (2) | 2020.03.06 |
---|---|
[아두이노 기초] 타이머 제어 (1) | 2020.02.18 |
[아두이노 기초] SPI 통신 (0) | 2020.02.12 |
[아두이노 기초] 시리얼 통신 (0) | 2020.02.11 |
[아두이노 기초교육] I2C 통신을 이용한 LCD 제어 (0) | 2020.02.02 |
댓글