Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương LỜI NÓI ĐẦU Từ khi ra đời đến nay, công nghệ thông tin không ngừng phát triển và đạt được những tiến bộ vượt bậc. Sự phát triển của phần cứng, cũng như phần mềm giúp cho việc giải quyết các công việc của con người trở nên dễ dàng, thuận tiện và nhanh chóng. Bên cạnh đó, kỹ thuật điện tử cũng có những bước đột phá và ứng dụng rộng rãi trong các lĩnh vực đời sống, trong đó có việc kiểm tra, giám sát. Việc thu thập thông tin không cần phải có tác động trực tiếp của con người mà được thực hiện thông qua các máy móc thiết bị, mọi thông tin được tổng hợp, lưu trữ và quản lý một cách dễ dàng nhờ hệ thống máy tính. Do đó, cùng với những kiến thức tích lũy được trong quá trình học tập ở trường, em lựa chọn đề tài “Thiết kế, chế tạo mạch xử lý tín hiệu cảm biến siêu âm, truyền phát qua sóng Radio và hiển thị trên máy tính”. Em xin chân thành cảm ơn sự hướng dẫn, chỉ bảo của Thầy Trịnh Tuấn Dương, các thầy cô giáo bộ môn cùng các bạn đã giúp đỡ để em có thể hoàn thành đồ án này. Mặc dù đã rất cố gắng nhưng kiến thức và thời gian có hạn nên chắc chắn đồ án này của em không tránh khỏi những sai sót. Kính mong nhận được sự chỉ bảo của thầy cô và sự góp ý của các bạn để đồ án của em được hoàn thiện hơn. SVTH: Sơn 1 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Sinh viên thực hiện Nguyễn Hoài Sơn TÓM TẮT ĐỀ TÀI Để hoàn thành được mục tiêu của đề tài là chế tạo được hệ thống xử lý tín hiệu từ cảm biến siêu âm, truyền sóng không dây và hiển thị trên máy tính, em đã tìm hiểu về đặc tính các linh kiện sử dụng, cách thức hoạt động của các linh kiện. Trên cơ sở đó, xây dựng sơ đồ nguyên lý, định hình cơ bản về nguyên lý hoạt động của hệ thống. Sau khi hình thành được sơ đồ nguyên lý, em tiến hành thiết kế mạch nguyên lý, mô phỏng mạch nguyên lý bằng các phần mềm, viết code điều khiển hệ thống và chạy thử. Sau khi hoàn thành việc mô phỏng, công việc tiếp theo là thiết kế, chế tạo mạch in và xây dựng hoàn chỉnh chương trình điều khiển, giao tiếp giữa các khối trong hệ thống. Về cơ bản, đồ án bao gồm các phần: Chương 1: Tổng quan về sóng siêu âm và đặc tính linh kiện sử dụng. Chương 2: Thiết kế sơ đồ nguyên lý và mạch nguyên lý. Chương 3:Thiết kế mạch in và chương trình điều khiển. SVTH: Sơn 2 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương MỤC LỤC LỜI NÓI ĐẦU TÓM TẮT ĐỀ TÀI MỤC LỤC DANH SÁCH BẢNG BIỂU DANH SÁCH HÌNH VẼ CHƯƠNG 1: TỔNG QUAN VỀ SÓNG SIÊU ÂM VÀ ĐẶC TÍNH CÁC LINH KIỆN SỬ DỤNG Sóng siêu âm 1.1 1.1.1 Tổng quan 1.1.2 Các tính chất của siêu âm 1.1.3 Ứng dụng của siêu âm Đặc tính các linh kiện sử dụng 1.2 1.2.1 Cảm biến siêu âm 1.2.2 Module nRF24L01+ 1.2.3 Tổng quan PIC 16F887 1.2.4 LCD text 16x2 1.2.5 IC Max232 CHƯƠNG 2:THIẾT KẾ SƠ ĐỒ NGUYÊN LÝ VÀ MẠCH NGUYÊN LÝ 2.3 2.1 Ý tưởng thiết kế 2.2 Sơ đồ khối hệ thống Chức năng của từng khối trong hệ thống 2.4 SVTH: Sơn 3 Nguyên lý hoạt động Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Mạch nguyên lý của hệ thống 2.5 2.5.1 Khối cung cấp nguồn 2.5.2 Khối xử lý trung tâm 1 2.5.3 LCD hiển thị 2.5.4 Khối Max232 2.5.5 Khối xử lý trung tâm 2 2.5.6 Module nRF24L01+ CHƯƠNG 3: THIẾT KẾ MẠCH IN VÀ CHƯƠNG TRÌNH ĐIỀU KHIỂN 3.1 Thi công mạch in 3.2 Thiêt kế phần mềm 3.2.1 Xây dựng chương trình cho PIC 3.2.2 Xây dựng chương trình nhận dữ liệu trên máy tính KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI TÀI LIỆU THAM KHẢO PHỤ LỤC 1 PHỤ LỤC 2 SVTH: Sơn 4 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương DANH SÁCH BẢNG BIỂU Bảng 1. 1 Vận tốc của siêu âm trong một số vật liệu[1] Bảng 1. 2 Chức năng các chân LCD Bảng 1. 3 Mã lệnh điều khiển LCD DANH SÁCH HÌNH VẼ Hình 1. 1 Các dải tần số âm thanh Hình 1. 2 Khúc xạ sóng Hình 1. 3 Cấu trúc của cảm biến siêu âm kiểu hở Hình 1. 4 Mô phỏng quá trình rung Hình 1. 5 Cấu trúc cảm biến siêu âm kiểu kín Hình 1. 6 Cấu tạo cảm biến siêu âm cao tần Hình 1. 7 Nguyên lý TOF Hình 1. 8 Hiện tượng Forecasting Hình 1. 9 Hiện tượng đọc chéo Hình 1. 10 Mô-đun cảm biến siêu âm SRF05 Hình 1. 11 Sơ đồ timing SRF05 – chế độ1 Hình 1. 12 Sơ đồ timing SRF05 – chế độ 2 Hình 1. 13 Module nRF24L01+ Hình 1. 14 Sơ đồ khối nRF24L01+ Hình 1. 15 Sơ đồ trạng thái hoạt động của nRF24L01+ Hình 1. 16 Sơ đồ chân vi điều khiển PIC 16F887 Hình 1. 17 Sơ đồ khối PIC 16F887 Hình 1. 18 Sơ đồ bộ nhớ chương trình PIC 16F887 SVTH: Sơn 5 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 1. 19 Tổ chức bộ nhớ của PIC 16F887 Hình 1. 20 LCD 16x2 Hình 1. 21 IC Max232 Hình 1. 22 Sơ đồ kết nối với IC Max232 Hình 2. 1 Sơ đồ nguyên lý phần xử lý tín hiệu siêu âm Hình 2. 2 Sơ đồ nguyên lý phần nhận dữ liệu qua RF và gửi lên máy tính Hình 2. 3 Mạch nguyên lý nguồn ra 12V, 9V, 5V Hình 2. 4 Mạch nguyên lý nguồn 3.3V Hình 2. 5 Mạch nguyên lý khối xử lý tín hiệu nhận từ SRF05 Hình 2. 6 Mạch reset vi điều khiển Hình 2. 7 Mạch nguyên lý LCD Hình 2. 8 Mạch nguyên lý Max232 Hình 2. 9 Mạch nguyên lý giao tiếp với máy tính Hình 2. 10 Sơ đồ nguyên lý module nRF23L01+ Hình 3. 1 Phần mềm Altium Designer Hình 3. 2 Giao diện thiết kế mạch nguyên lý của chương trình Hình 3. 3 Giao diện thiết kế mạch nguyên lý của chương trình Hình 3. 4 Mạch in SRF05 Hình 3. 5 Mạch hiển thị LCD Hình 3. 6 Mạch nguồn 5V Hình 3. 7 Mạch nguồn 3.3V Hình 3. 8 Mạch giao tiếp với máy tính Hình 3. 9 Sơ đồ thuật toán chương trình chính PIC1 SVTH: Sơn 6 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 3. 10 Sơ đồ thuật toán chương trình đọc khoảng cách Hình 3. 11 Sơ đồ thuật toán chương trình PIC2 Hình 3. 12 Phần mềm CCS Hình 3. 13 Giao diện chương trình giao tiếp CHƯƠNG 1: TỔNG QUAN VỀ SÓNG SIÊU ÂM VÀ ĐẶC TÍNH CÁC LINH KIỆN SỬ DỤNG 1.1 Sóng siêu âm 1.1.1 Tổng quan Siêu âm là âm thanh có tần số cao hơn tần số tối đa mà tai người nghe thấy được. Tần số tối đa này tùy thuộc vào từng người, nhưng thông thường nó vào khoảng 20kHz. Hình 1. 1 Các dải tần số âm thanh Siêu âm có thể lan truyền trong nhiều môi trường tương tự như môi trường của âm thanh, như không khí, các chất lỏng và chất rắn với tốc độ bằng tốc độ âm thanh. SVTH: Sơn 7 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Siêu âm có thể tạo ra từ một số loại loa, từ dao động của tinh thể áp điện. Trong tự nhiên, nhiều loài động vật có thể tạo ra hoặc cảm nhận được siêu âm, ví dụ như dơi là loài có khả năng tạo ra sóng siêu âm và cảm nhận siêu âm để xác định vật thể trong không gian. Cá voi, cá heo dùng siêu âm để liên lạc và định vị đối tượng xung quanh. 1.1.2 Các tính chất của siêu âm Vận tốc siêu âm Vận tốc siêu âm truyền qua những môi trường khác nhau có vận tốc khác nhau. Với môi trường có mật độ phân tử thấp như không khí và các chất khí, khi bị tác động, các phân tử dịch chuyển một khoảng cách tương đối lớn trước khi chúng tác động đến các phần tử lân cận. Trong những môi trường đó, vận tốc truyền của sóng siêu âm là tương đối thấp. Trong chất rắn, sự chuyển động của các phân tử bị hạn chế, vận tốc siêu âm là tương đối cao. Vận tốc siêu âm trong chất lỏng nằm ở giữa vận tốc truyền trong chất khí và chất rắn. Bảng 1. 1 Vận tốc của siêu âm trong một số vật liệu[1] Môi trường truyền SVTH: Sơn 8 Nguyễn Vận tốc m/s Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Nhôm Đồng thau Đồng nguyên chất Vàng Chì Thép nhẹ Niken Bạch kim Bạc Thiếc Nylon Nhựa Perspex Silic PZT( vật liệu áp điện) Glycerol Dầu nhờn Nước Không khí 6400 4400 4800 3200 2200 6000 5600 3300 3700 3400 2600 2700 6000 4800 1900 1400 – 1800 1500 330 Phản xạ Mức độ phản xạ âm phụ thuộc vào âm trở của môi trường truyền âm. Âm trở của môi trường phụ thuộc vào mật độ môi trường ρ và vận tốc của siêu âm c trong môi trường đó: (1.1) Trong đó: Z – là âm trở (kg/m2s) ρ – là mật độ môi trường (kg/m3) c – là vận tốc truyền âm trong môi trường (m/s) SVTH: Sơn 9 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Với sóng siêu âm vuông góc với mặt phẳng phân cách giữa hai môi trường, ta có hệ số phản xạ được tính theo công thức: (1.2) Trong đó: Z1, Z2 – là âm trở của 2 môi trường. – là hệ số phản xạ. Một phần năng lượng của chùm tia siêu âm truyền từ môi trường 1 qua môi trường 2 thể hiện qua hệ số truyền qua được tính theo công thức: (1.3) Với những bề mặt có âm trở lớn, phần lớn năng lượng siêu âm bị phản xạ và chỉ có một phần nhỏ truyền qua mặt phân cách giữa hai môi trường. Khúc xạ Khi một chùm tia siêu âm tới mặt phân cách giữa hai môi trường theo một góc xiên, chùm tia này sẽ bị đổi hướng khi qua mặt phân cách và được gọi là khúc xạ. SVTH: Sơn 10 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 1. 2 Khúc xạ sóng Mối quan hệ giữa góc tới và góc khúc xạ được mô tả bằng định luật Snell: 𝑠𝑠𝑠 𝑠ó𝑠 𝑠ớ𝑠 𝑠𝑠𝑠 𝑠ó𝑠 𝑠ℎú𝑠 𝑠ạ = 𝑠ậ𝑠 𝑠ố𝑠 â𝑠 𝑠ℎ𝑠𝑠ℎ 𝑠ô𝑠 𝑠𝑠ườ𝑠𝑠 𝑠ớ𝑠 𝑠ậ𝑠 𝑠ố𝑠 â𝑠 𝑠ℎ𝑠𝑠ℎ 𝑠ô𝑠 𝑠𝑠ườ𝑠𝑠 𝑠ℎú𝑠 𝑠ạ (1.4) Với: i – là góc tới r – là góc khúc xạ Tán xạ SVTH: Sơn 11 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hiện tượng này xảy ra khi chùm tia siêu âm gặp các cấu trúc nhỏ (có kích thước << λ) hoặc với bề mặt không đồng đều, khi đó tia siêu âm sẽ bị tán xạ theo mọi hướng và chỉ có một phần nhỏ tới được đầu thu. Sự suy giảm siêu âm Tất cả các dạng tương tác: phản xạ, tán xạ, khúc xạ, hấp thụ… đều làm ảnh hưởng đến cường độ chùm siêu âm. Sự hấp thu năng lượng là quá trình làm suy giảm chùm tia siêu âm nhiều nhất và năng lượng bị hấp thụ này thường chuyển thành nhiệt năng. 1.1.3 Ứng dụng của siêu âm Sóng siêu âm ngày càng được sử dụng rộng rãi trong các lĩnh vực khác nhau của đời sống, khoa học và công nghệ. Trong công nghiệp, một số ứng dụng của siêu âm như dùng để kiểm tra chất lượng sản phẩm: siêu âm kiểm tra độ dày, độ đồng đều, phát hiện khuyết tật trong vật đúc, siêu âm phát hiện vị trí, đường kính cốt thép và chiều dày lớp bê tông bảo vệ trong bê tông cốt thép; siêu âm dùng trong gia công vật liệu cứng; hàn bằng siêu âm bằng cách sử dụng các dao động siêu âm tần số cỡ 20kHz được kích thích bởi máy phát dao động điện công suất lớn tác động vào một vùng nhỏ của mối hàn làm cho vùng hàn trở nên dẻo sau đó dùng lực ép đẩy các chi tiết cần nối lại với nhau tương tự như phương pháp hàn ma sát... Trong lĩnh vực nông nghiệp, siêu âm được dùng để xử lý hạt giống một cách hiệu quả. “Sóng siêu âm làm thay đổi cấu trúc phân tử, thay đổi các SVTH: Sơn 12 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương thành phần của các acide amyl, đồng thời làm tăng nhanh quá trình oxy hóa hạt giống”[4] . Sóng siêu âm được dùng để xử lý đất do siêu âm có tác dụng kích thích phát triển đối với vi sinh vật trong đất làm tăng tỷ lệ mùn hoặc tiêu diệt vi sinh vật có hại tồn tại trong đất. Trong y học, siêu âm dùng để chẩn đoán các khối u trong cơ thể bằng cách chiếu một chùm siêu âm định hướng rất hẹp vào cơ thể và ghi nhận tín hiệu phản hồi từ đó xác định được vị trí cũng như mức độ phát triển của khối u. Sóng siêu âm được dùng điều trị bệnh một cách có hiệu quả như các bệnh viêm dây thần kinh, viêm khớp, các bệnh về mắt… 1.2 Đặc tính các linh kiện sử dụng 1.2.1 Cảm biến siêu âm 1.2.1.1 Tổng quan cảm biến siêu âm Đầu dò cảm biến siêu âm có nhiệm vụ phát ra chùm tia siêu âm và thu nhận chùm tia siêu âm phản xạ ngược lại. Dựa trên hiện tượng áp điện, người ta có thể chế tạo được các đầu dò siêu âm từ các phần tử áp điện. 1.2.1.2 Phân loại và cấu tạo cảm biến Cảm biến siêu âm kiểu hở Hình 1.3 thể hiện sơ đồ cấu trúc của một đầu dò cảm biến siêu âm kiểu hở, một bộ rung tích hợp được gắn cố định lên đế. Bộ rung tích hợp này bao gồm một hốc cộng hưởng và một bộ rung cấu tạo từ một đĩa kim loại và một phiến gốm áp điện. Hốc cộng hưởng có hình nón để tăng hiệu quả của việc SVTH: Sơn 13 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương phát sóng siêu âm cũng như tăng hiệu quả tập trung sóng siêu âm ở trung tâm bộ rung. Hình 1. 3 Cấu trúc của cảm biến siêu âm kiểu hở SVTH: Sơn 14 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 1. 4 Mô phỏng quá trình rung Cảm biến siêu âm kiểu kín SVTH: Sơn 15 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 1. 5 Cấu trúc cảm biến siêu âm kiểu kín Bộ cảm biến siêu âm để sử dụng ngoài trời được đóng gói kín để bảo vệ khỏi sương, mưa và bụi. Thành phần gốm áp điện được gắn phía trong trên đỉnh của vỏ hợp kim. Đường dẫn của vỏ được bọc lớp vỏ nhựa. Cảm biến siêu âm cao tần SVTH: Sơn 16 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 1. 6 Cấu tạo cảm biến siêu âm cao tần Được sử dụng trong robot công nghiệp, độ chính xác đạt đến 1mm và có độ nhạy cao. Do độ cung rung của bộ cong thông thường không có khả năng thu được tần số cao hơn 70kHz trong thực tế, do đó chế độ rung dọc theo chiều dày của lớp vật liệu gốm áp điện được sử dụng để phát hiện tần số cao. Trong trường hợp này, sự kết hợp của trở kháng âm của gốm áp điện và không khí trở nên quan trọng. Trở kháng âm của gốm áp điện là 2.6×10 7 kg/m2s, trong khi đó của không khí là 4.3×102 kg/m2s. Sự khác biệt này gây tổn hao lớn trên bề mặt phát rung của gốm áp điện. Phối hợp trở kháng âm với không khí được thực hiện bằng cách ghép thêm một lớp vật liệu đặc biệt với gốm áp điện, được gọi là lớp phối hợp trở SVTH: Sơn 17 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương kháng âm. Cấu trúc này cho phép các cảm biến siêu âm có thể làm việc với các tần số lên đến vài trăm kHz. 1.2.1.3 Nguyên lý TOF (Time Of Flight) Hình 1. 7 Nguyên lý TOF Nguyên lý TOF (Time Of Flight) là nguyên lý đo khoảng cách bằng thời gian truyền của sóng. Phương pháp này được đặc biệt ứng dụng với các thiết bị sử dụng sóng siêu âm do vận tốc di chuyển của sóng trong không khí SVTH: Sơn 18 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương và trong các vật liệu khác tương đối chậm, và người ta có thể đo được khoảng cách với sai số nhỏ (khoảng 343m/s trong không khí). Phương pháp này không được dùng trong các thiết bị thu nhận sóng điện từ, vì vận tốc sóng điện từ rất cao bằng với vận tốc ánh sáng (300.000 km/s). Khoảng cách từ thiết bị phát đến chướng ngại vật được tính bằng vận tốc của sóng trong môi trường tương ứng nhân với một nửa thời gian truyền của sóng. (1.5) Trong đó: d – là khoảng cách cần đo (m). v – là vận tốc siêu âm trong môi trường truyền sóng (m/s). t – là thời gian từ lúc sóng phát đi đến lúc sóng được ghi nhận lại (s). Phương pháp này có một nhược điểm là khi sóng phát ra, ta không quản lý được các sóng tán xạ và phản xạ, chỉ biết rằng đa số năng lượng sóng phản xạ tập trung vào tia phản xạ theo nguyên lý góc tới bằng góc phản xạ. 1.2.1.4 Các sai số nhiễu phổ biến đối với cảm biến siêu âm ❖ Hiện tượng Forecasting SVTH: Sơn 19 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 1. 8 Hiện tượng Forecasting Hiện tượng Forecasting là hiện tượng phản xạ góc sai lệch của cảm biến. Trong nguyên lý TOF, để có khoảng cách đúng, cảm biến siêu âm phải hướng vuông góc với bề mặt chướng ngại vật cần đo. Tuy nhiên, các chướng ngại vật không phải bao giờ cũng phẳng, mịn, nên tia phản xạ có thể không tương ứng với góc tới, các chùm phản xạ này có năng lượng phản xạ thấp hơn. Tuy vậy, ở một khoảng cách nào đó, cảm biến siêu âm vẫn có thể ghi nhận được những tín hiệu phản xạ này. Do đó, thông số đọc về của cảm biến siêu âm bị lệch do góc mở của cảm biến siêu âm lớn. ❖ Hiện tượng đọc chéo Crosstalk Hiện tượng đọc chéo là hiện tượng mà cảm biến siêu âm này ghi nhận tín hiệu phản xạ hoặc trực tiếp từ cảm biến siêu âm khác, hoặc sau quá trình sóng siêu âm truyền đi và phản xạ qua các bề mặt quay lại cảm biến một cách không mong muốn. SVTH: Sơn 20 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 1. 9 Hiện tượng đọc chéo SVTH: Sơn 21 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương 1.2.1.5 Cảm biến siêu âm SRF05 Hình 1. 10 Mô-đun cảm biến siêu âm SRF05 Cảm biến siêu âm SRF05 là một loại cảm biến khoảng cách dựa trên nguyên lý thu phát siêu âm. Cảm biến gồm một bộ phát và một bộ thu sóng siêu âm. Sóng siêu âm từ đầu phát truyền đi trong không khí, gặp vật cản (vật cần đo khoảng cách) sẽ phản xạ ngược trở lại và được đầu thu ghi lại. Cảm biến siêu âm SRF05 (SRF05) là một bước cải tiến từ SRF04 và đã được thết kế lại để tăng tính linh hoạt và phạm vi hoạt động cùng với đó là giảm chi phí. Phạm vi đo được của SRF05 có thể lên đến 4 mét. Một chế độ hoạt động mới (nối chân Out xuống đất) cho phép SRF05 sử dụng một chân cho cả Trigger và Echo. Các chế độ hoạt động của SRF05: ❖ Chế độ 1: Tách chân Trigger và Echo dùng riêng SVTH: Sơn 22 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Ở chế độ này, hai chân Trigger và Echo sử dụng riêng biệt, và đây là chế độ sử dụng đơn giản nhất. Để sử dụng chế độ này chỉ cần để chân Out không kết nối – SRF05 có điện trở nội kéo lên trên chân này. Hình 1. 11 Sơ đồ timing SRF05 – chế độ1 ❖ Chế độ 2: Sử dụng chung chân Trigger và Echo Chế độ này sử dụng một chân cho cả tín hiệu Trigger và Echo, và được thết kế để tiết kiệm chân cho vi điều khiển. Để sử dụng chế độ này, kết nối chân Out xuống 0V chân Ground. Tín hiệu Echo sẽ được trả về trên cùng một chân với tín hiệu Trigger. Sau 700 µs kể từ lúc kết thúc tín hiệu điều khiển, từ chân Trigger – Echo có thể đọc ra một xung mà độ rộng tỉ lệ với khoảng cách từ cảm biến tới vật thể. SVTH: Sơn 23 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 1. 12 Sơ đồ timing SRF05 – chế độ 2 ❖ Xác định khoảng cách từ tín hiệu do SRF05 trả về Để đọc được tín hiệu từ cảm biến SRF05, ta cần kích một xung có độ rộng tối thiểu 10µs trên chân Trigger. SRF05 sẽ phát ra 8 chu kỳ sóng siêu âm với tần số 40kHz và kéo chân Echo lên mức cao (hoặc chân Trigger ở chế độ 2). Sau đó sẽ chờ tín hiệu phản hồi, ngay khi có tín hiệu phản hồi chân Echo được kéo xuống thấp. Bằng cách đo thời gian chân Echo ở mức cao ta xác định được thời gian từ lúc phát sóng đi đến khi nhận tín hiệu truyền về. Nếu không xác định được vật cản, chân Echo sẽ được kéo xuống thấp sau 30 ms. SRF05 trả về xung tỷ lệ với khoảng cách. Nếu độ rộng của xung được đo trong thời gian t tính bằng µs, lấy t/58 ta nhận được khoảng cách tính bằng cm, hoặc t/148 ta nhận được khoảng cách tính bằng inch. SVTH: Sơn 24 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương (1.6) Với: d – là khoảng cách cần đo t – là thời gian chân Echo ở mức cao (µs) SRF05 có thể đọc tín hiệu sau mỗi 50 ms hoặc 20 lần trong một giây. Do đó, cần chờ 50 ms trước khi kích xung chân trigger cho lần đọc tiếp theo, ngay cả khi cảm biến xác định một vật ở gần với xung phản hồi ngắn. Điều này đảm bảo các sóng siêu âm phát ra trước đó không gây sai số ở lần đọc kế tiếp. 1.2.2 Module nRF24L01+ 1.2.2.1 Giới thiệu về nRF24L01+ Module nRF24L01+ là bộ thu phát được thiết kế hoạt động trong băng tần số miễn phí ISM từ 2.4 GHz đến 2.4835 GHz. nRF24L01+ sử dụng giao tiếp SPI để giao tiếp với vi điều khiển. Các thanh ghi liên quan đến hoạt động và cấu hình nRF24L01+ có thể truy cập và thiết lập qua giao tiếp SPI. SVTH: Sơn 25 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 1. 13 Module nRF24L01+ Sử dụng giao thức Enhanced ShockBurst (ESB) để giao tiếp giữa các module nRF24L01+ với nhau. Ngoài ra cho phép giao tiếp và các module khác sử dụng giao thức ESB như: nRF2401A, nRF2402, nRF24E1… Bộ FIFOs nội đảm bảo luồng dữ liệu thông suốt giữa việc truyền dữ liệu qua sóng vô tuyến và dữ liệu gửi đến module từ hệ thống vi điều khiển. Tốc độ truyền dữ liệu 250kbps, 1Mbps và 2Mbps. Tốc độ truyền cao kết hợp với hai chế độ tiết kiệm năng lượng giúp nRF20L01+ thích hợp với các hệ thống có mức điện năng thấp. 1.2.2.2 Một số tính năng của module Radio Hoạt động ở dải tần số 2.4GHz 126 kênh RF SVTH: Sơn 26 Truyền nhận dữ liệu 2 chiều Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Điều chế GFSK Tốc độ truyền 250 kbps, 1Mbps và 2Mbps Bộ truyền Công suất đầu ra khả trình: 0, –6, –12, hoặc –18dBm Dòng ra tại 0dBm là 11.3mA Bộ thu Bộ khuếch đại tự động (AGC) giúp tăng phạm vi hoạt động Bộ lọc kênh tích hợp Quản lý nguồn Bộ điều chỉnh điện áp tích hợp, hỗ trợ nguồn vào từ 1.9V – 3.6V Điện năng tiêu thụ thấp ở các chế độ chờ: 26µA ở chế độ Standby – I, 900nA chế độ ngủ Giao tiếp ngoại vi Giao tiếp SPI tốc độ tối đa 10Mbps Chịu được điện áp vào 5V trên các chân giao tiếp SVTH: Sơn 27 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương 1.2.2.3 Sơ đồ khối nRF24L01+ Hình 1. 14 Sơ đồ khối nRF24L01+ SVTH: Sơn 28 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương 1.2.2.4 Các chế độ hoạt động của nRF24L01+ SVTH: Sơn 29 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương SVTH: Sơn 30 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Không xác định Hình 1. 15 Sơ đồ trạng thái hoạt động của nRF24L01+ Chế độ Power down SVTH: Sơn 31 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Tất cả giá trị của thanh ghi được duy trì, giao tiếp SPI vẫn hoạt động, cho phép thay đổi cấu hình và truy cập vào giá trị các thanh ghi. Chế độ Power down được kích hoạt bằng cách thay đổi giá trị bit PWR_UP trong thanh ghi CONFIG về giá trị 0. Chế độ Standby Chế độ Standby – I Bằng cách thiết lập giá trị bit PWR_UP trong thanh ghi CONFIG lên 1, chế độ Standby – I được kích hoạt. Chế độ này được sử dụng để tiết kiệm điện năng tiêu thụ trong khi vẫn duy trì được việc khởi động thiết bị nhanh. Trong chế độ này chỉ có một phần của bộ dao động thạch anh hoạt động. Khi có cạnh xuống trên chân CE, từ chế độ RX hoặc TX sẽ chuyển về chế dộ Standby – I. Chế độ Standby – II Chế độ Standby – II được kích hoạt khi chân CE ở mức cao và trong chế độ phát TX, bộ đệm TX_FIFO không chứa dữ liệu. Nếu một gói dữ liệu mới được gửi đến bộ đệm TX_FIFO, chế độ TX được khởi động ngay lập tức, và dữ liệu được truyền đi sau khoảng thời gian thiết lập chế độ TX thông thường khoảng 130µs. Chế độ nhận dữ liệu (chế độ RX) Để module hoạt động ở chế độ nhận dữ liệu, các bit PWR_UP và bit PRIM_RX trong thanh ghi CONFIG bằng 1, chân CE ở mức cao. SVTH: Sơn 32 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Trong chế độ RX, bộ giải điều chế liên tục giải mã tín hiệu nhận được từ sóng vô tuyến và gửi dữ liệu đã giải mã về bộ xử lý baseband. Bộ xử lý baseband liên tục kiểm tra các gói dữ liệu hợp lệ. Nếu có một gói dữ liệu hợp lệ (một địa chỉ phù hợp, mã CRC hợp lệ) đoạn dữ liệu gốc (payload) của gói dữ liệu được lưu trong bộ đệm RX_FIFOs. Nếu bộ đệm này đầy, dữ liệu tiếp theo sẽ bị loại bỏ. nRF24L01+ tiếp tục hoạt động ở chế độ nhận dữ liệu đến khi nó được cấu hình sang chế độ Standby – I hoặc chế độ Power down. Chế độ truyền dữ liệu (chế độ RX) Để nRF24L01+ hoạt động ở chế độ này cần thiết đặt bit PWR_UP = 1, bit PRIM_RX = 0, dữ liệu cần truyền chứa trong bộ đệm TX_FIFO, một xung cao trên chân CE lớn hơn 10µs. nRF24L01+ hoạt động ở chế độ truyền dữ liệu đến khi dữ liệu được truyền xong. Nếu chân CE = 0, nRF24L01+ chuyển sang chế độ Standby – I. Nếu chân CE = 1, trạng thái hoạt động tiếp theo sẽ được xác định theo trạng thái của bộ đệm TX_FIFO. Nếu bộ đệm trống chế độ Standby – II được kích hoạt, ngược lại dữ liệu sẽ được tiếp tục truyền đi. 1.2.2.5 Tốc độ truyền Tốc độ truyền nhận của nRF24L01+ có thể truyền với 250kbps, 1Mbps hoặc 2Mbps; tốc độ truyền nhận thấp hơn cho độ nhạy tốt hơn. SVTH: Sơn 33 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Tốc độ truyền thiết lập thông qua hai bit RF_DR_LOW và RF_DR_HIGH trong thanh ghi RF_SETUP. Bộ truyền và bộ thu phải thiết lập cùng tốc độ truyền nhận để giao tiếp được với nhau. 1.2.2.6 Tần số sóng vô tuyến Tần số sóng vô tuyến được cài đặt bởi thanh ghi RF_CH theo công thức: (1.7) Với: F0 – là tần số sóng RF_CH – là kênh truyền Bộ thu và bộ phát phải cài đặt cùng tần số để giao tiếp với nhau. SVTH: Sơn 34 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương 1.2.3 Tổng quan PIC 16F887 1.2.3.1 Tại sao chọn PIC 16F887? Hiện nay trên thị trường có rất nhiều họ vi điều khiển phục vụ cho mục đích học tập, nghiên cứu, ứng dụng vào thực tiễn như AVR, ARM, 8051… Bản thân người viết chọn họ vi điều khiển PIC để sử dụng trong đồ án vì một số nguyên nhân sau: ● Được tìm hiểu và sử dụng vi điều khiển họ PIC trong quá trình học tập và nghiên cứu. ● Họ vi điều khiển này tìm mua dễ dàng ở thị trường trong nước. ● Giá thành không quá đắt, phù hợp cho việc học tập nghiên cứu. ● Số lượng người sử dụng vi điều khiển PIC: ở Việt Nam cũng như trên thế giới, họ vi điều khiển này được sử dụng và ứng dụng rộng rãi. Điều này tạo điều kiện thuận lợi cho việc mở rộng kiến thức về họ vi điều khiển này, dễ dàng trong việc tìm kiếm tài liệu, giải đáp thắc mắc cũng như ứng dụng vào thực tế nhiều hơn… ● Các chương trình biên dịch, công cụ lập trình, chương trình nạp đa dạng và được hỗ trợ từ nhà sản xuất. ● Các tính năng đa dạng của vi điều khiển PIC và các tính năng không ngừng phát triển. 1.2.3.2 Đặc điểm vi điều khiển PIC 16F887 Một vài nét sơ lược về vi điều khiển PIC 16F887: Tính năng ngoại vi SVTH: Sơn 35 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương 35 chân I/O điều khiển trực tiếp độc lập: Dòng soure/sink cao cho việc điều khiển LED Ngắt khi thay đổi trạng trái trên chân Lập trình điện trở kéo lên một cách độc lập Module so sánh tương tự Hai bộ so sánh tương tự Khả năng lập trình điện áp tham chiếu Có thể truy cập vào đầu và đầu ra bộ so sánh Cổng ngoại vi Timer1 Bộ chuyển đổi A/D 14 kênh chuyển đổi độ phân giải 10-bit Timer0: bộ định thời/bộ đếm 8-bit với tỉ lệ chia khả trình Timer1 Bộ định thời 16-bit Chế độ đầu vào cổng ngoài Timer2: bộ định thời/bộ đếm 8-bit Module PWM+ Module PWM độ phân giải 10-bit với 1, 2 hoặc 4 kênh có khả năng lập trình “dead time”, tần số tối đa 20kHz. Cơ chế điều khiển đầu ra PWM SVTH: Sơn 36 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Module USART tăng cường Hỗ trợ giao tiếp RS-485, RS-232 và LIN 2.0 Tự động xác định tốc độ Baud Tự động đánh thức với bit Start Khả năng lập trình trực tiếp trên mạch ứng dụng thông qua hai chân (ICSPTM) SVTH: Sơn 37 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương 1.2.3.3 Sơ đồ chân vi điều khiển PIC 16F887 Hình 1. 16 Sơ đồ chân vi điều khiển PIC 16F887 Chức năng các chân vi điều khiển PIC 16F887 Chân RA0/AN0/ULPWU/C12IN0- : chân I/O thông thường/ đầu vào A/D kênh 0/ đầu vào đánh thức điện áp thấp/ đầu vào âm của bộ so sánh C1 hoặc C2. RA1/AN1/C12IN1- : chân I/O thông thường/ đầu vào A/D kênh 1/ đầu vào âm của bộ so sánh C1 hoặc C2. SVTH: Sơn 38 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương RA2/AN2/VREF-/CVREF/C2IN+: chân I/O thông thường/ A/D kênh 2/ đầu vào điện áp tham chiếu âm bộ A/D/ đầu ra điện áp tham chiếu bộ so sánh/ đầu vào dương C1 bộ so sánh. RA4/T0CKI/C1OUT: chân I/O thông thường/ đầu vào xung nhịp Timer0/ đầu vào C1 bộ so sánh. RA5/AN4/SS/C2OUT: chân I/O thông thường/ A/D kênh 4/ đầu vào chọn chip Slave (SPI)/ đầu ra C2 bộ so sánh. RA6/OSC2/CLKOUT: chân I/O thông thường/ thạch anh/ đầu ra FOSC/4. RA7/OSC1/CLKIN: chân I/O thông thường/ thạch anh/ đầu vào xung ngoài/kết nối bộ dao động RC. RB0/AN12/INT: chân I/O thông thường; ngắt thay đổi trạng thái chân được điều khiển một cách độc lập; cho phép điện trở kéo lên độc lập/ A/D kênh 12/ ngắt ngoại vi. RB1/AN10/C12IN3-: chân I/O thông thường; ngắt thay đổi trạng thái chân được điều khiển một cách độc lập; cho phép điện trở kéo lên độc lập/ A/D kênh 10/ đầu vào C1 hoặc C2 bộ so sánh. RB2/AN8: chân I/O thông thường; ngắt thay đổi trạng thái chân được điều khiển một cách độc lập; cho phép điện trở kéo lên độc lập/ A/D kênh 8. RB3/AN9/PGM/C12IN2-: chân I/O thông thường; ngắt thay đổi trạng thái chân được điều khiển một cách độc lập; cho phép SVTH: Sơn 39 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương điện trở kéo lên độc lập/ A/D kênh 9/ chân lập trình điện áp thấp/ đầu vào âm C1 hoặc C2 bộ so sánh. RB4/AN11: chân I/O thông thường; ngắt thay đổi trạng thái chân được điều khiển một cách độc lập; cho phép điện trở kéo lên độc lập/ A/D kênh 11. RB5/AN13/T1G: chân I/O thông thường; ngắt thay đổi trạng thái chân được điều khiển một cách độc lập; cho phép điện trở kéo lên độc lập/ A/D kênh 13/ đầu vào cổng Timer1. RB6/ICSPCLK: chân I/O thông thường; ngắt thay đổi trạng thái chân được điều khiển một cách độc lập; cho phép điện trở kéo lên độc lập/ xung nhịp cho lập trình nối tiếp. RB7/ICSPDAT: chân I/O thông thường; ngắt thay đổi trạng thái chân được điều khiển một cách độc lập; cho phép điện trở kéo lên độc lập/ dữ liệu I/O ICSPTM. RC0/T1OSO/T1CKI: chân I/O thông thường/ đầu ra bộ dao động Timer1/ đầu vào xung nhịp cho Timer1. RC1/T1OSI/CCP2: chân I/O thông thường/ đầu vào bộ dao động Timer1/ Capture/So sánh/PWM2. RC2/P1A/CCP1: chân I/O thông thường/ đầu ra PWM/ Capture/So sánh/PWM1. RC3/SCK/SCL: chân I/O thông thường/ xung nhịp SPI/ xung nhịp I2C. SVTH: Sơn 40 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương RC4/SDI/SDA: chân I/O thông thường/ đầu ra dữ liệu SPI/ đầu vào/ra dữ liệu I2C. RC5/SDO: chân I/O thông thường/ đầu ra dữ liệu SPI. RC6/TX/CK: chân I/O thông thường/ chân truyền EUSART không đồng bộ/ xung nhịp EUSART đồng bộ. RC7/RX/DT: chân I/O thông thường/ chân nhận EUSART không đồng bộ/ dữ liệu EUSART đồng bộ. RD<0:4>: chân I/O thông thường. RD5/P1B: chân I/O thông thường/ đầu ra PWM. RD6/P1C: chân I/O thông thường/ đầu ra PWM. RD7/P1D: chân I/O thông thường/ đầu ra PWM. RE0/AN5: chân I/O thông thường/ A/D kênh 5. RE1/AN6: chân I/O thông thường/ A/D kênh 6. RE2/AN7: chân I/O thông thường/ A/D kênh 7. RE3/MCLR/VPP: chân đầu vào/ chân reset với điện trở nội kéo lên/ nguồn cho lập trình. Vss, Vdd: chân nguồn cho PIC. SVTH: Sơn 41 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương 1.2.3.4 Sơ đồ khối PIC 16F887 SVTH: Sơn 42 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương SVTH: Sơn 43 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 1. 17 Sơ đồ khối PIC 16F887 SVTH: Sơn 44 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương 1.2.3.5 Tổ chức bộ nhớ SVTH: Sơn 45 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 1. 18 Sơ đồ bộ nhớ chương trình PIC 16F887 Bộ nhớ chương trình Bộ nhớ chương trình của vi điều khiển PIC 16F887 là bộ nhớ flash, dung lượng bộ nhớ 8K word (1 word = 14-bit) có khả năng chứa được 8*1024 = 8192 lệnh. Để mã hóa được địa chỉ của 8K word bộ nhớ chương trình cần bộ đếm chương trình có dung lượng 13-bit (PC<12:0>). Khi vi điều khiển được reset, bộ đếm chương trình sẽ chỉ đến địa chỉ 0000h (Reset vector). Khi có ngắt xảy ra, bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h (Interrupt vector). Bộ nhớ chương trình không bao gồm bộ nhớ Stack và không được địa chỉ hóa bởi bộ đếm chương trình. Bộ nhớ dữ liệu : Bộ nhớ dữ liệu của PIC là bộ nhớ EEPROM được chia ra làm nhiều bank. Bộ nhớ dữ liệu PIC 16F887 được chia ra làm 4 bank, bao gồm các thanh ghi mục đích chung GPR (General Purpose Register) và các thanh ghi có chức năng đặc biệt SFG (Special Function Register). Các thanh ghi đặc biệt SFR nằm ở 32 vị trí đầu trong mỗi bank. Các thanh ghi mục đích chung GPR được sử dụng như RAM tĩnh, nằm ở 96 vị trí cuối mỗi bank. Vị trí các thanh ghi từ F0h – FFh trong Bank 1, 170h – 17Fh trong Bank 2 và 1F0h – 1FFh trong Bank 3, con trỏ địa chỉ 70h – 7Fh trong Bank 0. Tất cả các RAM khác chưa được thi hành và trả về ‘0’ khi đọc. Các bit RP<1:0> của thanh ghi STATUS là các bit lựa chọn bank: SVTH: Sơn 46 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương RP1 RP0 0 0 Bank 0 được chọn 0 1 Bank 1 được chọn 1 0 Bank 2 được chọn 1 1 Bank 3 được chọn Sơ đồ cụ thể của bộ nhớ dữ liệu PIC 16F887 như sau: SVTH: Sơn 47 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương SVTH: Sơn 48 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 1. 19 Tổ chức bộ nhớ của PIC 16F887 Các thanh ghi chức năng đặc biệt Thanh ghi STATUS (03h, 83h, 103h, 183h): thanh ghi chứa kết quả thực hiện phép toán của khối ALU, trạng thái reset và các bit chọn bank cần truy xuất trong bộ nhớ dữ liệu. Thanh ghi OPTION_REG (81h, 181h): thanh ghi này cho phép đọc và ghi, cho phép điều khiển chức năng pull-up của các chân trong PORTB, xác lập các tham số về xung tác động, cạnh tác động của ngắt ngoại vi và bộ đếm Timer0. Thanh ghi INTCON (0Bh, 8Bh,10Bh, 18Bh): thanh ghi cho phép đọc và ghi, chứa các bit điều khiển và các bit cờ hiệu khi Timer0 bị tràn, ngắt ngoại vi RB0/INT và ngắt interrput-on-change tại các chân của PORTB. Thanh ghi PIE1 (8Ch): chứa các bit điều khiển chi tiết các ngắt của các khối chức năng ngoại vi. SVTH: Sơn 49 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Thanh ghi PIE2 (8Dh): chứa các bit điều khiển các ngắt của các khối chức năng CCP2, SSP bus, ngắt của bộ so sánh và ngắt ghi vào bộ nhớ EEPROM. Thanh ghi PIR1 (0Ch): chứa cờ ngắt của các khối chức năng ngoại vi, các ngắt này được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE1. Thanh ghi PIR2 (0Dh): chứa các cờ ngắt của các khối chức năng ngoại vi, các ngắt này được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE2. Thanh ghi PCON (8Eh): chứa các cờ hiệu cho biết trạng thái các chế độ reset của vi điều khiển. SVTH: Sơn 50 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương 1.2.3.6 Các cổng nhập xuất PIC 16F887 PORTA bao gồm 8 chân I/O. Đây là các chân “hai chiều” (bidirectional pin), nghĩa là có thể xuất và nhập được. Chức năng I/O này được điều khiển bởi thanh ghi TRISA (địa chỉ 85h). Bên cạnh đó PORTA còn là ngõ vào của bộ ADC, bộ so sánh, ngõ vào xung clock của Timer0 và ngõ vào của bộ giao tiếp MSSP (Master Synchronous Serial Port). Các thanh ghi SFR liên quan đến PORTA bao gồm: ADCON0, ANSEL, CM1CON0, CM2CON0, CM2CON1, PCON, OPTION_REG, PORT1, SSPCON, TRISA. PORTB gồm 8 chân I/O. Thanh ghi điều khiển xuất nhập tương ứng là TRISB. Bên cạnh đó một số chân của PORTB còn được sử dụng trong quá trình nạp chương trình cho vi điều khiển với các chế độ nạp khác nhau. PORTB còn liên quan đến ngắt ngoại vi và bộ Timer0. PORTB còn được tích hợp chức năng điện trở kéo lên được điều khiển bởi chương trình. Các thanh ghi SFR liên quan đến PORTB bao gồm: ANSELH, CCP1CON, CM2CON1, IOCB, INTCON, OPTION_REG, PORTB, TRISB, WPUB. PORTC gồm 8 chân I/O. Thanh ghi điều khiển xuất nhập tương ứng là TRISC. Bên cạnh đó PORTC còn chứa các chân chức năng của bộ so sánh, bộ Timer1, bộ PWM và các chuẩn giao tiếp nối tiếp I2C, SPI, SSP, USART. Các thanh ghi điều khiển liên quan đến PORTC: CCP1CON, CCP2CON, PORTC, PSTRCON, RCSTA, SSPCON, T1CON, TRISC. SVTH: Sơn 51 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương PORTD gồm 8 chân I/O, thanh ghi điều khiển xuất nhập tương ứng là TRISD. PORTD còn là cổng xuất dữ liệu của chuẩn giao tiếp PSP (Parallel Slave Port). Các thanh ghi liên quan đến PORTD bao gồm: PORTD, PSTRCON, TRISD. PORTE gồm 4 chân I/O. Thanh ghi điều khiển xuất nhập tương ứng là TRISE. Các chân của PORTE có ngõ vào tương tự. Các thanh ghi liên quan đến PORTE bao gồm: PORTE, TRISE, ANSEL. 1.2.3.7 Các bộ định thời Timer0 Module Timer0 là một bộ định thời/ bộ đếm 8-bit với các tính năng: ● Thanh ghi định thời/ bộ đếm 8-bit. ● Bộ chia (prescaler) 8-bit (sử dụng chung với Watchdog Timer) ● Lập trình chọn nguồn xung clock nội hoặc nguồn xung ngoài. ● Lập trình chọn cạnh của xung ngoài. ● Xảy ra ngắt khi tràn. Các thanh ghi liên quan đến hoạt động của Timer0 gồm: TMR0, INTCON, OPTION_REG, TRISA. Timer1 Module Timer1 là bộ định thời/ bộ đếm 16-bit với các chức năng như: ● Cặp thanh ghi định thời/ bộ đếm 16-bit (TMR1L:TMR1H). SVTH: Nguyễn Hoài Sơn 52 Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương ● Lập trình chọn nguồn xung clock nội hoặc nguồn xung ngoài. ● Tùy chọn bộ dao động tần số thấp (LP). ● Ngắt khi tràn timer. ● Đánh thức vi điều khiển khi tràn Các thanh ghi liên quan đến hoạt động của Timer1 gồm: CM2CON1, INTCON, PIE1, PIR1, TMR1H, TMR1L, T1CON. Timer2 Timer2 là bộ định thời 8-bit và được hỗ trợ bởi hai bộ chia tần số prescaler và postscaler. Thanh ghi chứa giá trị đếm của Timer2 là TMR2. Timer2 có một thanh ghi PR2. Giá trị đếm trong thanh ghi TMR2 sẽ tăng từ 00h đến giá trị chứa trong thanh ghi PR2, sau đó được reset về 00h. Khi reset thanh ghi PR2 được nhận giá trị mặc định FFh. Ngõ ra của Timer2 được đưa qua bộ chia tần số postscaler với các mức chia từ 1:1 đến 1:16 để tạo ra một ngắt TMR2. Ngoài ra ngõ ra của Timer2 còn được kết nối với khối SSP, do đó Timer2 còn đóng vai trò tạo ra xung clock đồng bộ cho khối giao tiếp SSP. Các thanh ghi liên quan đến Timer2 bao gồm: INTCON, PIE1, PIR1, TMR2, T2CON. 1.2.3.8 Ngắt (interrupts) PIC 16F887 có nhiều nguồn tạo ra hoạt động ngắt được điều khiển bởi thanh ghi INTCON (bit GIE). Bên cạnh đó mỗi ngắt còn có một bit điều khiển SVTH: Sơn 53 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương và cờ ngắt riêng. Các cờ ngắt vẫn được set bình thường khi thỏa mãn điều kiện ngắt xảy ra bất chấp trạng thái của bit GIE, tuy nhiên hoạt động ngắt vẫn phụ thuộc vào bit GIE và các bit điều khiển khác. Bit điều khiển ngắt RB0/INT và TMR0 nằm trong thanh ghi INTCON, thanh ghi này còn chứa bit cho phép các ngắt ngoại vi PEIE. Bit điều khiển các ngắt nằm trong thanh ghi PIE1 và PIE2. Cờ ngắt của các ngắt nằm trong thanh ghi PIR1 và PIR2. Trong một thời điểm chỉ có một chương trình ngắt được thực thi, chương trình ngắt được kết thúc bằng lệnh RETFIE. Khi chương trình ngắt được thực thi, bit GIE tự động được xóa, địa chỉ lệnh tiếp theo của chương trình chính được cất vào trong bộ nhớ Stack và bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h. Lệnh RETFIE được dùng để thoát khỏi chương trình ngắt và quay trở về chương trình chính, đồng thời bit GIE cũng sẽ được set để cho phép các ngắt hoạt động trở lại. Các cờ hiệu được dùng để kiểm tra ngắt nào đang xảy ra và phải được xóa bằng chương trình trước khi cho phép ngắt tiếp tục hoạt động trở lại để ta có thể phát hiện được thời điểm tiếp theo mà ngắt xảy ra. Đối với các ngắt ngoại vi như ngắt từ chân INT hay ngắt từ sự thay đổi trạng thái các chân của PORTB (PORTB Interrupt on change), việc xác định ngắt nào xảy ra cần 3 hoặc 4 chu kì lệnh tùy thuộc vào thời điểm xảy ra ngắt. Trong quá trình thực thi ngắt, chỉ có giá trị của bộ đếm chương trình được lưu vào trong Stack, trong khi một số thanh ghi quan trọng sẽ không được lưu và có thể bị thay đổi giá trị trong quá trình thực thi chương trình SVTH: Nguyễn Hoài Sơn 54 Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương ngắt. Điều này nên được xử lí bằng chương trình để tránh hiện tượng trên xảy ra. Ngắt ngoài INT Ngắt này dựa trên sự thay đổi trạng thái của chân RB0/INT. Cạnh tác động gây ra ngắt có thể là cạnh lên hay cạnh xuống và được điều khiển bởi bit INTEDG (thanh ghi OPTION_ REG <6>). Khi có cạnh tác động thích hợp xuất hiện tại chân RB0/INT, cờ ngắt INTF được set bất chấp trạng thái các bit điều khiển GIE và PEIE. Ngắt này có khả năng đánh thức vi điều khiển từ chế độ sleep nếu bit cho phép ngắt được set trước khi lệnh SLEEP được thực thi. Ngắt do sự thay đổi trạng thái trên các chân PortB Các chân PORTB<7:4> được dùng cho ngắt này và được điều khiển bởi bit RBIE (thanh ghi INTCON<4>). Cờ ngắt của ngắt này là bit RBIF. 1.2.4 LCD text 16x2 LCD 16x2 là LCD hiển thị được 2 hàng, mỗi hàng hiển thị được 16 ký tự. ● Kích thước hiển thị: 16x2 dòng. ● Màu hiển thị: đen, trắng ● Chế độ giao tiếp: 8 hoặc 4-bit ● Cỡ chữ hiển thị: 5x7 hoặc 5x10 ● Số chân: 16 SVTH: Sơn 55 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Bảng 1. 2 Chức năng các chân LCD Chân số 1 2 3 4 Tên VSS VDD V0 RS 5 6 RW E 7-14 D0-D7 15 16 A K Chức năng Chân nối đất của LCD Chân nối nguồn của LCD Dùng để điều chỉnh độ tương phản cho LCD Chân chọn thanh ghi + Nếu RS = 0 ở chế độ ghi lệnh + Nếu RS = 1 ở chế độ ghi dữ liệu RW=1: đọc dữ liệu, RW=0: ghi dữ liệu Chân cho phép (enable). Sau khi các tín hiệu được đặt lên D<0:7>. Các lệnh chỉ được chấp nhận khi có một xung cho phép của chân E. Ở chế độ ghi: dữ liệu ở bus sẽ được LCD chuyển vào thanh ghi ở bên trong nó khi xuất hiện một xung cạnh xuống của chân tín hiệu E. Ở chế độ đọc: dữ liệu sẽ được LCD xuất ra DB<0:7> khi phát hiện cạnh lên ở chân E và dữ liệu sẽ được giữ cho tới khi chân E xuống mức thấp. Đây là 8 chân dữ liệu 8 bit, được dùng để gửi thông tin lên LCD hoặc đọc nội dung của thanh ghi trong LCD. Đèn LCD Đèn LCD Hình 1. 20 LCD 16x2 SVTH: Sơn 56 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương 1.2.4.1 Thanh ghi và tổ chức bộ nhớ Thanh ghi LCD có 2 thanh ghi 8-bit là thanh ghi INSTRUCTION REGISTER (IR) và DATA REGISTER (DR). Thanh ghi IR là thanh ghi chứa mã lệnh điều khiển LCD và là thanh ghi chỉ ghi, thanh ghi DR là thanh ghi chứa dữ liệu. Cả hai thanh ghi đều được nối với đường dữ liệu D<0:7> của LCD, và được điều khiển lựa chọn qua chân RW và RS. Bộ nhớ Có 3 loại bộ nhớ, đó là bộ nhớ RAM dữ liệu cần hiển thị DDRAM (Didplay Data RAM), bộ nhớ chứa ROM chứa bộ font tạo ra ký tự CGROM (Character Generator ROM) và bộ nhớ RAM chứa bộ font tạo ra các symbol tùy chọn CGRAM (Character Generator RAM). Bộ nhớ DDRAM là bộ nhớ tạm chứa các ký tự cần hiển thị lên LCD, bộ nhớ này gồm có 80 ô được chia thành 2 hàng, mỗi ô có độ rộng 8-bit và được đánh số từ 0 – 39 cho dòng 1 và từ 64 – 103 cho dòng 2. Tuy nhiên, chỉ có 16 ô nhớ có địa chỉ từ 0 – 15 và 64 – 79 được hiển thị trên LCD. Bộ nhớ CGROM là vùng nhớ cố định chứa định nghĩa font cho các ký tự. Các vùng nhớ này không truy xuất trực tiếp mà chip điều khiển trên LCD sẽ tự thực hiện khi có yêu cầu đọc font để hiển thị. Địa chỉ font của mỗi ký tự vùng nhớ CGROM chính là mã ASCII của ký tự đó. Bộ nhớ CGRAM là vùng nhớ chứa các ký tự do người dùng tự định nghĩa. SVTH: Sơn 57 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương 1.2.4.2 Điều khiển LCD Các chân điều khiển LCD gồm RS, RW và E. Chân RS: chân lựa chọn thanh ghi. Nếu RS = 0, thanh ghi IR được chọn và ngược lại thanh ghi DR được lựa chọn. Chân RW: lựa chọn việc đọc và ghi. RW = 0, dữ liệu được ghi từ vi điều khiển vào LCD, khi RW = 1 thì dữ liệu được đọc từ LCD ra ngoài. Chân E: chân cho phép LCD hoạt động. Để đọc và ghi dữ liệu từ LCD cần tạo một xung cạnh xuống trên chân E. Tập lệnh điều khiển LCD Bảng 1. 3 Mã lệnh điều khiển LCD Mã (hex) 0x01 0x02 0x04 0x05 0x06 0x07 0x08 0x0A 0x0C 0x0E 0x0F 0x10 0x14 0x18 0x1C 0x80 0xC0 SVTH: Sơn 58 Lệnh đến thanh ghi của LCD Xóa màn hình hiển thị. Trở về đầu dòng. Dịch con trỏ sang trái. Dịch con trỏ sang phải. Dịch hiển thị sang trái. Dịch hiển thị sang phải. Tắt con trỏ, tắt hiển thị. Tắt hiển thị, bật con trỏ. Bật hiển thị, tắt con trỏ. Bật hiển thị, nhấp nháy con trỏ. Tắt con rỏ, nhấp nháy hiển thị. Dịch vị trí con trỏ sang trái. Dịch vị trí con trỏ sang phải. Dịch toàn bộ hiển thị sang trái. Dịch toàn bộ hiển thị sang phải. Ép con trỏ về đầu dòng thứ nhất. Ép con trỏ về đầu dòng thứ hai. Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương 0x36 Hai dòng, ma trận 5x7. 1.2.4.3 Giao tiếp với LCD Có hai phương pháp để giao tiếp với LCD với vi điều khiển. Phương pháp 1: nối thẳng 8 chân của vi điều khiển với 8 chân dữ liệu D<0:7> của LCD. Phương pháp này dữ liệu được đọc ghi nhanh, điều khiển đơn giản nhưng hạn chế là tốn chân của vi điều khiển để giao tiếp với LCD. Phương pháp 2: điều khiển LCD theo chế độ 4 bit. Chỉ các chân từ D<4:7> của LCD được kết nối, 4 chân dữ liệu còn lại của LCD bỏ trống. Các câu lệnh và dữ liệu gửi từ vi điều khiển đến LCD được chưa thành 2 phần, gọi là các nibbles. Các nibbles cao được xử lý trước, các nibbles thấp xử lý sau. Ưu điểm của phương pháp này là tiết kiệm được số chân cho vi điều khiển tuy nhiên việc đọc và ghi dữ liệu lại phức tạp hơn việc giao tiếp 8-bit. 1.2.5 IC Max232 Hầu hết các vi điều khiển được xây dựng theo chuẩn UARTs có thể được sử dụng để nhận hay chuyển dữ liệu nối tiếp. Phương pháp giao tiếp nối tiếp này đôi khi được nhắc đến như giao tiếp nối tiếp TTL (transistortransistor logic). Giao tiếp nối tiếp TTL luôn luôn nằm giữa điện áp giới hạn 0V và Vcc, thường là 5V hay 3.3V. Cổng nối tiếp trên máy tính phù hợp với chuẩn giao tiếp RS-232 (Recommeded Standard 232). Tín hiệu của RS-232 cũng tương tự với tín hiệu của vi điều khiển ở chỗ đều chuyển một bit trong một đơn vị thời gian, SVTH: Sơn 59 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương với một tốc độ truyền cụ thể. Tuy nhiên, chuẩn RS-232 mức logic cao được gán cho điện áp âm – giá trị nào đó trong khoảng -3V tới -25V, trong khi đó mức logic thấp lại là điện áp trong khoảng từ +3V tới +25V. Hầu hết các máy tính cá nhân có mức tín hiệu này tại -13V tới +13V. Tín hiệu cực đại của chuẩn RS-232 khiến nó ít bị tác động bởi nhiễu, tiếng ồn và sự suy cấp. Điều này có nghĩa tín hiệu của RS-232 có thể truyền được các khoảng cách vật lý xa hơn mà dữ liệu vẫn đầy đủ so với TTL. Do vậy khi giao tiếp giữa vi điều khiển và máy tính cần phải chuyển đổi mức điện áp cho phù hợp. IC Max 232 được dùng cho mục đích này. Hình 1. 21 IC Max232 Max232 sử dụng nguồn 5V, do vậy ta có thể dùng chung nguồn với vi điều khiển. Max232 có hai bộ chuyển đổi điện áp cho giao tiếp RS-232, các bộ điều khiển được dùng cho chân truyền được gọi là T1 và T2, cho chân nhận gọi là R1 và R2. Tuy nhiên, trong nhiều ứng dụng ta chỉ sử dụng một bộ điều khiển. SVTH: Sơn 60 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 1. 22 Sơ đồ kết nối với IC Max232 CHƯƠNG 2:THIẾT KẾ SƠ ĐỒ NGUYÊN LÝ VÀ MẠCH NGUYÊN LÝ 1.1 Ý tưởng thiết kế Cảm biến siêu âm đo khoảng cách từ cảm biến đến vật cản, tín hiệu trả về từ cảm biến được vi điều khiển xử lý. Dữ liệu sau khi được xử lý sẽ hiển thị lên LCD 16x2, đồng thời dữ liệu được gửi đến vi điều khiển thứ hai thông qua module nRF24L01+. Vi điều khiển hai sau khi nhận dữ liệu từ module nRF24L01+ sẽ gửi dữ liệu lên máy tính cá nhân qua giao tiếp RS-232. SVTH: Sơn 61 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Với hoạt động trên, hệ thống sẽ được thiết kế theo hướng các module, thuận tiện cho việc kiểm tra cũng như thay thế các bộ phận khi xảy ra hư hỏng. Cơ bản hệ thống gồm có hai phần chính: Phần thứ nhất: Cảm biến siêu âm SRF05. Bộ xử lý trung tâm sử dụng vi điều khiển. Bộ truyền nhận dữ liệu không dây RF. Hiển thị LCD. Phần thứ thứ hai: Bộ xử lý thứ 2 gửi dữ liệu lên máy tính. Bộ truyền nhận dữ liệu không dây RF. Cổng COM DB9 Khối nguồn dùng chung cho cả hai phần của hệ thống. SVTH: Sơn 62 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương 1.2 Sơ đồ khối hệ thống Hình 2. 1 Sơ đồ nguyên lý phần xử lý tín hiệu siêu âm Hình 2. 2 Sơ đồ nguyên lý phần nhận dữ liệu qua RF và gửi lên máy tính 1.3 Chức năng của từng khối trong hệ thống Khối SRF05: có chức năng nhận tín hiệu điều khiển từ vi điều khiển của bộ xử lý trung tâm 1. Khi có tín hiệu từ bộ xử lý trung tâm 1, SVTH: Sơn 63 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương SRF05 hoạt động gửi xung phát sóng siêu âm và chờ tín hiệu phản hồi về. Khi bắt đầu phát sóng siêu âm, SRF05 sẽ kéo điện áp trên chân Echo lên mức cao, ngay khi nhận được tín hiệu phản hồi trở về của sóng siêu âm, chân Echo sẽ được kéo xuống thấp và chờ tín hiệu tiếp theo từ khối xử lý trung tâm 1. Khối xử lý trung tâm 1: hạt nhân của khối xử lý trung tâm 1 là PIC 16F887. Khối xử lý trung tâm gửi tín hiệu điều khiển cảm biến siêu âm SRF05 sau một khoảng thời gian định trước và lặp lại. Vi điều khiển sau khi phát xung khởi tạo SRF05 sẽ tiến hành đo thời gian chân Echo của cảm biến SRF05 ở mức cao bằng cách sử dụng Timer1 và ngắt ngoài trên chân RB0. Thời gian đo được sẽ được dùng để tính toán khoảng cách từ cảm biến đến vật cản. Khoảng cách tính toán được sẽ được gửi lên hiển thị trên LCD và thông qua module nRF24L01+ gửi đến bộ xử lý trung tâm 2. Bộ xử lý trung tâm thực thi việc đọc dữ liệu từ SRF05 và gửi dữ liệu sau khi xử lý đi một cách liên tục. nRF20L01+: module này có chức năng nhận dữ liệu từ các bộ xử lý trung tâm tương ứng và tiến hành truyền dữ liệu đến bộ xử lý bên kia. Ở trạng thái bình thường, nRF24L01+ được thiết lập ở chế độ luôn nhận do khoảng thời gian truyền dữ liệu giữa các bộ xử lý là rất ngắn. Khối hiển thị LCD: là khối hiển thị thông tin về khoảng cách đo SVTH: Sơn 64 được từ bộ xử lý trung tâm 1. Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Bộ xử lý trung tâm 2: nhận tín hiệu từ module nRF24L01+ gửi về sau khi giải mã tín hiệu thu được từ bộ xử lý 1. Dữ liệu nhận được sẽ được gửi lên máy tính thông qua giao tiếp RS-232. Bộ xử lý trung tâm 2 nhận tín hiệu điều khiển từ máy tính gửi xuống và thực thi các lệnh điều khiển. Khối COM DB9: có nhiệm vụ chuyển đổi điện áp phù hợp giữa tín hiệu TTL và RS-232 đảm bảo dữ liệu được truyền tốt giữa máy tính và vi điều khiển. Khối nguồn: khối nguồn cung cấp nguồn nuôi cho toàn hệ thống. Mức điện áp 5V cho hoạt động của vi điều khiển và các khối khác trong hệ thống, mức điện áp 3.3V cho bộ truyền nhận dữ liệu không dây nRF24L01+. 1.4 Nguyên lý hoạt động Hệ thống tự động reset khi được cấp nguồn. Sau khi hệ thống reset, bộ xử lý trung tâm 1 gửi xung khởi động cảm biến siêu âm và khởi tạo Timer1. Khi nhận được tín hiệu khởi động, cảm biến siêu âm sẽ phát ra sóng siêu âm đồng thời kéo chân Echo lên mức cao. Ngay khi nhận được tín hiệu phản hồi trở lại, cảm biến siêu âm kéo chân Echo xuống mức thấp. Chân Echo của cảm biến siêu âm được nối với chân RB0 của vi điều khiển dùng làm tín hiệu đầu vào cho ngắt ngoài. Khi có cạnh xuống trên chân RB0, ngắt được kích hoạt, chương trình phục vụ ngắt có nhiệm vụ đọc giá trị của Timer1 phục vụ cho việc tính toán khoảng cách. Khoảng cách từ cảm biến siêu âm đến vật SVTH: Sơn 65 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương cản tỉ lệ với thời gian chân Echo ở mức cao. Dựa vào nguyên lý TOF ta có thể tính được khoảng cách khi đo được thời gian chân Echo ở mức cao. Khoảng cách sau khi tính toán được sẽ được hiển thị lên LCD và thông qua module nRF24L01+ gửi đến bộ xử lý trung tâm 2. Bộ xử lý trung tâm 2 sau khi nhận được dữ liệu giải mã từ nRF24L01+ sẽ gửi giá trị khoảng cách lên máy tính. Việc nhận dữ liệu trên máy tính qua giao tiếp RS-232 được thực hiện bằng chương trình viết bởi phần mềm Visual Basic 6.0. 1.5 Mạch nguyên lý của hệ thống 1.5.1 Khối cung cấp nguồn Bất kì một hệ thống điện nào hoạt động cũng cần có một nguồn cung cấp năng lượng cho mạch hoạt động. Khối nguồn trên có ba mức điện áp đầu ra gồm 12V, 9V và 5V phục vụ cho mục đích khác nhau. Đầu ra 9V được lấy ra thông qua IC LM7809, đầu vào IC LM7809 là một adapter được đưa vào thông qua jack kết nối DC in. SVTH: Sơn 66 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 2. 3 Mạch nguyên lý nguồn ra 12V, 9V, 5V Để lấy được điện áp 5V cung cấp cho hệ thống vi điều khiển, các module liên quan ta sử dụng IC ổn áp LM7805, IC này đảm bảo cung cấp nguồn điện áp ổn định là 5V và dòng lớn nhất tạo ra được là 1A. Các tụ trong mạch có nhiệm vụ lọc nguồn vào và ra của các IC ổn áp. Hình 2. 4 Mạch nguyên lý nguồn 3.3V SVTH: Sơn 67 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Mạch nguồn 3.3V sử dụng IC LM1117 có đầu vào điện áp 5V lấy từ mạch nguồn 5V. Nguồn 3.3V có nhiệm vụ cung cấp nguồn cho module nRF24L01+ hoạt động. Trên mạch nguồn có đèn LED. Khi nguồn hoạt động cấp điện cho mạch thì đèn sáng báo hiệu đã có điện. Đèn LED có dòng bé khoảng 20mA và hoạt động ở mức điện áp 2.2V nên cần một điện trở R1 có giá trị 330Ω đảm bảo LED hoạt động bình thường. 1.5.2 Khối xử lý trung tâm 1 Hình 2. 5 Mạch nguyên lý khối xử lý tín hiệu nhận từ SRF05 Trung tâm của mạch là vi điều khiển PIC 16F887. Để PIC hoạt động cần cấp nguồn vào cả hai chân VDD và hai chân VSS. SVTH: Nguyễn Sơn 68 Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Chân RB0 được nối với chân Echo của SRF05, mục đích để nhận tín hiệu trả về từ SRF05 tạo nguồn kích hoạt ngắt ngoài trên chân này. Chân RB1 nối với chân Trigger của SRF05 gửi xung kích hoạt SRF05 phát sóng siêu âm. PortE của vi điều khiển được nối với các chân E, RS, RW của LCD để điều khiển hoạt động của LCD, chân RD<4:7> của PortD được nối với 4 chân dữ liệu của LCD. Các chân PGC, PGD, MCLR được nối với cổng kết nối mạch nạp trực tiếp trên board mà không cần tháo chip ra để nạp chương trình. Chân PortC từ RC<0:3> và chân RD0 kết nối với module nRF24L01+ để truyền nhận dữ liệu thông qua giao tiếp SPI. Mạch reset gồm 2 điện trở, một điện trở 10k hạn dòng vào vi điều khiển, cấp mức điện áp 5V cho vi điều khiển hoạt động, điện trở 4k7 dùng để hạn dòng từ tụ điện phóng trả về khi tắt nguồn. Tụ hóa 10uF được dùng để mạch tự động reset khi mới cấp nguồn cho hệ thống. Và để reset được vi điều khiển cần một nút bấm nối chân MCLR của điều khiển xuống GND thông qua nút bấm (chân MCLR tích cực ở mức thấp). SVTH: Sơn 69 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 2. 6 Mạch reset vi điều khiển Bộ dao động sử dụng thạch anh tần số 20MHz và 2 tụ gốm 33pF, kết nối với hai chân OSC1 và OSC2 của vi điều khiển. 1.5.3 LCD hiển thị Hình 2. 7 Mạch nguyên lý LCD Mạch LCD hiển thị được thiết kế theo hướng module thuận tiện cho việc tháo lắp và thay thế khi xảy ra hư hỏng. Điện trở 4k7 được dùng để hạn dòng vào LCD. Biến trở 10k dùng để điều chỉnh độ tương phản của LCD. SVTH: Sơn 70 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương 1.5.4 Khối Max232 Hình 2. 8 Mạch nguyên lý Max232 Mạch nguyên lý Max232 được thiết kế dựa trên mạch nguyên lý của nhà sản xuất đưa ra. Cổng COM DB9 có chân số 3 là chân truyền dữ liệu TxD và chân số 2 là chân nhận dữ liệu RxD. Để truyền được dữ liệu giữa vi điều khiển và máy tính ta cần nối chéo chân TxD của cổng COM với chân Rx của vi điều khiển và chân RxD nối với chân Tx của vi điều khiển. 1.5.5 Khối xử lý trung tâm 2 Chân PortC từ RC<0:3> và chân RD0 kết nối với module nRF24L01+ để truyền nhận dữ liệu thông qua giao tiếp SPI. Các chân PGC, PGD, MCLR được nối với cổng kết nối mạch nạp trực tiếp trên board mà không cần tháo chip ra để nạp chương trình. Hai chân Rx và Tx được sử dụng cho giao tiếp RS-232. SVTH: Nguyễn Sơn 71 Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 2. 9 Mạch nguyên lý giao tiếp với máy tính 1.5.6 Module nRF24L01+ Các giá trị điện trở và tụ điện trên mạch nguyên lý được chọn theo chỉ dẫn do nhà sản xuất chip nRF24L01+ Nordic cung cấp. SVTH: Sơn 72 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 2. 10 Sơ đồ nguyên lý module nRF23L01+ CHƯƠNG 3: THIẾT KẾ MẠCH IN VÀ CHƯƠNG TRÌNH ĐIỀU KHIỂN 2.1 Thi công mạch in Sau khi thiết kế được mạch nguyên lý ta tiến hành xây dựng mạch in. Để hỗ trợ trong việc thiết kế mạch nguyên lý và mạch in, nhiều phần mềm đã được phát triển có thể như: OrCad, Proteus, Eagle, Altium… Đặc điểm chung của các phần mềm này đều được nhà sản xuất thiết kế sẵn các bộ thư viện linh kiện và chân cắm tùy theo thiết kế của mình mà người sử dụng chọn linh kiện và chân cắm phù hợp từ thư viện. SVTH: Sơn 73 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Phần mềm Altium Designer là một phần mềm của hãng Altium. Altium là một phần mềm có giao diện thân thiện, và dễ sử dụng. Chúng ta có thể tạo ra những sơ đồ nguyên lý, mạch in, mô phỏng hình ảnh 3D của sản phẩm, thiết kế các hệ thống FPGA... Bộ thư viện được cập nhật từ nhà sản xuất với các linh kiện khá đầy đủ của các hãng sản xuất như TL, Microchip…, bên cạnh đó phần mềm còn hỗ trợ người dùng tạo thư viện các linh kiện và chân cắm cho riêng mình cũng như chia sẻ thư viện của mình. Các hệ thống phím tắt giúp người thiết kế thao tác nhanh và tiện lợi. Hình 3. 1 Phần mềm Altium Designer Điểm mạnh của Altium là có thể chỉnh sửa được các file thiết kế từ các phần mềm khác như Orcad, Eagle… cũng như việc xuất các file ra định dạng của các chương trình khác. SVTH: Sơn 74 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 3. 2 Giao diện thiết kế mạch nguyên lý của chương trình Sau khi thiết kế mạch nguyên lý trên phần mêm Altium, ta chuyển sang giao diện thiết kế mạch in. SVTH: Sơn 75 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 3. 3 Giao diện thiết kế mạch nguyên lý của chương trình Mạch in các khối trong hệ thống SVTH: Sơn 76 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 3. 4 Mạch in SRF05 SVTH: Sơn 77 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 3. 5 Mạch hiển thị LCD Hình 3. 6 Mạch nguồn 5V SVTH: Sơn 78 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 3. 7 Mạch nguồn 3.3V Hình 3. 8 Mạch giao tiếp với máy tính SVTH: Sơn 79 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương 2.2 Thiêt kế phần mềm 2.2.1 Xây dựng chương trình cho PIC SVTH: Sơn 80 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương SVTH: Sơn 81 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 3. 9 Sơ đồ thuật toán chương trình chính PIC1 2.2.1.1 Xác định khoảng thời gian đọc SRF05 Trong chương trình chính, khoảng thời gian vi điều khiển đọc tín hiệu từ cảm biến siêu âm không phải là liên tục, đồng thời vi điều khiển phải thực hiện các công việc khác nên ta chỉ đọc tín hiệu cảm biến siêu âm 2 lần trong 1s. Trong quá trình đọc tín hiệu từ cảm biến, ta sử dụng bộ Timer0 để xác định khoảng thời gian giữa các lần đọc. Chọn tỉ lệ chia của Timer0 bằng 256. Như vậy, với tần số thạch anh là 20MHz, tần số f của Timer0 là: (3.1) Như vậy cứ sau 51.2 us, Timer0 tăng 1 đơn vị và tràn sau 13107.2 us. Ta tính toán giá trị khởi tạo cho Timer0: Khởi tạo giá trị đếm ban đầu Timer0 = 0, Timer0 tràn sau khoảng 13 ms, nên để đạt được giá trị 500ms ta cần một biến đếm phụ dem đếm số lần Timer0 tràn. (3.2) Tuy nhiên, ta chọn giá trị khởi tạo khác cho Timer0, chọn giá trị khởi tạo là 60. Vậy Timer0 tràn sau: (3.3) SVTH: Sơn 82 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Vậy cần tăng biến dem 50 lần. Khi giá trị dem = 50, biến docSRF được gán bằng 1 cho phép chương trình con layKhoangCach() hoạt động. Trong chương trình con layKhoangCach() có sử dụng ngắt ngoài. Do đó, ta không đưa chương trình layKhoangCach() vào trong chương trình phục vụ ngắt tràn Timer0 vì dòng vi điều khiển 16F không cho phép ngắt trong ngắt xảy ra. Để thực hiện được đọc khoảng cách ta phải dùng một biến phụ docSRF cho phép thực hiện chương trình layKhoangCach(). SVTH: Sơn 83 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương 2.2.1.2 Xử lý tín hiệu từ cảm biến siêu âm SVTH: Sơn 84 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương SVTH: Sơn 85 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 3. 10 Sơ đồ thuật toán chương trình đọc khoảng cách Để SRF05 bắt đầu phát sóng siêu âm, cần kích chân Trigger ở mức cao tối thiểu 10us. Khi nhận được xung kích, vi điều khiển trên module SRF05 sẽ phát 8 chu kỳ xung có tần số 40kHz đồng thời kéo chân Echo lên mức cao. Để đo được thời gian chân Echo mức cao, ta sử dụng Timer1 và ngắt ngoài của vi điều khiển PIC 16F887. Thời gian tối đa mà chân Echo ở mức cao lên đến 30ms, nên chọn tỉ lệ chia cho Timer1 bằng 8. Như vậy tần số thạch anh là 20MHz thì Timer1 tăng 1 đơn vị sau: (3.4) Thời gian tối đa mà Timer1 có thể đếm được là 104857.6 us, đáp ứng được việc đo thời gian chân Echo ở mức cao. Timer1 được khởi tạo với giá trị ban đầu bằng 0, ngay khi chân Echo được kéo lên cao. Giá trị Timer1 được lấy khi chân Echo xuống thấp. Chân Echo được nối với chân RB0, làm đầu vào cho ngắt ngoài của vi điều khiển. Ngắt ngoài xảy ra khi có cạnh xuống. Chương trình con phục vụ ngắt ngoài gồm 2 câu lệnh get_timer1() và en=0. Giá trị Timer1 sẽ được lưu vào biến demTimer1 và được sử dụng để tính toán khoảng cách. en=0 đảm bảo sẽ không có tín hiệu đọc cảm biến siêu âm được gửi đi cho đến khi giá trị của Timer1 ở lần đọc vừa rồi được xử lý. SVTH: Sơn 86 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Sau 30ms, giá trị của Timer1 sẽ là , do đó nếu giá trị của biến demTimer1 > 18750, khoảng cách trả về là 0. Nếu demTimer1< 18750, ta tiến hành tính toán khoảng cách đo được. thoiGian tính bằng us. Vận tốc truyền âm trong không khí là 340m/s, từ đó ta tính được khoảng cách từ cảm biến đến vật cản. (3.5) Sau khi tính toán, trả về khoảng cách, biến en được gán bằng 1, chuẩn bị cho lần đọc tiếp theo. 2.2.1.3 Hiển thị giá trị tính toán lên LCD Thư viện điều khiển LCD, chỉ xử lý được kiểu dữ liệu là ký tự, mảng ký tự. Do đó, giá trị khoảng cách được định dạng ở dạng số nguyên 16-bit cần được chuyển sang chuỗi. LCD hiển tối đa 16 ký tự trên một dòng, do đó cần một mảng str[16] kiểu ký tự gồm 16 phần tử. Dùng hàm sprintf trong CCS in giá trị khoảng cách lên mảng ký tự vừa khai báo. sprintf( str, “D: %3Lucm”,khoangCach) SVTH: Sơn 87 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Vì biến khoangCach là kiểu nguyên 16-bit nên định dạng in trong câu lệnh sprintf là Lu, tương ứng với long unsigned integer, lúc này mảng str có 8 phần tử bao gồm ký tự kết thúc chuỗi. 2.2.1.4 Thiết lập nRF24L01+ Thư viện điều khiển nRF24L01+ được viết dựa trên thư viện điều khiển nRF24L01+ của nhà sản xuất viết cho 8051. Các thiết lập thông số chung cho nRF24L01+: ● Giá trị địa chỉ truyền gồm 5 bytes trong thanh ghi địa chỉ TX_ADDR của nRF24L01+. Địa chỉ của nRF: {0x34,0x43,0x10,0x10,0x01} ● Địa chỉ nhận gồm 5 byte, ghi vào thanh ghi RX_ADDR_P0 có địa chỉ giống với địa chỉ truyền. ● Ghi giá trị 0x01 vào thanh ghi EN_AA, cho phép tự động xác nhận (Enable Auto ACK). ● Ghi giá trị 0x01 vào thanh ghi EN_RXADDR, sử dụng đường truyền số 0 cho truyền nhận dữ liệu (data pipe 0). nRF24L01+ có thể nhận dữ liệu từ 6 module nRF24L01+ khác, tuy nhiên, ta chỉ giao tiếp với 1 module nRF nên chỉ mở đường giao tiếp số 0. ● Chọn kênh cho nRF24L01+, cả module truyền và nhận phải thiết lập cùng kênh. Sử dụng kênh 0 bằng cách ghi giá trị 0 vào thanh ghi RF_CH. SVTH: Sơn 88 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương ● Thiết lập bộ nhớ đệm nhận và đệm truyền cho nRF24L01+, chọn bộ đệm nhận và truyền có độ rộng 32 byte, ghi giá trị 32 vào thanh ghi RX_PW_P0. ● Thiết lập tốc độ truyền và công suất của module truyền, chọn tốc độ truyền 1Mbps, công suất nguồn phát 0dBm. Giá trị 0x07 được ghi vào thanh ghi RF_SETUP. Thiết lập module ở chế độ nhận, và sẵn sàng nhận dữ liệu: ● Chân CE kéo lên mức cao. ● Giá trị 0x0F được ghi vào thanh ghi CONFIG, bật nguồn cho nRF24L01+, thiết lập chế độ nhận (bit PRIM_RX = 1), sử dụng 2 byte cho kiểm tra lỗi CRC. Thiết lập module ở chế độ truyền dữ liệu: ● Giá trị 0x0e được ghi vào thanh ghi CONFIG, bật nguồn cho nRF24L01+, thiết lập chế độ truyền (bit PRIM_RX = 0), sử dụng 2 byte cho kiểm tra lỗi CRC. ● Chân CE kéo lên mức cao. Địa chỉ ô nhớ từ 0x61đến 0x9F được dùng làm bộ đệm nhận, đọc dữ liệu nhận về ta bắt đầu đọc từ địa chỉ 0x61. Địa chỉ ô nhớ từ 0xA0 đến 0xE0 được dùng làm bộ đệm truyền, ghi dữ liệu cần truyền vào bộ đệm truyền và thiết lập module nRF24L01+ ở chế độ truyền, dữ liệu sẽ được tự động truyền đi cho đến khi hết dữ liệu trong bộ đệm truyền. SVTH: Sơn 89 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Gửi dữ liệu khoảng cách Giá trị khoảng cách được chuyển thành ký tự và lưu trong mảng chuỗi ký tự Tx_Buf bằng lệnh sprintf. Dữ liệu trong mảng Tx_Buf được ghi vào bộ nhớ đệm truyền của SPI_Write_Buf(WR_TX_PLOAD, nRF24L01+ tx_buf, bằng lệnh TX_PLOAD_WIDTH); WR_TX_PLOAD là địa chỉ bộ đệm truyền 0xA0, TX_PLOAD_WIDTH độ rộng bộ nhớ đệm là 32 byte. Đọc dữ liệu từ nRF24L01+ Dữ liệu gửi đến được nRF24L01+ giải mã và lưu trong bộ đệm nhận. Lệnh SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH); lưu dữ liệu nhận được vào mảng Rx_Buf và là một chuỗi. SVTH: Sơn 90 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 3. 11 Sơ đồ thuật toán chương trình PIC2 2.2.1.5 Gửi dữ liệu nhận được từ nRF24L01+ lên máy tính. Sử dụng giao tiếp RS-232 để gửi dữ liệu từ vi điều khiển PIC lên máy tính. Thiết lập các thông số cơ bản cho giao tiếp: ● Chân kết nối: sử dụng chân có sẵn trên vi điều khiển chân truyền TX là PIN_C6, chân nhận dữ liệu RX là PIN_C7. ● Dữ liệu truyền 8 bits, không có bít kiểm tra chẵn lẻ ● Tốc độ Baud: chọn tốc độ 9600. Với khung truyền gồm 1 bit start, 1 bit stop và 8 bits dữ liệu, tốc độ truyền sẽ là 960kbps. Tốc độ SVTH: Sơn 91 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương truyền đảm bảo khả năng xảy ra sai lệch thông tin trong đường truyền thấp. Để thiết lập các thông số như trên cho PIC, trong CCS dùng lệnh: #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) Khi truyền nhận dữ liệu bằng RS-232 ta phải nối chéo chân TX của vi điều khiển với chân RxD của cổng COM, chân RX với chân TxD. Gửi dữ liệu lên PC, sử dụng câu lệnh putc() dùng để gửi một biến kiểu int ra RS-232. Lệnh printf() dùng để gửi một chuỗi hoặc gửi biến kiểu số. Vì dữ liệu nhận được từ nRF24L01+ trong biến Rx_Buf là một chuỗi nên ta gửi thẳng giá trị nhận được lên máy tính bằng lệnh printf(Rx_Buf);. 2.2.1.6 Nhận lệnh gửi xuống từ máy tính Dùng ngắt khi nhận dữ liệu RS-232 RDA. Khi có dữ liệu từ máy tính gửi xuống sẽ xảy ra ngắt. Chương trình phục vụ ngắt: Biến data sẽ đọc dữ liệu mà máy tính gửi xuống. Nếu data nhận được các giá trị ‘2’ và ‘4’,chân A0 và A1 bị kéo xuống mức thấp làm sáng đèn led. Nếu data nhận được giá trị ‘1’ và ‘3’ sẽ làm tắt đèn. Các chân dương của đèn led được nối lên nguồn, chân âm nối vào vi điều khiển. Viết chương trình Sau khi xây dựng sơ đồ thuật toán ta tiến hành viết code và biên dịch chương trình cho PIC. SVTH: Sơn 92 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Sử dụng phần mềm CCS C Complier để viết chương trình và biên dịch cho PIC. Hình 3. 12 Phần mềm CCS CCS (Custom Computer Services) là trình biên dịch dùng ngôn ngữ C lập trình cho vi điều khiển. Đây là ngôn ngữ lập trình bậc cao nên người học có thể tiếp cận nhanh chóng hơn so với ngôn ngữ Assembly. Mã lệnh được tối ưu khi biên dịch. CCS chứa rất nhiều hàm phục vụ cho mọi mục đích và có nhiều cách lập trình mã cho một vấn đề dẫn đến tốc độ thực hiện chương trình cũng như độ dài chương trình sẽ khác nhau. CCS có đủ khả năng để không cần chèn thêm bất kỳ dòng lệnh Assembly nào nhưng vẫn cho phép phối hợp Assembly cùng với C. Tuy nhiên CCS không đảm bảo chương trình chạy chính xác. SVTH: Sơn 93 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương CCS cung cấp nhiều công cụ tiện ích hỗ trợ người dùng trong việc biên dịch, bắt lỗi chương trình và quản lý bộ nhớ.Tuy nhiên C không phải là vạn năng, có thể thực hiện mọi việc theo ý muốn nên trong một số trường hợp có thể xuất hiện lỗi. 2.2.2 Xây dựng chương trình nhận dữ liệu trên máy tính Để xây dựng chương trình giao tiếp RS-232, ta sử dụng chương trình Visual Basic 6.0(VB 6.0). Trong VB 6.0 có bộ điều khiển Active X Microsoft Communication 6.0(MSComm) cho phép thiết lập các thông số để thực hiện giao tiếp RS-232. Các tham số cho cổng COM: ● CommPort: dạng object.CommPort = value. Value là chỉ số của cổng Com có giá trị từ 1 – 16 và mặc định có giá trị = 1. Cần phải thiết lập thông số này trước khi mở cổng. ● InBuferSize: thiết lập hoặc trả lại kích thước của bộ đệm nhận, tính bằng byte. Mặc định là 1024 byte. ● InputLen: object.InputLen = value, thiết lập hoặc trả lại số byte mỗi lần thuộc tính đọc Input đọc trong bộ nhớ đệm nhận. ● InputMode: object.InputMode=Value. Value = comInputModeText dữ liệu nhận được dạng văn bản kiểu ký tự theo chuẩn ANSI. Dữ liệu nhận được sẽ là một sâu. Value = comInputModeBinary dùng nhận mọi kiểu dữ liệu như ký tự điều SVTH: Sơn 94 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương khiển nhúng, ký tự NULL,... Giá trị nhận được từ Input sẽ là một mảng kiểu byte. ● PortOpen: thiết lập và trả lại tính trạng của cổng (đóng hoặc mở). object.PortOpen = value . Value = True cổng mở, value = False cổng đóng và xóa toàn bộ dữ liệu trong bộ đệm nhận và truyền. ● RthresHold: object.Rthreshold = value. value kiểu số nguyên. Thiết lập số kí tự nhận được trước khi gây lên sự kiện comEvReceive. Mặc định = 0 tức là không có sự kiện OnComm khi nhận được dữ liệu. Thiết lập = 1 tức là sự kiện OnComm xảy ra khi bất kì ký tự nào được chuyển đến bộ đệm nhận. ● Settings: object.Settings = value. Thiết lập hoặc trả lại các thông số tần số baud, bit dữ liệu, bít chẵn lẻ, bit stop. ● SThreshold: thiết lập và và trả lại số kí tự nhỏ nhất được cho phép trong bộ đệm gửi để xảy ra sự kiện OnComm = comEvSend. Trên cơ sở đó, ta tiến hành xây dựng giao diện chương trình điều khiển SVTH: Sơn 95 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Hình 3. 13 Giao diện chương trình giao tiếp Sử dụng VB 6.0 ta được giao diện như hình. Kết nối Thiết lập các thông số cho cổng COM: MSComm1.InBufferSize = 1024 MSComm1.InputLen = 0 MSComm1.InputMode = comInputModeText MSComm1.RThreshold = 1 MSComm1.SThreshold = 0 SVTH: Sơn 96 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Sử dụng Command1 để quản lý việc kết nối cổng COM. Các thông số MSComm1.CommPort và MSComm1.Settings được chọn ở Combo1 và Combo2. Combo1 cho phép chọn cổng COM để kết nối. MSComm1.CommPort = Switch(Combo1.Text = "COM 1", 1, Combo1.Text = "COM 2", 2, Combo1.Text = "COM 3", 3, Combo1.Text = "COM 4", 4, Combo1.Text = "COM 5", 5) . Nếu giá trị Combo1 là COM 1 thì cổng MSComm1.CommPort =1. Tương tự với các cổng giá trị Combo còn lại. Combo2 cho phép lựa chọn tốc độ kết nối, gồm có: 4800, 9600, 14400, 19200. Để thực hiện được việc cho phép kết nối và không cho phép kết nối cổng COM, Caption của Commad1 được sử dụng. Khi chưa kết nối, Caption của Command1 là “CONNECT”. Khi có hành động click, thông số MSComm1.Settings sẽ được cài đặt với tốc độ Baud là giá trị của Combo2 + ",n,8,1" là không sử dụng bit chẵn lẻ, 8 bits dữ liệu, độ dài stop bit là 1 và MSComm1.PortOpen = True mở cổng COM kết nối. Caption của Command1 chuyển thành “DISCONNECT”. Khi Caption của Command1 là “DISCONNECT”, có hành động click, thuộc tính MSComm1.PortOpen = False. Cổng COM bị đóng, Caption chuyển thành “CONNECT”. SVTH: Sơn 97 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Trên máy tính xách tay ngày nay hầu như không còn cổng COM, do đó, muốn giao tiếp RS-232 giữa máy tính và vi điều khiển ta cần cáp chuyển đổi USB to COM. Cáp có driver đi kèm để tạo một cổng COM trên máy tính cho ta sử dụng. Vì mỗi cáp chỉ tạo được một cổng COM nên, để tránh lỗi làm dừng chương trình khi chọn cổng COM không tồn tại trên máy tính, một đoạn code thông báo lỗi được thêm vào trong Command1. On Error GoTo loi loi: If Err.Number = 8002 Then MsgBox "Vui long chon cong ket noi co tren may!" End If Khi gặp lỗi 8002 không phát hiện cổng COM, dòng thông báo sẽ hiện ra, và tiến hành chọn lại cổng COM. Dữ liệu gửi lên Dữ liệu nhận được được hiển thị trong Text1. Với thuộc tính InputMode = comInputModeText thì MSComm sẽ gửi và nhận dữ liệu dạng xâu theo chuẩn ANSI. Khi dùng giá trị khoảng cách gửi lên để tính toán ta dùng hàm Val() để chuyển chuỗi ký tự biểu diễn số về dạng số. Điều khiển SVTH: Sơn 98 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Command6: hành động click xảy ra sẽ thực hiện hàm End kết thúc chương trình. Command2, Command4: hành động click xảy ra sẽ gửi ký tự “2” và “4” xuống PIC, bật đèn led sáng. Command3, Command5: hành động click xảy ra sẽ gửi ký tự “1” và “3” xuống PIC, tắt đèn led. Label7 cập nhật giá trị ngày giờ của hệ thống. SVTH: Sơn 99 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI ❖ Kết luận Sau khoảng thời gian nghiên cứu, thiết kế và chế tạo, đồ án cơ bản được hoàn thành. Đồ án đã đạt được những yêu cầu cơ bản là thiết kế, chế tạo mạch xử lý tín hiệu cảm biến siêu âm, truyền phát qua sóng Radio và hiển thị trên máy tính. Trong quá trình hoàn thành đồ án, em đã thu được những kết quả nhất định sau: ● Củng cố được một số kiến thức đã học, được tiếp xúc và làm việc với những linh kiện mới. ● Thiết kế, chế tạo hoàn chỉnh mạch thực hiện được các yêu cầu của đề tài đưa ra. ● Hệ thống được chạy thử nghiệm và hoạt động tương đối ổn định. ● Xây dựng được chương trình giao tiếp với hệ thống trên máy tính. ❖ Hướng phát triển đề tài Bên cạnh những kết quả đạt được, do thời gian có hạn và kiến thức chưa nhiều nên đồ án còn tồn tại những thiếu sót. Một số hạn chế tồn tại như: việc truyền nhận dữ liệu hai chiều chỉ thực hiện giữa máy tính và vi điều khiển thứ hai, chưa thực hiện được việc truyền nhận dữ liệu hai chiều giữa hai vi điều khiển qua sóng radio; việc cấp nguồn cho hệ thống hoạt động còn tồn tại một số khuyết điểm; code của chương trình còn chưa tối ưu. Vì vậy, để đề tài ứng dụng vào thực tế nhiều hơn, em có một số kiến nghị sau: SVTH: Sơn 100 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương ● Xây dựng hệ thống cụ thể công việc cho cảm biến siêu âm như đo chiều cao vật thể, chiều cao mực nước…, sử dụng cảm biến siêu âm có độ tin cậy cao để ứng dụng trong công nghiệp. ● Thực hiện việc truyền nhận dữ liệu, tín hiệu điều khiển giữa hai vi điều khiển tới cơ cấu chấp hành. ● Thực hiện nhận diện cổng COM, tự động khi kết nối thiết bị với máy tính (sử dụng RS-232). ● Có thể thay thế giao tiếp RS-232 bằng giao tiếp USB có tốc độ cao hơn và thông dụng hơn. Với hướng phát triển nêu trên cùng với những ý tưởng khác của những người đi sau sẽ phát triển hơn nữa đề tài này, khắc phục những hạn chế của đề tài, làm cho đề tài trở nên phong phú hơn, mang tính ứng dụng cao hơn trong thực tế. SVTH: Sơn 101 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương TÀI LIỆU THAM KHẢO [1] Blitz, J. & Simpson, G. (1996). Ultrasonic Methods of Nondestructive Testing. Chapman & Hall. [2] C Compiler Reference Manual – Custom Computer Services, Inc. (8/2009). [3] Giang, N.T (2012). Bài giảng kỹ thuật vi xử lý. Đại học Giao thông Vận tải. [4] Hà, P.T (2014). Một vài ứng dụng của siêu âm. Tạp chí thông tin công nghệ & khoa học Quảng Bình, 3/2014, 38 – 39. [5] Khang, P.H (2004). Kỹ xảo lập trình VB6. NXB Lao động – Xã hội. [6] nRF24L01+ Product Specification – Nordic Semiconductor (9/2008). [7] PIC16F882/883/884/886/887 Data Sheet – Microchip Technology Inc. [8] Ultrasonic Sensor Application Manual – Murata, Manufacturing Co., Ltd. SVTH: Sơn 102 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương PHỤ LỤC 1 Code chương trình cho vi điều khiển 1: #include <16F887.h> #device adc=16 #FUSES NOWDT #FUSES HS //No Watch Dog Timer //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD) #FUSES NOPUT //No Power Up Timer #FUSES NOBROWNOUT #FUSES NOLVP //No brownout reset //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O #FUSES NOCPD //No EE protection #FUSES NOWRT //Program memory not write protected #FUSES NODEBUG #FUSES NOPROTECT //No Debug mode for ICD //Code not protected from reading #use delay(clock=20000000) #include <DEF_16F877A.h> //___________________ Khai bao chan cho nRF __________________ #define CE PORTC0 #define SCK PORTC1 SVTH: Sơn 103 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương #define MISO PORTC2 #define CSN PORTC3 #define MOSI PORTD0 // Khai bao Tris #define CE_DDR #define SCK_DDR #define MISO_DDR #define CSN_DDR #define MOSI_DDR DDRC0 DDRC1 DDRC2 DDRC3 DDRD0 //____________________ Khai bao chan cho LCD ___________________ #define LCD_D4 PORTD4 #define LCD_D5 PORTD5 #define LCD_D6 PORTD6 #define LCD_D7 PORTD7 //Khai bao Tris #define LCD_D4_DDR DDRD4 #define LCD_D5_DDR DDRD5 #define LCD_D6_DDR DDRD6 #define LCD_D7_DDR DDRD7 #define LCD_RS #define LCD_RW SVTH: Sơn 104 PORTE2 PORTE1 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương #define LCD_EN PORTE0 //Khai bao Tris #define LCD_RS_DDR #define LCD_RW_DDR DDRE1 #define LCD_EN_DDR DDRE0 //___________________ DDRE2 Khai bao chan cho SRF05 _________________ #define echo PIN_B0 #define trig PIN_B1 //____________________Khai bao cac thu vien su dung ______________ #include <nRF24L01.c> #include <lcd_16x2.c> #include <lcd_16x2.h> //===================== Khai bao bien ===================== extern char TxBuf[32]; char RxBuf[32]; unsigned int8 str[16]; int1 en, docSRF; int16 demTimer1, thoiGian, khoangCach; SVTH: Sơn 105 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương //================= Khai bao chuong trinh con =============== void batDau(); void hienThi(); void loiChao(); void guiDuLieu(int16 dim); int16 layKhoangCach(); //================= Chuong trinh phuc vu ngat=============== #int_ext void ngatNgoai() { demTimer1 = get_timer1(); en = 0; } #int_timer0 void ngatTimer0() { int8 dem; set_timer0(60); SVTH: Sơn 106 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương dem++; if(dem==50) { docSRF = 1; dem = 0; } } //==================Chuong trinh chinh==================== void main() { CE_DDR = 0; SCK_DDR = 0; MISO_DDR = 1; CSN_DDR = 0; MOSI_DDR = 0; set_tris_b(0x01); LCD_Init(); init_NRF24L01(); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); SVTH: Sơn 107 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); ext_int_edge(H_TO_L); enable_interrupts(INT_EXT); enable_interrupts(INT_TIMER0); enable_interrupts(GLOBAL); set_timer0(60); SetRX_Mode(); loiChao(); while(TRUE) { if(nRF24L01_RxPacket(RxBuf)==1) { LCD_Clear(); LCD_Gotoxy(0,0); LCD_Puts(RxBuf); delay_ms(50); } if(docSRF==1) { disable_interrupts(INT_TIMER0); khoangCach=layKhoangCach(); SVTH: Sơn 108 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương hienThi(); guiDuLieu(khoangCach); docSRF=0; enable_interrupts(INT_TIMER0); } } } //=================Chuong trinh con====================== //__________________batDau_______________________________ ___ void batDau() { while(en) { output_high(trig); delay_ms(50); output_low(trig); delay_us(50); while(!input(echo)); set_timer1(0); while(en); SVTH: Sơn 109 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương } } //__________________hienThi_______________________________ ____ void hienThi() { LCD_Gotoxy(0,0); sprintf(str,"KHOANG CACH:"); LCD_Puts(str); if(khoangCach==0) { LCD_Gotoxy(0,1); sprintf(str," NON "); LCD_Puts(str); delay_ms(10); } else { LCD_Gotoxy(0,1); sprintf(str,"D: %3Lucm",khoangCach); LCD_Puts(str); delay_ms(10); } SVTH: Sơn 110 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương } //________________loiChao_________________________________ ____ void loiChao() { LCD_Gotoxy(0,0); sprintf(str,"DO AN TOT NGHIEP"); LCD_Puts(str); LCD_Gotoxy(0,1); sprintf(str,"DAI HOC GTVT CS2"); LCD_Puts(str); delay_ms(1000); LCD_Clear(); LCD_Gotoxy(0,0); sprintf(str,"GVHD:"); LCD_Puts(str); LCD_Gotoxy(0,1); sprintf(str,"TRINH TUAN DUONG"); LCD_Puts(str); delay_ms(1000); LCD_Clear(); LCD_Gotoxy(0,0); SVTH: Sơn 111 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương sprintf(str,"SVTH:"); LCD_Puts(str); LCD_Gotoxy(0,1); sprintf(str,"NGUYEN HOAI SON"); LCD_Puts(str); delay_ms(1000); LCD_Clear(); } //________________ guiDuLieu _________________________________ void guiDuLieu(int16 dim) { SetTX_Mode(); delay_ms(10); sprintf(TxBuf,"%3Lu",dim); nRF24L01_TxPacket(TxBuf); SPI_RW_Reg(WRITE_REG+STATUS,0XFF); SetRX_Mode(); delay_us (1); } //________________layKhoangCach__________________________ ____ int16 layKhoangCach() SVTH: Sơn 112 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương { int16 bienTam; batDau(); if(demTimer1 > 18750) { demTimer1 = 0; en = 1; return 0; } else { thoiGian = demTimer1*1.6; bienTam = thoiGian/58; demTimer1 = 0; en = 1; return bienTam; } } Code chương trình vi điều khiển 2: #include <16F877A.h> #device adc=16 #FUSES NOWDT SVTH: Sơn 113 //No Watch Dog Timer Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương #FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD) #FUSES NOPUT //No Power Up Timer #FUSES NOBROWNOUT #FUSES NOLVP //No brownout reset //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O #FUSES NOCPD //No EE protection #FUSES NOWRT //Program memory not write protected #FUSES NODEBUG //No Debug mode for ICD #FUSES NOPROTECT //Code not protected from reading #use delay(clock=20000000) #include <DEF_16F877A.h> //______________________ Khai bao chan cho nRF __________________ #define CE PORTC0 #define SCK PORTC1 #define MISO PORTC2 #define CSN PORTC3 #define MOSI PORTD0 //Khai bao Tris #define CE_DDR #define SCK_DDR #define MISO_DDR SVTH: Sơn 114 DDRC0 DDRC1 DDRC2 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương #define CSN_DDR #define MOSI_DDR DDRC3 DDRD0 #include <nRF24L01.c> #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PO RT1) extern char TxBuf[32]; #INT_RDA void guiDuLieu() { char data; data=getc(); switch (data){ case '1':output_high(PIN_A0); break; case '2':output_low(PIN_A0); break; case '3':output_high(PIN_A1); break; case '4':output_low(PIN_A1); break; SVTH: Sơn 115 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương } } void main() { char RxBuf[32]; CE_DDR = 0; SCK_DDR = 0; MISO_DDR = 1; CSN_DDR = 0; MOSI_DDR = 0; init_NRF24L01(); SetRX_Mode(); enable_interrupts(INT_RDA); enable_interrupts(GLOBAL); while(TRUE) { if(nRF24L01_RxPacket(RxBuf)==1) { printf(RxBuf); SPI_RW_Reg(WRITE_REG+STATUS,0XFF); SetRX_Mode(); } SVTH: Sơn 116 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương } } Chương trình giao tiếp trên máy tính: Option Explicit Private Sub Command1_Click() On Error GoTo loi If Command1.Caption = "CONNECT" Then Command1.BackColor = &HC0& MSComm1.CommPort = Switch(Combo1.Text = "COM 1", 1, Combo1.Text = "COM 2", 2, Combo1.Text = "COM 3", 3, Combo1.Text = "COM 4", 4, Combo1.Text = "COM 5", 5) MSComm1.Settings = Combo2.Text + ",n,8,1" MSComm1.PortOpen = True Command1.Caption = "DISCONNECT" ElseIf Command1.Caption = "DISCONNECT" Then MSComm1.PortOpen = False Command1.Caption = "CONNECT" Command1.BackColor = vbGreen SVTH: Sơn 117 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương End If loi: If Err.Number = 8002 Then MsgBox "Vui long chon cong ket noi co tren may!" End If End Sub Private Sub Command2_Click() On Error GoTo loi MSComm1.Output = "2" Command2.BackColor = vbGreen loi: If Err.Number = 8018 Then MsgBox "Vui long nhan CONNECT!" End If End Sub Private Sub Command3_Click() On Error GoTo loi SVTH: Sơn 118 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương MSComm1.Output = "1" Command2.BackColor = &H8000& loi: If Err.Number = 8018 Then MsgBox "Vui long nhan CONNECT!" End If End Sub Private Sub Command4_Click() On Error GoTo loi MSComm1.Output = "4" Command4.BackColor = vbGreen loi: If Err.Number = 8018 Then MsgBox "Vui long nhan CONNECT!" End If End Sub Private Sub Command5_Click() SVTH: Sơn 119 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương On Error GoTo loi MSComm1.Output = "3" Command4.BackColor = &H8000& loi: If Err.Number = 8018 Then MsgBox "Vui long nhan CONNECT!" End If End Sub Private Sub Form_Load() Combo1.AddItem "COM 1" Combo1.AddItem "COM 2" Combo1.AddItem "COM 3" Combo1.AddItem "COM 4" Combo1.AddItem "COM 5" Command2.Caption = "ON 1" Command3.Caption = "OFF 1" Command4.Caption = "ON 2" Command5.Caption = "OFF 2" SVTH: Sơn 120 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Combo2.AddItem "4800" Combo2.AddItem "9600" Combo2.AddItem "14400" Combo2.AddItem "19200" With MSComm1 .InBufferSize = 1024 .InputLen = 0 .InputMode = comInputModeText .RThreshold = 1 .SThreshold = 0 End With End Sub Private Sub MSComm1_OnComm() Dim a As String a = MSComm1.Input Text1.Text = Val(a) End Sub SVTH: Sơn 121 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Private Sub Timer1_Timer() Label7.Caption = Now() ' lay thoi gian cua he thong End Sub SVTH: Sơn 122 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương PHỤ LỤC 2 Một số hình ảnh trong quá trình thực hiện đồ án Chuẩn bị nước ngâm mạch SVTH: Sơn 123 Ăn mòn đồng Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Mạch sau khi ăn mòn đồng Mạch sau khi khoan Mạch sau khi tẩy mực in Mạch giao tiếp máy tính SVTH: Sơn 124 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Mạch nguồn 3.3V Mạch nguồn Cảm biến siêu âm SRF05 5V SVTH: Sơn 125 Nguyễn Hoài Cơ điện tử – K53 Đồ án tốt nghiệp GVHD: Trịnh Tuấn Dương Mạch hiển thị LCD Mạch nhận tín hiệu cảm biến SRF05 Hình ảnh sản phẩm SVTH: Sơn 126 Nguyễn Hoài Cơ điện tử – K53