Trong thời đại công nghiệp hiện nay, robot ngày càng được sử dụng phổ biến trong sản suất cũng như trong cuộc sống con người. Robot đã có một vị trí quan trọng không thể thay thế được, nó giúp con người làm việc trong những điều kiện nguy hiểm khó khăn. Ngoài ra robot còn dung trong lĩnh vực thám hiểm không gian, quân sự, giải trí Lĩnh vực robot di động đang ngày càng được sự quan tâm của các nhà nghin cứu và xã hội. Đặc biệt robot dò đường là vấn đề thiết yếu của robot di động.
19 trang |
Chia sẻ: ngtr9097 | Lượt xem: 2239 | Lượt tải: 2
Bạn đang xem nội dung tài liệu Bài tập lớn Thiết kế robot dò dường, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Trường Đại Học Bách Khoa Hà Nội
Khoa Điện Tử Viễn Thông
*************
BÀI TẬP LỚN
MÔN HỌC : KIẾN TRÚC MÁY TÍNH
Đề tài :
THIẾT KẾ ROBOT DÒ DƯỜNG
Giáo viên hướng dẫn: Nguyễn Đức Minh
Sinh viên thực hiện:
1. Nguyễn Thế Trường
Lớp : CĐĐT3
MSSV: C0920321
2. Vũ Việt Hoàng
Lớp: CĐĐT3
MSSV: C0920307
3. Dương Đình Khánh
Lớp : CĐĐT3
MSSV: C0920311
4. Doãn Văn Trường
Lớp: CĐĐT3
MSSV: C0920369
5. Trần Dăng Chiến
Lớp: CĐĐT3
MSSV: C0820102
Hà Nội 10-2011
MỤC LỤC
Lời nói đầu
………………………………………………………………
Phần I : Giới thiệu đề tài
………………………………………………………………
Phần II : Cấu tạo
……………………………………………………………….
Phần III: Sơ đồ khối và sơ đồ nguyên lí
………………………………………….....................
Phần IV: Cách làm mạch và nguyên lí hoạt động của mạch
………………………………………………………………..
Phần V: Kết luận
………………………………………………………………..
LỜI NÓI ĐẦU
Trong thời đại công nghiệp hiện nay, robot ngày càng được sử dụng phổ biến trong sản suất cũng như trong cuộc sống con người. Robot đã có một vị trí quan trọng không thể thay thế được, nó giúp con người làm việc trong những điều kiện nguy hiểm khó khăn. Ngoài ra robot còn dung trong lĩnh vực thám hiểm không gian, quân sự, giải trí…Lĩnh vực robot di động đang ngày càng được sự quan tâm của các nhà nghin cứu và xã hội. Đặc biệt robot dò đường là vấn đề thiết yếu của robot di động.
THIẾT KẾ ROBOT DÒ ĐƯỜNG
PHẦN I: GIỚI THIỆU ĐỀ TÀI
1. Mục đích và yêu cầu
Thiết kế robot dò đường đi theo một đường đen vẽ sẵn.
Phần II: Cấu tạo
Vật liệu – linh kiện
. 2 x động cơ một chiều (DC motor )
. 4 x quang trở (3kOhm - 150kOhm)
. 4 x led trắng
. 4 x diode ( ở đây em thay bằng led )
. 1 x IC ATmega32
. 1 x IC LM324
. 1 x IC L293
. 12 x R10k
.
. 1 x thạch anh 12MHz
. băng dính
. giấy
. Nguồn 9Vol
Các đặc điểm của hệ vi xử lý ATmega32:
Vi điều khiển (VĐK) là một hệ vi xử lý được tổ chức trong một chíp. Nó bao gồm:
+ Bộ vi xử lý
+Giao diện SPI đồng bộ.
+ Có 40 chân
+ Có thể ghi xoá được 100,000 lần
+ Có 1024 Bytes EEPROM.
+ Dải tần số hoạt động từ 0MHz đến 16Mhz
+ Có 4 port xuất nhập (I/O) 8 bit
+ Có 2 Kbyte SRAM
+ Điện áp sử dụng 4.5V-5.5V
Hình2.2.1 : Sơ đồ chân của ATmega32
Hình 2.2.2 : Sơ đồ khối của ATmega32
+ GND(chân 11 và chân 31): Chân nối với 0V.
+ VCC(chân 10): Chân nối với 5V.
+ AVCC(chân 30) và AREF(chân 32): Chân điện thế so sánh nối với 5V.
+ Port A ( chân 33- 40), PortB ( chân 1-8), PortC ( chân 22-29) và PortD (chân 14-21) : là các chân vào ra của vi xử lí.
+ RST ( chân 9)
Ngõ vào reset. Mức cao trên chân này trong hai chu kỳ máy trong khi bộ dao động đang hoạt động sẽ reset của ATmega32
+ XTAL1& XTAL2: Là hai ngõ vào ra của hai bộ khuyếch đại đảo của mạch dao động, được cấu hình để dùng như một bộ tạo dao động trên chip
Hình2.2.3: Bộ tạo dao động
Các đặc điểm của cảm biến
Phần phát sử dụng led siêu sáng như led trắng. Led được nối tiếp với một điện trở hạn chế dòng 470 Ohm.
Phần thu sử dụng quang trở ( hình dưới). Điện trở phụ thuộc vào ánh sáng chiếu vào. Khi có ánh sáng mạnh là 150K Ohm còn khi không có ánh áng là 3K Ohm. Tín hiệu ra của phần thu xác định tại nút kết nối giữa quang trở và điện trở.
Đặc điểm bộ Opamp LM324
LM324 có khả năg khuếch đại tín hiệu từ ngõ ra phần thu ( ở đây là quang trở )
Ngõ vào bộ Opamp gồm cực (+) và (-), tín hiệu vào cực (+) lấy từ ngõ ra của phần thu cảm biến, tín hiệu vào cực (-) lấy từ nút kết nối giữa 2 điện trở 10K Ohm mắc nối tiếp ( Cầu phân áp ). Khi đó :
+ nếu V+ > V- thì ngõ ra của Opamp là ~ 5V ( mức logic 1)
+ nếu V+ < V- thì ngõ ra của Opamp là ~ 0V ( mức logic 0)
Đặc điểm phần động cơ và IC L293B
Động cơ DC
Motor DC hoạt động khi ta cấp 1 điện áp DC vào motor và 1 dòng điện 1 chiều chạy qua motor, motor sẽ quay theo chiều đó.
Nếu chúng ta đổi chiều điện áp 1 chiều này thì motor sẽ quay ngược lại
IC L293B
Để điều khiển motor DC ta dùng IC L293b (vì ta dùng động cơ loại nhỏ).
Vs là điện áp đặt vào motor và có thể lên đến 36Vol ( ở đây ta dùng 5Vol ).
Vss là điện áp so sánh ở đây ta cho bằng 5Vol. Dòng lớn nhất của L293B là 1.2A mỗi kênh. Một IC L293B có thể dùng điều khiển được 2 motor. Đầu 2 và 7 điều khiển motor 1. Đầu 10 và 15 điều khiển động cơ 2. Diode D1 và D8 tạo 1 mạch cặp.
PHẦN III: SƠ ĐỒ KHỐI VÀ SƠ ĐỒ NGUYÊN LÍ
SƠ ĐỒ KHỐI
KHỐI ĐIỀU KHIỂN ĐỘNG CƠ
KHỐI XỬ LÝ TRUNG TÂM
(ATmega32)
KHỐI
CẢM
BIẾN
KHỐI
NGUỒN
SƠ ĐỒ NGUYÊN LÍ
IV. CÁCH LÀM MẠCH VÀ NGUYÊN TẮC HOẠT ĐỘNG CỦA MẠCH
Mạch được mắc theo sơ đồ trên.
Bộ phận cảm biến
Khoảng cách giữa 2 led là 1cm và khoảng cách giữa led và quang trở là 1cm. 4 cặp led và quang trở được đặt thẳng hang với nhau. Dùng băng dính đen quấn quanh để chống nhiễu.
Khi có ánh sáng thì điện trở quang sẽ giảm và ngược lại. Ta sử dụng led làm nguồn sáng nên khi gặp nền trắng, ánh sang sẽ phản xạ lên quang trở làm điện trở nó giảm xuống và khi gặp vạch đen thì ánh sang sẽ khó phản xạ nên quang trở nhận ít ánh sáng làm điện trở tăng. Từ đó robot có thể phân biệt được vạch đen trên nền trắng ( dưới sự hỗ trợ của IC LM324).
Ở IC LM324 thì khi điện trở ở quang trở giảm khi gặp nền trắng thì cổng (+) cổng 3, 5, 10, 12 sẽ có điện áp cao hơn cổng (-) cổng 2, 6, 9, 13 ( cổng 2, 6, 9, 13 ta phân áp cố địnhcho nó là 2,5Vol). =>Cổng 1, 7, 8, 14 sẽ ở mức 1 = 5 Vol. Còn khi quang trở gặp vạch đen thì ngược lại cổng 1, 7, 8, 14 sẽ ở mức 0âm = 0 Vol. Các mức 0 hoặc 1 này sẽ đưa vào ATmega32.
Bộ phận điều khiển động cơ
2 động cơ DC có bộ giảm tốc giúp robot dễ nhận vạch hơn. 2 động cơ được lắp ở phía sau xe và gắn 1 chân ở phía trước.
2 động cơ được điều khiển bởi IC L293B
Bộ phận xử lí
Các chân PORT
Vi xử lí nhận tín hiệu từ IC LM324 ở các PORTB.0, PORTB.1, PORTB.2, PORTB.3 và xuất ra các PORTA.0, PORTA.1, PORTA.2, PORTA.3 để điều khiển động cơ tiến hay lùi.
Code
#include
#include
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTA=0x00;
DDRA=0xFF;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
while (1)
{
while (PINB.0==1&&PINB.1==0&&PINB.2==0&&PINB.3==1) // khong lech
{
PORTA=0b00001001; // di thang
delay_ms(10);
}
while (PINB.0==0&&PINB.0==0&&PINB.2==1&&PINB.3==1) //lech trai 1
{
PORTA=0b00001011;
delay_ms(10); // trai tien , phai dung
}
while (PINB.0==0&&PINB.1==0&&PINB.2==0&&PINB.3==1) // lech trai 2
{
PORTA=0b00001010; // trai tien, phai lui
delay_ms(10);
}
while (PINB.0==1&&PINB.1==1&&PINB.2==0&&PINB.3==0) // lech phai 1
{
PORTA=0b00001101; // trai dung, phai tien
delay_ms(10);
}
while (PINB.0==1&&PINB.1==0&&PINB.2==0&&PINB.3==0) // lech phai 2
{
PORTA=0b00000101; // trái tiến , phải lùi
delay_ms(10);
}
while (PINB.0==1&&PINB.1==1&&PINB.2==1&&PINB.3==1) // het duong
PORTA=0b00000101; // quay đầu
delay_ms(10);
}
}
Phần V: Tổng kết
Sau khi hoàn thành mạch này, em đã nắm được một số kĩ thuật cơ bản của phương pháp thiết kế mạch điện tử bằng phần proteus và giúp chúng em hiểu sâu và rõ hơn cấu tạo của vi xử lý ATmega32 cũng như cách xử lý các câu lệnh của AVR. Giúp chúng em có nhiều kinh nghiệm thực tế thú vị. Nhờ sự hướng dẫn của thầy giáo bọn em cũng có những kết quả nhất định về thiết kế và cách làm robot đơn giản và nạp code cho vi xử lý.
Với sự cố gắng của cả nhóm cùng với sự giúp đỡ nhiệt tình của thầy Nguyễn Đức Minh, chúng em đã hoàn thành đề tài đáp ứng đủ yêu cầu và đúng thời hạn. Tuy nhiên không tránh khỏi một vài thiếu sót chúng em mong nhận được sự bổ xung góp ý từ thầy cô cùng các bạn để đề tài này được hoàn thiện thêm..Em xin chân thành cảm ơn.
TÀI LIỆU THAM KHẢO
Các trang web datasheetcatalogue.com, diendandientu.com, hocavr.com, google.com.....
Tài liệu hướng dẫn làm bài tập lớn của khoa.