Cảm biến hồng ngoại tìm thấy nhiều ứng dụng trong các hệ thống điện tử. Thường được sử dụng làm máy phát hiện chướng ngại vật, đầu ra của chúng được sử dụng ở dạng kỹ thuật số (logic cao & thấp) bằng cách sử dụng bộ so sánh. Chủ đề này giải thích cách sử dụng đầu ra của cảm biến ở dạng tương tự ban đầu. Do đó, cùng với việc phát hiện một chướng ngại vật, khoảng cách chính xác của nó cũng có thể đạt được. Điều này đạt được bằng cách xử lý đầu ra của cảm biến hồng ngoại thông qua ADC0804 (bộ chuyển đổi tương tự sang số). ADC được hiệu chuẩn để có được phép đo khoảng cách gần như chính xác.
Khoảng cách đo cũng được hiển thị trên màn hình LCD. ADC0804 và LCD được giao tiếp với vi điều khiển 8051 ( AT89C51 ) để thực hiện các hoạt động này. Hạn chế chính của các cảm biến dựa trên IR là khả năng phát hiện khoảng cách ngắn.
MÔ TẢ:
- Dự án này chủ yếu bao gồm ba đơn vị: một đơn vị cảm biến, một thành phần ADC và mô-đun LCD.
Bộ thu hồng ngoại phát hiện các bức xạ hồng ngoại được truyền bởi một đèn LED hồng ngoại . Mức điện áp đầu ra của cảm biến hồng ngoại này phụ thuộc vào cường độ của tia hồng ngoại mà máy thu nhận được. Cường độ, lần lượt, phụ thuộc vào khoảng cách giữa mô-đun cảm biến và chướng ngại vật. Khi khoảng cách giữa cặp IR và chướng ngại vật nhỏ hơn, bức xạ hồng ngoại rơi vào máy thu nhiều hơn và ngược lại. Máy thu cùng với một điện trở tạo thành một bộ chia điện áp có đầu ra được cung cấp làm đầu vào choADC0804.
MÃ:
//Program to interface IR sensor using ADC 0804. Set Vref =1.5v for ADC 0804 #include<reg51.h> #define port P3 #define adc_input P1 #define dataport P0 #define sec 100 sbit rs = port^0; sbit rw = port^1; sbit e = port^2; sbit wr= port^3; sbit rd= port^4; sbit intr= port^5; int test_final=0 ,shift=0; void delay(unsigned int msec ) // Time delay function { int i ,j ; for(i=0;i<msec;i++) for(j=0; j<1275; j++); } void lcd_cmd(unsigned char item) // Function to send command to LCD { dataport = item; rs= 0; rw=0; e=1; delay(1); e=0; return; } void lcd_data(unsigned char item) // Function to send data to LCD { dataport = item; rs= 1; rw=0; e=1; delay(1); e=0; return; } void lcd_data_string(unsigned char *str) // Function to send string to LCD { int i=0; while(str[i]!='\0') { lcd_data(str[i]); i++; delay(1); } return; } void convert() { int s; lcd_cmd(0x81); delay(2); lcd_data_string("output:"); s=test_final/100; test_final=test_final%100; lcd_cmd(0x8a); if(s!=0) lcd_data(s+48); else lcd_cmd(0x06); s=test_final/10; test_final=test_final%10; lcd_data(s+48); lcd_data(test_final+48); lcd_data(' '); if(shift>16) { lcd_cmd(0xc0+(shift-1)); lcd_data_string(" "); shift=0; } lcd_cmd(0xc0+(shift-1)); lcd_data(' '); lcd_cmd(0xc0+shift); lcd_data_string("CALIBRATE IT"); delay(30); } void main() { adc_input=0xff; lcd_cmd(0x38); //2 Line, 5X7 Matrix lcd_cmd(0x0c); //Display On, Cursor Blink delay(2); lcd_cmd(0x01); // Clear Screen delay(2); lcd_cmd(0x81); // Setting cursor to first position of first line delay(2); while(1) { shift++; delay(1); rd=1; wr=0; delay(1); wr=1; while(intr==1); rd=0; test_final=adc_input; delay(1); intr=1; convert(); } }
Không có nhận xét nào:
Đăng nhận xét