Store and share experiences about robocon, IoT, Embedded...
  • Home
  • Linux
  • Window
    • Latex
    • Matlab
  • Embedded programming
    • Jetson Tx1
    • Raspberry Pi
    • Raspberry Pico
  • Internet of things
    • HTTP+MySQL cho IoT
    • Websocket+Nodejs
    • ESP32
  • Electronics and robots
    • Robocon
    • Arduino
    • RISCV
    • FPGA
  • Network and devices
    • Basic CCNA
  • IoT Server
  • Q&A (Hỏi đáp)
  • About
No Result
View All Result
  • Home
  • Linux
  • Window
    • Latex
    • Matlab
  • Embedded programming
    • Jetson Tx1
    • Raspberry Pi
    • Raspberry Pico
  • Internet of things
    • HTTP+MySQL cho IoT
    • Websocket+Nodejs
    • ESP32
  • Electronics and robots
    • Robocon
    • Arduino
    • RISCV
    • FPGA
  • Network and devices
    • Basic CCNA
  • IoT Server
  • Q&A (Hỏi đáp)
  • About
No Result
View All Result
Store and share experiences about robocon, IoT, Embedded...
No Result
View All Result
Home Điện tử- Robot Robocon

[Share] Cảm biến dò đường dùng ADC- Atmega8 tự động lấy mẫu sân

Một trong những bài toán đầu tiên khi tham gia robocon là dùng cảm biến dò đường, mặc dù bây giờ có thể nhiều đội sử dụng những công nghệ hiện đại, không cần dò line vẫn chạy vèo vèo, thậm chí còn chính xác và ít lỗi hơn dò line.

admin by admin
February 28, 2023
in Robocon
1 0
41

Một trong những bài toán đầu tiên khi tham gia robocon là dùng cảm biến dò đường, mặc dù bây giờ có thể nhiều đội sử dụng những công nghệ hiện đại, không cần dò line vẫn chạy vèo vèo, thậm chí còn chính xác và ít lỗi hơn dò line. Tuy nhiên, đây là bài toán cơ bản. Cũng như những bạn từng tham gia robocon, mình đã vướng nhiều khó khăn trong việc sử dụng quang trở làm cảm biến dò đường, đặc biệt nếu dùng thủ công với IC LM339. Sau khi đã sử dụng các module cảm biến dò đường của TME, HLAB,…Mình quyết định tự chế riêng một module ADC dò đường, chạy tương đối ổn. Bây giờ thì  không còn duyên với robocon nên mình share lại project này, hi vọng sẽ có bạn làm được cái gì đó với những chia sẻ của mình.

Đây là video test mạch, còn thực tế thì module này đã trinh chiến nhiều trong các cuộc thi robocon của trường SQTT rồi, đảm bảo ngon, bổ, rẻ, học được nhiều thứ ( Cách khai báo, đọc ADC trên AVR, đọc, ghi vào ROM của AVR,…)

Video Robot trường Đại học thông tin liên lạc- Nha Trang năm 2017, sử dụng dò line qua ADC và bộ cảm biến góc do ad tự ráp bằng MPU6050 và Arduino Promini

Trong bài, mình share cho các bạn file mô phỏng trên Proteus, dùng ATmega8. Còn mạch thực tế thì như trong video.

Đây là file proteus mô phỏng

Trong phần thiết kế này, các linh kiện chính được sử dụng như sau:

+ Chip Atmega8, 8Mhz

+ 8 biến trở ( mô phỏng cho 8 mắt cảm biến sử dụng quang trở)

+ 2 nút nhấn cho sử dụng lấy mẫu sân

+ 8 led cho hiển thị báo lấy mẫu và trong quá trình đọc vạch trên sân

Trong các thành phần trên, 8 biến trở được đưa vào 8 chân của PORTC, 8 led được nối vào PORTD, 2 nút nhấn nối lần lượt PB0/PORTB và PB1/PORTB

