이 튜토리얼에서는 거리 측정을위한 회로를 논의하고 설계 할 것입니다. 이 회로는 초음파 센서“HC-SR04”와 AVR 마이크로 컨트롤러를 연결하여 개발되었습니다. 이 센서는 "ECHO"라는 기술을 사용하는데, 이는 표면에 부딪힌 후 소리가 반사 될 때 얻을 수있는 것입니다.
우리는 소리 진동이 고체를 통과 할 수 없다는 것을 알고 있습니다. 그래서 일어나는 일은 소리의 근원이 진동을 생성 할 때 그들은 초당 220 미터의 속도로 공기를 통해 이동합니다. 우리의 귀를 만났을 때 발생하는 이러한 진동을 소리라고합니다. 앞서 말했듯이 이러한 진동은 고체를 통과 할 수 없으므로 벽과 같은 표면에 부딪히면 동일한 속도로 소스에 다시 반사되며이를 에코라고합니다.
초음파 센서“HC-SR04” 는 에코에 따라 거리에 비례하는 출력 신호를 제공합니다. 여기에서 센서는 트리거를 주면 초음파 범위의 사운드 진동을 생성 한 후 사운드 진동이 돌아올 때까지 기다립니다. 이제 매개 변수, 사운드 속도 (220m / s) 및 에코가 소스에 도달하는 데 걸린 시간을 기반으로 거리에 비례하는 출력 펄스를 제공합니다.

그림에서와 같이 먼저 센서의 트리거 핀에서 10uS 이상 동안 센서의 트리거 핀에서 HIGH 논리 신호 인 거리 측정을위한 센서를 시작해야합니다. 그 후 센서에서 소리 진동을 보낸 후 에코 후 센서가 제공합니다. 폭이 소스와 장애물 사이의 거리에 비례하는 출력 핀의 신호.
이 거리는 거리 (cm) = 펄스 출력 폭 (us) / 58로 계산됩니다.
여기서 신호의 폭은 uS (마이크로 초 또는 10 ^ -6)의 배수로 취해야합니다.
필요한 구성 요소
하드웨어: ATMEGA32, 전원 공급 장치 (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), 1000uF 커패시터, 10KΩ 저항 (2 개), HC-SR04 센서.
소프트웨어: Atmel studio 6.1, progisp 또는 flash magic.
회로도 및 작동 설명

