Cảm Biến Siêu Âm US-100 - US100 Cách Sử Dụng

Chào các bạn!
Chắc các bạn không còn lạ lẫm gì với các loại cảm biến siêu âm để đo khoảng cách như SRF05,SRF04 … .Hôm nay mình xin giới thiệu đến các bạn một loại cảm biến siêu âm khác không những dùng để đo khoảng cách mà nó còn tích hợp để đo được cả nhiệt độ .Nó là cảm biến US100
1- Các thông số cơ bản :

  • Điện áp sử dụng : 3-5V

  • Dải đo : 2cm - 350cm

  • Chuẩn I/O : TTL

  • Kích thước PCB : 20mmx45mm
    2.Giao tiếp
    Trong nội dung bài viết này mình chỉ giới thiệu đến các bạn cách giao tiếp với module qua UART
    Để giao tiếp được với module bằng UART các bạn cần phải cắm jum trên module như sau :
    upload_2015-12-22_16-47-12
    Ở đây mình dùng KIT phát triển ATmega8 V2 New để giao tiếp với module
    Sơ đồ kết nối KIT với module như sau :
    upload_2015-12-22_16-45-51
    Giao tiếp với module bằng UART rất đơn giản
    Để lấy giá trị trả về khoảng cách các bạn chỉ cần gửi qua UART lên module lệnh 0x55 .Sau khi nhận lệnh 0x55 thì module sẽ trả về cho các bạn 2 byte dữ liệu .
    Công thức tính khoảng cách từ 2 byte này như sau
    Khoảng cách = Byte[0]*256 + Byte[1] .Đơn vị là milimet
    Còn nếu muốn đo nhiệt độ thì các bạn gửi qua UART lên module lệnh 0x50 .Sau khi nhận lệnh 0x50 thì module sẽ trả về cho bạn 1 byte dữ liệu
    Công thức tính nhiệt độ dựa vào 1 byte này như sau
    Nhiệt độ = Byte - 45 .Đơn vị là độ C
    Rất đơn giản phải không các bạn .
    Đây là code mình viết trên kit ATmega8 V2 New .Các bạn có thể tham khảo
    #include “Main/main.h”
    #include “ProjecLib/Include/var.h”

    // Declare your global variables here
    #if (__MAIN_H != 27042014)
    #error “File include main.h chua dung version!!!”
    #endif

    // Timer1 overflow interrupt service routine
    interrupt [TIM1_OVF] void timer1_ovf_isr(void)
    {
    TCNT1H=0xFB4F;
    Flag = 1;
    Index =0;

    }
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
    // Reinitialize Timer 0 value
    TCNT0=0xB0;
    // Place your code here
    Dem1++;
    if(Dem1 == 10)
    {
    Select++;
    if(Select > 2)
    {
    Select = 1;
    }
    }
    }
    void main(void)
    {
    uint8_t i;
    uint8_t str[20];
    float KhoangCach,NhietDo;
    GPIO_Config();
    LCD16X2_Init();
    USART_Init(9600,USART_TX|USART_RX|USART_INTERRUPT_RX);
    #asm(“sei”)
    LCD16X2_Gotoxy(0,0);
    LCD16X2_PutString(“TEST SRF”);
    USART_PutString(“OK UART”);
    for(i=0;i<50;i++)
    {
    UART_Buffer_RX[i] = 0;
    }
    delay_ms(1000);
    LCD16X2_Clear();
    while(1)
    {
    if(Select == 2)
    {
    USART_PutChar(0x55);
    }
    if(Select == 1)
    {
    USART_PutChar(0x50);
    }
    if(Flag)
    {
    Flag = 0;
    if(Select == 2)
    {
    KhoangCach = (uint16_t)(UART_Buffer_RX[0]*256)+UART_Buffer_RX[1];
    KhoangCach /= 10;
    if((KhoangCach > 3)&&(KhoangCach < 350))
    {
    sprintf(str,“KhoangCach: %2.2f cm”,KhoangCach);
    LCD16X2_Gotoxy(0,1);
    LCD16X2_PutString(str);
    }
    else
    {
    sprintf(str," Error ");
    LCD16X2_Gotoxy(0,1);
    LCD16X2_PutString(str);
    }
    }
    if(Select==1)
    {
    NhietDo = UART_Buffer_RX[0] - 45;
    sprintf(str,"NhietDo: %2.2f ",NhietDo);
    LCD16X2_Gotoxy(0,0);
    LCD16X2_PutString(str);
    }
    }
    delay_ms(50);
    }
    }
    Nguồn: http://hocdientu.vn/threads/giao-tiep-cam-bien-khoang-cach-nhiet-do-us100-qua-uart.6101/
    Tải Code Tại Đây: SRF_UART.rar (184.9 KB)