1.Nguyên lý đo khoảng cách bằng siêu âm

Một phần của tài liệu BÁO cáo môn hệ THỐNG điều KHIỂN NHÚNG đo nhiệt độ bằng LM35 hiển thị trên mà hình LCD sử dụng vdk pic16f877a (Trang 29 - 37)

/ INTCONbits.INTE=0; cho ngat RB0 T1CONbits.TMR1CS = 0;

1.Nguyên lý đo khoảng cách bằng siêu âm

❖ Sóng siêu âm (sonar) là một loại sóng cao tầng mà con người không thể nghe thấy

được. Tuy nhiên, ta có thể thấy được sự hiện diện của sóng siêu âm ở khắp mọi nơi trong tự nhiên. Ta có các loài động vật như dơi, cá heo ... dùng sóng siêu âm để liên lạc với nhau, để săn mồi hay định vị trong không gian.

❖ Dựa trên việc quan sát các quan sát hoạt động của chúng, ta thấy được nguyên tắc mà các loài vật sử dụng sóng âm để định vị rất đơn giản, có thể tóm gọn trong

3 bước sau:

• Vật chủ phát ra sóng âm

• Sóng âm này va chạm với môi trường xung quanh và phản xạ lại

• Dựa vào thời gian phát / thu, khoảng cách giữa vật chủ và môi trường xung quanh được tính ra.

❖ Việc tính toán khoảng cách cũng còn phụ thuộc rất nhiều vào môi trường truyền dẫn, ví dụ như sóng âm truyền trong môi trường nước hay kim loại sẽ nhanh hơn rất nhiều so với sóng âm được truyền trong môi trường không khí. Lưu ý là sóng

âm không thể truyền được trong môi trường chân không.

❖ Theo nguyên tắc này, dựa vào sự tiến bộ của khoa học công nghệ hiện đại, ta đã thấy được ứng dụng của sóng âm trong cuộc sống rất nhiều, có thể kể đến như thiết bị định vị dưới biển của tàu ngầm, thiết bị radar, các thiết bị đo khoảng cách môi trường như đo độ sâu của đại dương ...

2.Cảm biến siêu âm SRF05

Cảm biến siêu âm SRF05 cũng hoạt động theo như nguyên tắc ở trên, thiết bị gồm có 2 loa - thu và phát - cùng với 5 chân để kết nối với Arduino. Theo tài liệu của nhà sản xuất thì tầm hoạt động tối đa của cảm biến này nằm trong khoảng 5m.

Chức năng của các chân này như sau:

1. Vcc: cấp nguồn cho cảm biến.

2. Trigger: kích hoạt quá trình phát sóng âm. Quá trình kích hoạt khi một chu kì điện cao / thấp diễn ra.

3. Echo: bình thường sẽ ở trạng thái 0V, được kích hoạt lên 5V ngay khi có tín hiệu trả về, sau đó trở về 0V.

4. Gnd: nối với cực âm của mạch 5. OUT: không sử dụng

/*

* File: cambiensieuam.c * Author: minhlam *

*/

// CONFIG1

#pragma config FOSC = HS

speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN) #pragma config WDTE = OFF

and can be enabled by SWDTEN bit of the WDTCON register) #pragma config PWRTE = OFF

#pragma config MCLRE = ON (RE3/MCLR pin function is MCLR) #pragma config CP = OFF

protection is disabled)

#pragma config CPD = OFF protection is disabled)

#pragma config BOREN = OFF disabled)

#pragma config IESO = OFF

(Internal/External Switchover mode is disabled) #pragma config FCMEN = OFF

Safe Clock Monitor is disabled) #pragma config LVP = OFF

has digital I/O, HV on MCLR must be used for programming)

// CONFIG2

#pragma config BOR4V = BOR40V // Brown-out Reset Selection bit (Brown-out Reset set to 4.0V)

#pragma config WRT = OFF (Write protection off)

/ #pragma config statements should precede project file includes./ Use project enums instead of #define for ON and OFF. / Use project enums instead of #define for ON and OFF.

#include <xc.h> #include <pic16f887.h> #include <pic.h> #include "lcd.h" #include <stdio.h> #include <stdlib.h> #define _XTAL_FREQ 8000000

#define IO_trigger TRISCbits.TRISC1 #define IO_echo1 TRISCbits.TRISC0 #define trigger PORTCbits.RC1 #define echo1 PORTCbits.RC0 float timer, khoangcach, kc;

void port_init() { PORTB=0X00; ANSEL=0X00; ANSELH=0X00; //LCD TRISBbits.TRISB0 = 0;

TRISBbits.TRISB1 = 0; TRISBbits.TRISB4 = 0; TRISBbits.TRISB5 = 0; TRISBbits.TRISB6 = 0; TRISBbits.TRISB7 = 0; //SRF05 IO_trigger = 0; IO_echo1 = 1; } void timer1_init() { T1CONbits.TMR1CS = 0; T1CONbits.T1CKPS1 = 0; T1CONbits.T1CKPS0 = 1; }

void hienthi_sothuc(float giatri) { char s[20]; sprintf(s, "%3.1f", giatri); Lcd_Write_String(s); } void SRF05_init() { trigger = 1; __delay_ms(15);

trigger = 0; } float read_SRF05_1() { SRF05_init(); while (echo1 == 0); TMR1=0; TMR1ON = 1; while (echo1 == 1); TMR1ON = 0; kc = ((TMR1+10) / 58); return kc; } void main() { port_init(); timer1_init(); Lcd_Init(); while(1){ khoangcach = read_SRF05_1(); Lcd_Set_Cursor(1,1); hienthi_sothuc(khoangcach); } }

Một phần của tài liệu BÁO cáo môn hệ THỐNG điều KHIỂN NHÚNG đo nhiệt độ bằng LM35 hiển thị trên mà hình LCD sử dụng vdk pic16f877a (Trang 29 - 37)

Tải bản đầy đủ (DOCX)

(66 trang)
w