이번에 구입한 초음파센서는 가격이 약간 높은 제품입니다ㅎ

하지만 그만큼 측정거리도 길고~ 필터도 내장되어있어서 믿을만합니다^^

http://vctec.co.kr/front/php/product.php?product_no=538&main_cate_no=136&display_group=1



제품설명

HRXL-MaxSonar-WRC 센서는 매우 컴팩트한 형태의 인기있는 초음파 거리측정기 입니다. 만약 크기나 무게에 제한이 없으시다면 비슷한 HRXL-MaxSonar-WR 제품을 검토하여 보십시오.

HRXL-MaxSonar-WRC 센서는 튼튼한 초음파 센서 모듈로 PVC 하우징되어 있으며, 매우 짧은 거리에서 먼거리까지 탐지가 가능한 제품입니다. 이 센서는 IP67 등급의 방수방진 지수를 가지고 있으며, 표준 3/4 인치 전자용 PVC 파이프와 사용이 가능합니다.

높은 음향 출력은 계속적으로 변경되는 gain, 실시간 백그라운드 자동 보정, 실시간 웨이브폼 signature 분석과 함께 결합되면서 사실상 노이즈를 신경쓰지 않고 데이터를 읽을 수 있습니다. 다양한 소리나 전기적인 노이즈가 있는 경우에도 거리 측정이 가능합니다. HRXL‑MaxSonar‑WRC센서 제품군은 공장에서 센서 빔 패턴에 대한 보정을 하였으며 먼 거리에 대한 검출 능력을 제공합니다.

MB7360 은 본 센서의 표준형 버전입니다.
MB7387 은 본 센서의 TTL serial 출력 버전입니다.

제품 개요

  • 분해능: 1 mm
  • 읽기속도: 7.5Hz reading rate(MB7360, MB7380)
  • 빌트인 온도 보정 기능
  • 거리측정용 42kHz 초음파 센서
  • RoHS Compliant
  • 세개의 센서 출력(Analog Voltage, Serial, Pulse Width)에서 데이터 읽음
  • 사실상 데드존이 없음. 30cm보다 가까운 물체는 30cm로 표시함
  • 최대 측정거리: 5000mm
  • 동작전압: 2.7-5.5V
  • 저전력: 2.9mA
  • 작고 가벼운 크기
  • 타켓에 쉽게 연결할 수 있도록 디자인 됨
  • 동작온도: -40˚C to +65˚C
  • 전압, 습도, 노이즈에 대한 실시간 자동 보정
  • 좀더 낳은 노이즈 tolerance와 clutter reject을 위한 펌웨어 필터링
  • 방수방진지수: IP67, Chemical Resistant F-Option (옵션임)
  • 표준 전기 3/4 인치 PVC 파이프와 쉽게 연결
  • 길고 얇은 빔 패턴
  • RS232 Serial 출력

방수방진(IP67) 센서 제품 및 Optional Chemical Resistance

산업용 실외용 HRXL-MaxSonar-WRC 센서 제품군은 방수방진지수 IP67을 만족시키기 위하여 강한 PVC 하우징으로 디자인되었습니다.본 센서들은 짧은 거리에서 먼거리까지 좁은 빔 패턴을 통하여 탐지를 할 수 있습니다. HRXL-MaxSonar-WRC 실외용 초음파 센서는 높은 출력 전력을 가지고 있으며, noise rejection, auto calibration, factory calibrated beam pattern을 가지고 있습니다. 사용자는 어플리케이션에 맞는 출력방법과 필터를 가진 센서를 선택할 수 있습니다. analog voltage 출력, serial digital 출력, pulse width 출력 이나 real-time analog envelope 출력을 가진 모델들을 선택할 수 있습니다.

