Hướng dẫn Sensor dò line dùng ADC

Hồng Quang

Học sinh phổ thông
#11
mọi người cho mình hỏi khi xe tới ngã ba hoặc ngã tư, làm sao để điều chỉnh xe chạy như ý mình mong muốn như đi thẳng, hoặc quẹo phải, trái, sr nếu hỏi ngớ ngẩn vì mình thực sự bắt đầu làm AGV mà còn cực kỳ gà con:|
 

mta_cdt

Super Moderator
Thành viên BQT
#12
mọi người cho mình hỏi khi xe tới ngã ba hoặc ngã tư, làm sao để điều chỉnh xe chạy như ý mình mong muốn như đi thẳng, hoặc quẹo phải, trái, sr nếu hỏi ngớ ngẩn vì mình thực sự bắt đầu làm AGV mà còn cực kỳ gà con:|
Bạn bắt ngã tư nhé (kiểm tra có 6 led hoặc ít hơn tùy hình dạng của ngã tư có vuông hay không). Khi bắt được ngã tư rồi thì điều khiển xe thế nào thì tùy bạn chứ. Tiến thì cả 2 bánh cùng tiến, lùi thì cả 2 bánh cùng lùi, rẽ thì 1 bên tiến 1 bên lùi vậy thôi.
 

Hồng Quang

Học sinh phổ thông
#13
Bạn bắt ngã tư nhé (kiểm tra có 6 led hoặc ít hơn tùy hình dạng của ngã tư có vuông hay không). Khi bắt được ngã tư rồi thì điều khiển xe thế nào thì tùy bạn chứ. Tiến thì cả 2 bánh cùng tiến, lùi thì cả 2 bánh cùng lùi, rẽ thì 1 bên tiến 1 bên lùi vậy thôi.
cảm ơn bạn
 

Blade_tuan

Học sinh phổ thông
#14
Anh dainv cho em hỏi thiết kế cái mạch trên thì khoảng cách giữa các led phát là bao nhiêu thế ạ??
 
#15
Mình Up tiếp phần sơ đồ nguyên lý lên cho các bạn. Nói chung sơ đồ này mình đã chỉnh sửa từ sơ đồ cũ nên mình nghĩ nó sẽ là ổn định nhất. Các bạn chú ý mình dùng Atmega8 kiểu SMD nên mới có đủ 8 ADC còn Atmega8 kiểu chân DIP chỉ có 6 ADC thôi. Và khi dùng Full 8 ADC thì chúng ta chỉ có thể dùng kiểu 8bit thôi.
Xem đính kèm 4959
Sơ đồ của thớt ẩu rồi, các điều kiện sân bãi, ánh sáng, ngày đêm đó ta cứ gọi nó là nhiễu. Vậy vấn đề ở đây là lọc nhiễu. THớt có thể lọc bằng code haowjc bằng phần cứng hoặc cả 2. Tuy nhiên việc lọc bằng phần cứng bao giờ cũng đơn giản và hiệu quả nhất. Từ cổng ADC đi vào đấy thớt gắn vs 1 tụ gốm 104, sau đấy gắn 1 diode song song vs tụ gốm đấy, rồi nối tiếp trở 1M (trở này ko có cũng ko sao vì mạch này không cần tới.)
Và nên có thêm 1 cổng vào nữa gọi là cổng môi trường, công đó dùng để lấy thông số cho code tự auto offset.
 

Blade_tuan

