Đồ án Điều khiển nhiệt độ hiển thị trên led ma trận nối tiếp

docx 34 trang phuongvu95 6590
Bạn đang xem 20 trang mẫu của tài liệu "Đồ án Điều khiển nhiệt độ hiển thị trên led ma trận nối tiếp", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • docxdo_an_dieu_khien_nhiet_do_hien_thi_tren_led_ma_tran_noi_tiep.docx

Nội dung text: Đồ án Điều khiển nhiệt độ hiển thị trên led ma trận nối tiếp

  1. BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP. HỒ CHÍ MINH KHOA CÔNG NGHỆ ĐIỆN – ĐIỆN TỬ  BÁO CÁO ĐỒ ÁN CHUYÊN NGÀNH ĐỀ TÀI: ĐIỀU KHIỂN NHIỆT ĐỘ HIỂN THỊ TRÊN LED MA TRẬN NỐI TIẾP GVHD: NGUYỄN PHÚ CÔNG SINH VIÊN THỰC HIỆN MSSV DƯƠNG HÀO QUANG 2032170077 TP. HỒ CHÍ MINH, 14 tháng 07, năm 2020
  2. TRƯỜNG ĐH CÔNG NGHIỆP THỰC PHẨM TP. HCM CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM KHOA CÔNG NGHỆ ĐIỆN – ĐIỆN TỬ Độc lập - Tự do - Hạnh phúc TP. HCM, ngày .tháng năm ĐỀ CƯƠNG CHI TIẾT TÊN ĐỒ ÁN: ĐIỀU KHIỂN NHIỆT ĐỘ HIỂN THỊ TRÊN LED MA TRẬN NỐI TIẾP Giảng viên hướng dẫn: Nguyễn Phú Công Thời gian thực hiện: Từ ngày 01/05/2020 đến ngày 15/07/2020 Sinh viên thực hiện: Dương Hào Quang Nội dung đề tài: - Tìm hiểu tổng quan lý thuyết. - Xây dựng mục tiêu đề tài. - Thiết kế và thi công mô hình hiển thị nhiệt độ trên led ma trận - Thực nghiệm và đánh giá đề tài Kế hoạch thực hiện: - Từ ngày 01/05/2020 đến ngày 31/05/2020: Nhận đề tài - Từ ngày 01/06/2020 đến ngày 23/06/2020: Nghiên cứu đề tài - Từ ngày 24/06/2020 đến ngày 30/06/2020: Tiến hành thi công lắp ráp và thử nghiệm - Từ ngày 01/07/2020 đến ngày 14/07/2020: Viết báo cáo Xác nhận của giảng viên hướng dẫn TP. HCM, ngày .tháng năm Sinh viên
  3. TRƯỜNG ĐH CÔNG NGHIỆP THỰC PHẨM TP. HCM CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM KHOA CÔNG NGHỆ ĐIỆN – ĐIỆN TỬ Độc lập - Tự do - Hạnh phúc TP. HCM, ngày .tháng năm NHẬN XÉT ĐỒ ÁN CHUYÊN NGÀNH CỦA GIẢNG VIÊN HƯỚNG DẪN Tên đồ án: ĐIỀU KHIỂN NHIỆT ĐỘ HIỂN THỊ TRÊN LED MA TRẬN NỐI TIẾP Sinh viên thực hiện: Giảng viên hướng dẫn: Dương Hào Quang Nguyễn Phú Công 2032170077 Đánh giá Đồ án 1. Về cuốn báo cáo: Số trang ___ Số chương ___ Số bảng số liệu ___ Số hình vẽ ___ Số tài liệu tham khảo ___ Sản phẩm ___ Một số nhận xét về hình thức cuốn báo cáo: 2. Về nội dung đồ án: 3. Về tính ứng dụng:
  4. 4. Về thái độ làm việc của sinh viên: Đánh giá chung: Điểm sinh viên: Dương Hào Quang: /10 Người nhận (Ký tên và ghi rõ họ tên)
  5. LỜI CẢM ƠN Để hoàn thành chuyên đề báo cáo đồ án chuyên ngành điều khiển – tự động hóa trước hết em xin gửi đến quý thầy, cô giáo trong Khoa Công nghệ Điện-Điện tử, trường Đại học Công nghiệp thực phẩm Thành phố Hồ Chí Minh lời cảm ơn chân thành. Đặc biệt, em xin gửi đến thầy Nguyễn Phú Công, người đã tận tình hướng dẫn, giúp đỡ em hoàn thành chuyên đề báo cáo đồ án chuyên ngành điều khiển – tự động hóa này lời cảm ơn sâu sắc nhất. Mặc dù nhóm em đã cố gắng hết sức mình, nhưng do lượng kiến thức eo hẹp nên không tránh khỏi những thiếu sót. Do vậy, chúng em rất mong nhận được sự góp ý quý báu của thầy, cô để nhóm có thể hoàn thiện và tốt hơn nữa cũng như tích lũy kinh nghiệm để hoàn thành tốt báo cáo đồ án tốt nghiệp sao ngày. Sau cùng, em kính chúc quý thầy cô thật dồi dào sức khỏe, luôn tràn đầy nhiệt huyết cùng với thành công trong sự nghiệp cao quý. TP. HCM, ngày 14 tháng 07 năm 2020 Sinh viên thực hiện Dương Hào Quang
  6. LỜI NÓI ĐÀU Như chúng ta biết, nhiệt độ là một trong những thành phần vật lý rất quan trọng. Việc thay đổi nhiệt độ của một vật chất ảnh hưởng rất nhiều đến cấu tạo, tính chất, và các đại lượng vật lý khác của vật chất. Ví dụ, sự thay đổi nhiệt độ của 1 chất khí sẽ làm thay đổi thể tích, áp suất của chất khí trong bình. Vì vậy, trong nghiên cứu khoa học, trong công nghiệp và trong đời sống sinh hoạt, thu thập các thông số và điều khiển nhiệt độ là điều rất cần thiết. Trong các lò nhiệt, máy điều hoà, máy lạnh hay cả trong lò viba, điều khiển nhiệt độ là tính chất quyết định cho sản phảm ấy. Trong ngành luyện kim, cần phải đạt đến một nhiệt độ nào đó để kim loại nóng chảy, và cũng cần đạt một nhiệt độ nào đó để ủ kim loại nhằm đạt được tốt các đặc tính cơ học như độ bền, độ dẻo, độ chống gỉ sét, . Trong ngành thực phẩm, cần duy trì một nhiệt độ nào đó để nướng bánh, để nấu, để bảo quản, . Việc thay đổi thất thường nhiệt độ, không chỉ gây hư hại đến chính thiết bị đang hoạt động, còn ảnh hưởng đến quá trình sản xuất, ngay cả trên chính sản phẩm ấy. Sự ra đời của mạch Arduino đã thúc đẩy sự yêu thích, tìm tòi nghiên cứu, ứng dụng thành tựu khoa học kỹ thuật của lĩnh vực tự động hóa vào đời sống và công nghiệp. Với những ưu điểm riêng của mình, Arduino dần khẳng định được vị thế, vai trò của mình trên trường quốc tế, được giới học sinh, sinh viên và cả giới nghiên cứu sử dụng một cách rộng rãi. Chính vì thấy được những ưu điểm của Arduino cùng với kiến thức sau một thời gian học tập và tìm hiểu tài liệu về Arduino, em đã chọn dùng Arduino chọn đồ án 2 với đề tài: “Điều khiển nhiệt độ hiển thị trên led ma trận nối tiếp”
  7. MỤC LỤC MỤC LỤC 1 DANH MỤC HÌNH ẢNH 2 DANH MỤC BẢNG BIỂU 2 CHƯƠNG 1: TỔNG QUAN VỀ ĐÈ TÀI 3 1.1. Đặt vấn đề 3 1.2. Yêu cầu và kết cấu đồ án 3 CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 4 2.1. Giới thiệu về cảm biến nhiệt độ DS18B20 4 2.1.1 Tổng quan 4 2.1.2 Đặc điểm DS18B20 4 2.1.3 Giao tiếp với DS18B20 5 2.2. Arduino Uno R3 9 2.2.1 Tổng quan về Arduino 9 2.2.2 Một vài thông số của Arduino Uno R3 9 2.2.3 Nguồn 10 2.2.4 Bộ nhớ 11 2.2.5 Các cổng vào ra 12 2.2.6 Ngôn ngữ lập trình cho Arduino 12 2.3. Led ma trận 13 2.3.1 Giới thiệu về led ma trận 13 2.3.2 Hiển thị với IC MAX7219 14 CHƯƠNG 3: THIẾT KẾ VÀ THI CÔNG PHẦN CỨNG 16 3.1. Tìm hiểu về đề tài 16 3.1.1 Nhiệm vụ đặt ra 16 3.1.2 Hướng giải quyết 16 3.2. Nguyên lý hoạt động của các khối 16 3.2.1 Khối cảm biến 16 3.2.2 Khối hiển thị nhiệt độ 18 3.2.3 Khối nút nhấn 20 3.2.4 Khối điều khiển đèn 21 3.3. Thông số nguồn điện của các linh thiết bị 22 1
  8. 3.4. Phần mềm và giải thuật 23 3.4.1 Phần mềm 23 3.4.2 Lưu đồ giải thuật 25 CHƯƠNG 4: ĐÁNH GIÁ VÀ KẾT LUẬN 27 4.1. Kết quả thực nghiệm 27 4.2. Khuyết điểm 28 4.3. Hướng khắc phục và phát triển 28 DANH MỤC HÌNH ẢNH Hình 1. 1: Điều khiển nhiệt độ máy lạnh 3 Hình 2. 1: Cảm biến DS18B20 4 Hình 2. 2: Sơ đồ chân cảm biến DS18B20 4 Hình 2. 3: Sơ đồ khối DS18B20 5 Hình 2. 4: Cấu trúc vùng nhớ mã ROM của DS18B20 5 Hình 2. 5: Cấu trúc vùng nhớ DS18B20 6 Hình 2. 6: Lưu đồ lệnh ROM 7 Hình 2. 7: Lưu đồ lệnh chức năng DS18B20 8 Hình 2. 8: Khe thời gian khởi tạo 9 Hình 2. 9: Khe thời gian đọc,viết 9 Hình 2. 10: Arduino Uno R3 9 Hình 2. 11: Vi điều khiển 10 Hình 2. 12: Các cổng vào ra 12 Hình 2. 13: Giao diện phần mềm Arduino IDE. 13 Hình 2. 14: Sơ đồ cấu tạo led ma trận 14 Hình 2. 15: MAX7219 14 Hình 3. 1: Sơ đồ khối 16 Hình 3. 2: Kết nối DS18B20 với Arduino 17 Hình 3. 3: Sơ đồ kết nối giữa MAX7219 với led ma trận 18 Hình 3. 4: Điện trở điều chỉnh dòng điện 19 Hình 3. 5: Phân đoạn dòng điện so với bảng giảm điện áp chuyển tiếp từ dữ liệu 19 Hình 3. 6: Kết nối dây giữa module led ma trận với Arduino 20 Hình 3. 7: Kết nối nút nhấn với Arduino 20 Hình 3. 8: Kết nối điều khiển đèn với Arduino 21 Hình 3. 9: Kết nối điều khiển quạt với Arduino 21 Hình 3. 10: Adapter 5V 23 Hình 3. 11: Sơ đồ giải thuật 26 DANH MỤC BẢNG BIỂU Bảng 2. 1: Một vài thông số của Arduino UNO 10 Bảng 3. 1: Sơ đồ kết nối chân DS18B20 với Arduino 17 Bảng 3. 2: Sơ đồ kết nối chân Led ma trận với Arduino 18 Bảng 3. 3: Sơ đồ kết nối nút nhấn với Arduino 20 Bảng 3. 4: Sơ đồ kết nối relay với Arduino 22 Bảng 3. 5: Thông số thiết bị 22 2
  9. CHƯƠNG 1: TỔNG QUAN VỀ ĐÈ TÀI 1.1. Đặt vấn đề Ngày nay, với sự phát triển của khoa học kỹ thuật, trong cuộc sống hằng ngày việc đo và đặt nhiệt độ theo mong muốn trong một không gian giới hạn nào đó như: trong nhà máy, xí nghiệp, trong bệnh viện, trong công ty, nhà ở, là rất cần thiết theo nhu cầu của con người. Điều đó chứng tỏ con người ngày càng muốn giao tiếp nhiều hơn với môi trường. Vì vậy điều khiển nhiệt độ là điều rất cần thiết và với sự phát triển của khoa học kỹ thuật, việc thực hiện một mô hình điều khiển nhiệt độ hiển thi trên led ma trận với độ chính xác cao mà không mất nhiều chi phí. Hình 1. 1: Điều khiển nhiệt độ máy lạnh Giúp sinh viên củng cố lý thuyết môn học Vi xử lý trong điều khiển. Hiểu thêm về cấu trúc của các dòng vi điều khiển nói chung và ARDUINO nói riêng. Biết về cách lập trình cho vi điều khiển và thực hiện được một số bài toán điều khiển cơ bản. Giúp sinh viên có thêm kỹ năng giải quyết một số bài toán điều khiển đơn giản ứng dụng các dòng vi điều khiển. Có khả năng phân tích bài toán điều khiển để tìm biện pháp giải quyết vấn đề, biết lựa chọn giải pháp hợp lý và biết cách chọn lựa thiết bị vật tư sử dụng cho công việc. Rèn thêm tư duy thực hiện và cách thức trình bày để sinh viên tiếp cận dễ dàng hơn đối với các đồ án môn học khác và đặc biệt là đồ án tốt nghiệp sau này khi sinh viên làm Khóa luận tốt nghiệp. 1.2. Yêu cầu và kết cấu đồ án Điều khiển được nhiệt độ thông qua cảm biến và vi sử lý hiển thị lên led ma trận mắc nối tiếp và thực hiện theo đúng tiến độ đã đặt ra. Kết cấu đồ án được trình bày theo 4 phần chính : Chương 1: Tổng quan về đề tài Chương 2: Cơ sở lý thuyết Chương 3: Thiết kế và thi công Chương 4: Đánh giá và kết luận 3
  10. CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1. Giới thiệu về cảm biến nhiệt độ DS18B20 2.1.1 Tổng quan DS18B20 là IC cảm biến nhiệt độ, chỉ bao gồm 3 chân,hình ảnh thức tế như hình dưới. Hình 2. 1: Cảm biến DS18B20 Hình 2. 2: Sơ đồ chân cảm biến DS18B20. 2.1.2 Đặc điểm DS18B20 Các đặc điểm kỹ thuật của cảm biến DS18B20 có thể kể ra một cách tóm tắt như sau: Sử dụng giao diện một dây nên chỉ cần có một chân ra để truyền thông. Độ phân giải khi đo nhiệt độ từ 9 bit tới 12bit. Dải đo nhiệt độ - 55°C đến 125°C, từng bậc 0.5°C, có thể đạt độ chính xác đến 0.1°C 4
  11. bằng việc hiệu chỉnh qua phần mềm. Rất thích hợp với các ứng dụng đo lường đa điểm vì nhiều đầu đo có thể được nối trên một bus, bus này được gọi là bus một dây (1-wire). Không cần thêm linh kiện bên ngoài. Điện áp nguồn nuôi có thể thay đổi trong khoảng rộng, từ 3.0 V đến 5.5 V DC và có thể được cấp thông qua đường dẫn dữ liệu. Dòng tiêu thụ tại chế độ nghỉ cực nhỏ. Thời gian lấy mẫu và biến đổi ra digital 12 bit không lớn quá 750ms. Mỗi cảm biến có một mã định danh duy nhất 64 bit chứa trong bộ nhớ ROM trên chip (on chip), giá trị nhị phân được khắc bằng tia laze. Sơ đồ khối bên trong của cảm biến: Hình 2. 3: Sơ đồ khối DS18B20. 2.1.3 Giao tiếp với DS18B20 Đầu đo nhiệt độ số DS18B20 đưa ra số liệu để biểu thị nhiệt độ đo được dưới dạng mã nhị phân 12 bit. Các thông tin được gửi đến và nhận về từ DS18B20 trên giao diện 1-wire, do đó chỉ cần hai đường dẫn gồm một đường cho tín hiệu và một đường làm dây GND là đủ để kết nối vi điều khiển đến điểm đo. Nguồn nuôi cho các thao tác ghi/đọc/chuyển đổi có thể được trích từ đường tín hiệu, không cần có thêm đường dây riêng để cấp điện áp nguồn. Mỗi vi mạch đo nhiệt độ DS18B20 có một mã số định danh duy nhất, được khắc bằng laser trong quá trình chế tạo vi mạch nên nhiều vi mạch DS18B20 có thể cùng kết nối vào một bus 1-wire mà không có sự nhầm lẫn. Đặc điểm này làm cho việc lắp đặt nhiều cảm biến nhiệt độ tại nhiều vị trí khác nhau trở nên dễ dàng và với chi phí thấp. Số lượng các cảm biến nối vào bus không hạn chế. Mỗi cảm biến nhiệt độ DS18B20 có một dãy mã 64 bit duy nhất được lưu trữ trong bộ nhớ ROM từ khi sản xuất bằng kỹ thuật laze. Cấu trúc vùng nhớ mã ROM 64 bit của DS18B20: Hình 2. 4: Cấu trúc vùng nhớ mã ROM của DS18B20 Như vậy dãy mã được chia ra thành 3 nhóm, trong đó: 5
  12. Tám bit đầu tiên là mã định danh họ một dây, mã của DS18B20 là 28h. 48 bit tiếp theo là mã số xuất xưởng duy nhất, nghĩa là mỗi cảm biến DS1820 chỉ có một số mã. Tám bit có ý nghĩa nhất là byte mã kiểm tra CRC (cyclic redundancy check), byte này được tính toán từ 56 bit đầu tiên của dãy mã trên ROM Để truy cập lên cảm biến một dây DS18B20 ta phải sử dụng hai nhóm lệnh: các lệnh ROM và các lệnh chức năng (function commands) bộ nhớ. Sơ đồ vùng nhớ DS18B20: Hình 2. 5: Cấu trúc vùng nhớ DS18B20 Việc đo nhiệt độ của DS18B20 được thực hiện theo từng lần lấy mẫu. Mỗi lần lấy mẫu được ngăn cách bởi 1 tín hiệu reset và 1 presence pulse. Reset được xem như quá trình ngăn cách và khởi động lại quá trình đo nhiệt độ mới, presence pulse giống như tín hiệu báo hiệu cho VDK biết là DS18B20 đang có mặt. Các bước của 1 lần lấy mẫu: Khởi tạo xung reset và nhận tín hiệu hiện diện từ DS18B20. Gửi các lệnh ROM. Gửi các lệnh chức năng bộ nhớ. Lưu đồ lệnh ROM DS18B20 được trình bày bên dưới: 6
  13. Hình 2. 6: Lưu đồ lệnh ROM Lưu đồ lệnh chức năng DS18B20 được trình bày bên dưới: 7
  14. Hình 2. 7: Lưu đồ lệnh chức năng DS18B20 Thời gian khởi tạo: 8
  15. Hình 2. 8: Khe thời gian khởi tạo Giản đồ khe thời gian đọc viết: Hình 2. 9: Khe thời gian đọc,viết 2.2. Arduino Uno R3 2.2.1 Tổng quan về Arduino Arduino thật ra là một bo mạch vi xử lý được dùng để lập trình tương tác với các thiết bị phần cứng như cảm biến, động cơ, đèn hoặc các thiết bị khác. Đặc điểm nổi bật của Arduino là môi trường phát triển ứng dụng cực kỳ dễ sử dụng, với một ngôn ngữ lập trình có thể học một cách nhanh chóng ngay cả với người ít am hiểu về điện tử và lập trình. Và điều làm nên hiện tượng Arduino chính là mức giá rất thấp và tính chất nguồn mở từ phần cứng tới phần mềm. Hình 2. 10: Arduino Uno R3 2.2.2 Một vài thông số của Arduino Uno R3 9
  16. Vi điều khiển ATmega328 họ 8bit Điện áp hoạt động 5V DC (chỉ được cấp qua cổng USB) Tần số hoạt động 16 MHz Dòng tiêu thụ khoảng 30mA Điện áp vào khuyên dùng 7-12V DC Điện áp vào giới hạn 6-20V DC Số chân Digital I/O 14 (6 chân hardware PWM) Số chân Analog 6 (độ phân giải 10bit) Dòng tối đa trên mỗi 30 mA chân I/O Dòng ra tối đa (5V) 500 mA Dòng ra tối đa (3.3V) 50 mA 32 KB (ATmega328) với 0.5KB dùng bởi Bộ nhớ flash bootloader SRAM 2 KB (ATmega328) EEPROM 1 KB (ATmega328) Bảng 2. 1: Một vài thông số của Arduino UNO Hình 2. 11: Vi điều khiển Arduino UNO có thể sử dụng 3 vi điều khiển họ 8bit AVR là ATmega8, ATmega168, ATmega328. Bộ não này có thể xử lí những tác vụ đơn giản như điều khiển đèn LED nhấp nháy, xử lí tín hiệu cho xe điều khiển từ xa, làm một trạm đo nhiệt độ - độ ẩm và hiển thị lên màn hình LCD, 2.2.3 Nguồn Arduino UNO có thể được cấp nguồn 5V thông qua cổng USB hoặc cấp nguồn ngoài với điện áp khuyên dùng là 7-12V DC và giới hạn là 6-20V. Thường thì cấp nguồn bằng pin vuông 9V là hợp lí nhất nếu không có sẵn nguồn từ cổng USB. Nếu cấp nguồn vượt quá ngưỡng giới hạn trên, sẽ làm hỏng Arduino UNO. Các chân năng lượng ND (Ground): cực âm của nguồn điện cấp cho Arduino UNO. Khi bạn dùng các thiết bị sử dụng những nguồn điện riêng biệt thì những chân này phải được nối với nhau. 5V: cấp điện áp 5V đầu ra. Dòng tối đa cho phép ở chân này là 500mA. 3.3V: cấp điện áp 3.3V đầu ra. Dòng tối đa cho phép ở chân này là 10
  17. 50mA. Vin (Voltage Input): để cấp nguồn ngoài cho Arduino UNO, bạn nối cực dương của nguồn với chân này và cực âm của nguồn với chân GND. IOREF: điện áp hoạt động của vi điều khiển trên Arduino UNO có thể được đo ở chân này. Và dĩ nhiên nó luôn là 5V. Mặc dù vậy bạn không được lấy nguồn 5V từ chân này để sử dụng bởi chức năng của nó không phải là cấp nguồn. RESET: việc nhấn nút Reset trên board để reset vi điều khiển tương đương với việc chân RESET được nối với GND qua 1 điện trở 10KΩ. Lưu ý: Arduino UNO không có bảo vệ cắm ngược nguồn vào. Do đó phải hết sức cẩn thận, kiểm tra các cực âm – dương của nguồn trước khi cấp cho Arduino UNO. Việc làm chập mạch nguồn vào của Arduino UNO sẽ biến nó thành một miếng nhựa chặn giấy. Nên dùng nguồn từ cổng USB nếu có thể. Các chân 3.3V và 5V trên Arduino là các chân dùng để cấp nguồn ra cho các thiết bị khác, không phải là các chân cấp nguồn vào. Việc cấp nguồn sai vị trí có thể làm hỏng board. Điều này không được nhà sản xuất khuyến khích. Cấp nguồn ngoài không qua cổng USB cho Arduino UNO với điện áp dưới 6V có thể làm hỏng board. Cấp điện áp trên 13V vào chân RESET trên board có thể làm hỏng vi điều khiển ATmega328. Cường độ dòng điện vào/ra ở tất cả các chân Digital và Analog của Arduino UNO nếu vượt quá 200mA sẽ làm hỏng vi điều khiển. Cấp điệp áp trên 5.5V vào các chân Digital hoặc Analog của Arduino UNO sẽ làm hỏng vi điều khiển. Cường độ dòng điện qua một chân Digital hoặc Analog bất kì của Arduino UNO vượt quá 40mA sẽ làm hỏng vi điều khiển. Do đó nếu không dùng để truyền nhận dữ liệu phải mắc một điện trở hạn dòng. 2.2.4 Bộ nhớ Vi điều khiển Atmega328 tiêu chuẩn cung cấp cho người dùng: 32KB bộ nhớ Flash: những đoạn lệnh bạn lập trình sẽ được lưu trữ trong bộ nhớ Flash của vi điều khiển. Thường thì sẽ có khoảng vài KB trong số này sẽ được dùng cho bootloader nhưng đừng lo, bạn hiếm khi nào cần quá 20KB bộ nhớ này đâu. 2KB cho SRAM (Static Random Access Memory): giá trị các biến bạn khai báo khi lập trình sẽ lưu ở đây. Bạn khai báo càng nhiều biến thì càng cần nhiều bộ nhớ RAM. Tuy vậy, thực sự thì cũng hiếm khi nào bộ nhớ RAM lại trở thành thứ mà bạn phải bận tâm. Khi mất điện, dữ liệu trên SRAM sẽ bị mất. 1Kb cho EEPROM( Electrically Eraseble Programmable Read Only Memory): đây giống như một chiếc ổ cứng mini – nơi bạn có thể đọc và ghi dữ liệu của mình vào đây mà không phải lo bị mất khi cúp điện giống như dữ liệu trên SRAM. 11
  18. 2.2.5 Các cổng vào ra Hình 2. 12: Các cổng vào ra Arduino UNO có 14 chân digital dùng để đọc hoặc xuất tín hiệu. Chúng chỉ có 2 mức điện áp là 0V và 5V với dòng vào/ra tối đa trên mỗi chân là 40mA. Ở mỗi chân đều có các điện trở pull-up từ được cài đặt ngay trong vi điều khiển ATmega328 (mặc định thì các điện trở này không được kết nối). Một số chân digital có các chức năng đặc biệt như sau: 2 chân Serial: 0 (RX) và 1 (TX): dùng để gửi (transmit – TX) và nhận (receive – RX) dữ liệu TTL Serial. Arduino Uno có thể giao tiếp với thiết bị khác thông qua 2 chân này. Kết nối bluetooth thường thấy nói nôm na chính là 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 2 chân này nếu không cần thiết Chân PWM (~): 3, 5, 6, 9, 10, và 11: cho phép bạn xuất ra xung PWM với độ phân giải 8bit (giá trị từ 0 → 2 8-1 tương ứng với 0V → 5V) bằng hàm analogWrite(). Nói một cách đơn giản, bạn có thể điều chỉnh được điện áp ra ở chân này từ mức 0V đến 5V thay vì chỉ cố định ở mức 0V và 5V như những chân khác. Chân giao tiếp SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Ngoài các chức năng thông thường, 4 chân này còn dùng để truyền phát dữ liệu bằng giao thức SPI với các thiết bị khác. LED 13: trên Arduino UNO có 1 đèn led màu cam (kí hiệu chữ L). Khi bấm nút Reset, bạn sẽ thấy đèn này nhấp nháy để báo hiệu. Nó được nối với chân số 13. Khi chân này được người dùng sử dụng, LED sẽ sáng. 2.2.6 Ngôn ngữ lập trình cho Arduino 12
  19. Hình 2. 13: Giao diện phần mềm Arduino IDE. Thiết kế bo mạch nhỏ gọn, trang bị nhiều tính năng thông dụng mang lại nhiều lợi thế cho Arduino, tuy nhiên sức mạnh thực sự của Arduino nằm ở phần mềm. Môi trường lập trình đơn giản dễ sử dụng, ngôn ngữ lập trình Wiring dễ hiểu và dựa trên nền tảng C/C++ rất quen thuộc với người làm kỹ thuật. Và quan trọng là số lượng thư viện code được viết sẵn và chia sẻ bởi cộng đồng nguồn mở là cực kỳ lớn Arduino IDE là phần mềm dùng để lập trình cho Arduino. Môi trường lập trình Arduino IDE có thể chạy trên ba nền tảng phổ biến nhất hiện nay là Windows, Macintosh osx và Linux. Do có tính chất nguồn mở nên môi trường lập trình này hoàn toàn miễn phí và có thể mở rộng thêm bởi người dùng có kinh nghiệm. Ngôn ngữ lập trình có thể được mở rộng thông qua các thư viện C++. Và do ngôn ngữ lập trình này dựa trên nền tảng ngôn ngữ c của AVR nẽn người dùng hoàn toàn có thể nhúng thêm code viết bằng AVR vào chương trình nếu muốn.Hiện tại, Arduino IDE có thể download từ trang chủ bao gồm các phiên bản sau: Arduino 1.0.5 Arduinol.5.5 BETA (Hỗ trợ cho 2 board Arduino mới nhất là: Arduino Yun và Arduino Due). Arduino IDE cho Intel Galileo 2.3. Led ma trận 2.3.1 Giới thiệu về led ma trận Led ma trận bao gồm các led đơn được xếp thành hàng và cột . Các led đơn trong cùngmột hàng thì được nối chung anot (catot) còn trong cùng một cột thì được nối chung catot(anot). Do đó để các led có thể sáng ta phải cấp nguồn cho led như sau : cấp mức cao(thấp) cho hàng và mức thấp (cao) cho cột. 13
  20. Hình 2. 14: Sơ đồ cấu tạo led ma trận 2.3.2 Hiển thị với IC MAX7219 Led Matrix 8x8 là một bảng Led gồm 8 hàng và 8 cột (tổng cộng 64 con led). Nếu điều khiển trực tiếp bằng Arduino, đó là một điều không khả thi. Thế nên, IC MAX7219 đã ra đời để có thể điều khiển vô vàn con Led chỉ với 5 chân. IC MAX7219 được hãng MAXIM thiết kế và sản xuất, thuận tiện sử dụng để điều khiển LED ma trận và LED 7 thanh (1 chip có thể điều khiển LED ma trận 8x8 hoặc LED 7 thanh 8 chữ số) và chỉ cần 1 điện trở để hạn dòng cho tất cả các led (so với các IC khác hầu như phải có 1 điện trở cho mỗi led). Trên mỗi chip đã được tích hợp bộ giải mã BCD, mạch quét dồn kênh, thanh ghi dịch, Giống như với 74HC595, để điều khiển LED ma trận ta sử dụng MAX7219 hoạt động giống như một thanh ghi dịch khi bạn cần nhập dữ liệu vào nối tiếp theo từng bit. Tổng cộng có 16 bit được nhập vào tại một thời điểm. MAX7219 chỉ cần 3 chân từ Arduino để kết nối với các chân DIN, LOAD và CLK của IC. Sơ đồ chân của MAX7219 được mô tả như hình dưới: Hình 2. 15: MAX7219 Chân LOAD được kéo xuống LOW và bit đầu tiên của dữ liệu được đưa vào chân DIN, trên sườn lên của xung CLK, các bit tại chân DIN được đưa vào thanh ghi bên trong chip. Sau đó xung CLK xuống LOW và các bit tiếp theo được thiết lập tại 14
  21. chân DIN trước khi lặp lại quá trình. Sau khi 16 bit được đưa vào thanh ghi, chân LOAD được đưa lên HIGH để chốt dữ liệu vào. Chân DOUT (24) được sử dụng nếu có từ 2 chip MAX7219 trở lên. DOUT của chip thứ nhất kết nối DIN của chip thứ hai và cứ như vậy. Dữ liệu được đưa ra khỏi chân DOUT trên sườn xuống của xung CLK. 15
  22. CHƯƠNG 3: THIẾT KẾ VÀ THI CÔNG PHẦN CỨNG 3.1. Tìm hiểu về đề tài 3.1.1 Nhiệm vụ đặt ra Điều khiển quạt DC và đèn AC. Nếu nhiệt độ đặt lớn hơn nhiệt độ đo thì mở đèn và tắt quạt. Ngược lại, nếu nhiệt độ đặt nhỏ hơn nhiệt độ đo thì vi điều khiển kích Relay tắt đèn và mở quạt làm mát. Khối hiển thị nhiệt độ Khối cảm Arduino Khối nút biến Uno nhấn Điều khiển Điều khiển đèn AC quạt DC Hình 3. 1: Sơ đồ khối Hiển thị nhiệt độ đặt và nhiệt độ đo trên led ma tận. Các cơ cấu thi hành phải hoạt động ổn định khi nhiệt độ đo dao động quanh nhiệt độ chuẩn (nhiệt độ đặt). 3.1.2 Hướng giải quyết Dùng đèn AC để tăng nhiệt độ và quạt DC để giảm nhiệt độ. Hiển thị nhiệt độ bằng module led ma trận 8x32 sử dụng IC MAX7219. Dùng 2 nút nhấn để nhập nhiệt độ chuẩn (nhiệt độ đặt) và bắt đầu xử lý. Dùng phần mềm Arduino IDE để viết chương trình 3.2. Nguyên lý hoạt động của các khối 3.2.1 Khối cảm biến Để đọc nhiệt độ từ cảm biến DS18B20, chúng ta cần sử dụng các thư viện hỗ trợ sau: Thư viện OneWire.h Thư viện DallasTemperature.h Sơ đồ kết nối chân với Arduino: 16
  23. DS18B20 ARDUINO GND GND DATA 2 VCC 5V Bảng 3. 1: Sơ đồ kết nối chân DS18B20 với Arduino Sơ đồ kết nối dây: Hình 3. 2: Kết nối DS18B20 với Arduino Nguyên lý hoạt động của cảm biến DS18B20: DS18B20 gồm 2 byte: + 4 bit thấp là phần lẻ sau dấu phẩy: Bít 0, bít 1, bít 2, bít 3. + 7 bit tiếp theo là phần nguyên: Bit 4, bít 5, bít 6, bít 7, bít 8, bít 9, bít 10. + 5 bít cao nhất là dấu của nhiệt độ (0 = “+”; 1 = “-”). + Dữ liệu đến và đi khỏi DS18B20 đều truyền từ bit LSB đầu tiên và cuối cùng là bit MSB (từ phải sang trái). Cách đọc nhiệt độ của DS18B20: Nhiệt độ đọc về dạng hex nên ta phải đổi ra thập phân khi hiển thị. Giả sử ta đọc được 2 byte nhiệt độ: Bước 1: So sánh bit MSB, nếu= 0 thì in ra dấu “+” rồi nhảy sang bước 3. Nếu = 1 thì in ra dấu “-” rồi tiếp tục đến bước 2. Bước 2: Chuyển 2 byte vừa nhận được sang dạng bù 2 của chính nó. Bước 3: Chuyển 7 bit phần nguyên vào thanh ghi A và in ra giá trị thanh ghi nàydưới dạng thập phân (chính là in ra 3 số phần nguyên của nhiệt độ). Bước 4: In ra dấu “,”. Bước 5: In ra 4 số sau dấu “,” dạng thập phân (4 bít thấp nhất). VD: +10.125˚C là FF5Eh 17
  24. 3.2.2 Khối hiển thị nhiệt độ Để hiển thị hình ảnh lên led ma trận ta sử dụng module 4 led ma trận với IC MAX7219 Hiển thị Module led ma trận thông qua Arduino, chúng ta cần sử dụng các thư viện sau: Thư viện MD_Parola.h Thư viện MD_MAX72xx.h Sơ đồ kết nối với Arduino: MODULE LED MA TRẬN ARDUINO VCC 5V GND GND DIN_PIN 11 CLK_PIN 13 CS_PIN 10 Bảng 3. 2: Sơ đồ kết nối chân Led ma trận với Arduino Nguyên lý hoạt động của IC MAX7219 với led ma trận: 64 đèn LED được điều khiển bởi 16 chân đầu ra của IC. Số lượng tối đa của đèn LED sáng lên cùng một lúc là tám. Các đèn LED được sắp xếp thành 8 × 8 gồm hàng và cột. Vì vậy, MAX7219 kích hoạt mỗi cột trong một khoảng thời gian rất ngắn và đồng thời nó cũng điều khiển từng hàng. Vì vậy, bằng cách nhanh chóng chuyển qua các cột và hàng, mắt người sẽ chỉ nhận thấy một ánh sáng liên tục. Hình 3. 3: Sơ đồ kết nối giữa MAX7219 với led ma trận Lưu ý các chân của Ma trận LED 8 × 8 phổ biến được sắp xếp bên trong, vì 18
  25. vậy nếu bạn tự xây dựng một ma trận, bạn nên tìm hiểu nó. Cũng lưu ý rằng một bảng ngắt phổ biến cho MAX7219 đi kèm với một điện trở giữa 5V và chân IC 18. Điện trở được sử dụng để cài đặt độ sáng hoặc dòng điện cho đèn LED. Hình 3. 4: Điện trở điều chỉnh dòng điện Bảng dưới đây là dữ liệu của IC cho thấy giá trị của điện trở mà chúng ta nên sử dụng theo mức giảm điện áp chuyển tiếp của đèn LED. Hình 3. 5: Phân đoạn dòng điện so với bảng giảm điện áp chuyển tiếp từ dữ liệu Sơ đồ kết nối dây giữa module với Arduino: 19
  26. Hình 3. 6: Kết nối dây giữa module led ma trận với Arduino 3.2.3 Khối nút nhấn Sơ đồ kết nối dây với Arduino: Hình 3. 7: Kết nối nút nhấn với Arduino Sơ đồ kết nối chân : NÚT NHẤN ARDUINO VCC 5V GND GND Button1 3 Button2 4 Bảng 3. 3: Sơ đồ kết nối nút nhấn với Arduino Nguyên lý hoạt động: Sử dụng 2 nút nhấn (Button1 và Button 2) dùng để tăng, giảm và nhập nhiệt 20
  27. độ đặt. Khi bật nguồn khối hiển thị sẽ hiển thị 29℃. Nếu nhấn Button1 nhiệt độ chuẩn sẽ tăng từng độ, nhấn Button2 sẽ giảm nhiệt độ chuẩn và tính hiệu sẽ truyền về Aruino bắt đầu xử lý đèn. 3.2.4 Khối điều khiển đèn Sơ đồ kết nối với Arduino: Hình 3. 8: Kết nối điều khiển đèn với Arduino Hình 3. 9: Kết nối điều khiển quạt với Arduino Sơ đồ nối kết nối chân: 21
  28. RELAY ARDUINO VCC 5V GND GND RELAY1 1 RELAY2 0 Bảng 3. 4: Sơ đồ kết nối relay với Arduino Nguyên lý hoạt động: Sử dụng module relay 5V để đóng ngắt nguồn AC, bóng đèn được nối vào tiếp điểm NC(thường đóng) của relay. Khi nhiệt độ đặt lớn hơn nhiệt đọ chuẩn thì Arduino xuất tín hiệu đóng ngắt relay làm cho bóng đèn sáng lên, tăng nhiệt độ cảm biến và khi nhiệt độ thực lớn hơn nhiệt đọ đặt thì ngắt relay, tắt đèn 3.3. Thông số nguồn điện của các linh thiết bị TÊN THIẾT BỊ SỐ LƯỢNG DÒNG ĐIỆN ÁP ARDUINO UNO R3 1 30mA 5VDC MODUEL LED MA 1 320mA 5VDC TRẬN 8x32 NÚT NHẤN 2 100mA 5VDC RELAY 2 80mA 5VDC QUẠT DC 1 1A 12VDC ĐÈN 1 ~0,1A 220V Bảng 3. 5: Thông số thiết bị Các thiết bịsử dụng ngồn 5V thì sử dụng chung một nguồn nuôi có sẵn từ Arduino và sử dụng Adapter để cấp nguồn cho Arduino, riêng quạt sử dụng Adapter 12VDC và đèn sử dụng nguồn 220VAC 22
  29. Hình 3. 10: Adapter 5V Thông số của Adapter: Điện áp vào : 100-240 V Điện áp ra : 5V-1A Chiều dài cáp :1m Đầu jack chẩn micro 3.4. Phần mềm và giải thuật 3.4.1 Phần mềm #include #include #include #include #include #define ONE_WIRE_BUS 2 //Sensor DS18B20 am digitalen Pin 2 OneWire oneWire(ONE_WIRE_BUS); // tạo giao tiếp 1 dây DallasTemperature sensors(&oneWire);// đưa giao tiếp vào cảm biến int settemp=29; const uint16_t WAIT_TIME = 800; float nhietdo; #define MAX_DEVICES 4 #define CLK_PIN 13 #define DATA_PIN 11 #define CS_PIN 10 #define role1 1 #define role2 0 #define coi 6 const int buttonup =3; const int buttondown =4; int currentbuttonstate = 0; 23
  30. int previousbuttonstate=0 ; int currentbuttonstate1 =0; int previousbuttonstate1=0 ; MD_Parola P = MD_Parola(CS_PIN, MAX_DEVICES); void setup(void) { P.begin(); pinMode(buttonup,INPUT_PULLUP); pinMode(buttondown,INPUT_PULLUP); pinMode(role1,OUTPUT); pinMode(role2,OUTPUT); } void loop(void) { displaymatrix(); setheater1(); setbuttonup(); setbuttondown(); } void displaymatrix(){ sensors.requestTemperatures();// yêu cầu cảm biến đọc nhiệt độ nhietdo=sensors.getTempCByIndex(0);// lấy nhiệt độ trên cảm biến P.print(String(nhietdo)+"C"); } void setbuttonup(){ currentbuttonstate = digitalRead(buttonup); if (currentbuttonstate != previousbuttonstate){ // nếu trạng thái hiện tại thay đổi so với trạng thái trước if (currentbuttonstate== HIGH){ // nút nhấn dược nhấn settemp=settemp+1; settempup(); } } previousbuttonstate=currentbuttonstate; } void setbuttondown(){ currentbuttonstate1 = digitalRead(buttondown); if (currentbuttonstate1 != previousbuttonstate1){// nếu trạng thái hiện tại thay đổi so với trạng thái trước if (currentbuttonstate1== HIGH){// nút nhấn dược nhấn settemp=settemp-1; 24
  31. settempdown(); } } previousbuttonstate1=currentbuttonstate1; } void settempup(){ P.print("Set:"+String(settemp)); delay(WAIT_TIME); } void settempdown(){ P.print("Set:"+String(settemp)); delay(WAIT_TIME); } void setheater1(){ if ((settemp) > (nhietdo + 0.5 ) ) { // nếu nhiệt độ đặt lớn hơn nhiệt độ hiện tại thì bật đèn, tắt quạt digitalWrite(role1, LOW); digitalWrite(role2, HIGH); } else if ((settemp) <= (nhietdo )){// nếu nhiệt độ đặt bé hơn hoặc bằng nhiệt độ thực thì bật quạt, tắt đèn digitalWrite(role2, LOW); digitalWrite(role1,HIGH ); } } 3.4.2 Lưu đồ giải thuật 25
  32. Bắt đầu Hiển thị 290C 0 (TĐặt = 29 C) Y Button1 (Tăng T ) Đặt TĐặt = N TĐặt+1 Hiển thị T N Đặt Y Button2 (Giảm TĐặt) TĐặt = TĐặt - 1 Hiển thị TĐặt Y Đọc nhiệt độ từ cảm biến Y N TĐặt > Thiện tại Bật đèn AC và Tắt đèn và mở tắt quạt quạt làm mát Hiển thị nhiệt độ Kết thúc Hình 3. 11: Sơ đồ giải thuật 26
  33. CHƯƠNG 4: ĐÁNH GIÁ VÀ KẾT LUẬN 4.1. Kết quả thực nghiệm - Hệ thống điều khiển tương đối ổn định, đáp ứng được yêu cầu của đề tài. - Hiển thị được nhiệt độ trên led ma trận - Cảm biến đọc nhiệt độ tương đối chính xác. Hình ảnh mô hình hoàn tất: Hình 4. 1: Mô hình điều khiển nhiệt độ hiển thị trên led ma trận (TĐẶT < TLÒ) 27
  34. Hình 4. 2: Mô hình điều khiển nhiệt độ hiển thị trên led ma trận (TĐẶT >TLÒ ) 4.2. Khuyết điểm - Đọc nhiệt độ từ môi trường vào chưa tuyệt đối chính xác. - Do quá trình xử lý quạt DC, đèn AC hoạt động liên tục làm Relay được kích liên tục tải dễ bị hỏng -Do sử dụng relay bật tắt nên chưa thể ổn định chính xác nhiệt thức so với nhiệt độ đặt 4.3. Hướng khắc phục và phát triển - Dùng cảm biến nhiệt độ khác, có độ ổn định hơn và đọc nhiệt độ chính xác hơn. - Đưa ra các giải thuật khác để lập trình hệ thống tối ưu hơn. - Với mạch ta có thể kết nối khác hơn, tiện lợi hơn như thay quạt và đèn bằng một thiết bị làm mát và làm nóng khác. - Có thể giao tiếp với máy tính để điều khiển nhiệt độ lò. 28