또 몇몇 위험한 화학적 환경에서 제품을 보호하기 위한 F-Option 을 제공합니다. 매우 부식성이 높은 가스나 액체는 센서의 동작을 저하 시킬 수 있어 이러한 옵션은 극단적인 안좋은 화학적 환경을 제외하고 센서가 정상적으로 동작할 수 있다록 만들어 주며, 또한 습기나 먼지가 많은 환경에서 좋은 성능을 낼수 있도록 도와 줍니다.

방수방진 제품

적절하게 설치된 HRXL-MaxSonar-WRC 센서 제품군의 노출부는 알루미늄(oxidized surface, 트랜스듀서 커버), PVC(하우징 재질), 실리콘 고무 (VMQ, O-ring) 입니다.

F-Option

F-option이 장착되어 설치된 HRXL-MaxSonar-WRC 센서 제품군의 노출부는 트랜스듀서 커버), PVC(하우징 재질), Flourosilicone (with an additional back up FEP Teflon® seal,O-ring)입니다.

추가적인 고려사항

센서의 오랜 동작을 담보하기 위해서는 전기적 연결부위가 물, 먼지나 다른 화학품에 노출되지 않아야 합니다. 센서를 설치할때 이점을 유의하시기 바라며, 표준 3/4인치 파이프를 사용하시면 쉽게 설치가 가능합니다. MB7950 Mounting hardware 또한 구매가 가능합니다.

센서는 공기중에서 동작하도록 디자인 되어 있지만 다른 가스에서도 동작이 가능합니다. 공기와 다른 가스는 소리의 전달 속도가 다르기 때문에 올바른 동작을 위해서는 충분한 테스트가 필요하며, 소리 전달 속도 차이에 따른 보정이 필요합니다. 이러한 보정은 2 point linear calibration을 통하여 종종 이루어 집니다.

튼튼하고 신뢰성 높은 실외용 초음파 센서

산업용 HRXL‑MaxSonar‑WRC 제품군은 시장에 있는 제품들중에 비용대비 최고의 품질을 자랑합니다. 이 제품군은 사용하기 쉽고, 방수방진이 되며, 센서 데드존이 없고, 좁은 빔 패턴을 가지도록 보정되었으며, 안정적인 데이터 리딩과, 저전력 등의 기능을 가진 산업용 제품입니다. 좀 더 자세한 사항은 데이터쉬트를 참고하십시오.

HRXL-MaxSonar-WRC 센서 제품군은 불안정한 읽기 능력, 높은 전력 및 크기 등으로 인해 전통적으로 초음파 센서가 사용되지 않았던 어플리케이션에 많이 사용됨으로써 초음파 센서 산업에서 혁신의 아이콘으로 자리잡았습니다.

노이즈 필터링

센서는 외부의 전기적, 음향적 노이즈 소스에 대해 동적으로 자신의 감도를 조정합니다.

내부 온도 보정

공기중 소리의 속도는 초당 0.6m/s 이며 온도변화시 속도가 변하게 됩니다. 이러한 이유 때문에 HRLV‑MaxSonar‑EZ 은 내부 온도센서를 장착하고 있으며, 온도에 대한 보정을 적용하게 됩니다.

내부 온도 센서 때문에 초음파 센서를 Power-up시키고 읽는 거리값(20초이내)은 매우 정확합니다. 그렇기 때문에 대부분의 경우 센서를 끄고 있는 어플리케이션의 경우에 매우 이상적입니다. 하지만 센서의 self heating (15mW at 5V, or 8mW at 3.3V)은 센서의 온도를 약 3도가량 변경(어떻게 설치하였느냐에 따라 편차가 존재)시키고 결과적으로 공기중의 온도를 부정확하게 읽게 만듭니다.

외부 온도 센서

HRXL-MaxSonar-WR 제품에 연결된 HR‑MaxTemp 온도센서를 통해서 실시간 온도 자동 보정이 가능합니다. HR-MaxTemp 은 HRXL-MaxSonar-WRC 센서가 공기중 온도 변화는 관찰할 수 있게하며 self-heating은 무시됩니다.

