Tìm hiểu linh kiện Tìm hiểu về board mạch ARDUINO UNO R3 Tìm hiểu về cảm biến nhiệt độ, độ ẩm DHT11 Tìm hiểu về màn hình LCD 16x2 Tìm hiểu về module I2C cho màn hình LCD 16x2 Tìm hiểu về sơ đồ khối và nguyên lý hoạt động của mạch Lập trình và mô phỏng Thi công thiết kế mạch đo nhiệt độ đơn giản Thiết kế mạch và hình ảnh thực tế Hoàn thiện sản phẩm
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP.HCM KHOA CNKT ĐIỆN – ĐIỆN TỬ ĐỒ ÁN HỌC PHẦN ĐỀ TÀI: ROBOT TỰ HÀNH TRÁNH VẬT CẢN GVHD: Trần Trọng Hiếu SVTH: Lảo Minh Khôi MSSV: 2002180151 Lớp: 09DHDT3 TPHCM, Ngày… Tháng… Năm ĐỒ ÁN HỌC PHẦN GHHD: TRẦN TRỌNG HIẾU LỜI MỞ ĐẦU -Trong trình phát triển đất nước ta nay, nhu cầu tự động hóa yếu tố đặt lên hàng đầu Điều đảm bảo cho nhiều ngành cơng nghiệp đứng điều kiện cạnh tranh khác biệt kinh tế thị trường ngày Trong trình sản xuất, tự động hóa đóng vai trị quan trọng, đặc biệt nhà máy công nghiệp -Ngày việc ứng dụng khoa học kĩ thuật vào sản xuất phổ biến Đặt biệt cơng nghệ Robot Khơng đóng vai trị thành phần sản xuất, cơng nghệ Robot cịn ứng dụng vào nghành khác như: Quốc phòng,Cứu hộ cứu nạn, nghiên cứu khoa học Ngoài việc dùng PLC để lập trình hồn tồn dùng ARDUINO để giảm thiểu chi phí nói xuất Arduino vào năm 2005 Italia mở hướng cho vi điều khiển Sự xuất Arduino hỗ trợ cho người nhiều lập trình thiết kế, người bắt đầu tìm tịi vi điều khiển mà khơng có q nhiều kiến thức, hiểu biết sâu sắc vật lý điện tử -Em muốn tìm hiểu, học tập ARDUINO, em định làm MƠ HÌNH XE TRÁNH VẬT CẢN sử dụng UNO R3 Mục đích tìm hiểu sâu ARDUINO thiết bị điện tử để nâng cao hiểu biết, tìm hiểu nhiều kiến thức từ việc làm đồ án Có thể lần đầu làm nên tránh khỏi thiếu sót mong thầy giúp đỡ để em hồn thiện hơn, làm thành cơng đề tài lần -Em kính chúc thầy nhiều sức khỏe thành cơng cơng việc, sống SVTH: LẢO MINH KHƠI ĐỒ ÁN HỌC PHẦN GHHD: TRẦN TRỌNG HIẾU MỤC LỤC SVTH: LẢO MINH KHÔI ĐỒ ÁN HỌC PHẦN GHHD: TRẦN TRỌNG HIẾU I) Lý chọn đề tài Ngày nay, Robotic thành tựa to lớn sản xuất công nghiệp đời sống Sản xuất robot ngành công nghiệp trị giá lớn ngày phát triển mạnh, họ robot không nhắc tới mobile robot với đặc thù riêng mà loại robot khác khơng có Mobile robot di chuyển cách linh hoạt, tạo nên khơng gian hoạt động lớn dần khẳng định vai trò quan trọng thiếu nhiều lĩnh vực, thu hút nhiều đầu tư nghiên cứu Mobile robot chia làm nhiều loại: robot học đường đi, robot dị line, robot tránh vật cản, robot tìm đường mê cung,… số robot tránh vật cản dễ dàng ứng dụng nhiều sống Việc phát triển loại robot phục vụ đắc lực cho người II) Mục đích chọn đề tài Robot tránh vật cản vừa có nhiều ứng dụng thực tế vừa dễ dàng để sinh viên chúng em dễ dàng sử dụng kiến thức giảng đường vào Với cấu khí đơn giản lại kết hợp với nhiều thành phần điện tử nên phù hợp để sinh viên chúng em học tập nghiên cứu thêm SVTH: LẢO MINH KHÔI ĐỒ ÁN HỌC PHẦN GHHD: TRẦN TRỌNG HIẾU Chương 1: Tổng quan robot tránh vật cản Khái quát Robot tránh vật cản Các robot tự hành ứng dụng đời sống ngày nhiều robot vận chuyển hàng hóa, robot kiểm tra nguy hiểm, robot xe lăn cho người khuyết tật, robot phục vụ sinh hoạt gia đình,… Điểm hạn chế robot tự hành tính thiếu linh hoạt khả thích ứng làm việc vị trí khác Robot tự động lĩnh vực phát triển Các ứng dụng robot dần thay sức lao động người Và tiên tiến Robot ngày gia tăng nhờ vào phát triển KH-KT Khái niệm Robot tự động phát triển nhanh chóng số lượng Robot tự động kết cấu phức tạp ngày nâng cao để phù hợp với lĩnh vực khác Có nhiều loại Robot tự hành : Robot dị line, Robot tránh vật cản, Robot tìm đường mê cung,… Trong Robot tự hành tránh vật cản loại khả tự di chuyển tránh va chạm với chướng ngại bất ngờ mà khơng cần có người điều khiển Phân loại Phân loại Robot tránh vật cản dựa theo nguyên lý làm việc phận cảm biến: • • • • Robot tránh vật cản sử dụng cảm biến hồng ngoại: Robot tránh vật cản làm việc dựa vào nguyên lý làm việc cảm biến hồng ngoại Robot chủ yếu phát vật cản nhờ sóng hồng ngoại Robot tránh vật cản sử dụng cảm biến siêu âm: Robot tránh vật cản làm việc dựa vào nguyên lý làm việc cảm biến siêu âm Robot chủ yếu phát vật cản nhờ sóng siêu âm Robot tránh vật cản sử dụng cảm biến laser: Robot tránh vật cản làm việc dựa vào nguyên lý làm việc cảm biến laser Robot chủ yếu phát vật cản nhờ tia laser Robot tránh vật cản sử dụng nhiều loại cảm biến: hệ thống làm việc dựa nguyên lý nhiều loại cảm biến cảm biến hồng ngoại cảm biến siêu âm, cảm biến siêu âm với cảm biến laser Robot chủ yếu phát vật cản môi trường khác Phân loại Robot tránh vật cản theo phận thực chuyển động: • Robot chuyển động chân: Robot di chuyển mô theo di chuyển người Tuy nhiên loại phức tạp di chuyển số địa hình định SVTH: LẢO MINH KHÔI ĐỒ ÁN HỌC PHẦN • GHHD: TRẦN TRỌNG HIẾU Robot chuyển động bánh: Robot làm việc tốt hầu hết địa hình người tạo Điều khiển di chuyển bánh chia làm loại: chuyển động bánh xe, chuyển động vịng xích loại hỗn hợp bánh xe vịng xích Trạng thái nguyên lý làm việc Robot sử dụng cảm biến siêu âm a) Trạng thái làm việc: • • • Trạng thái thường trực (khi khơng có vật cản): Robot tự đưa khoản cách an toàn đồng thời cảm biến siêu âm bắt đầu đo khoảng cách Trạng thái di chuyển: Robot thằng đến gặp vật cản Trạng thái có vật cản: Robot tiến hành đo khoảng cách hai bên từ xác định hướng di chuyển hợp lý b) Nguyên lý làm việc: • • Bình thường Robot ln hoạt động chế độ thường trực Ở chế độ Robot ln có tín hiệu kiểm tra làm việc đến thiệt bị cảm biến, module,… từ biến module có tín hiệu hồi đáp trung tâm Khi có vật cản, cảm biến bị tác động Khi yếu tố đạt tới ngưỡng làm việc tạo tín hiệu truyền trung tâm Tại trung tâm điều khiển diễn hoạt động xử lý tín hiệu truyền Đồng thời trung tâm điều khiển điều khiển module động làm cho động hoạt động SVTH: LẢO MINH KHÔI ĐỒ ÁN HỌC PHẦN GHHD: TRẦN TRỌNG HIẾU Chương 2: Các lý thuyết liên quan Arduino Uno R3 1.1 Giới thiệu chung Arduino Uno R3 Arduino UNO bảng vi điều khiển nguồn mở dựa vi điều khiển Microchip Atmega328 Những model trang bị gồm cổng giao tiếp USB, chân đầu vào/ đầu Digital Analog giao tiếp với bảng mạch mở rộng khác Sau mạnh Arduino so với tảng vi điều khiển khác: - Chạy đa tảng: Việc lập trình Arduino thể thực hệ điều hành khác Windows, Mac Os, Linux Desktop, Android di động - Ngơn ngữ lập trình đơn giản dễ hiểu - Nền tảng mở : Arduino phát triển dựa nguồn mở nên phần mềm chạy Arduino chia sẻ dễ dàng tích hợp vào tảng khác - Mở rộng phần cứng: Arduino thiết kế sử dụng theo dạng module nên việc mở rộng phần cứng dễ dàng - Đơn giản nhanh: Rất dễ dàng lắp ráp, lập trình sử dụng thiết bị SVTH: LẢO MINH KHÔI ĐỒ ÁN HỌC PHẦN GHHD: TRẦN TRỌNG HIẾU - Dễ dàng chia sẻ: Mọi người dễ dàng chia sẻ mã nguồn với mà không lo lắng ngơn ngữ hay hệ điều hành sử dụng 1.2 Một số thông số Arduino UNO R3: Vi điều khiển Điện áp hoạt động Tần số hoạt động Dòng tiêu thụ Điện áp vào khuyên dùng Điện áp vào giới hạn Số chân Digital I/O Số chân Analog Dòng tối đa chân I/O Dòng tối đa 5V Dòng tối đa 3.3V Bộ nhớ flash SRAM EEPROM Atmega328 họ 8bit 5V DC (chỉ cấp qua cổng USB) 16MHz Khoảng 30mA 7-12V DC 6-20V DC 14 ( chân hardware PWM) ( độ phân giải 10bit) 30mA 500mA 50mA 32 KB (Atmega328) với 0.5 KB dùng bootloader KB (Atmega328) KB (Atmega328) 1.3 Năng lượng Arduino UNO cấp nguồn 5V thơng qua USB cấp nguồn ngồi với điện áp khuyên dùng 7-12V DC giới hạn 6-12V DC Thường cấp nguồn pin vng 9V hợp lý khơng có sẵn nguồn từ cổng USB Nếu cấp nguồn vượt ngưỡng giới hạn làm hỏng Arduino 1.4 Các chân lượng • • • • • • GND: Cực âm nguồn điện cấp cho Arduino UNO Khi dùng thiết bị sử dụng nguồn điện riêng biệt chân phải nối với 5V: Cấp điện áp 5V đầu Dòng tối đa cho phép chân 500mA 3.3V: Cấp điện áp 3.3V đầu Dòng tối đa cho phép chân 50mA VIN (Voltage Input): Để cấp nguồn cho Arduino UNO, nối cực dương nguồn với chân cực âm nguồn với GND IOREF: Điện áp hoạt động vi điều khiển Arduino UNO đo chân (luôn 5V) Mặc dù vậy, không lấy nguồn 5V từ chân để sử dụng chức khơng phải để cấp nguồn RESET: Việc nhấn nút RESET board để reset vi điều khiển tương đương với việc chân RESET nối với GND qua điện trở 10kΩ 1.5 Bộ nhớ SVTH: LẢO MINH KHÔI ĐỒ ÁN HỌC PHẦN GHHD: TRẦN TRỌNG HIẾU Vi điều khiển Atmega328 tiêu chuẩn cung cấp cho người dùng: • • • 32 KB nhớ Falsh: Những đoạn lệnh lập trình lưu trữ nhớ Flash vi điều khiển Thường có khoảng vào KB số sử dụng bootloader KB cho SRAM: Giá trị biến khai báo lập trình lưu trữ Khai báo nhiều biến cần nhiều nhớ RAM Khi điện, liệu SRAM bị KB cho EEPROM: Đây giống ổ cứng mini – nơi đọc ghi liệu vào mà không lo bị mất điện 1.6 Các cổng vào/ra Arduino UNO có 14 chân Digital dùng để đọc xuất tín hiệu Chúng có mức điện áp 0V 5V với dòng vào tối đa chân 40mA Một số chân Digital có chức đặc biệt: • • • • Chân PWM (~): 3, 5, 6, 9, 10, 11: cho phép bạn xuất xung PWM với độ phân giải 8bit (giá trị từ → 28-1 tương ứng với 0V → 5V) hàm analogWrite() Nói cách đơn giản, bạn điều chỉnh điện áp chân từ mức 0V đến 5V thay cố định mức 0V 5V chân khác Chân giao tiếp SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) Ngoài chức thơng thường, chân cịn dùng để truyền phát liệu giao thức SPI với thiết bị khác LED 13: Arduino UNO có đèn led màu cam (kí hiệu chữ L) Khi bấm nút Reset, bạn thấy đèn nhấp nháy để báo hiệu Nó nối với chân số 13 Khi chân người dùng sử dụng, LED sáng chân Serial: (RX) (TX): dùng để gửi (transmit – TX) nhận (receive – RX) liệu TTL Serial Arduino Uno giao tiếp với thiết bị khác thông qua chân Kết nối bluetooth thường thấy nói nơm na kết nối Serial khơng dây Nếu không cần giao tiếp Serial, bạn không nên sử dụng chân không cần thiết Module điều khiển động L298N Mạch điều khiển động DC L298N có khả điều khiển động DC, dòng tối đa 2A động cơ, mạch tích hợp diod bảo vệ IC nguồn 7805 giúp cấp nguồn 5VDC cho module khác (chỉ sử dụng 5V nguồn cấp 2A cho motor) Điện áp tín hiệu điều khiển: +5 V ~ +7 V Dịng tín hiệu điều khiển: ~ 36mA Cơng suất hao phí: 20W (khi nhiệt độ T = 75 ℃) Nhiệt độ bảo quản: -25 ℃ ~ +130 ℃ b) Các chân L298N: • • • • • 12V power, 5V power Đây chân cấp nguồn trực tiếp đến động Power GND chân GND nguồn cấp cho Động Jump A enable B enable Gồm có chân Input IN1, IN2, IN3, IN4 Output A, output B 1.8 Servo SG90 Servo dạng động điện đặc biệt Không giống động thông thường cắm điện vào quay liên tục, servo quay điều khiển (bằng xung PPM) với góc quay nằm khoảng từ 0o - 180o 10 SVTH: LẢO MINH KHÔI ĐỒ ÁN HỌC PHẦN GHHD: TRẦN TRỌNG HIẾU Cảm biến siêu âm HC – SR04 Cảm biến khoảng cách siêu âm HC-SR04 sử dụng Cảm biến sử dụng sóng siêu âm đo khoảng cách khoảng từ -> 300 cm, với độ xác gần phụ thuộc vào cách lập trình Cảm biến HC-SR04 có chân là: Vcc, Trig, Echo, GND VCC TRIG ECHO GND 5V Một chân Digital output Một chân Digital input GND 11 SVTH: LẢO MINH KHÔI ĐỒ ÁN HỌC PHẦN GHHD: TRẦN TRỌNG HIẾU Chương 3: Lắp ráp code nạp Linh kiện - Khung xe Robot bánh - Cảm biến siêu âm HC – SR04 - Board Arduino UNO R3 - Module điều khiển động L298N - Servo SG90 Kết nối linh kiện a) Nối dây Arduino UNO R3, L298N, pin công tắc L298 12V Arduino Pin Dương pin (dây đỏ) Âm pin (dây đen) GND GND 5V IN1 IN2 IN3 IN4 5V Chân Chân Chân Chân Công tắc Chân công tắc (dây đen) Chân công tắc (dây đỏ) b) Nối dây L298N động giảm tốc L298N Out Out Out Out Motor A (bánh xe phải) Dây đỏ Dây đen Motor B (bánh xe trái) Dây đen Dây đỏ c) Nối dây Servo SG90 Arduino UNO R3 Servo SG90 gồm có dây: Nâu, đỏ, cam Arduino 5V GND Chân SG90 Đỏ Nâu Cam 12 SVTH: LẢO MINH KHÔI ĐỒ ÁN HỌC PHẦN GHHD: TRẦN TRỌNG HIẾU d) Nối dây cảm biến siêu âm HC-SR04 Arduino HC-SR04 gồm có chân: VCC, TRIG, ECHO, GND Arduino 5V Chân Chân GND HC-SR04 VCC TRIG ECHO GND Code nạp #include #define trig //chân trig HC-SR04 #define echo 4//chân echo HC-SR04 Servo srf05; // create servo object to control a servo #define inA1 //Định nghĩa chân in1 động A #define inA2 //Định nghĩa chân in2 động A #define inB1 //Định nghĩa chân in1 động B #define inB2 //Định nghĩa chân in2 động B void setup() { pinMode(inA1, OUTPUT);//Set chân in1 dc A output pinMode(inA2, OUTPUT);//Set chân in2 dc A output pinMode(inB1, OUTPUT);//Set chân in1 dc B output pinMode(inB2, OUTPUT);//Set chân in2 dc B output 13 SVTH: LẢO MINH KHÔI ĐỒ ÁN HỌC PHẦN GHHD: TRẦN TRỌNG HIẾU pinMode(trig,OUTPUT);//chân trig phát tín hiệu pinMode(echo,INPUT);//chân echo nhận tín hiệu Serial.begin(9600); srf05.attach(5); // attaches the servo on pin to the servo object } void loop() { objectAvoider (inA1, inA2, inB1, inB2,50, 1000); } int objectDistance_cm (byte angle) { srf05.write(angle); delay(500); unsigned long duration;//biến đo thời gian int distance;//biến lưu khoảng cách /* phát xung từ chân trig */ digitalWrite(trig,0);//tắt chân trig delayMicroseconds(2); digitalWrite(trig,1);// phát xung từ chân trig delayMicroseconds(5);// xung có độ dài microSeconds digitalWrite(trig,0);//tắt chân trig 14 SVTH: LẢO MINH KHÔI ĐỒ ÁN HỌC PHẦN GHHD: TRẦN TRỌNG HIẾU /* tính toán thời gian */ duration = pulseIn(echo,HIGH);//đo độ rộng xung HIGH chân echo distance = int(duration/2/29.412);//tính khoảng cách đến vật /* in kết Serial monitor */ //Serial.print(distance); //Serial.println("cm"); //delay(200); return distance; } void robotMover (byte inR1, byte inR2, byte inL1, byte inL2, byte action) { /* inR1 inR2 chân tín hiệu động bên phải inL1 inL2 chân tín hiệu động bên trái action= đứng yên action =1 thẳng action =2 lùi lại action =3 quay trái action =4 quay phải action =5 rẽ trái action =6 rẽ phải action =7 rẽ lùi trái 15 SVTH: LẢO MINH KHÔI ĐỒ ÁN HỌC PHẦN GHHD: TRẦN TRỌNG HIẾU action =8 rẽ lùi phải */ switch (action) { case 0:// không di chuyển motorControlNoSpeed(inR1, inR2, 0); motorControlNoSpeed(inL1, inL2, 0); break; case 1://đi thẳng motorControlNoSpeed(inR1, inR2, 1); motorControlNoSpeed(inL1, inL2, 1); break; case 2:// lùi lại motorControlNoSpeed(inR1, inR2, 2); motorControlNoSpeed(inL1, inL2, 2); break; case 3:// quay trái motorControlNoSpeed(inR1, inR2, 1); motorControlNoSpeed(inL1, inL2, 2); break; case 4:// quay phải motorControlNoSpeed(inR1, inR2, 2); motorControlNoSpeed(inL1, inL2, 1); break; 16 SVTH: LẢO MINH KHÔI ĐỒ ÁN HỌC PHẦN GHHD: TRẦN TRỌNG HIẾU case 5:// rẽ trái motorControlNoSpeed(inR1, inR2, 1); motorControlNoSpeed(inL1, inL2, 0); break; case 6:// rẽ phải motorControlNoSpeed(inR1, inR2, 0); motorControlNoSpeed(inL1, inL2, 1); break; case 7:// rẽ lùi trái motorControlNoSpeed(inR1, inR2, 2); motorControlNoSpeed(inL1, inL2, 0); break; case 8:// rẽ lùi phải motorControlNoSpeed(inR1, inR2, 0); motorControlNoSpeed(inL1, inL2, 2); break; default: action = 0; } } void motorControlNoSpeed (byte in1,byte in2, byte direct) { 17 SVTH: LẢO MINH KHÔI ĐỒ ÁN HỌC PHẦN GHHD: TRẦN TRỌNG HIẾU // in1 and in2 are signal pins to control the motor // en is the enable pin // the defauspeed is the highest // direct includes: // 0:Stop // 1:Move on direct // 2:Move on another direct switch (direct) { case 0:// Dừng không quay digitalWrite(in1,LOW); digitalWrite(in2,LOW); break; case 1:// Quay chiều thứ digitalWrite(in1,HIGH); digitalWrite(in2,LOW); break; case 2:// Quay chiều thứ digitalWrite(in1,LOW); digitalWrite(in2,HIGH); break; //default: } } 18 SVTH: LẢO MINH KHÔI ĐỒ ÁN HỌC PHẦN GHHD: TRẦN TRỌNG HIẾU void objectAvoider (byte inR1, byte inR2, byte inL1, byte inL2, byte allow_distance, int turn_back_time) { robotMover(inR1,inR2,inL1,inL2,1); Serial.println("Tiến"); //delay(10); int front_distance=objectDistance_cm (90); int left_distance; int right_distance; int max_distance; if (front_distance > allow_distance) { robotMover(inR1,inR2,inL1,inL2,1); Serial.println("Tiến"); delay(10); } if (front_distance