여기서는 PORTB를 사용하여 LCD 데이터 포트 (D0-D7)에 연결합니다. ATMEGA32A의 FUSE BITS를 사용하고 싶지 않은 사람은 PORTC를 사용할 수 없습니다. PORTC에는 FUSEBITS를 변경해야만 비활성화 할 수있는 특수한 유형의 통신이 포함되어 있기 때문입니다.
회로에서 내가 두 개의 제어 핀만 가져 왔음을 관찰하면 더 나은 이해의 유연성을 제공합니다. 대비 비트와 READ / WRITE는 자주 사용되지 않으므로 접지로 단락 될 수 있습니다. 이렇게하면 LCD가 가장 높은 명암비 및 읽기 모드가됩니다. ENABLE 및 RS 핀을 제어하여 문자와 데이터를 적절하게 전송하면됩니다.
LCD에 대해 수행되는 연결은 다음과 같습니다.
접지에 대한 PIN1 또는 VSS
PIN2 또는 VDD 또는 VCC ~ + 5v 전원
PIN3 또는 VEE to ground (초보자에게 최상의 대비를 제공)
uC의 PD6에 PIN4 또는 RS (등록 선택)
PIN5 또는 RW (읽기 / 쓰기)를 접지 (LCD를 읽기 모드로 설정하여 사용자의 통신을 용이하게 함)
PIN6 또는 E (활성화)-uC의 PD5
uC의 PIN7 또는 D0 ~ PB0
uC의 PIN8 또는 D1 ~ PB1
uC의 PIN9 또는 D2에서 PB2
uC의 PIN10 또는 D3 ~ PB3
uC의 PIN11 또는 D4 ~ PB4
uC의 PIN12 또는 D5 ~ PB5
uC의 PIN13 또는 D6 ~ PB6
uC의 PIN14 또는 D7 ~ PB7
회로에서 우리는 8bit 통신 (D0-D7)을 사용했지만 이것은 필수 사항이 아니며 4bit 통신 (D4-D7)을 사용할 수 있지만 4bit 통신 프로그램은 약간 복잡해집니다. 따라서 위의 표에서 볼 수 있듯이 LCD의 10 핀을 컨트롤러에 연결하고 있는데 8 핀은 데이터 핀이고 2 핀은 제어용입니다.
초음파 센서는 4 핀 장치, PIN1- VCC 또는 + 5V입니다. PIN2- 트리거; PIN3- 에코; PIN4- 접지. 트리거 핀은 센서가 거리를 측정하도록 지시하는 트리거를 제공하는 곳입니다. Echo는 펄스 폭의 형태로 거리를 얻는 출력 핀입니다. 여기서 에코 핀은 외부 인터럽트 소스로 컨트롤러에 연결됩니다. 따라서 신호 출력의 폭을 얻기 위해 센서의 에코 핀을 INT0 (인터럽트 0) 또는 PD2에 연결합니다.
1. 최소 12uS의 트리거 핀을 당겨 센서를 트리거합니다.
2. 에코가 높으면 외부 인터럽트가 발생하고 인터럽트가 트리거 된 직후에 실행되는 ISR (Interrupt Service Routine)에서 카운터 (카운터 활성화)를 시작합니다.
3. 에코가 다시 낮아지면 인터럽트가 생성됩니다. 이번에는 카운터를 중지합니다 (카운터 비활성화).
4. 에코 핀에서 하이에서 로우로 펄스에 대해 카운터를 시작하고 중지했습니다. 이 카운트는 거리를 얻기 위해 메모리에 업데이트됩니다. 이제 카운트에 에코의 폭이 있습니다.
5. 거리를 cm 단위로 구하기 위해 메모리에서 추가 계산을 할 것입니다.
6. 거리는 16x2 LCD 디스플레이에 표시됩니다.
위의 기능을 설정하기 위해 다음 레지스터를 설정합니다.



위의 세 레지스터는 설정이 작동하도록 적절히 설정되어야하며 이에 대해 간략하게 설명하겠습니다.
파란색 (INT0): 외부 인터럽트 0을 활성화하려면이 비트를 높게 설정해야합니다.이 핀이 설정되면 PIND2 핀에서 로직 변경을 감지하게됩니다.
BROWN (ISC00, ISC01):이 두 비트는 인터럽트로 간주되는 PD2에서 적절한 논리 변경을 위해 조정됩니다.

따라서 앞서 말했듯이 카운트를 시작하고 중지하려면 인터럽트가 필요합니다. 그래서 ISC00을 하나로 설정하고 INT0에서 LOW에서 HIGH로 로직이있을 때 인터럽트를 얻습니다. 로직 HIGH에서 LOW가있을 때 다른 인터럽트.
RED (CS10):이 비트는 단순히 카운터를 활성화 및 비활성화하는 것입니다. 다른 비트 CS10, CS12와 함께 작동하지만. 여기서는 사전 확장을 수행하지 않으므로 걱정할 필요가 없습니다.
여기서 기억해야 할 몇 가지 중요한 사항은 다음과 같습니다.
1MHz 인 ATMEGA32A의 내부 클럭을 사용하고 있습니다. 여기서 프리 스케일링이 없습니다. 비교 일치 인터럽트 생성 루틴을 수행하지 않으므로 복잡한 레지스터 설정이 없습니다.
카운트 후 카운트 값은 16 비트 TCNT1 레지스터에 저장됩니다.
또한 arduino 로이 프로젝트를 확인하십시오: Arduino를 사용한 거리 측정
프로그래밍 설명
거리 측정 센서의 작동은 아래 C 프로그램에서 단계별로 설명됩니다.
#include // 핀에 대한 데이터 흐름 제어를 활성화하는 헤더 #define F_CPU 1000000 // 텔링 컨트롤러 크리스탈 주파수 부착 #include
