모든 프로젝트가 활성화 되려면 센서를 사용해야합니다. 센서는 모든 임베디드 애플리케이션의 눈과 귀 역할을하며 디지털 마이크로 컨트롤러가 실제 아날로그 세계에서 실제로 일어나는 일을 이해하는 데 도움이됩니다. 이 튜토리얼에서는 초음파 센서 HC-SR04를 PIC 마이크로 컨트롤러와 인터페이스 하는 방법을 배우게됩니다.
HC-SR04는, 초음파 센서 인 450cm (이론적으로) 사이에 2cm 간격 어디서나 측정 할 수있다. 이 센서는 장애물 감지, 거리 측정, 환경 매핑 등을 포함하는 많은 프로젝트에 적합하여 가치가 있음을 입증했습니다.이 기사의 끝에서이 센서가 작동하는 방법 과 거리 및 디스플레이 를 측정하기 위해 PIC16F877A 마이크로 컨트롤러와 인터페이스하는 방법을 배우게 됩니다. LCD 화면에 표시 됩니다. 흥미 롭군요! 그럼 시작하겠습니다…
필요한 재료:
- 프로그래밍 설정 기능이있는 PIC16F877A MCU
- LCD 16 * 2 디스플레이
- 초음파 센서 (HC-SR04)
- 전선 연결
초음파 센서는 어떻게 작동합니까?
더 나아 가기 전에이 튜토리얼을 훨씬 더 잘 이해할 수 있도록 초음파 센서가 어떻게 작동하는지 알아야합니다. 이 프로젝트에 사용 된 초음파 센서는 아래와 같습니다.
보시다시피 그것은 돌기처럼 두 개의 둥근 눈과 그것에서 나오는 네 개의 핀을 가지고 있습니다. 두 눈 모양의 투영은 초음파 (이하 미국 파라고 함) 송신기와 수신기입니다. 송신기는 40Hz의 주파수에서 미국 파를 방출하며,이 파동은 공기를 통해 이동하고 물체를 감지하면 반사됩니다. 되돌아 오는 파도는 수신기에 의해 관찰됩니다. 이제 우리는이 파도가 반사되어 돌아 오는 데 걸리는 시간을 알고 있으며 미국 파도의 속도도 보편적입니다 (3400cm / s). 이 정보와 아래의 고등학교 공식을 사용하여 거리를 계산할 수 있습니다.
거리 = 속도 × 시간
US 센서가 어떻게 작동하는지 알았으니 이제 4 개의 핀을 사용하여 MCU / CPU와 어떻게 인터페이스 할 수 있는지 살펴 보겠습니다. 이 4 개의 핀은 각각 Vcc, 트리거, 에코 및 접지 입니다. 모듈은 + 5V에서 작동하므로 Vcc 및 접지 핀이 모듈에 전원을 공급하는 데 사용됩니다. 다른 두 핀은 MCU와 통신하는 데 사용하는 I / O 핀입니다. 트리거 핀이 출력 핀으로서 선언되어야 하고 10US 높은 만든이 8 사이클 소닉 버스트와 공기로 US 파를 송신한다. 파동이 관찰되면 Echo 핀은 미국 파동이 센서 모듈로 되돌아가는 데 걸린 정확한 시간 간격 동안 높아집니다. 따라서이 Echo 핀은 입력으로 선언됩니다.타이머는 핀이 얼마나 높았는지 측정하는 데 사용됩니다. 이것은 아래의 타이밍 다이어그램으로 더 이해할 수 있습니다.
이 센서를 PIC와 인터페이스하는 잠정적 인 방법에 도달했기를 바랍니다. 이 튜토리얼에서는 타이머 모듈과 LCD 모듈을 사용할 것이며 두 가지 모두에 익숙하다고 가정합니다.
- PIC 마이크로 컨트롤러와 LCD 인터페이스
- PIC 마이크로 컨트롤러의 타이머 이해
회로도:
초음파 센서와 PIC16F877A 를 연결 하기위한 전체 회로도 가 아래에 나와 있습니다.
그림과 같이 회로는 LCD 디스플레이와 초음파 센서 자체 만 포함합니다. US 센서는 + 5V로 전원이 공급 될 수 있으므로 7805 전압 조정기에 의해 직접 전원이 공급됩니다. 센서에는 핀 34 (RB1)에 연결된 하나의 출력 핀 (Trigger 핀)이 있고 입력 핀 (Echo 핀)은 핀 35 (RB2)에 연결됩니다. 전체 핀 연결은 아래 표에 나와 있습니다.
S.No: |
PIC 핀 번호 |
핀 이름 |
연결됨 |
1 |
21 |
RD2 |
LCD의 RS |
2 |
22 |
RD3 |
LCD의 E |
삼 |
27 |
RD4 |
LCD의 D4 |
4 |
28 |
RD5 |
LCD의 D5 |
5 |
29 |
RD6 |
LCD의 D6 |
6 |
30 |
RD7 |
LCD의 D7 |
7 |
34 |
RB1 |
미국의 방아쇠 |
8 |
35 |
RB2 |
미국의 메아리 |
PIC 마이크로 컨트롤러 프로그래밍:
이 튜토리얼의 전체 프로그램은이 페이지의 끝에 제공되며, 아래에서 코드를 이해하기 위해 작은 의미의 전체 덩어리로 설명했습니다. 앞서 말했듯이이 프로그램에는 LCD 인터페이스 및 타이머 개념이 포함되어 있습니다.이 개념은 이전 자습서에서 이미 다루었으므로이 자습서에서는 자세히 설명하지 않습니다.
내부의 주요 기능 은 평소 와 같이 IO 핀 및 기타 레지스터 를 초기화하는 것으로 시작 합니다. LCD 및 US 센서의 IO 핀을 정의하고 1: 4 프리 스칼라에서 작동하고 내부 클럭 (Fosc / 4)을 사용하도록 설정하여 타이머 1 레지스터를 시작합니다.
TRISD = 0x00; // LCD 인터페이스를위한 출력으로 선언 된 PORTD TRISB0 = 1; // 인터럽트 핀으로 사용할 RB0 핀을 입력으로 정의 TRISB1 = 0; // 미국 센서의 트리거 핀이 출력 핀으로 전송됩니다. TRISB2 = 1; // 미국 센서의 에코 핀이 입력 핀으로 설정 됨 TRISB3 = 0; // RB3은 LED의 출력 핀입니다. T1CON = 0x20; // 4 프리 스칼라 및 내부 클록
타이머 1은 PIC16F877A에서 사용되는 16 비트 타이머이며, T1CON 레지스터는 타이머 모듈의 매개 변수를 제어하며 결과는 16 비트 결과이므로 TMR1H 및 TMR1L에 저장됩니다. 처음 8 개는 TMR1H에 저장되고 TMR1L에서 다음 8 개. 이 타이머는 각각 TMR1ON = 0 및 TMR1ON = 1을 사용하여 켜거나 끌 수 있습니다.
이제 타이머를 사용할 준비가되었지만 센서에서 US 파 를 보내야합니다. 이렇게하려면 트리거 핀을 10uS 동안 높게 유지해야합니다.이 작업은 다음 코드로 수행됩니다.
트리거 = 1; __delay_us (10); 트리거 = 0;
위의 타이밍 다이어그램에서 볼 수 있듯이 Echo 핀은 파도가 다시 돌아올 때까지 낮게 유지 된 다음 파도가 다시 돌아 오는 데 걸리는 정확한 시간 동안 높게 올라가고 높게 유지됩니다. 이 시간은 Timer 1 모듈에 의해 측정되어야하며, 아래 줄에서 수행 할 수 있습니다.
동안 (에코 == 0); TMR1ON = 1; while (에코 == 1); TMR1ON = 0;
시간이 측정되면 결과 값이 TMR1H 및 TMR1L 레지스터에 저장되며, 이러한 레지스터는 16 비트 값을 얻기 위해 수집해야합니다. 이것은 아래 줄을 사용하여 수행됩니다
time_taken = (TMR1L-(TMR1H << 8));
이 time_taken 은 실제 시간 값을 얻기 위해 아래 공식을 사용해야하는 바이트 형식입니다.
Time = (16-bit register value) * (1 / Internal Clock) * (Pre-scale) Internal Clock = Fosc / 4 여기서, Fosc = 20000000Mhz 및 Pre-scale = 4 따라서 내부 클록의 값은 5000000Mhz이고 시간 값은 Time = (16 비트 레지스터 값) * (1/5000000) * (4) = (16 비트 레지스터 값) * (4/5000000) = (16 비트 레지스터 값) * 0.0000008 초 (OR) 시간 = (16 비트 레지스터 값) * 0.8 마이크로 초
우리 프로그램에서 16 비트 레지스터의 값은 time_taken 변수에 저장 되므로 아래 줄은 마이크로 초 단위로 time_taken 을 계산하는 데 사용됩니다.
time_taken = time_taken * 0.8;
다음으로 거리를 계산하는 방법 을 찾아야 합니다. 우리가 알고 있듯이 거리 = 속도 * 시간. 그러나 여기서는 파동이 송신 거리와 수신 거리를 모두 커버하고 있기 때문에 결과를 2로 나누어야합니다. 우리 파도의 속도 (소리)는 34000cm / s입니다.
거리 = (속도 * 시간) / 2 = (34000 * (16 비트 레지스터 값) * 0.0000008) / 2 거리 = (0.0272 * 16 비트 레지스터 값) / 2
따라서 거리는 아래와 같이 센티미터 단위로 계산할 수 있습니다.
거리 = (0.0272 * time_taken) / 2;
거리와 소요 시간을 계산 한 후 LCD 화면에 표시하면됩니다.
PIC 및 초음파 센서를 사용한 거리 측정:
연결하고 코드를 업로드 한 후 실험 설정은 아래 그림과 같이 보일 것입니다.
이 그림에 표시된 PIC 성능 보드는 PIC 마이크로 컨트롤러 사용 방법을 배운 PIC 튜토리얼 시리즈 용으로 제작되었습니다. Pickit 3을 사용하여 프로그램을 굽는 방법을 모르는 경우 MPLABX 및 XC8을 사용하는 PIC 마이크로 컨트롤러 자습서로 돌아가고 싶을 수 있습니다. 모든 기본 정보를 건너 뛸 것입니다.
이제 센서 앞에 물체를 놓으면 물체가 센서에서 얼마나 멀리 떨어져 있는지 표시됩니다. 또한 웨이브가 전송 및 복귀하는 데 걸린 시간이 마이크로 초 단위로 표시되는 것을 확인할 수 있습니다.
원하는 거리로 물체를 이동하고 LCD에 표시되는 값을 확인할 수 있습니다. 0.5cm의 정확도로 2cm에서 350cm까지의 거리를 측정 할 수있었습니다. 이것은 상당히 만족스러운 결과입니다! 튜토리얼이 재미 있고 스스로 만드는 법을 배웠기를 바랍니다. 의심스러운 점이 있으면 아래 댓글 섹션에 버리거나 포럼을 사용하십시오.
초음파 센서와 다른 마이크로 컨트롤러의 인터페이스도 확인하십시오.
- Arduino 및 초음파 센서 기반 거리 측정
- Raspberry Pi 및 HCSR04 초음파 센서를 사용하여 거리 측정
- HC-SR04 및 AVR 마이크로 컨트롤러를 사용한 거리 측정