ATmega128 HR-SR04 초음파 센서 제어하기 - 1

2019. 8. 24. 00:25임베디드/ATmega128

HR-SR04 초음파센서는 40KHz의 진동수를 가지며, 인간의 가청영역에서 벗어난다. 초음파의 속도는 공기 중에서 340m/s로 파동의 성질인 확산, 흡수, 산란에 의해 감쇠된다는 성질이 있다. 거리는 약 2cm에서 4m까지 측정이 가능하다 

 

 

초음파센서를 제어하기 위해선 무엇보다 Timing Diagram을 유심히 확인해야 한다. 아래 Input은 MCU 입장에서는 출력임을 인지해야 한다

 

 

1. MCU에서 Trigger 핀에 10us 파형을 출력시킨다

2. 초음파센서 자체적으로 40KHz 주파수를 가진 8사이클의 초음파가 발생된다

3. 에코 핀이 high를 유지하는 시간을 거리로 환산한다. 데이터시트에 따르면 58us당 약 1cm라는 공식이 적혀있다. 이 공식은 1초에 170m를 간다면, 1cm는 몇초에 가느냐의 질문에서 해답을 구할 수 있다. 초음파는 약 58us에 1cm를 갈 수 있는 속도를 가지고 있다

4. 트리거 핀과 에코핀이 겹칠 우려가 있기 때문에 최대 60ms의 여유를 갖고 트리거를 발생시키라고 한다

 

구성

1. INT4 외부 인터럽트를 사용해서, 상승하강엣지 모두에서 인터럽트 발생하도록 한다. 참고로 0,1,2,3은 해당 옵션이 존재하지 않는다

2. 58us / (1/16000000) = 927이 나온다. 분주비를 사용하지 않고, 16비트 타이머카운터를 사용해서 큰 값을 셀 수 있도록 한다. CTC 모드를 사용해서 비교일치가 발생할 때마다 거리를 1씩 더해준다. 비교일치 레지스터 값인 ICR = 927-1로 설정한다. 그리고 반드시 비교일치 인터럽트 마스크를 활성화해준다

 

깃허브주소: https://github.com/surinoel/avr/tree/master/timer/hc-sr04