Học sinh phổ thông
#16
Sơ đồ của thớt ẩu rồi, các điều kiện sân bãi, ánh sáng, ngày đêm đó ta cứ gọi nó là nhiễu. Vậy vấn đề ở đây là lọc nhiễu. THớt có thể lọc bằng code haowjc bằng phần cứng hoặc cả 2. Tuy nhiên việc lọc bằng phần cứng bao giờ cũng đơn giản và hiệu quả nhất. Từ cổng ADC đi vào đấy thớt gắn vs 1 tụ gốm 104, sau đấy gắn 1 diode song song vs tụ gốm đấy, rồi nối tiếp trở 1M (trở này ko có cũng ko sao vì mạch này không cần tới.)
Và nên có thêm 1 cổng vào nữa gọi là cổng môi trường, công đó dùng để lấy thông số cho code tự auto offset.
Sơ đồ của thớt ẩu rồi, các điều kiện sân bãi, ánh sáng, ngày đêm đó ta cứ gọi nó là nhiễu. Vậy vấn đề ở đây là lọc nhiễu. THớt có thể lọc bằng code haowjc bằng phần cứng hoặc cả 2. Tuy nhiên việc lọc bằng phần cứng bao giờ cũng đơn giản và hiệu quả nhất. Từ cổng ADC đi vào đấy thớt gắn vs 1 tụ gốm 104, sau đấy gắn 1 diode song song vs tụ gốm đấy, rồi nối tiếp trở 1M (trở này ko có cũng ko sao vì mạch này không cần tới.)
Và nên có thêm 1 cổng vào nữa gọi là cổng môi trường, công đó dùng để lấy thông số cho code tự auto offset.
vậy thế nên sửa như thế nào ạ??
Và cái khoảng cách giữa các led là bao nhiêu thì vừa đủ cho vạch trắng rộng 3cm ạ
 
#17
vậy thế nên sửa như thế nào ạ??
Và cái khoảng cách giữa các led là bao nhiêu thì vừa đủ cho vạch trắng rộng 3cm ạ
đây là 1 mạch lọc đầu vào đơn giản, trở R1 và R3 chỉ là chia áp thôi nên nó phụ thuộc vào mạch và vi điều khiển. Trở R2 giá trị tầm 1M để bào vệ vdk (có thể có hoặc không).
Mình chưa làm xe dò line bao giờ :3
Vào chém thế thôi chứ chưa làm. Hihi.

upload_2016-7-23_11-22-43.png

O:)O:)O:)O:)O:)O:)O:)%-(%-(%-(%-(%-(%-(
 

xuanhuu123

Học sinh trung cấp
#18
Bận quá nên quyên không UP code lên cho các bạn tham khảo.
Hiện tại code này đã chạy nhưng hôm nào rỗi rỗi mình sẽ viết lại y hệt các mạch sensor họ đang bán trên thị trường cho mọi người.
Mã:
// Vesion 1.0
#include <mega8.h>
#include <delay.h>
#include <stdio.h>

#define ADC_VREF_TYPE 0x20

unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
                                                  
unsigned char temp_adc[8]={0,0,0,0,0,0,0};  // mang RAM doc ADC dung de so sanh
unsigned char w[8] = {1,2,4,8,16,32,64,128};
eeprom unsigned char mau_adc[8] ;  // mang rom luu gia tri lay ma so sanh
unsigned char sensor = 0x00;

#define button PINB.0
#define out_sensor PORTD

void ghi_adc_in_rom (void) // chuong trinh thuc hien ghi ADC vao ROM
{
    unsigned char i;
    for(i=0;i<8;i++)
    {
        mau_adc[i] = read_adc(i);
        delay_ms(20);    // thuc hien tre thoi gian ghi
    }
}

void doc_adc(void)    // thuc hien viec doc
{
    unsigned char j;
    sensor = 0x00;
    temp_adc[0] = read_adc(0);
    temp_adc[1] = read_adc(1);
    temp_adc[2] = read_adc(2);
    temp_adc[3] = read_adc(3);
    temp_adc[4] = read_adc(4);
    temp_adc[5] = read_adc(5);
    temp_adc[6] = read_adc(6);
    temp_adc[7] = read_adc(7);
    for(j=0;j<8;j++)
    {
        if((mau_adc[j]-3) < temp_adc[j])  // kiem tra so sanh voi gia tri ADC mau
        {
            sensor |= w[7-j];  // thuc hien cong don gia tri
        }              
        else sensor |= 0;
    }
}

void main(void)
{
PORTD = 0xFF;
DDRD = 0xFF;

PORTB = 0Xff;
DDRB = 0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 500.000 kHz
// ADC Voltage Reference: AREF pin
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
while (1)
      {
        if(!button)
        {                    
            while(!button);
            out_sensor = 0x00;
            ghi_adc_in_rom();
            delay_ms(100);  
        }
        doc_adc();
        out_sensor = sensor; // dua gia tri do duoc ra PORTD
                
      }
}
em xuất file hex để nạp chip nhưng bị lỗi. ad có thể chia sẻ file hex không ạ?
 

Quảng cáo Google