Cách chạy mo phỏng trên Proteus các bạn tham khảo video dưới đây:

  • Cách sử dụng  file mô phỏng:

+ Đầu tiên cần chọn nguồn xung clock 8Mhz, chọn file hex sau khi đã biên dịch

+ Chọn nút RUN trên proteus

+ Điều chỉnh quang trở về vị trí thấp nhất ( gần với GND) tương đương với việc chúng ta đưa mắt cảm biến về phía đường line. Nhấn vào swicth bên phải, sẽ thấy hàng led sáng chạy lần lượt từ phải qua trái, lúc này module đã lấy được giá trị về ngưỡng sáng tại line

+ Tiếp tục điều chỉnh quang trở về chính giữa, tượng trưng cho việc chúng ta để mắt cảm biến vào toàn bộ nền sân xanh hoặc đỏ. Nhấn nút còn lại, ta sẽ thấy đèn led sáng chạy từ trái qua phải và nhấp nháy. Vậy là ok. 

+ Test bằng cách kéo vị trí quang trở lại về phía GND, đèn LED tương ứng với quang trở sẽ sáng, biểu diễn cho ta mắt quang trở đã nhận thành công đường line.

  • chú ý: Tất cả thao tác dùng biến trở trên sẽ không làm trên mạch thật, lúc này chỉ cần đưa mắt cảm biến vào các vị trí tương ứng và nhấn nút.

Mã nguồn cho phần mô phỏng

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
//============================================== Telecommunications University===================
// Author : DoNgocTuan / Department of Telecommunication Technology                                                        
// Email:   ngoctuansqtt@gmail.com
// Phone:   xxxxxxxxxx
// Date :   21/12/2016                                                        
// Version: 1.1                                                                                                                                
// Description: This module is used to detect the white line on many background colors
// ============================================== make myselft===================================    
 
#include <stdio.h>
#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include <util/delay.h>
 
#define ADC_VREF_TYPE 0x20  
uint8_t eeprom_read_byte (const uint8_t *addr) ;
 
 
#define AREF_MODE 0        //dien ap tham chieu ngoai, dien ap tren chan Vref
#define AVCC_MODE (1<<REFS0)     //dung dien ap chan AVcc lam dien ap tham chieu,
                                       //chan Vref gan voi 1 tu dien
#define INT_MODE (1<<REFS1)|(1<<REFS0) //dung dien ap tham chieu noi 2.56V,
                                                //chan Vref gan voi 1 tu dien
#define ADC_VREF_TYPE AVCC_MODE         //dinh nghia dien ap tham chieu
 
#define sbi(sfr,bit) sfr|=_BV(bit)    // các macro cho set bit và clear bit
#define cbi(sfr,bit) sfr&=~(_BV(bit)) // các macro cho set bit và clear bit
 
 
uint16_t read_adc(unsigned char adc_channel) //chuong trinh con doc ADC theo tung channel
{
    ADMUX=adc_channel|ADC_VREF_TYPE;
    ADCSRA|=(1<<ADSC);             //bat dau chuyen doi            
    loop_until_bit_is_set(ADCSRA,ADIF);     //cho den khi nao bit ADIF==1  
    return ADCW;
}
uint16_t ADC_val[8];                                                  
unsigned char  w[8] = {1,2,4,8,16,32,64,128};
unsigned int  sensor;
uint16_t temp_adc[8]={0,0,0,0,0,0,0,0} ;  // mang rom luu gia tri lay ma so sanh
uint16_t mau_adc[8]={0,0,0,0,0,0,0,0} ;  // mang rom luu gia tri lay ma so sanh
uint16_t value_rom[8]={0,0,0,0,0,0,0,0} ;
uint16_t value_trang[8]={0,0,0,0,0,0,0,0} ;
 
void value_trang_luu()    // lấy giá trị adc hiện tại lưu vào mảng
{
char j;
for(j=0;j<8;j++)
{
value_trang[j]= read_adc(j);
}
}
 