Self-heating은 내부 온도 센서의 온도가 2에서 5도 정도 증가하는 문제인데, 이러한 self-heating을 제대로 처리하지 않으면 대략 3%정도의 결과값에 오차를 유발하게 됩니다.

HRXL-MaxSonar-WRC 제품은 HR‑MaxTemp 온도 센서와 같이 사용할 수 있게 디자인 되었습니다. HRXL-MaxSonar-WRC 에 전원 인가시 붙어 있는 온도센서를 검출하고 온도변화에 따른 소리 속도 변화에 대한 보정을 모든 출력값에 적용합니다.

인터페이스

HRXL‑MaxSonar‑WR 인터페이스는 사용하기 쉽게 직관적으로 디자인 되었습니다. 인터페이스의 출력은 pulse width 출력, analog voltage 출력과 asynchronous serial RS232 or TTL출력이 있습니다. 모든 인터페이스는 사용자코드나 복잡한 셋업없이 동작합니다.

전력 요구사항

HRXL‑MaxSonar‑WR 제품군은 2.7V 에서 5.5V 동작전압범위를 가집니다. 이것은 3.3V 나 5V 시스템에 쉽게 연결이 가능하게 하고 저전압의 MCU사용자나 배터리로 동작하는 시스템에서도 사용가능한 것을 의미합니다. 센서에 추가적인 전원을 공급할 필요가 없습니다.

HRXL‑MaxSonar‑WR 센서 제품군은 동작시 평균적으로 3.1mA 전류를 필요로합니다.

Controlled Narrow Beam Shape

시중의 초음파 센서 제품들은 잦은 side lobe detection과 센서 옆이나 또 뒤에 있는 물체까지도 검출할 때가 있습니다. HRXL‑MaxSonar‑WR 제품군은 controlled narrow beam shape으로 빔 공간 영역 바깥의 작은 물체(clutter)들은 reject하고 올바른 타켓에 대한 긴 측정 범위의 감도를 제공합니다.

보정

각각의 HRXL‑MaxSonar‑WR 제품은 적절한 동작을 위해서 공장에서 생산시에 테스트 되었고, 생산된 제품들이 동일한 동작을 하게 하기 위해 공장에서 보정된 빔 패턴을 가지고 있습니다.

HRXL‑MaxSonar‑WR 제품군은 측정값을 읽을 때마다 주위 환경에 대해 자동적으로 보정을 합니다. 이러한 보정은 온도, 전압, 습도, acoustic noise, 전기적인 노이즈 및 온도변화를 고려한 보정값입니다.



MB7367.pdf



'Nobody tells you about.. > Ultrasonic' 카테고리의 다른 글

[NT-TS601] 3핀 초음파센서  (10) 2012.10.23

이번에 프로젝트때문에 초음파센서가 필요해서 하나 주문해서 구현해봤습니다.^^



기존의 많이 사용하시는 SRF-04 (핀4개) 와는 다르게 핀이 3개밖에 없어서 처음에 이게 뭔가 했는데요..

원리는 간단했습니다. 




[제품의 동작방법]


먼저 MCU 의 출력핀으로 NT-TS601 의 SIG 핀에 Input trigger pulse(t1)를 보내줍니다.

NT-TS601 의 SIG 핀에 Input trigger pulse 를 받은 NT-TS601 의 초음파센서 TX pin 에서

40kHz 로 Burst pulse 를 발생합니다.

Output echo pulse 가 나타날 때까지 Echo postpone(t2)을 기다립니다.

Burst pulse 가 물체에 반사되어 올 때까지 Output echo pulse 를 체크합니다.

MCU 가 입력받은 Output echo pulse 의 폭을 측정하여 거리로 나타낼 수 있습니다.

다시 측정하기 위해서는 최소 200 μs 이상 기다린 후에 Input trigger pulse 를 보냅니다.




