Thứ Sáu, 7 tháng 12, 2018

Đo Khoảng Cách Bằng Cảm Biến InfraRed Với Vi Điều Khiển ADC0804 & 8051 (AT89C51)

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();
    
    }
    
    }
    
    
CÁC THÀNH PHẦN:
  • Đèn LED hồng ngoại | Đèn LED hồng ngoại
  • Vi điều khiển AT89C51
  • Đặt trước
  • ADC0804
  • LCD 

Không có nhận xét nào:

Đăng nhận xét

Bài đăng mới nhất

ALEPH-M CLASS A ANFİ DEVRESİ N KANAL MOSFET

Aleph-M çıkış gücü yaplaşık olarak 35w Class A sınıfı anfi için oldukca iyi bir değer çıkış modfetleri n kanal 2 adet irfp240 kullanılmış be...

Bài đăng phổ biến