void ghi_adc_in_rom (void) // chuong trinh thuc hien ghi ADC vao ROM
{  
      uint8_t i,x;
   for(i=0;i<8;i++)
   {
x=46+2*i;                                 // lấy giá trị địa chỉ
   value_rom[i]= (ADC_val[i]+ value_trang[i])/2;  // Giá trị lưu để so sánh là trung bình cộng //của giá trị lấy mẫu vạch trắng và giá trị lấy mẫu nền sân
   eeprom_write_word((uint16_t *)x,value_rom[i] );
          _delay_ms(10);    // thuc hien tre thoi gian ghi
   }
  
}
void doc_rom(void)    // thuc hien viec doc
{
    uint8_t j,x;
    for(j=0;j<8;j++)
    {
         x=46+2*j;
ADC_val[j] = read_adc(j);
temp_adc[j] = eeprom_read_word((uint16_t *)x) ;
mau_adc[j]= temp_adc[j];
}
return mau_adc;
}
 
 
// ha
void doc_adc(void)    // thuc hien viec doc
{
    uint8_t j;
sensor = 0x00;
    for(j=0;j<8;j++)
    {
        
ADC_val[j] = read_adc(j);
if((mau_adc[j]) < ADC_val[j])  // kiem tra so sanh voi gia tri ADC mau
        {          
char t;
   for(t=0;t<5;t++)
   {
   _delay_ms(1);               // chống nhiễu
   if((mau_adc[j]) >= ADC_val[j]) goto exit_t;
   }
sensor |= w[7-j];  // thuc hien cong don gia tri
exit_t: ;
        }              
        else sensor |= 0;
    }
 
     PORTD=sensor;
}
 
// hàm báo hiệu lưu ROM bằng chạy led
void led_save_rom()
{
PORTD=0xFF;
char i;
for(i=0;i<8;i++)
{
cbi(PORTD,i);
_delay_ms(50);
}
PORTD=0xFF;
for(i=0;i<3;i++)
{
PORTD=0;
_delay_ms(50);
PORTD=0xFF;
_delay_ms(50);
}
}
 
void led_save_value_trang()
{
PORTD=0xFF;
char i;
for(i=8;i>1;i--)
{
cbi(PORTD,i);
_delay_ms(50);
}
PORTD=0xFF;
}
 
// ham luu gia tri vao ROM
void save_rom()
{  
_delay_ms(2);
if(bit_is_set(PINB,0)) goto out_noise;  
_delay_ms(2);
if(bit_is_set(PINB,0)) goto out_noise;
_delay_ms(2);
if(bit_is_set(PINB,0)) goto out_noise;
_delay_ms(2);
if(bit_is_set(PINB,0)) goto out_noise;
_delay_ms(2);
if(bit_is_set(PINB,0)) goto out_noise;                        
while(bit_is_clear(PINB,0));
ghi_adc_in_rom();
    led_save_rom();
out_noise: ;      
}
 
 
int main(void)
{
 
//start ADC=============//
ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS0); //enable ADC, khong dung interrupt
ADMUX=ADC_VREF_TYPE; //chon kieu dien ap tham chieu    
//======================//
 
 
PORTC = 0X00; // PORT nhan ADC
DDRC = 0x00;  // PORT nhan ADC
 
PORTD = 0xFF; // PORT xuat tin hieu den MCU
DDRD = 0xFF;  // PORT xuat tin hieu den MCU
 
PORTB = 0xFF;  // PORT nhan nut nhan
DDRB =0;
 
doc_rom();
 
while (1)
{
if(bit_is_clear(PINB,0))   // Nhấn nút này để so sánh với nền sân và lưu giá                cần dùng vào ROM
         {  
       save_rom();
_delay_ms(100);
doc_rom();
}
 
        if(bit_is_clear(PINB,1)) // Nhấn nút này để lưu giá trị vạch
      
                          {
while (bit_is_clear(PINB,1));
     value_trang_luu();
led_save_value_trang();
           }
 
         doc_adc();
           
}
      
} // main

