1.1.1 Vi xử lý PIC16f887a (số lượng 1))Đặc Điểm chung:1Tần số hoạt động: DC20MHZ2 Reset :PORT,BOR3 Bộ nhớ chương trinh flash(14bit word) :8K4Bộ nhớ dữ liệu( byte) : 3685 Bộ nhớ dữ liệu EEPROM (byte) : 256byte6Các nguồn ngắt : 157 Các port xuất nhập : PORT A,B,C,D.E8Timer : 39Các module capturecomparePWM: 210 Giao tiếp nối tiếp : MSSP,USART11Giao tiếp song song : PSP12MODULE AD 10 bit : 8 kênh ngõ vào13Bộ so sánh tương tự :214Tập lệnh : 35 tập lệnh15 số chân : 40 chân PDIP,44 chân PLCC,44 chân TQFP,44 chân QFN1.1.2 L298P SMDa) Hình ảnh và sơ đồ chân.4 LM393a)Hình LM393 là vi mạch gồm 2 bộ so sánh hoạt động độc lập với điện áp bù nhỏ cỡ 2mV, hoạt động với cả nguồn cấp đơn hoặc hai nguồn đối xứng. Vi mạch LM393 tương thích với cả TTL và CMOS, được sử dụng nhiều trong các bộ chuyển đổi tương Đặc điểm của Lm393Modul cảm biến TCRT 5000 ( số lượng 5 Cảm biến dò line TCRT5000 làm việc dựa trên nguyên lý cảm biến hồng ngoại. Về cơ bản, module TCRT5000 gồm một đèn led phát hồng ngoại và một led thu hồng ngoại. Khi nhận được tín hiệu hồng ngoại từ đèn phát thì đèn thu sẽ hoạt động. Khi có ánh sáng hồng ngoại từ led phát, nếu có một vật cản, ánh sáng sẽ được phản xạ lại led thu.Động cơ giảm tốc V3cầu H L298N để điều khiển động tốc độ và chiều của động cơ.1.Giới thiệu về mạch cầu H L298NTrên thị trường hiện có nhiều loại mạch cầu H, tuy nhiên loại thông dụng và thích hợp với board Arduino là mạch cầu H L298N. Loại mạch cầu H này chịu được dòng tối đa là 2A, điện áp điều khiển từ 5V đến 35V, có thể điều khiển được 2 động cơ. Hình bên dưới là module mạch cầu H L298.Module này gồm có IC L298N, 1 khối điều khiển động cơ A, 1 khối điều khiển động cơ B, các chân cấp nguồn, 2 jump.2.Khối điều khiển động cơ AKhối này có 2 chân nhằm để kết nối với động cơ A3.Khối điều khiển động cơ BKhối này cũng có 2 chân nhằm để kết nối với động cơ B4.Các chân cấp nguồnChân cấp nguồn gồm 2 chân, chân GND nối với nguồn âm còn chân +12V nối với nguồn dương của acquy hoặc adapter 12V. Chân +5V dùng khi cần sử lấy nguồn 5V từ mạch cầu H ra để dùng. Thường thì chân này ít sử dụng.5.Các jumpCó 2 jump tại ENA và ENB khi 2 jump này ở 2 vị trí như trên thì sẽ điều khiển động cơ chạy 100% công suất, ENA được dùng cho động cơ A và ENB được dùng cho động B. Ta có thể rút 2 jump này ra và kết nối các ENA, ENB với các chân băm xung của Arduino. Việc này sẽ giúp người sử dụng điều khiển được tốt độ của động cơ.6.Các chân IN1, IN2, IN3, IN4Các chân này dùng để kết nối với chân ra của Arduino nhằm điều khiển chiều của động cơ. IN1, IN2 dùng cho động cơ A và IN3, IN4 được dùng cho động cơ B.Việc điều khiển chiều của động cơ được thực hiện như sau:Bảng 3. Bảng điều kh
Trang 1MỤC LỤC
Giai đoạn 1: Thực hiện bằng vi xử lý PIC 16f887a.
1.1 Thiết kế hệ thống
1.1.1 Các linh kiện chính 1.1.2 Sơ đồ nguyên lý 1.1.3 Sản phẩm 1.2 Chương trình đưa vào vi xử lý
1.3 Đánh giá lại (chuyển phương án)
Giai đoạn 2: Thực hiện bằng Module Arduino Uno R3
1.4 Thiết kế lại hệ thống
1.4.1 Các linh kiện mới 1.4.2 Sản phẩm 1.5 Chương trình đưa vào vi xử lý
1.6 Đánh giá
Kết luận.
PHỤ LỤC
Trang 2GIAI ĐOẠN 1: THỰC HIỆN BẰNG VI XỬ LÝ PIC 16F887A 1.Thiết kế hệ thống
1.1 Các linh kiện chính
1.1.1 Vi xử lý PIC16f887a (số lượng 1)
a)Hình ảnh thực:
b)Sơ đồ chân:
Trang 3c)Đặc Điểm chung:
1-Tần số hoạt động: DC-20MHZ 2- Reset :PORT,BOR
3- Bộ nhớ chương trinh flash(14-bit word) :8K 4-Bộ nhớ dữ liệu( byte) : 368
5- Bộ nhớ dữ liệu EEPROM (byte) : 256byte 6-Các nguồn ngắt : 15
7- Các port xuất nhập : PORT A,B,C,D.E 8-Timer : 3
9-Các module capture/compare/PWM: 2 10- Giao tiếp nối tiếp : MSSP,USART 11-Giao tiếp song song : PSP
12-MODULE A/D 10 bit : 8 kênh ngõ vào 13-Bộ so sánh tương tự :2
14-Tập lệnh : 35 tập lệnh 15- số chân : 40 chân PDIP,44 chân PLCC,44 chân TQFP,44 chân QFN
1.1.2 L298P SMD
a) Hình ảnh và sơ đồ chân
Trang 4b)Thông số kĩ thuật:
Driver: L298N tích hợp 2 mạch cầu H
Điện áp điều khiển: +5V~ +12V
Dòng tối đa cho mỗi cầu H là: 2A
Điện áp của tín hiệu điều khiển : +5V~+7V
Dòng tín hiệu điều khiển:0-36mA
Công suất hao phí:20W(t=75)
Nhiệt độ bảo quản: -25 ~ +130
c) Chức năng các chân:
4 Chân INPUT: IN1, IN2, IN3, IN4 :Đây là các chân nhận tín hiệu điều khiển
4 Chân OUTPUT: OUT1, OUT2, OUT3, OUT4 Các chân nãy sẽ được nối với động cơ
Hai chân ENA và ENB dùng để điều khiển mạch cầu H trong L298p Nếu ở mức logic
1 cho phép mạch cầu H hoạt động, nếu ở mức logic 0 thì mạch cầu H không hoạt động
Khi ENA=0: Động cơ không quay với mọi đầu vào
Khi ENA=1
INT1=1; INT2=0: động cơ quay thuận
INT1=0; INT2=1: động cơ quay ngược
Với ENB cũng tương tự với INT3, INT4
d) chức năng trong mạch
Để điều khiển động tốc độ và chiều của động cơ
1.1.3 IC LM324
a)Sơ đồ chân:
Trang 5b)Thông số kỹ thuật
IC khuếch đại thuật toán LM3234 được tạo bởi bốn bộ khuếch đại thuật toán (OP-OAMP) độc lập được tích hợp trên một chip đơn Đặc điểm của LM324 là nó được thiết
kế để hoạt động với nguồn nuôi có điện áp rộng LM324 có thể hoạt động với cả nguồn đôi Nguồn cấp cho cực máng thấp và độc lập với biên độ điện áp cung cấp
- Vùng điện áp lối vào: -0.3 đến +32 v
- Dòng cực máng nhỏ: 0.7mA
- Dòng Offset lối vào: 30Ma max
- Điện áo offset lối vào: 3mA max
- Vùng nhiệt độ hoạt động: 0 đến 70 độ C
c)Ứng dụng
- Mạch khuếch đại công suất
- Mạch so sánh
- Mạch nháy theo nhạc
- Mạch sạc pin cho xe đạp điện
- Mạch cộng tín hiệu, mạch trừ tín hiệu, mạch khuếch đại vi sai
- Mạch điều khiển tự động hóa PID
d) chức năng trong mạch
1.1.4 LM393
a)Hình ảnh
b)Sơ đồ chân:
Trang 6LM393 là vi mạch gồm 2 bộ so sánh hoạt động độc lập với điện áp bù nhỏ cỡ 2mV, hoạt động với cả nguồn cấp đơn hoặc hai nguồn đối xứng Vi mạch LM393 tương thích với cả TTL và CMOS, được sử dụng nhiều trong các bộ chuyển đổi tương tự số đơn giản, trong các khối VCO, trong các mạch tạo trễ thời gian, sóng vuông, các mạch dao động và cổng logic số cao thế
c)Đặc điểm của Lm393
1 Dải nguồn nuôi rộng 2VDC đến 36VDC
2 Dải nguồn nuôi kép 1 đến
3 Dòng cực máng rất thấp độc lập với điện áp nguồn nuôi: 0,4mA
4 Dòng lối vào thấp 25mA
5 Dòng offset lối vào thấp 5mA và điện áp offset cực đại A
6 Dải điện áp lồi vào chung thấp
7 Dải điện áp vào vi sai bằng với điện áp của nguồn cung cấp
8 Điện áp offset lối vào thấp: -2mA đối với Lm393A -5mA đối với LM293/393
9 Điện áp lối ra tương thích với các mức logic DTL,ECL,TTL,MOS,CMOS
10 Điện áp bão hòa lối ra thấp: 250mV, 4mA
d) chức năng trong mạch
1.1.5 Modul cảm biến TCRT 5000 ( số lượng 5 modul)
Cảm biến dò line TCRT5000 làm việc dựa trên nguyên lý cảm biến hồng ngoại
Về cơ bản, module TCRT5000 gồm một đèn led phát hồng ngoại và một led thu hồng ngoại Khi nhận được tín hiệu hồng ngoại từ đèn phát thì đèn thu sẽ hoạt động Khi có
Trang 7ánh sáng hồng ngoại từ led phát, nếu có một vật cản, ánh sáng sẽ được phản xạ lại led thu
Sơ đồ nguyên lý như hình bên dưới:
+ Thông số kỹ thuật
Nguồn cung cấp: 5V
Dòng điện tiêu thụ: <10mA
Dải nhiệt độ hoạt động:0~50 độ C
1.1.6 Khối nguồn
a)- 1 IC loại LM7805
+ Thông số kỹ thuật
Điện áp vào: 0V ÷ 35VDC
Điện áp ra: 5VDC
Trang 8 Dòng ra: 1,5A
Tản nhiệt tốt cho IC để mạch chạy ổn định
+ Một số điểm lưu ý khác:
Thực tế áp lối ra có thể đạt giá trị nào đó trong khoảng 4.8 5.2 V
Nên nếu đo được áp là 4.85V thì không vội kết luận là IC bị hỏng
Độ trôi nhiệt của 7805 xấp xỉ: 1mV/1 độ C Nó có hệ số trôi nhiệt âm, nên nhiệt độ tăng, điện áp ra sẽ giảm
7805 là ic ổn áp 5V cho ra điện áp 5VDC
78xx là loại dòng IC dùng để ổn định điện áp dương đầu ra với điều kiện đầu vào luôn luôn lớn hơn đầu ra 3V
b)TIP42C loại pnp : có tác dụng tăng dòng ra của 7805
1.1.7-Khối tạo dao động
Dùng thạch anh 20MHz
Các thành phần của khối
a)1 Thạch anh 2 chân 20MHz
Tần số: 20MHz
Dung sai tần số: ±20ppm
ESR (Equivalent series resistance): 30 Ohm
Nhiệt độ hoạt động: -20oC ~ 70oC
Thạch anh 2 chân 20M là một linh kiện làm bằng tinh thể đá thạch anh được mài phẳng
và chính xác.Thạch anh 2 chân 20M làm việc dựa trên hiệu ứng áp điện, hiệu ứng này có tính
thuận nghịch Khi áp một điện áp vào 2 mặt của thạch anh, nó sẽ bị biến dạng Ngược lại,khi tạo sức ép vào 2 bề mặt đó,nó sẽ phát ra điện áp
Tần số cộng hưởng của Thạch anh tùy thuộc vào hình dáng và kích thước của nó Tần số của thạch anh 2 chân 20M có trị số khá bền vững, hầu như rất ít bị ảnh hưởng bởi các điều kiện
môi trường bên ngoài Ngoài ra, hệ số phẩm chất của mạch cộng hưởng rất lớn, nên tổn hao rất thấp
Trang 9Kích thước của thạch anh 20MHz
Chức năng: Tạo ra tần sô dao động ổn định cho vi điều khiển vì tần số của thạch anh tạo ra rất ít
bị ảnh hưởng bởi nhiệt độ
1.1.8 Động cơ giảm tốc V3
a) Hình ảnh và kích thước
b) Thông số kỹ thuật:
-Điện áp hoạt động: DC 3-6V
- Mômen xoắn cực đại: 800gf cm min 1:48 (3V)
- Tốc độ không tải:
+ DC3V: 150mA 90 RPM 10RPM + DC3V: 200mA 200 RPM 10RPM
-Dòng không tải: 70mA (250mA MAX)
c) Chức năng:
Chuyển đổi năng lượng điện thành cơ năng tạo chuyển dộng cho xe
�
�
Trang 101.2 Sơ đồ nguyên lý
Nguyên lý hoạt động của mạch:
Khi cấp nguồn hoạt động cảm biến quét tín hiệu đầu vào truyền về vi điều khiển Cảm biến truyền về tín hiệu vạch đen là ở mức 0 và mức là không ở vạch đen (dựa theo nguyên lý màu
Trang 11đen không phản xạ ánh sáng hồng ngoại).Vi điều khiển nhận và xử lý tín hiệu thông qua chương trình định sẵn xuất ra các xung điều khiển đến L298p để điều khiển động cơ Động cơ làm cho
xe di chuyển theo đường đã định sẵn Quá trình này lặp đi lặp lại giúp xe di chuyển liên tục và bắt đường
Trang 121.1 Sản phẩm
///
1.2 Chương trình đưa vào vi xử lý.
Chương2 // Developer : Tran Van Den
Chương3 // Date : 21-12-2017
Chương4 // Class : Dien-Dien Tu B k58
Chương5 //
Chương6 // pwm1 la banh phai nhin tu dit xe len dau xe b3 hight b2 low la chieu thuan xe di len Chương7 // pw2 la banh trai nhin tu dit xe len dau xe b1 hight b0 low la chieu thuan xe di len Chương8 //********************************************* robot line black
***********************************//
Chương9 //********************************************* robot line black
***********************************//
Chương10
Chương11 //#include <main.h>
Chương12 #INCLUDE <16F887.H>
Chương13 #FUSES NOWDT, PUT, HS, NOPROTECT, NOLVP
Chương14 #USE delay(CLOCK=20M)
Chương15 #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
Chương16
Chương17 //================================== define var
===================================================//
Chương18 int1
Var_sensor_1=0,Var_sensor_2=0,Var_sensor_3=0,Var_sensor_4=0,Var_sensor_5=0,mode; Chương19 int8 Var_in_line_last=0,Var_in_line=0;
Chương20
Chương21 //================================== define function subroutine
===================================//
Chương22 void Fn_Send_uart(char s);
Chương23 void Fn_Send_uart_sensor(char s);
Chương24 void Fn_Checksensor_send_uart(void);
Chương25 void Fn_convenienty_motor_left(void);
Chương26 void Fn_convenienty_motor_right(void);
Chương27 void Fn_reverse_motor_left(void);
Chương28 void Fn_reverse_motor_left(void);
Chương29 signed int8 Fn_in_sensor();
Trang 13Chương30 //!void Fn_robot_mover(int8 line);
Chương31 void Fn_robot_mover(char line);
Chương32
Chương33 #define sensor1
Chương34 void main()
Chương35 {
Chương36 set_tris_c(0x00);
Chương37 set_tris_d(0xff);
Chương38
Chương39 setup_timer_2(T2_DIV_BY_16,249,1); // tan so
Chương40 setup_ccp1(CCP_PWM);
Chương41 setup_ccp2(CCP_PWM);
Chương42 Fn_convenienty_motor_left(); // chan trai pwm2 5-1-2018 Chương43 Fn_convenienty_motor_right(); // chan phai pwm1 5-1-2018 Chương44
Chương45 printf("test uart pic 16f887 \r\n");
Chương46 //!
Chương47 //! set_pwm1_duty(400); // phai
Chương48 //! set_pwm2_duty(100); // trai
Chương49 //!
Chương50 int8 Var=128;
Chương51 while(TRUE)
Chương52 {
Chương53 Var_in_line_last = Var_in_line;
Chương54 Var_in_line = Fn_in_sensor();
Chương55 if(Var_in_line != Var_in_line_last)
Chương56 {
Chương57 if(Var_in_line_last != 5)
Chương58 {
Chương59 Fn_robot_mover(Var_in_line);
Chương60 }
Chương61 }
Chương62 //! Fn_in_sensor();
Chương63 //! Fn_Send_uart("\r\n");
Chương64 //! delay_ms(500);
Chương65 //!Fn_robot_mover(0);
Chương66 }
Chương67 }
Chương68 void Fn_Send_uart(char s)
Chương69 {
Chương70 #ifndef debug
Trang 14Chương71 printf("%c",s);
Chương72 #endif
Chương73 }
Chương74 void Fn_Send_uart_sensor(char s)
Chương75 {
Chương76 #ifndef sensor
Chương77 printf("%d",s);
Chương78 #endif
Chương79 }
Chương80 void Fn_Checksensor_send_uart(void)
Chương81 {
Chương82 Fn_Send_uart_sensor(Var_sensor_1);
Chương83 Fn_Send_uart_sensor(Var_sensor_2);
Chương84 Fn_Send_uart_sensor(Var_sensor_3);
Chương85 Fn_Send_uart_sensor(Var_sensor_4);
Chương86 Fn_Send_uart_sensor(Var_sensor_5);
Chương87 }
Chương88 //************************************************** Huong cua motor PHAI
thuan (PWM2) ***********************************//
Chương89 void Fn_convenienty_motor_left(void)
Chương90 {
Chương91 output_high(PIN_B1); // xung banh PHAI cua PWM2 (thuan)
Chương92 output_low(PIN_B0);
Chương93 }
Chương94 //************************************************** Huong cua motor TRAI
thuan (PWM1) ***********************************//
Chương95 void Fn_convenienty_motor_right(void)
Chương96 {
Chương97 output_high(PIN_B3); // xung banh TRAI cua PWM1 (thuan)
Chương98 output_low(PIN_B2);
Chương99 }
Chương100 //************************************************** Huong cua motor PHAI
nguoc (PWM2) **********************************//
Chương101 void Fn_reverse_motor_left(void)
Chương102 {
Chương103 output_high(PIN_B0); // xung banh PHAI cua PWM2 (nguoc)
Chương104 output_low(PIN_B1);
Chương105 }
Chương106 //************************************************** Huong cua motor TRAI
nguoc (PWM1) **********************************//
Chương107 void Fn_reverse_motor_right(void)
Trang 15Chương108 {
Chương109 output_high(PIN_B2); // xung banh TRAI cua PWM1 (nguoc)
Chương110 output_low(PIN_B3);
Chương111 }
Chương112 signed int8 Fn_in_sensor()
Chương113 {
Chương114 Var_sensor_1=input(PIN_D0);
Chương115 Var_sensor_2=input(PIN_D1);
Chương116 Var_sensor_3=input(PIN_D2);
Chương117 Var_sensor_4=input(PIN_D3);
Chương118 Var_sensor_5=input(PIN_D5);
Chương119 Fn_Checksensor_send_uart(); // send uart go to computer
Chương120
Chương121 if((Var_sensor_1==1)&&(Var_sensor_2==1)&&(Var_sensor_3==0)&&(Var_sensor_4==1)
&&(Var_sensor_5==1))
Chương122 {
Chương123 return 0;
Chương124 }
Chương125 else
if((Var_sensor_1==0)&&(Var_sensor_2==1)&&(Var_sensor_3==1)&&(Var_sensor_4==1)&&( Var_sensor_5==1))
Chương126 {
Chương127 mode = 1;
Chương128 return 1;
Chương129 }
Chương130 else
if((Var_sensor_1==1)&&(Var_sensor_2==0)&&(Var_sensor_3==1)&&(Var_sensor_4==1)&&( Var_sensor_5==1))
Chương131 {
Chương132 mode = 1;
Chương133 return 2;
Chương134 }
Chương135 else
if((Var_sensor_1==1)&&(Var_sensor_2==1)&&(Var_sensor_3==1)&&(Var_sensor_4==1)&&( Var_sensor_5==0))
Chương136 {
Chương137 mode = 0;
Chương138 return -1;
Chương139 }
Trang 16Chương140 else
if((Var_sensor_1==1)&&(Var_sensor_2==1)&&(Var_sensor_3==1)&&(Var_sensor_4==0)&&( Var_sensor_5==1))
Chương141 {
Chương142 mode = 0;
Chương143 return -2;
Chương144 }
Chương145 else
if((Var_sensor_1==1)&&(Var_sensor_2==1)&&(Var_sensor_3==1)&&(Var_sensor_4==1)&&( Var_sensor_5==1))
Chương146 {
Chương147 return 5;
Chương148 }
Chương149 }
Chương150 void Fn_robot_mover(char line)
Chương151 {
Chương152 switch (line)
Chương153 {
Chương154 case 1 : // lech phai lv1
Chương155 {
Chương156 set_pwm2_duty(200); // phai 400
Chương157 set_pwm1_duty(50); // trai 100
Chương158 Fn_Send_uart("case :-4");
Chương159 break;
Chương160 }
Chương161 case 2 :// lech phai lv2
Chương162 {
Chương163 set_pwm2_duty(180); // phai 600
Chương164 set_pwm1_duty(100); // trai 200
Chương165 Fn_Send_uart("case :-3");
Chương166 break;
Chương167 }
Chương168 case -1 : // lech trai lv1
Chương169 {
Chương170 set_pwm2_duty(200); // 560
Chương171 set_pwm1_duty(500); // 280
Chương172 Fn_Send_uart("case :-2");
Chương173 break;
Chương174 }
Chương175 case -2 :// lech trai lv2
Chương176 {
Trang 17Chương177 set_pwm2_duty(180); // 520 Chương178 set_pwm1_duty(100); // 400 Chương179 Fn_Send_uart("case :-1");
Chương180 break;
Chương181 }
Chương182 case 0 :
Chương183 {
Chương184 set_pwm1_duty(250);
Chương185 set_pwm2_duty(250);
Chương186 Fn_Send_uart("case :0");
Chương187 break;
Chương188 }
Chương189
Chương190 case 5 :
Chương191 {
Chương192 if(mode==0)
Chương193 {
Chương194 set_pwm1_duty(100); // 600 Chương195 set_pwm2_duty(20); // 0 Chương196 Fn_Send_uart("case :5 mode 0"); Chương197 }
Chương198 else
Chương199 {
Chương200 set_pwm1_duty(20); // 0 Chương201 set_pwm2_duty(100); // 600 Chương202 Fn_Send_uart("case :5 mode 1"); Chương203 }
Chương204 } break;
Chương205 default :
Chương206 {
Chương207 set_pwm1_duty(0);
Chương208 set_pwm2_duty(0);
Chương209 }
Chương210 break;
Chương211 }
Chương212 }
Chương213
Chương214