3 Cảm biến siêu âm SRF05
2.1 Phương án thiết kế
Ngày nay với công nghệ khoa học ngày càng phát triển, con người đang hướng tới những công nghệ mới ,công nghệ của máy móc thông minh, các hệ thống tự động. Ở đây chúng em muốn đưa ra ứng dụng điển hình là hệ thống kiểm soát mực nước trong bình được hiển thị trên màn hình LCD.
Hình 2.1 Sơ đồ khối của mô hình
2.2 Nội dung từng khối 2.2.1 Khối nguồn.
Sơ đồ nguyên lý :
Hình 2.2 Sơ đồ nguyên lý của khối nguồn
Nguyên lý hoạt động : điện áp đầu vào là điện áp 1 chiều 12vdc được cấp trực tiếp vào chân 1 và 2 của 7805 . Đầu ra được lấy ra từ chân số 3 của 7805 qua hai con tụ C1 và C2 giúp san phẳng điện áp tạo ra nguồ 1 chiều
Sơ đồ nguyên lý:
Hình 2.3 Sơ đồ nguyên lý của khối xử lý trung tâm
Ở đây ta sử lý cho việc truyền và nhận dữ liệu từ cảm biến cũng như việc xuất ra màn hình dụng vi mạch AT89S51 làm bộ sử lý trung tâm ,bộ sử lý này có chức năng kiểm soát liên tục các bit điều kiện để đưa ra các xung điều khiển hợp LCD.
Nguyên lý hoạt động : chân số 8 của vi xử lí được nối với chân số 2(chân triger) của cảm biến qua đó vi xử lý phát xung cho cảm biến hoạt động . Cảm biến sau khi nhận được tín hiệu từ khối xử lý trung tâm sẽ hoạt động và phản hồi lại cho khối xử lý trung tâm qua chân nối số 3 (chân ECHO) và chân số 12 (p3.2) của khối xử lý trung tâm .IC sau khi nhận được tín hiệu phản hồi của cảm biến sẽ xử lý và hiển thị kết quả thu được trên màn hình LCD.
Hình 2.4 Khối cảm biến Nguyên lý hoạt động
Nối chân số 8 của IC 89S52 với chân triger của cảm biến để phát xung clock cho cảm biến. Chỉ cần cung cấp một đoạn xung ngắn 10uS kích hoạt đầu vào để bắt đầu đo khoảng cách. Các SRF05 sẽ cho ra một chu kỳ 8 burst của siêu âm ở 40khz và tăng cao dòng phản hồi của nó (hoặc kích hoạt chế độ dòng 2). Sau đó chờ phản hồi, và ngay sau khi phát hiện nó giảm các dòng phản hồi lại. Dòng phản hồi là một xung có chiều rộng tỷ lệ với khoảng cách đến đối tượng. Bằng cách đo xung, ta hoàn toàn có thể để tính toán khoảng cách theo inch / centimét hoặc đơn vị đo khác. Nếu không phát hiện gì thì SRF05 giảm thấp hơn dòng phản hồi của nó sau khoảng 30mS. Chân số 3 của cảm biến nối với chân số 12 của cảm biến để thu kết quả phản hồi .
2.2.4 Khối hiển thị.
Hình 2.5 Khối hiển thị Nguyên lý hoạt động :
Chân 1 và chân 2 là các chân nguồn, được nối với GND và nguồn 5V. Chân 3 là chân chỉnh độ tương phản (contrast), chân này cần được nối với 1 biến trở chia áp như trong hình 2.Trong khi hoạt động, chỉnh để thay đổi giá trị biến trở để đạt được độ tương phản cần thiết, sau đó giữ mức biến trở này. Vi điều khiển sẽ nhận dữ liệu từ cảm biến và xử lý rồi truyền dữ liệu đó qua các chân D4 – D7 của LCD .
2.3 Sơ đồ mạch hoàn chỉnh
Sơ đồ mạch Board
Hình 2.7 Sơ đồ mạch Board
- Đưa ra phương án thiết kế
- Sơ đồ khối của mạch 2. Nội dung của từng khối
- Đưa ra sơ đồ nguyên lý của từng khối
- Nguyên tắc hoạt động của từng khối
- Sơ đồ nguyên lý và sơ đồ board của mạch
Chương III: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Sau một quãng thời gian thực hiện đồán dưới sự hướng dẫn rất tận tình của thầyNguyễn Vũ Thắng, cùng với sự giúpđỡ của rất nhiều thầy cô giáo trong khoa chúng em đã hoàn thànhđề tài .
Những kết quả chúng em đạtđược trong đồán:
Khảo sát trình bày phần lý thuyết :
• Tìm hiểu và trình bày về nguyên lý, cách sử dụng các linh kiện trong mạch.
• Đào sâu nghiên cứu về dòng chip điều khiển là IC 89C51.
• Tìm hiểu và hiểu thêm về dòng cảm biến siêu âm điển hình là cảm biến siêu âm SRF05.
• Đưa ra sơ đồ nguyên lý, sơ đồ board các mạch đã sử dụng.
Thực thi mô hình:
• Xây dựng mô hìnhkiểm soát lưu lượng nước trong bình . • Gia công các bảng mạch.
• Xây dựng viết chương trình cho chip điều khiển.
Mặc dùđã rất cố gắng nhưng do thờ gian, kiến thức và nguồn kinh phí có hạn lên đề tài không thể tránh khỏi những thiếu sót, do đó nhóm em kính mong các quý thầy cô và các bạnđóng gópý kiến để sản phẩmđược hoàn thiện hơn.
Nhóm chúng em xin chân thành cảm ơn !
2. Hướng phát triển của đề tài.
Hiện nay nền công nghiệp hoá, hiện đại hoá ngày càng phát triển cuộc sống của con người thì ngày ngày một nâng cao thì việcsử dụng các công nghệ và máy móc hiện đại là không thể thiếu. Do đó đề tài của chúng em là một trong những ứng dụng cần thiết cho cuộc sống của con người. Nó không chỉ áp dụng cho sinh hoạt của con người mà còn rất hữu ích trong
mực nước trong các bể chứa nước. Trong sản xuất thì có thể áp dụng để kiểm tra nhiên liệu trong máy móc …Ngoài ra có thể phát triển đề tài thành kiểm tra mức nước và bơm nước tự động .
TÀI LIỆU THAM KHẢO
1. Giáo trình kỹ thuật mạch điện tử 1.( Nguyễn Vũ Thắng)
2. Giáo trình vi điều khiển .(Đặng Văn Khanh và Giang Hồng Bắc) 3. Giáo trình lập trình C cho vi điều khiển.(Vũ Đình Đạt)
4. www.google.com
5. www.tailieu.vn
6. www.ebook.com
PHU LỤC Chương trình vi điều khiển nạp cho IC 89S52
#include <AT89X52.H> #include <stdio.h> #define Line_1 0x80 #define Line_2 0xC0 #define Clear_LCD 0x01 #define CPU_F 25000 #define LCD_RS P0_0 #define LCD_WR P0_1
//Dinh Nghia Cac Chan DaTa #define LCD_D4 P2_4 #define LCD_D5 P2_5 #define LCD_D6 P2_6 #define LCD_D7 P2_7 #define TRIGGER P1_7 #define ECHO P3_2 unsigned char range_ok; unsigned int distance,muc; float range;
//unsigned long range=0xffffffff; float temp1;
//unsigned int temp1; bit trans_busy;
//unsigned char str1[1]; unsigned char data_recv[10]; unsigned char index;
void delay_us(unsigned int time) {
unsigned int temp;
void delay_ms(unsigned int time) {
unsigned int i,j; for(i=0;i<time;i++) for(j=0;j<125;j++); } void StartRange() { TRIGGER=1;
delay_ms(12); // Phai tao 1 xung len co do lon it nhat 10ms
ECHO=1; // set chan ECHO la cong vao delay_us(1);
TRIGGER=0; // Bat dau phep do.
while(!(ECHO)); // Doi cho den khi chan ECHO duoc keo len cao
//TR0=1; // Cho phep timer 0 hoat dong
TR0=IT0=EX0=EA=1; // cho phep ngat
toan cuc }
void lcd_enable_pulse(void) {
LCD_EN=1; delay_us(1); LCD_EN=0; delay_us(1); }
void lcd_send_4bit_data ( unsigned char Data ) { LCD_D4= Data&0x01; LCD_D5=((Data>>1)&1); LCD_D6=((Data>>2)&1); LCD_D7=((Data>>3)&1); } #ifdef USE_LCD_READ
unsigned char lcd_read_4bit_data(void) {
unsigned char n = 0x00; /* Read the data port */ n |= LCD_D4;
n |= (LCD_D5) << 1; n |= (LCD_D6) << 2; n |= (LCD_D7) << 3; return(n);
unsigned char lcd_read_byte(void) {
unsigned char low,high;
LCD_D4=LCD_D5=_LCD_D6=_LCD_D7=1; LCD_RS=1; delay_us(1); LCD_EN=1; delay_us(1); high = lcd_read_4bit_data(); LCD_EN=0; delay_us(1); LCD_EN=1; delay_us(1); low = lcd_read_4bit_data(); LCD_EN=0;
return( (high<<4) | low); }
char lcd_getc(unsigned char x, unsigned char y) //lay 1 ky tu tai dia chi x,y
{
char value; lcd_gotoxy(x,y);
while(bit_test(lcd_read_byte(),7)); LCD_RS=1; value = lcd_read_byte(); LCD_RS=0; return(value); } #endif
void lcd_send_command (unsigned char Data ) { #ifdef USE_LCD_READ while ( 0x80&lcd_read_byte() ) ; #else delay_us(20); #endif
lcd_send_4bit_data ( Data >>4 ); /* send 4 bit high */ lcd_enable_pulse () ;
lcd_send_4bit_data ( Data ); /* send 4 bit low */ lcd_enable_pulse () ;
}
void lcd_init ( void ) {
LCD_RS=0; // che do gui lenh LCD_WR=0; // che do ghi LCD_EN=0;
lcd_send_4bit_data ( 0x03 ); // ket noi 8 bit lcd_enable_pulse () ;
lcd_enable_pulse () ; lcd_enable_pulse () ;
lcd_send_4bit_data ( 0x02 ); // ket noi 4 bit lcd_enable_pulse () ;
lcd_send_command( 0x2C ); // giao thuc 4 bit, hien thi 2 hang, ki tu 5x8 delay_ms(5);
lcd_send_command( 0x80);
lcd_send_command( 0x0c); // cho phep hien thi man hinh
lcd_send_command( 0x06 ); // tang ID, khong dich khung hinh delay_ms(5);
lcd_send_command( Clear_LCD ); // xoa toan bo khung hinh delay_ms(10);
}
void lcd_gotoxy(unsigned char x, unsigned char y) {
unsigned char address; if(!y)
else address = (Line_2+x); delay_us(1000); lcd_send_command(address); delay_us(50); } void lcd_clear() { lcd_send_command( Clear_LCD ); delay_us(10); }
void lcd_putchar ( unsigned int Data ) {
LCD_RS=1; // che do gui du lieu lcd_send_command( Data );
LCD_RS=0; // che do gui lenh } void lcd_puts(char *s) { while (*s) { lcd_putchar(*s);
} } void ngatngoai0(void)interrupt 0 { distance=TH0; distance<<=8; distance|=TL0; range=(float)distance*12; temp1=((58*11.0592)); //temp1= 641; range=range/(temp1); range=20.11-range; muc=range; TR0=IT0=EX0= 0; // Ngung timer
TL0=TH0=0; // Xoa du lieu trong thanh ghi Timer 0
range_ok=1; }
void main() {
char str2[20]; LCD_Init(); TMOD=0x01; EA=1; while(1) { if(!range_ok) { StartRange(); delay_ms(100); } if(range_ok) { sprintf(str,"Muc: %u ",muc); sprintf(str2,"K/C: %6.2f Cm",range); lcd_gotoxy(0,0); lcd_puts(str); lcd_gotoxy(0,1); lcd_puts(str2); delay_ms(200);
} } }