Toàn bộ source code trên được viết và biên dịch trên AVR Studio4

Vì đây là phiên bản 1, và cũng chưa có cơ hội dùng thêm để nâng cấp thuật toán, nên phần tính toán ngưỡng so sánh chỉ là một việc đơn giản đó là lấy trung bình cộng của giá trị tại line trắng và giá trị tại nền sân xanh/đỏ.

File Schematic và PCB Altium module này dowload 3 file theo link dưới đây:

        ADC_module.PrjPCB

        adc_module.SchDoc

        adc_module.PcbDoc

File mã nguồn C và project AvrStudio4

      adc_rbc_atmega8.aps

      adc_rbc_atmega8.c

      adc_rbc_atmega8.hex

File hướng dẫn set fulse bit

set fuse bit ADC atmega8.docx

 

*** Cần chú ý về thanh cảm biến của mình, theo kinh nghiệm thì quang trở đặt cao bằng 1 nửa con led trắng. Đồng thời các bạn mua ống GEN hơ lửa ( loại mà các bạn hay dùng để bọc mối nối dây điện) bọc vào con đèn LED trắng, để cho ánh sáng không tỏa ra xung quanh, chỉ hướng xuống dưới thôi, như vậy sẽ tránh được nhiễu ánh sáng, làm mạch hoạt động không chính xác ***

  • Bài viết chia sẻ về thiết kế mắt cảm biến cho robot
  • Hướng dẫn thiết lập fulse bit, đấu nối với cảm biến và boar mạch điều khiển

 

 

 

 

 

 

 

 

 

 

 

Số lượt xem: 2,015
Tags: ADC atmega8atmegaavrdò đường ADCrobocon dò đườngROM Atmega8

Related Posts

[Robocon cơ bản]- Lập trình dò đường cơ bản

[Robocon cơ bản]- Lập trình dò đường cơ bản

February 28, 2023
3.1k
[Robocon cơ bản]- Thiết kế mạch điều khiển cơ bản với AVR Atmega64/128

[Robocon cơ bản] Xử lý nhận nút nhấn, công tắc hành trình cho Robot.

November 18, 2019
1.3k
[Robocon cơ bản]- Thiết kế mạch điều khiển cơ bản với AVR Atmega64/128

[Robocon cơ bản]- Khai báo cơ bản cho các cổng vào ra trên vi điều khiển AVR Atmega64/128

November 12, 2019
1.9k