즉, 간단하게 말해서 MCU에게 High신호를 센서핀에게 줘라 -> 센서는 초음파를 쏘고 -> 기다렸다가 동일한 핀으로 초음파에서 출력했던 펄스가 물체를 감지후 돌아온 에코펄스를 읽어라. 그러나 여기서 중요한것은 에코펄스를 읽을때 인터럽트가 걸리는 시간을 이용해서 물체의 거리를 측정한다는 것입니다.


음파 속도 V = 331.5 + 0.60714 T [m/s]


그러나 센서의 동작 범위의 0 ℃에서 70 ℃까지로 오차는 약 11 ~ 12 % 정도입니다. 따라서 주위 온도에 의해서 음속이 변함으로 정밀도가 높은 거리를 측정할 경우에는 온도 보상을 필요로 합니다. 아무래도..온도센서를 사용해서 함께 구현해야지 않을까 생각이 되네요.그리고 초음파의 특성상 측정되는 오브젝트의 형태(곡면일경우 또 반사되겠죠?)와 재질(천인지 금속인지에따라)에 또 측정값이 변할테니..신뢰성있는 값을 얻어내려면 평균값필터나 무빙에버레지도 필요할듯 합니다.


아래는 업체(엔티렉스)에서 제공하는 공개소스입니다.


/********************************************************************************

Title : TS601 module TEST Code

MCU : Atmega32

외부 xtal : 16MHz

File Name : ultra00.c

  

Data : 2008/06/27 (Ver1.1)

Notice : 아래 코드는 TS601 module TEST 프로그램이며

이 프로그램을 이용하여 발생하는 모든 문제에 대해서는

(주)엔티렉스에서는 어떠한 법적 책임도 지지 않습니다.

 참고

 1. TS601 module의 SIG pin과 Atmega32 PD3 pin 사이에

1kΩ을 넣도록 권장합니다.

 2.RS-232C 통신을 통한 하이퍼터미널로 확인할 수 있습니다.

( 9600 bps / 8-n-1 )

*******************************************************************************/

#include "io.h"

#include "interrupt.h"

#include "delay.h"


#include "avrlibdefs.h"

#include "avrlibtypes.h"


#define PD3pin_clear cbi(PORTD, 3)

#define PD3pin_set sbi(PORTD, 3)

#define PD3pin_IN cbi(DDRD, 3)

#define PD3pin_OUT sbi(DDRD, 3)


#define TEMPERATURE 25


// global variable

volatile u16 tick = 0;

volatile u16 pulse_check = 0;

volatile u16 pulse_end = 0;


void PORT_init(void)

{

PORTA = 0x00;

DDRA = 0xFF;

PORTB = 0x00;

DDRB = 0xFF;

PORTC = 0x00;

DDRC = 0xFF;

PORTD = 0x08;

DDRD = 0xFA;

}


void EXTINT_init(void)

{

MCUCR = 0x6F;

GICR = (1<<INT1);

GIFR = 0x00;

}


void TIMER0_COMPA_init(void)

{

TCCR0 = (1<<WGM01)|(1<<CS01);

TCNT0 = 0;

OCR0 = 19; // 1cycle --> 20us = 1/(16M/(2*8*(19+1))

TIMSK = (1<<OCIE0);

TIFR = 0x00;

}


void USART_Init( void )

{

/* Set baud rate 16MHz, 9600 bps */

UBRRH = 0x00;

UBRRL = 103;

/* Enable transmitter */

UCSRB = (1<<TXEN);

/* Set frame format: 8data, 1stop bit */

UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);

}


void USART_Transmit( unsigned char ultrasonic )

{

/* Wait for empty transmit buffer */

while ( !(UCSRA & (1<<UDRE)) );

/* Put data into buffer, sends the data */

UDR = ultrasonic;

}


ISR(TIMER0_COMP_vect) //핵심소스는 이부분이 되겠네요..ㅎ

{

tick++;

}


ISR(INT1_vect)

