이번 튜토리얼에서는 실외 사용에 적합한 몇 가지 초음파 거리 센서를 살펴볼 것입니다. 이전에 사용했던 초음파 거리 센서와 달리 오늘 소개하는 센서는 방수 기능이 있어 물속이나 야외에서 사용이 가능합니다.
HC-SR04 초음파 거리 센서를 여러 번 사용 했으며 여러 가지 좋은 이유가 있습니다. 그것은 사용하기 매우 쉽고 성능이 좋으며 매우 저렴합니다. 실내에서 사용하는 한 충돌 회피 로봇 또는 침입자 감지의 경우 일반적으로 이 센서만 있으면 됩니다.
방수 초음파 거리 센서
그러나 외부에서 HC-SR04를 사용하는 것은 다른 이야기입니다. 그것은 매우 깨지기 쉬운 장치이며 먼지나 강한 바람에도 쉽게 손상될 수 있습니다. 그리고 무엇보다 방수가 안됩니다. 회로 기판을 밀봉해도 회로 기판이 보호되지 않습니다. 사용하는 두 개의 변환기는 본질적으로 작은 스피커/마이크일 뿐입니다.
그러나 가혹한 환경에서 실제로 작동하는 몇 가지 초음파 거리 센서가 있으므로 두려워하지 마십시오. 물에 젖어도 계속 작동하며 먼지와 흙에 영향을 받지 않습니다.
이러한 센서를 사용하여 실외 로봇을 구축하거나 침입자를 감지하거나 차량에 대한 백업 경보 역할을 할 수 있습니다. 그리고 확실히 HC-SR04만큼 저렴하지는 않지만 그렇게 비싸지는 않습니다. 이 센서 중 두 가지를 살펴보고 어떻게 작동하는지 봅시다.
센서 비교
오늘 우리가 보고 있는 두 개의 센서인 JSN-SR04T와 A02YYUW는 서로 상당히 다르게 보입니다. 그러나 둘 다 동일한 작동 원리를 사용합니다. JSN-SR04T에 대해서는 이전에 포스팅 한 자료가 있습니다. 참고하셔도 되고 이곳에 새로운 설명을 참고하셔도 됩니다.
JSN-SRT04T | A02YYUW |
초음파 거리 센서의 작동 원리
이러한 센서의 작동은 다음과 같이 요약됩니다. Transdusers 변환기는 기계적 진동을 전기 에너지로 변환하거나 전기 에너지를 기계적 진동으로 변환할 수 있는 장치의 멋진 이름입니다. 변환기의 두 가지 일반적인 예는 마이크와 스피커입니다.
초음파 거리 센서는 일반적으로 40KHz의 초음파 주파수에서 작동할 수 있는 변환기를 사용합니다. HC-SR04 또는 A02YYUW와 같은 일부는 별도의 변환기를 사용하여 사운드 펄스를 보내고 받습니다. JSN-SRT04T와 같은 다른 제품은 송신기와 수신기 역할을 할 수 있는 변환기를 하나만 사용합니다.
Ultrasonic Pulses 초음파 펄스
작동 시 초음파 센서는 초음파 펄스를 전송한 다음 다시 반사되는지 확인합니다. 그렇다면 전송과 수신 사이의 시간 지연이 측정됩니다. 이 시간 지연은 소리를 반사한 물체까지의 거리를 계산하는 데 사용할 수 있습니다.
거리를 계산하려면 먼저 시간 지연을 반으로 나누어야 합니다. 시간 지연은 초음파 펄스의 왕복 이동을 나타내기 때문입니다. 그런 다음 소리의 속도(초당 343미터)에 시간 지연을 곱하여 소리를 반사한 물체가 변환기에서 얼마나 멀리 떨어져 있는지 확인합니다.
음속은 일정하지 않으며 기압, 온도 및 습도에 따라 달라질 수 있습니다. HC-SR04 기사에서 했던 것처럼 추가 센서를 사용하여 이를 고려하는 것이 가능하지만 오늘은 그렇게 하지 않습니다. 물론 원하는 경우 자신의 스케치에 이 기능을 추가할 수 있습니다.
JSN-SR04T
JSN-SR04T는 별도의 인쇄 회로 기판과 센서 유닛으로 제공된다는 점에서 흥미로운 센서입니다. 송신기와 수신기 역할을 하는 단일 장치인 센서는 2미터 케이블을 사용하여 PCB에 부착됩니다. JSN-SRT04T의 또 다른 흥미로운 측면은 6가지 다른 작동 모드에서 실행할 수 있다는 것입니다.
JSN-SR04T 모드 선택
모드 선택은 두 가지 방법으로 수행됩니다.
- 모드 0은 센서를 구입할 때 구성되는 방식이므로 아무 것도 할 필요가 없습니다.
- 모드 1과 2는 PCB 전면의 일부 트레이스를 연결하여 선택됩니다.
- 모드 3, 4 및 5는 PCB의 일부 트레이스에 저항을 배치하여 선택됩니다. 저항 값은 모드를 결정합니다.
JSN-SRT04T가 작동할 수 있는 6가지 모드는 다음과 같습니다.
모드 0 – HC-SR04 에뮬레이션
기본 모드인 모드 0에서 센서는 널리 사용되는 HC-SR04 초음파 거리 센서의 대체품으로 작동합니다. 핀아웃은 동일하며 본질적으로 HC-SR04의 드롭인 교체품입니다. 덧붙여서, 많은 사람들이 그 모드를 사용하여 간헐적인 결과가 있었고 NewPing과 같은 인기 있는 HC-SR04 라이브러리와 잘 작동하지 않는 것 같다고 보고했습니다. 트리거 펄스의 길이를 일반 10us에서 20us로 늘리면 센서가 더 안정적으로 작동한다는 것을 알았습니다. 이 문서 뒷부분의 모드 0에 대한 예제에서는 이 기술을 사용합니다.
모드 1 – 직렬 데이터
모드 1에서 센서는 자체적으로 거리를 계산하는데, 이는 마이크로컨트롤러에서 이 작업을 덜어주기 때문에 훌륭합니다. 결과는 9600 보드(8비트 및 1 정지 비트)에서 직렬 데이터로 전송됩니다. 이 모드는 "M1" 지점에 점퍼 또는 솔더 덩어리를 배치하여 활성화됩니다. "모드" 지점에 걸쳐 47k 저항을 사용하여 센서를 모드 1로 설정할 수도 있습니다. 이 데이터의 형식은 아래 첨부파일을 참고하세요.
JSN-SR04T 직렬 프로토콜
센서가 보낸 4바이트 데이터는 다음과 같습니다.
- 바이트 0 – 헤더 – 이것은 항상 16진수 FF 값이며 데이터 블록의 시작을 나타냅니다.
- 바이트 1 – 데이터 1 – 거리 값이 밀리미터 단위인 16비트 데이터의 하이 엔드.
- 바이트 2 – 데이터 0 – 16비트 데이터의 최하위.
- 바이트 3 – 체크섬 – 이전 세 바이트의 추가. 하위 8비트만 여기에 보관됩니다.
체크섬은 데이터의 유효성을 검사하는 데 사용되며 동일한 수학(D0 + D1 + D2)을 수행하고 하위 8비트를 가져와 수신된 체크섬과 비교합니다. 다르면 데이터가 손상된 것입니다.
모드 2 – UART 제어 출력
모드 1과 마찬가지로 이 모드는 이전에 설명한 것과 동일한 형식을 사용하여 직렬 데이터도 전송합니다. 그러나 모드 2에서는 데이터를 요청해야 합니다. 데이터 요청은 센서의 RX 핀에 16진수 55자를 전송하여 이루어집니다. 센서가 이 요청을 받으면 거리를 측정하고 결과를 다시 보냅니다. M2 지점에 점퍼를 배치하여 모드 2에 들어가고 "모드" 지점에 걸쳐 120K 저항으로 활성화할 수도 있습니다.
모드 3 – 자동 PWM
모드 3에서 센서는 트리거 신호를 제공할 필요가 없다는 점을 제외하고는 HC-SR04처럼 작동합니다. 대신 센서는 200ms마다 자체 트리거 신호를 제공합니다. HC-SR04에서와 동일한 방식으로 Echo 핀의 데이터를 읽습니다. 모드 3은 "모드" 핀에 200K 저항을 배치하여 활성화됩니다.
모드 4 – 저전력 HC-SR04
모드 4에서 센서는 다시 한 번 HC-SR04로 작동하지만 훨씬 적은 전류를 사용합니다. 이는 센서의 내부 감시 타이머를 비활성화하여 유휴 전류 소비를 70uA 미만으로 줄임으로써 달성됩니다. 모드 4는 "모드" 핀에 360K 저항을 배치하여 활성화됩니다.
모드 5 – 스위칭 출력
모드 5는 JSN-SRT04T를 1.5미터 거리에 미리 설정된 스위치로 전환합니다. 이 범위 내에서 물체가 감지되면 Echo 핀은 HIGH가 되고, 그렇지 않으면 LOW가 유지됩니다. 실제 거리 판독 값은 반환되지 않습니다. 이 모드는 침입자를 감지하거나 차량에 대한 백업 경보로 유용할 수 있습니다. 모드 5는 "모드" 핀에 470K 저항을 배치하여 활성화됩니다.
A02YYUW
A02YYUW는 별도의 수신기와 송신기가 있다는 점에서 HC-SR04와 약간 유사한 초음파 거리 센서입니다. 장치는 고무와 같은 재질로 둘러싸여 있으며 완전히 방수됩니다. 모양에도 불구하고 이 센서는 HC-SR04와 호환되지 않습니다. 대신 JSN-SRT04T와 정확히 동일한 형식으로 직렬 데이터를 보냅니다. 센서 모듈에는 짧은 케이블 끝에 4핀 커넥터가 있으며 핀 배치는 다음과 같습니다.
A02YYUW SPECIFICATION
- Operating Voltage: 3.3~5V
- Average Current: <8mA
- Blind Zone Distance: 3cm
- Detecting Range(Flat object): 3-450cm
- Output: URAT
- Response Time:100ms
- Operating Temperature: -15~60℃
- Storage Temperature: -25~80℃
- Reference Angle: 60º
- Waterproof Grade: IP67
Beam Directionalities Diagram
Diemension Diagram
A02YYUW 핀아웃
장치의 데이터는 TX 핀을 사용하여 전송되며 전원 공급 장치와 동일한 논리 레벨에 있으며 3.3V 또는 5V 일 수 있습니다.
RX 핀은 데이터 출력을 제어하는 데 사용됩니다. HIGH로 유지되거나 연결되지 않은 경우(내부적으로 풀업됨) 300ms마다 작동합니다. RX 핀이 LOW로 유지되면 데이터는 100ms마다 출력됩니다. 300ms 속도가 더 안정적인 것으로 간주되므로 100ms마다 데이터를 다시 보내야 하는 경우가 아니면 이 핀을 HIGH로 묶거나 그냥 두는 것이 좋습니다.
JSN-SR04T 실습
이제 센서를 사용할 준비가 되었습니다. JSN-SRT04T부터 시작하여 모드 0과 모드 1 모두에서 테스트합니다. 두 모드의 연결은 동일하며 다음과 같이 표시됩니다.
JSN-SR04T 연결
모드 0 테스트
센서를 모드 0으로 설정하려면 센서가 배송된 구성이므로 아무 작업도 수행할 필요가 없습니다. 우리가 사용할 코드는 HC-SR04에 대해 이전에 사용한 코드와 본질적으로 동일하며, 이는 모드 0이 HC-SR04를 에뮬레이트하는 모드이기 때문에 의미가 있습니다. 그러나 한 가지 변경 사항은 트리거 펄스의 펄스폭을 20us로 늘렸다는 것입니다. 그렇게 하면 더 안정적이라는 것을 알게 되었기 때문입니다. 아래 코드는 스케치 코드입니다. 코드 출처는 여기를 참고하세요.
/*
JSN-SR04T-V3.0 Ultrasonic Sensor - Mode 0 Demo
srt04-mode0.ino
Uses JSN-SR04T-V3.0 Ultrasonic Sensor
Displays on Serial Monitor
Mode 0 is default mode with no jumpers or resistors (emulates HC-SR04)
DroneBot Workshop 2021
https://dronebotworkshop.com
*/
// Define connections to sensor
#define TRIGPIN 11
#define ECHOPIN 10
// Floats to calculate distance
float duration, distance;
void setup() {
// Set up serial monitor
Serial.begin(115200);
// Set pinmodes for sensor connections
pinMode(ECHOPIN, INPUT);
pinMode(TRIGPIN, OUTPUT);
}
void loop() {
// Set the trigger pin LOW for 2uS
digitalWrite(TRIGPIN, LOW);
delayMicroseconds(2);
// Set the trigger pin HIGH for 20us to send pulse
digitalWrite(TRIGPIN, HIGH);
delayMicroseconds(20);
// Return the trigger pin to LOW
digitalWrite(TRIGPIN, LOW);
// Measure the width of the incoming pulse
duration = pulseIn(ECHOPIN, HIGH);
// Determine distance from duration
// Use 343 metres per second as speed of sound
// Divide by 1000 as we want millimeters
distance = (duration / 2) * 0.343;
// Print result to serial monitor
Serial.print("distance: ");
Serial.print(distance);
Serial.println(" mm");
// Delay before repeating measurement
delay(100);
}
코드는 매우 간단하며 이미 HC-SR04를 사용한 적이 있다면 어떻게 작동하는지 이미 알고 있을 것입니다. Arduino에 대한 연결을 정의하는 것으로 시작합니다. 또한 시간 지연의 지속 시간과 계산된 거리를 나타내기 위해 몇 개의 부동 소수점을 정의합니다. 설정에서 직렬 모니터를 설정하고 두 연결에 대한 핀 모드를 정의합니다.
몇 마이크로초 동안 트리거를 LOW로 전환한 다음 20 마이크로초 동안 HIGH로 올렸다가 다시 낮추어 루프를 시작합니다. 이것은 센서가 초음파 펄스를 방출하도록 트리거합니다. 그런 다음 Echo 핀을 모니터링하여 수신된 펄스의 펄스폭을 결정합니다. 들어오는 펄스가 높게 유지되는 시간을 측정하는 Arduino pulseIn 기능을 사용하여 이를 수행합니다.
그런 다음 결과를 밀리미터 단위로 원하는 대로 음속을 1000으로 나눈 값을 곱합니다. 마지막으로 결과를 직렬 모니터에 인쇄합니다. 그런 다음 100ms 지연을 적용하여 센서가 안정화되고 모든 작업을 다시 수행합니다. 스케치를 Arduino에 로드하고 직렬 모니터를 엽니다. 전송 속도는 115,200으로 설정되어 있습니다. 이제 센서를 움직이면서 모니터를 관찰하십시오. 이 센서를 사용할 때 알 수 있는 한 가지는 최소 범위인 약 20 – 30cm(200 – 300mm)에 도달하면 잘못된 판독 값을 표시한다는 것입니다. 더 긴 범위에서는 꽤 잘 작동합니다.
펄스를 보낸 후 장치를 수신 모드로 전환해야 하기 때문에 제한된 최소 범위가 단일 변환기의 사용으로 인한 것이라고 생각합니다.
모드 1 테스트
모드 1 테스트는 이전 테스트와 동일한 연결을 사용하지만 먼저 센서를 모드 1로 설정해야 합니다. 센서 PCB의 "m1" 패드를 연결하여 이를 수행합니다. 다음은 모드 1에서 JSN-SRT04T의 데이터를 읽는 데 사용할 스케치입니다.
/*
JSN-SR04T-V3.0 Ultrasonic Sensor - Mode 1 Demo
srt04-mode1.ino
Uses JSN-SR04T-V3.0 Ultrasonic Sensor
Displays on Serial Monitor
Mode 1 is set by bridging "M1" pads on board
Also works with A02YYUW Ultrasonic Sensor
DroneBot Workshop 2021
https://dronebotworkshop.com
*/
// Include the Software Serial library
#include <SoftwareSerial.h>
// Define connections to sensor
int pinRX = 10;
int pinTX = 11;
// Array to store incoming serial data
unsigned char data_buffer[4] = {0};
// Integer to store distance
int distance = 0;
// Variable to hold checksum
unsigned char CS;
// Object to represent software serial port
SoftwareSerial mySerial(pinRX, pinTX);
void setup() {
// Set up serial monitor
Serial.begin(115200);
// Set up software serial port
mySerial.begin(9600);
}
void loop() {
// Run if data available
if (mySerial.available() > 0) {
delay(4);
// Check for packet header character 0xff
if (mySerial.read() == 0xff) {
// Insert header into array
data_buffer[0] = 0xff;
// Read remaining 3 characters of data and insert into array
for (int i = 1; i < 4; i++) {
data_buffer[i] = mySerial.read();
}
//Compute checksum
CS = data_buffer[0] + data_buffer[1] + data_buffer[2];
// If checksum is valid compose distance from data
if (data_buffer[3] == CS) {
distance = (data_buffer[1] << 8) + data_buffer[2];
// Print to serial monitor
Serial.print("distance: ");
Serial.print(distance);
Serial.println(" mm");
}
}
}
}
우리가 사용하는 Arduino Uno에는 USB 연결에서 이미 사용 중인 직렬 포트가 하나만 있으므로 SoftwareSerial 라이브러리를 사용하여 다른 포트를 만듭니다. SoftwareSerial은 Arduino IDE에 내장된 라이브러리이므로 아무것도 설치할 필요가 없습니다. 핀 연결을 정의하고 4개의 요소가 있는 배열도 정의합니다. 이러한 요소는 초음파 센서의 데이터에서 바이트를 유지하는 데 사용됩니다. 또한 거리와 체크섬 값을 유지하는 변수를 정의하고 직렬 포트를 나타내는 개체를 만듭니다. 설정에서 직렬 포트와 SoftwareSerial 포트를 모두 초기화합니다.
이제 루프로 이동하여 SoftwareSerial 포트에서 데이터를 수신하고 있는지 확인합니다. 데이터를 감지하면 안정화를 위해 약간의 지연을 적용합니다. 그런 다음 헤더 바이트를 나타내는 16진수 FF를 찾습니다. 헤더 바이트가 발견되면 배열의 첫 번째 요소에 저장합니다. 그런 다음 나머지 배열 요소에 다음 3바이트를 계속 저장합니다.
이제 전체 데이터 패킷이 있으므로 처음 세 개의 배열 요소를 함께 추가하고 그 결과를 초음파 센서에서 계산한 체크섬을 전달하는 네 번째 요소와 비교하여 체크섬을 계산합니다. 이것이 일치하면 데이터가 양호한 것입니다. 좋은 데이터가 있으면 두 번째 및 세 번째 배열 요소를 결합하여 값을 얻은 다음 직렬 모니터에 인쇄합니다. 스케치를 로드하고 결과를 관찰합니다. 모드 1에서 JSN-SRT04T를 사용하여 얻은 결과와 유사해야 합니다.
A02YYUW 사용
이 센서는 직렬 데이터만 출력하며 모드 1의 JSN-SRT04T와 똑같은 형식을 사용합니다. 따라서 연결한 후 이전 스케치를 사용하여 데이터를 읽을 수 있습니다. 다음은 Arduino Uno와 A02YYUW의 연결입니다.
보시다시피 JSN-SRT04T에 대해 사용한 것과 동일한 연결을 A02YYUW에 사용했습니다. 따라서 위의 모드 1 스케치와 함께 센서를 변경 없이 사용할 수 있습니다. 연결하고 스케치를 로드했으면 테스트해 보십시오. JST-SRT04T보다 훨씬 더 가까운 거리에서 사용할 수 있다는 것을 즉시 알 수 있습니다. 약 3cm까지 좋습니다.
초음파 거리 센서 실외 테스트
내 실험은 어떤 면에서도 과학적이지 않았고 반드시 정확하지도 않았습니다. 그러나 이 센서가 야외에서 어떻게 작동하는지에 대한 아이디어를 제공하는 것으로 충분했습니다. 비를 시뮬레이션하기 위해 센서 표면을 적신 후 테스트를 반복했습니다. Arduino 또는 노트북 컴퓨터에 물을 주지 않도록 매우 조심했습니다! 결과는 꽤 좋았습니다. 물이 수치에 거의 영향을 미치지 않는다는 사실에 특히 기뻤습니다. 여기 내 판독 값이 있습니다. 다시 한 번 내 조잡한 테스트 설정이 정확도에 영향을 미쳤을 수 있음을 기억하십시오.
초음파 센서 실외 테스트 결과
보시다시피 두 센서는 모든 거리에서 잘 수행되었습니다. 100% 정확하지는 않지만 로봇 공학, 자동차 또는 침입자 탐지 애플리케이션에는 충분합니다. 이 측정을 수행했을 때의 온도가 섭씨 14도였다는 점도 주목할 가치가 있습니다. 음속은 온도의 영향을 받으므로 내 결과에 영향을 미쳤을 것입니다. 또한 마당의 크기가 작기 때문에 최대 범위를 결정할 수 없었습니다. 이러한 장치 중 하나는 실외 응용 프로그램에서 잘 작동합니다.
수중 테스트
이 마지막 테스트는 정말 약간의 농담이었고 결과를 얻을 수 있을지 확신이 없었습니다. 그리고 나는 하지 않았다는 것이 밝혀졌습니다! 이 센서가 물에 완전히 잠겨 있는 동안 판독 값을 제공할 수 있는지 확인하고 싶었습니다. 그리고 저는 수영장을 소유하고 있지 않기 때문에 제가 이용할 수 있는 가장 큰 수역은 욕조였습니다! 물론 수중 음속이 공중에서와 매우 다르기 때문에 정확한 결과를 기대하지는 않았습니다. 그러나 나는 욕조 주위에서 센서를 움직일 때 적어도 판독값의 변화를 보기를 바랐습니다.
거리 센서 수중 테스트
불행히도 실험은 적어도 읽기에 관한 한 실패였습니다. 각 센서는 내가 아무리 움직여도 고정된 판독값을 제공했습니다. 그러나 테스트의 한 가지 긍정적인 측면은 센서가 물에서 추출되자마자 완벽하게 작동했다는 것입니다. 그래서 물에 완전히 잠기는 것은 그들에게 아무런 영향을 미치지 않았습니다. 그것은 확실히 한 가지를 증명했습니다. 이 두 센서 모두 실제로 방수가 됩니다!
결론
방수가 되는 초음파 거리 센서가 필요한 경우 이러한 장치 중 하나가 탁월한 선택이 될 것입니다. 둘 다 잘 수행되었으며 열악한 환경에 대한 평가를 받았습니다. 그러나 HC-SR04보다 비싸므로 견고한 방수 센서가 필요하지 않다면 후자가 여전히 더 경제적인 선택입니다. 내가 만들고 있는 로봇 공학 프로젝트(야외 "로버" 스타일의 로봇)를 위해 A02YYUW 센서를 사용하기로 결정했습니다. A02YYUW 센서가 더 가까운 항목을 분석할 수 있기 때문입니다. 또한 모든 전자 장치가 자체 포함되어 있어 작업이 더 쉬울 것입니다. 그러나 JSN-SRT04T도 좋은 선택이 될 것입니다. 이 기사와 관련 비디오가 실외 애플리케이션에 가장 적합한 센서를 결정하는 데 도움이 되기를 바랍니다.
자원
코드 샘플 - 이 기사에서 사용된 Arduino 코드입니다.
JSN-SR04T - 제조업체 사양 시트 아래 첨부한 파일입니다. 개정 2에 대한 것이며, 포스팅에는 개정 3을 사용했습니다.
참고
DFR Robot SKU: SEN0311 어플리케이션 노트
'개발자 > Arduino' 카테고리의 다른 글
Adafruit Feather nRF52840 Express 02. Hardware 설계와 참고자료 (0) | 2021.12.08 |
---|---|
Adafruit Feather nRF52840 Express 01. 소개 (0) | 2021.12.06 |
Arduino 와 Processing 나침반 만들기 (0) | 2021.11.11 |
Adafruit TCS34725 컬러 센서로 빛과 색상 측정 (0) | 2021.11.01 |
Nano 33 IoT HC-SR04 거리 센서 코드 (6) | 2021.10.09 |
LPS22HB 압력 센서 아두이노 실습하기 (0) | 2021.10.06 |
아두이노를 활용한 스마트 기기 제어 시스템 개발 교육과정 (0) | 2021.09.08 |
아두이노 INA219 DC 전류 센서 사용하기 (0) | 2021.07.25 |
더욱 좋은 정보를 제공하겠습니다.~ ^^