Comments 41

  1. chung says:
    3 years ago

    anh ơi cho em xin file Schematic và PCB Altium với ạ

    Reply
    • admin says:
      3 years ago

      Email của bạn là gì nhỉ?

      Reply
    • admin says:
      3 years ago

      Đã gửi nhé!

      Reply
      • Lương Hồng Hải says:
        3 years ago

        a cho e xin file PCB và schematic với a. email: amencrazy99@gmail.com

        Reply
        • admin says:
          3 years ago

          Sent!

          Reply
          • Hải says:
            3 years ago

            E cảm ơn a. E đã làm xong mạch in và test. Nhưng trong các điều kiện ánh sáng khác nhau thì dò line sẽ bị lỗi do con quang trở. A có thể cho e xin kinh nghiệm fix lỗi này không ạ. E cảm ơn a

          • admin says:
            3 years ago

            chào bạn, với điều kiện ánh sáng trên sân thi đấu thì thực sự là điều rất lo ngại với người làm robot. tuy nhiên điều kiện thay đổi độ sáng trên sân thi đấu có lẽ rất ít, trừ khi bạn đi vào các vùng có nền sân sơn màu chưa đều. Còn trước đây mình chỉ dùng một cách khắc phục đó là làm hộp che cảm biến, tránh ánh sáng phía trên hắt xuống. mình cố gắng để quang trở chỉ nhận ánh sáng từ led trắng thôi.

          • admin says:
            3 years ago

            Bạn cũng cần chú ý về thanh cảm biến của mình, theo kinh nghiệm thì quang trở của mình đặt cao bằng 1 nửa con led trắng. Đồng thời các bạn mua ống GEN hơ lửa ( loại mà các bạn hay dùng để bọc mối nối dây điện) bọc vào con đèn LED trắng, để cho ánh sáng không tỏa ra xung quang, chỉ hướng xuống dưới thôi.

      • PHUC says:
        2 years ago

        mạch này anh có bán full không ạ

        Reply
        • admin says:
          2 years ago

          MÌnh ko còn làm mạch nữa nên tất cả file thiết kế và code sử dụng mình đã post hết trong bài rồi, bạn chịu khó đọc và lấy link download nhé.

          Reply
  2. Sơn says:
    3 years ago

    Cho em xin file Sch vs PCB vs ạ
    sondamde98@gmail.com

    Reply
    • admin says:
      3 years ago

      Sent!

      Reply
      • Danh Lâm says:
        3 years ago

        Ad cho e xin file sch và pcb với ạ.

        Reply
  3. Thao says:
    3 years ago

    Em xin sch với pcb với ạ
    Hoanganhthao16031998@gmail.com

    Reply
    • admin says:
      3 years ago

      Sent!

      Reply
      • Danh Lâm says:
        3 years ago

        Cho e xin file sch và pcb vơi ạ
        làm.danh30@yahoo.com

        Reply
        • admin says:
          3 years ago

          Sent!

          Reply
  4. ngoluc says:
    3 years ago

    cho em xin sch vs pcb vs ạ

    Reply
    • ngoluc says:
      3 years ago

      phamhuongabc98@gmail.com

      Reply
    • admin says:
      3 years ago

      Sent!

      Reply
  5. Thao says:
    3 years ago

    Mạch nạp cho con chip dán này thế nào ạ

    Reply
    • admin says:
      3 years ago

      mạch nạp này dùng STK500 nhé, trong thiết kế đã có chân cắm để cắm thẳng vào STK500 không cần cáp

      Reply
  6. Dien says:
    3 years ago

    cho e với ạ ad
    ddien0502@gmail.com

    Reply
    • admin says:
      3 years ago

      Sent!

      Reply
    • Hoàng Trần says:
      3 years ago

      Cho e xin file PCB kenztran1999@gmail.com

      Reply
  7. Tráng says:
    3 years ago

    Cho em xin với à. mạch này nạp có phải set bit gì không anh nhỉ?
    congtrangskv@gmail.com

    Reply
    • admin says:
      3 years ago

      Có nhé, nhưng do bài viết dài quá nên anh sẽ post phần set fulse bit bài khác, sắp thôi. PCB sent!

      Reply
      • Tráng says:
        3 years ago

        dạ, em cảm ơn anh ạ

        Reply
  8. Hiep says:
    3 years ago

    Anh ơi cho em xin với ạ, mail em là leduyhiep31509@gmail.com ạ, em cám ơn anh ạ

    Reply
    • admin says:
      3 years ago

      Sent! Các hướng dẫn và cách sử dụng bạn tìm trong mục Điện tử Robot nhé!

      Reply
  9. do van tu says:
    3 years ago

    cho em xin với ạ gmail: lienytu@gmail.com

    Reply
    • admin says:
      3 years ago

      Sent!

      Reply
  10. Khánh Phạm says:
    3 years ago

    Anh ơi cho em xin với ạ, email em là wolfram161@gmail.com ạ, em cám ơn anh rất nhiều.

    Reply
    • admin says:
      3 years ago

      Sent!

      Reply
  11. Nguyễn tấn an says:
    3 years ago

    Anh ơi cho e file sch vs pcb với ạ em xin cảm ơn ạ
    Zing9001@gmail.com

    Reply
    • admin says:
      3 years ago

      Đã gửi nhé!

      Reply
  12. Nguyen says:
    3 years ago

    Anh ơi , cho em xin file sch vs pcb với.
    Em cảm ơn!
    languyentst@gmail.com

    Reply
    • admin says:
      3 years ago

      Ok, Sent!

      Reply
  13. Hà says:
    3 years ago

    Cho em xin file sch và pcb với ạ. Em xin cảm ơn

    Reply
    • admin says:
      3 years ago

      Anh đưa link tải vào cuối bài viết rồi mà em!

      Reply
  14. Vũ Minh says:
    3 years ago

    Anh cho em xin thư viện pcb và thư viện sch với ạ, em cảm ơn.
    lightninglance.vpa@gmail.com

    Reply

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Bài viết đọc nhiều