{

u16 pulse_tick;

pulse_tick = tick;


if( MCUCR & 0x0C ) {

MCUCR &= 0xF3;

tick = 0;

}

else {

MCUCR |= 0x0C;

pulse_end = pulse_tick;

}

}



int main(void)

{

unsigned char thousand, hundred, ten, one;

float distance;

PORT_init();

EXTINT_init();

TIMER0_COMPA_init();

USART_Init();

_delay_ms(50);


while(1)

{

cli();

PD3pin_clear;

PD3pin_OUT; // PD3 pin is output

_delay_us(500);


PD3pin_set; // output set during 5us

_delay_us(5);


PD3pin_clear;

_delay_us(100);


PD3pin_IN; // PD3 pin is input

_delay_us(100);


sei();


/* distance = velocity * time */

distance = (331.5+(0.6*TEMPERATURE))*(pulse_end*0.00001/2)*1000;


/* distance digit display */

thousand = distance/1000;

USART_Transmit(thousand + 48);

distance = distance - (thousand * 1000);


hundred = distance /100;

USART_Transmit(hundred + 48);

distance = distance - (hundred * 100);


ten = distance/10;

USART_Transmit(ten + 48);

distance = distance - (ten * 10);


one = distance;

USART_Transmit( one + 48);

USART_Transmit(109);

USART_Transmit(109);

USART_Transmit('\n');

USART_Transmit('\r');

_delay_ms(100);


}

return 0;

}



USART통신으로 PC상에 뿌려주는 코드입니다. 저는 이게 귀찮아서 바로 ATmega8에 연결한 CLCD에 뿌려봤습니다.
처음 ATmega8을 사용하시는 분이 계실까봐 아래에 주석을 남깁니다.^^
(그리고 ATmega8로 CLCD를 사용하시면 데이터핀을 8개 쓸만큼 여유가 없기때문에 설계하실때 4핀으로 제어하셔야 합니다.)

/* -------------------------------------------인터럽트 서비스 루틴----------------------------------------------- */


ISR(TIMER2_COMP_vect) //타이머 인터럽트 서비스 루틴 ->언제 실행되는가? -> 비교일치 
{
tick++;
}

ISR(INT1_vect) //외부 인터럽트 서비스 루틴
{
u16 pulse_tick;
pulse_tick = tick;  //타이머 인터럽트 서비스루틴에서 계수된 인터럽트값을 pulse_tick 에 저장.

if( MCUCR & 0x0C ) // INT1이 The rising edge일때 인터럽트를 감지하는 상태라면
{
MCUCR &= 0xF3;  //로우레벨 감지로 변경시키고(인터럽트를 끄는느낌) 초기화.

tick = 0;  //타이머 인터럽트의 변수를 초기화.
}
else  //그리고 다음 싸이클에서 다시 인터럽트 시작.
{
MCUCR |= 0x0C;  // INT1을 The rising edge 감지상태로 다시 만들어줌.
pulse_end = pulse_tick; //계수된 펄스값을 저장함.
}
}

결국 아트메가32나 8이나 동일하더군요..ㅎㅎ 그냥 ATmega128과 MCUCR때문에 조금 차이가 있을뿐입니다.
128에서 TIFR, TIMSK와 같은 레지스터가 있어서 인터럽트에 대한 설정들을 했었지만 ATmega 8과 32 시리즈는 MCUCR레지스터로 제어 한다것만 달랐습니다. ^^



어쨌든 위와 같이 ATmega8A 로 2개의 TS601을 구현할수가 있었습니다~ 온도센서는 제 블로그에 있는 NTC-10KD-5J를 사용해서 보상했으며 평균값함수를 사용하니 거리의 오차는 1%미만, 최대 측정거리는 3.3M 였습니다 ^^



NT-TS601.pdf


'Nobody tells you about.. > Ultrasonic' 카테고리의 다른 글

[HRLV-MaxSonar-WRC] MB7367 초음파센서  (0) 2012.10.23

+ Recent posts