IoT Webserver- ESP8266/ESP32 gửi dữ liệu lên Cloud, hiển thị ra trình duyệt web với MySQL và PHP

IoT Webserver- ESP8266/ESP32 gửi dữ liệu lên Cloud, hiển thị ra trình duyệt web với MySQL và PHP

February 9, 2023
17.6k
Điều khiển ESP8266/ESP32 từ xa qua internet, không cần mở Port modem

Điều khiển ESP8266/ESP32 từ xa qua internet, không cần mở Port modem

November 7, 2019
10.7k
ESP32-CAMERA: Cài đặt môi trường Arduino IDE và nạp chương trình

ESP32-CAMERA: Cài đặt môi trường Arduino IDE và nạp chương trình

December 27, 2019
7.3k
IoT webserver- Gửi thông báo bằng email từ ESP8266 không dùng IFTTT

IoT webserver- Gửi thông báo bằng email từ ESP8266 không dùng IFTTT

November 19, 2020
5.7k
Store and share experiences about robocon, IoT, Embedded…

Lưu và chia sẻ những gì đã đọc, đã làm, đã nghiên cứu về vi điều khiển, hệ thống nhúng, internet of things, kiến trúc máy tính và hệ điều hành.

Liên hệ với quản trị viên

Chủ đề

  • Arduino
  • CCNA cơ bản
  • Cisco
  • Điện tử- Robot
  • ESP32
  • FPGA
  • HTTP+MySQL cho IoT
  • IoT Server
  • Jetson Tx1
  • Lập trình nhúng
  • Latex
  • Linux
  • Mạng và thiết bị mạng
  • Raspberry Pi
  • Raspberry Pico
  • RISCV
  • Robocon
  • Web of things
  • Websocket+Nodejs
  • Window
  • WordPress

Quản trị trang

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org

© 2019- 2023 luuvachiase.net - Phát triển và quản trị bởi Đỗ Ngọc Tuấn và Nguyễn Văn Tuấn ***Vui lòng ghi rõ nguồn khi trích dẫn bài viết từ Website này. DMCA.com Protection Status

No Result
View All Result
  • Trang chủ
  • Linux
  • Window
  • Lập trình nhúng
    • Jetson Tx1
    • Raspberry Pi
  • Web of things
    • HTTP+MySQL cho IoT
    • Websocket+Nodejs
  • Điện tử- Robot
    • Robocon
    • Arduino
    • RISCV
    • FPGA
  • Mạng và thiết bị mạng
    • CCNA cơ bản
  • IoT Server
  • Giới thiệu
  • Q&A (Hỏi đáp)

© 2019- 2023 luuvachiase.net - Phát triển và quản trị bởi Đỗ Ngọc Tuấn và Nguyễn Văn Tuấn ***Vui lòng ghi rõ nguồn khi trích dẫn bài viết từ Website này. DMCA.com Protection Status

Login to your account below

Forgotten Password?

Fill the forms bellow to register

All fields are required. Log In

Retrieve your password

Please enter your username or email address to reset your password.

Log In