Đề tài Mạng cảm nhận không dây có các nút mạng sử dụng vi điều khiển CC1010

Tài liệu Đề tài Mạng cảm nhận không dây có các nút mạng sử dụng vi điều khiển CC1010: TÓM TẮT NỘI DUNG CỦA KHOÁ LUẬN TỐT NGHIỆP Trong khoá luận này tôi đã nghiên cứu vể một loại đầu đo ứng dụng công nghệ vi cảm biến tương tự, đó là dùng đầu đo áp suất để đo độ sâu của nước. Từ các đặc trưng cơ bản của các bộ cảm biến nói chung cũng như của cảm biến áp suất nói riêng, bản luận văn này đã đưa ra cấu trúc cùng nguyên lý hoạt động của đầu đo áp suất - mức nước. Đó là một loại đầu đo thuộc loại cảm biến tương tự được chế tạo theo công nghệ vi cảm biến áp suất kiểu áp điện trở có độ nhạy và độ ổn định cao. Qua việc thực nghiệm đo điện thế lối ra của đầu đo khi tăng hoặc giảm độ sâu của nước tôi đã rút ra được một số đặc trưng cơ bản của đầu đo là độ nhạy và độ tuyến tính. Đầu đo này sử dụng module XFPM-200KPG của hãng Fujiura - Nhật, có độ phân giải 1cm, độ nhạy của đầu đo cỡ 2mV/cm, đầu đo có thể đo được độ sâu của nước khoảng 600cm. Trong khoá luận này tôi cũng xin giới thiệu về một mạng cảm nhận không dây có các nút mạng sử dụng vi điều khiển CC1010 của hãng Chipcon – N...

doc83 trang | Chia sẻ: hunglv | Lượt xem: 1267 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Mạng cảm nhận không dây có các nút mạng sử dụng vi điều khiển CC1010, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
TÓM TẮT NỘI DUNG CỦA KHOÁ LUẬN TỐT NGHIỆP Trong khoá luận này tôi đã nghiên cứu vể một loại đầu đo ứng dụng công nghệ vi cảm biến tương tự, đó là dùng đầu đo áp suất để đo độ sâu của nước. Từ các đặc trưng cơ bản của các bộ cảm biến nói chung cũng như của cảm biến áp suất nói riêng, bản luận văn này đã đưa ra cấu trúc cùng nguyên lý hoạt động của đầu đo áp suất - mức nước. Đó là một loại đầu đo thuộc loại cảm biến tương tự được chế tạo theo công nghệ vi cảm biến áp suất kiểu áp điện trở có độ nhạy và độ ổn định cao. Qua việc thực nghiệm đo điện thế lối ra của đầu đo khi tăng hoặc giảm độ sâu của nước tôi đã rút ra được một số đặc trưng cơ bản của đầu đo là độ nhạy và độ tuyến tính. Đầu đo này sử dụng module XFPM-200KPG của hãng Fujiura - Nhật, có độ phân giải 1cm, độ nhạy của đầu đo cỡ 2mV/cm, đầu đo có thể đo được độ sâu của nước khoảng 600cm. Trong khoá luận này tôi cũng xin giới thiệu về một mạng cảm nhận không dây có các nút mạng sử dụng vi điều khiển CC1010 của hãng Chipcon – Nauy. Từ việc nghiên cứu các đặc tính của mạng, của nút mạng cảm nhận, chúng tôi đã xây dựng các bước để ghép nối đầu đo áp suất với nút mạng đồng thời xây dựng một chương trình nhúng truyền nhận không dây qua nút mạng cơ sở và tiến hành thực nghiệm việc truyền nhận này qua một số nút mạng. MỤC LỤC MỞ ĐẦU Trong số các ngành công nghiệp khác nhau các cảm biến áp suất được ứng dụng nhiều nhất trong nhiều lĩnh vực. Đó là vì trong các thiết bị cung cấp năng lượng thuỷ lực, nhiệt, hạt nhân … cần phải đo và theo dõi áp suất một cách liên tục. Nếu áp suất vượt ngưỡng cho phép sẽ gây nhiều hậu quả nghiêm trọng đến cơ sở vật chất và tính mạng con người. Chính vì vậy, cảm biến áp suất là rất quan trọng trong đời sống. Trong y tế cũng có rất nhiều ứng dụng của cảm biến áp suất như dùng để đo huyết áp, nhịp tim và đo nồng độ máu từ xa. Trong khoá luận này chúng ta sẽ khảo sát một số đặc tính của một cảm biến áp suất dùng để đo độ sâu của nước. Đây là loại cảm biến có rất nhiều ứng dụng và ý nghĩa trong khoa học cũng như trong thực tế, chúng có thể dùng để đo liên tục suốt ngày đêm và trong tự động hoá thì ngày càng có lợi. Đặc biệt ứng dụng trong theo dõi diễn biến môi trường, thời tiết, ứng dụng trong thu thập thông tin và cảnh báo,… thì việc theo dõi được một cách liên tục sẽ rất có lợi, phục vụ đắc lực cho con người. Cùng với sự phát triển của khoa học công nghệ, ngày nay có rất nhiều loại đầu đo áp suất ra đời với những ưu thế vượt trội, ngày càng đáp ứng nhu cầu sử dụng của đời sống. Các loại đầu đo này đạt được độ chính xác càng cao càng tốt, cỡ centimet (cm), decimet (dm), thậm chí lên đến hang chục centimet, và chúng có độ tuyến tính trên một dải rộng. Để thu thập và xử lý các thông tin từ đầu đo áp suất thì cần phải kết nối đầu đo với một số thiết bị khác có thể truyền/nhận, xử lý, tính toán các dữ liệu thông tin đó để phục vụ cho những mục đích khác nhau của con người. Một trong các thiết bị đó là mạng cảm nhận không dây (Wireless Sensor Network, viết tắt là WSN). Một đặc điểm nổi bật của mạng cảm nhận không dây là sự kết hợp việc cảm nhận, tính toán và truyền thông vào một thiết bị nhỏ. Thông qua mạng hình lưới, những thiết bị này tạo ra một sự kết nối rộng lớn trong thế giới vật lý. Trong khi khả năng của từng thiết bị là rất nhỏ, sự kết hợp hang trăm thiết bị như vậy yêu cầu phải có công nghệ mới. Thế mạnh của WSN là khả năng triển khai một số lượng lớn các thiết bị nhỏ có thể tự thiết lập cấu hình hệ thống. Sử dụng những thiết bị này để theo dõi theo thời gian thực, để giám sát điều kiện môi trường, để theo dõi cấu trúc hoặc hình dạng thiết bị. Hầu hết những ứng dụng của WSN là giám sát môi trường từ xa với tần số lấy dữ liệu thấp.Chẳng hạn, có thể dễ dàng giám sát sự rò rỉ của một nhà máy hóa chất bời hang trăm cảm biến tự động kết nối thành hệ thống mạng không dây để ngay lập tức phát hiện và thông báo có sự rò rỉ. Không giống những hệ thống có dây truyền thống, chi phí triển khai cho WSN được giảm thiểu. Thay vì hang ngàn mét dây dẫn thông qua các ống dẫn bảo vệ, người lắp đặt chỉ việc đơn giản là đặt thiết bị nhỏ gọn vào nơi cần thiết. Mạng có thể được mở rộng chỉ bằng cách đơn giản là thêm các thiết bị, không cần các thao tác phức tạp như trong hệ thống mạng có dây. Hệ thống cũng có khả năng hoạt động trong vài năm chỉ với một nguồn pin duy nhất. Nhìn chung, khi nói đến mạng không dây thì người ta thương sẽ nghĩ đến các thiết bị di động, PDA hay laptop. Đó là những thiết bị có giá thành cao, được ứng dụng theo một mục đích cho trước, và dựa trên cơ sở hạ tầng đã có sẵn. Ngược lại, mạng cảm nhận không dây lại sử dụng các thiết bị nhúng nhỏ, giá thành thấp cho các ứng dụng đa dạng và không dựa trên bất kì cơ sở hạ tầng nào đã sẵn có từ trước. Không giống các thiết bị không dây truyền thống, các nút mạng WSN không cần truyền trực tiếp tới trạm gốc, mà chỉ cần truyền tới mạng gần nó, rồi lần lượt truyền vể trạm gốc theo dạng truyền thông multihop. Một thách thức cơ bản của WSN là đưa các ràng buộc khắt khe vào chỉ trong một thiết bị đơn lẻ. Rất nhiều ràng buộc đối với các thiết bị được triển khai với số lượng lớn cần có kích thước nhỏ và giá thành thấp. Kích thước giảm là điều chủ yếu dẫn đến giá thành giảm cũng như khả năng cho phép được sử dụng trong một dải rộng các ứng dụng. Một khó khăn lớn của WSN là năng lượng tiêu thụ. Kích thước vật lý giảm thì cũng làm giảm năng lượng tiêu thụ, các ràng buộc về năng lượng sẽ tạo nên những giới hạn tính toán. Bản luận văn “Ghép nối đầu đo áp suất cho nút mạng cảm nhận không dây với phần mềm nhúng” sẽ giới thiệu về một loại vi cảm biến thuộc công nghệ MEMS là đầu đo áp suất - mức nước, khảo sát một số đặc trưng của đầu đo như độ nhạy, độ tuyến tính, khả năng làm việc… Đồng thời bản luận văn này cũng khái quát hoá về mạng cảm nhận không dây WSN và xây dựng một thử nghiệm mạng cảm nhận không dây dùng vi điều khiển CC1010 của hãng Chipcon – Nauy. Bản luận văn gồm 3 chương nội dung, phần mở đầu, phần kết luận, phần phụ lục và tài liệu tham khảo. Chương 1: Đầu đo áp suất - mức nước sẽ tổng quát về đầu đo, các đặc trưng cơ bản của cảm biến, đưa ra các phương pháp đo áp suất cùng các đặc trưng chính của đầu đo. Chương 2: Ghép nối đầu đo với nút mạng cảm nhận không dây. Chương này sẽ giới thiệu qua về mạng cảm nhận không dây và nút mạng cơ sở dùng vi điều khiển CC1010, đồng thời chỉ ra phương thức kết nối giữa đầu đo và nút mạng. Chương 3: Chương trình nhúng truyền/ nhận thông qua nút mạng cơ sở. Chương này giới thiệu về phần mềm nhúng, các bước xây dựng một phần mềm nhúng và chương trình nhúng cụ thể dùng để ghép nối đầu đo cảm biến cho nút mạng không dây cơ sở. Phần kết luận tổng kết những công việc đã thực hiện và những kết quả đã đạt được, đồng thời đề cập đến công việc và hướng nghiên cứu trong tương lai. Để hoàn thành được khoá luận này là nhờ sự hướng dẫn tận tình của PGS TS.Vương Đạo Vy, thuộc Khoa Điện tử - Viễn thông, trường Đại học Công nghệ, Đại học Quốc gia Hà Nội, người đã giúp đỡ tôi rất nhiều trong suốt quá trình thực hiện khoá luận. Tôi xin chân thành gửi tới thầy lời cảm ơn sâu sắc nhất. CHƯƠNG 1 ĐẦU ĐO ÁP SUẤT - MỨC NƯỚC 1.1. Giới thiệu về cảm biến. Đầu đo áp suất - mức nước là một loại vi cảm biến MEMS. Trước khi đi vào khảo sát các đặc tính của đầu đo này, tôi xin đưa ra một số đặc tính cơ bản của bộ cảm biến, từ đó sẽ hiểu được các đặc tính của đầu đo. 1.1.1. Khái niệm. Trong các hệ thống đo lường điều khiển, mọi quá trình đều được đặc trưng bởi các trạng thái như nhiệt độ, áp suất, tốc độ, momen… Các cảm biến trạng thái này thường là các đại lượng không điện. Để điều khiển các quá trình thì ta cần thu thập thông tin, đo đạc, theo dõi sự biến thiên của các biến trạng thái của quá trình. Các cảm biến thực hiện chức năng này chúng thu nhận, đáp ứng và kích thích, là “tai mắt” của các hợat động khoa học và công nghệ của con người. Các bộ cảm biến thường được định nghĩa theo nghĩa rộng là thiết bị cảm nhận và đáp ứng với các tín hiệu và kích thích. Hay như trong từ điển bách khoa toàn thư Việt Nam thì: cảm biến là dụng cụ có thể cảm nhận trị số tuyệt đối hoặc độ biến thiên của một đại lượng vật lý (ví dụ: nhiệt độ, áp suất tốc độ dòng chảy, độ pH, cường độ ánh sang, âm thanh hoặc sóng vô tuyến, vv…) và biến đổi thành một tín hiệu đầu vào hữu hiệu cho một hệ thống thu thầp và xử lý thông tin. Bộ cảm biến Trong mô tả mạch ta có thể coi bộ cảm biến như một mạng hai cửa, trong đó đầu vào là biến trạng thái cần đo x và cửa ra là đáp ứng y của bộ cảm biến với kích thích đầu vào x: x y kích thích đáp ứng Phương trình mô tả giữa đáp ứng y và kích thích x của bộ cảm biến có dạng: y = f(x) Trong các hệ thống đo lường - điều khiển hiện đại, quá trình thu thập và xử lý dữ liệu thường do máy tính đảm nhiệm. Quá trình (Các biến trạng thái) Cơ cấu chấp hành Bộ cảm biến Chương trình Bộ vi xử lý Hình 1.1 Hệ thống tự động điều khiển qúa trình Trong sơ đồ hình 1.1, quá trình (đối tượng) được đặc trưng bởi các biến trạng thái và được các bộ cảm biến thu nhận rồi đưa đến bộ xử lý. Đầu ra của bộ vi xử lý được phối ghép với cơ cấu chấp hành nhằm tác động lên quá trình. Đây là sơ đồ điều khiển tự động, trong đó bộ cảm biến đóng vai trò cảm nhận, đo đạc và đánh giá các thông số của hệ thống, bộ vi xử lý làm nhiệm vụ xử lý thông tin và đưa ra tín hiệu điều khiển quá trình. 1.1.2. Đặc trưng cơ bản của bộ cảm biến. 1.1.2.1. Hàm truyền. Gọi x là tín hiệu kích thích, y là đáp ứng của bộ cảm biến. Hàm truyền cho ta quan hệ giữa đáp ứng và kích thích. Hàm truyền có thể được biểu diễn dưới dạng tuyến tính, phi tuyến, logarit, hàm luỹ thừa hay hàm mũ. Quan hệ tuyến tính giữa đáp ứng và kích thích có dạng: y = ax + b trong đó: a là hằng số, a bằng tín hiệu ra khi tín hiệu vào bằng không. b là độ nhạy. y là một trong các đặc trưng của tín hiệu ra, y có thể là biên độ hoặc pha tuỳ theo tính chất của bộ cảm biến. Hàm truyền dạng logarit: y = 1 + blnx Dạng mũ: y = aekx Dạng luỹ thừa: y = a0 + a1xk với k là hằng số. Các bộ cảm biến phi tuyến không được đặc trưng bởi các ham truyền kể trên đây mà ta phải dùng đến các hàm gần đúng bậc cao. Đối với hàm truyền phi tuyến thì độ nhạy b được định nghĩa theo biểu thức: Trong một số trường hợp ta có thể làm gần đúng hàm truyền phi tuyến bằng phương pháp tuyến tính hoá từng đoạn. 1.1.2.2. Độ lớn của tín hiệu vào. Là giá trị lớn nhất của tín hiệu đặt vào bộ cảm biến mà sai số không vượt quá ngưỡng cho phép. 1.1.2.3. Sai số và độ chính xác. Cũng như các ứng dụng đo lường khác, ngoài đại lượng cần đo (cảm nhận) bộ cảm biến còn chịu nhiều tác động của bộ cảm biến gây nên sai số giữa giá trị đo được và giá trị của đại lượng cần đo. Gọi ∆x là độ lệch tuyệt đối giữa giá trị đo được và giá trị thực x, sai số tương đối của bộ cảm biến được tính theo công thức: Δ% = Có hai loại sai số thường dùng là: sai số hệ thống và sai số ngẫu nhiên: Sai số hệ thống là sai số không phụ thuộc vào số lần đo, có giá trị không đổi hoặc thay đổi rất chậm theo thời gian đo và thêm vào một độ lệch không đổi giữa giá trị thực và giá trị đo được. Sai số này thường do sự thiếu hiểu biết về hệ đo hoặc do điều kiện sử dụng không tốt. Sai số ngẫu nhiên là sai số xuất hiện thay đổi theo số lần đo, có độ lớn và chiều không xác định. 1.1.3. Một số điều về cảm biến nối tiếp và cách ghép nối. Nhìn chung, cảm biến là một thiết bị được thiết kế thu thập thông tin về một đối tượng và chuyển đổi thành tín hiệu điện. Một cảm biến cổ điển có thể bao gồm 4 khối như hình 1.2: Thành phần cảm nhận Xử lý tín hiệu Chuyển đổi A/D Bus giao tiếp Máy tính Hình 1.2. Cảm biến tích hợp Khối đầu tiên là khối cảm nhận (ví dụ: điện trở, điện dung, bán dẫn, vật liệu áp điện, photodiot, cầu điện trở, …). Tín hiệu từ khối này thường bị nhiễu, do có cần có các kĩ thuật xử lý tín hiệu như khuếch đại, tuyến tính hoá, bù và lọc để giảm thiểu những tác động của nhiễu. Trong trường hợp thu thập dữ liệu, tín hiệu từ cảm biến có dạng nối tiếp hay song song. Chức năng này có thể nhận ra bởi bộ biến đổi tương tự - số hoặc tần số - số. Khối bus giao tiếp nối tất cả các dữ liệu nguồn với các nơi nhận, hệ thống bus điều khiển tất cả các dữ liệu truyền và được nối với một giao tiếp phù hợp mà cảm biến có thể gửi dữ liệu tới máy tính. Sơ đồ giao tiếp giữa cảm biến với vi điều khiển được thể hiện ở hình 1.3: Vi điều khiển Cảm biến GND Vcc DATA SCK Hình 1.3. Sơ đồ giao tiếp điển hình giữa vi điều khiển và cảm biến nối tiếp Có hai loại cảm biến cơ bản là cảm biến tương tự và cảm biến số. Cảm biến tương tự thường đưa tín hiệu tương tự dạng dòng điện hay điện áp về vi điều khiển, sau đó vi điều khiển phải thực hiện việc chuyển đổi tương tự - số rồi mới đọc dữ liệu. Tín hiệu từ cảm biến truyền đi là tín hiệu tương tự rất dễ bị ảnh hưởng bởi nhiễu. Cảm biến số ngay bản thân nó đã thực hiện việc chuyển đổi tương tự - số rồi đưa giá trị đã chuyển đổi về vi điều khiển dưới dạng các xung thể hiện giá trị của cảm biến, Như vậy cảm biến số có ưu thế hơn cảm biến tương tự ở chỗ cảm biến số có khả năng chống nhiễu tốt hơn do nó sử dụng đường truyền số nên rất khó bị ảnh hưởng bởi nhiễu lúc truyền dữ liệu. Tuy nhiên trong khoá luận này chúng tôi lại chọn thử nghiệm với một loại đầu đo là cảm biến tương tự để thấy được những đặc tính của đầu đo cũng như của cảm biến tương tự ngày nay vẫn được sử dụng và phục vụ rất hữu ích cho đời sống con người. 1.2. Các phương pháp đo áp suất. 1.2.1. Tồng quan về áp suất. Áp suất là đại lượng đặc trưng cho cường độ lực nén trung bình tác động theo phương vuông góc trên bề mặt vật thể, được xác định bằng tỉ số giữa lực phân bố đều và diện tích bề mặt bị tác động: P = Trong đó: P là áp suất. F là lực phân bố đều trên bề mặt diện tích S Đơn vị của l ực F là Newton (N), đơn vị của diện tích S là m2, trong hệ SI áp suất có đơn vị là N/m2. Đơn vị dẫn suất của áp suất là Pascal (Pa). 1Pa tương ứng với áp suất đồng dạng do lực 1N tác dụng lên bề mặt phẳng có diện tích bằng 1m2 1Pa = 1N/m2 Áp suất 1Pa tương đối nhỏ, trong công nghiệp người ta thường dùng đơn vị áp suất là bar (1bar = 105Pa). Một đơn vị cũng hay được dùng trong y tế là mmHg hay torr. Mối quan hệ tương đối giữa các đơn vị đo áp suất hay được sử dụng cho trong bảng 1.1. Đơn vị đo áp suất Pascal (Pa) bar(b) g/cm2 Atmosphe mmHg mbar 1 pascal 1 10-5 1,02.10-5 0,9869.10-5 0,75. 10-2 10-2 1 bar 105 1 1,02 0,9869 750 1000 1kg/cm2 98.103 0,980 1 0,986 735 980 1 atmosphe 101325 1,013 1,033 1 760 1013 1g/cm2 98 98.10-5 1.10-3 0,968.10-3 0,735 0,98 1mmHg 133,3 13,33.10-4 1,36.10-3 1,315.10-3 1 1,333 1mbar 100 1.10-3 1,02.10-3 0,9869.10-3 0,750 1 Bảng 1.1: Mối quan hệ giữa các đơn vị đo áp suất. 1.2.2. Nguyên tắc và các phương pháp đo áp suất. Có rất nhiều phương pháp đo áp suất. Một phương pháp cổ điển là dùng áp suất kế Torricielli (hình 1.4). Áp suất kế Torricielli là một ống thuỷ tinh bịt kín, đầu phía trên được úp xuống một bể đựng thuỷ ngân (Hg). Khi đó, áp suất tác dụng lên bề mặt thuỷ ngân trong bể bằng độ lớn cột thuỷ ngân trong ống. Đơn vị đo áp suất sử dụng áp suất kế là mmHg. Hình 1.4: Áp suất kế torricelli Ngày nay, với nhiều công nghệ khác nhau, rất nhiều loại cảm biến áp suất ra đời. Để đo áp suất, người ta đo lực F tác dụng lên diện tích S của một thành bình phân chia hai môi trường, trong đó một môi trường chứa chất lưu là đối tượng cần đo áp suất. Cách đo này có thể chia làm ba trường hợp chính sau: Đo áp suất lấy qua một lỗ có diện tích hình tròn được khoan trên thành bình. Đo trực tiếp sự biến dạng của thành bình do áp suất gây nên. Đo bằng một cảm biến áp suất để chuyển tín hiệu đầu vào là áp suất thành tín hiệu đầu ra chứa thông tin liên quan đến giá trị của áp suất cần đo và sự thay đổi của nó theo thời gian, Cách đo thứ nhất phải sử dụng một cảm biến đặt ngay gần sát thành bình, sai số của phép đo sẽ nhỏ với điều kiện là thể tích chết của kênh dẫn và cảm biến phải không đáng kể so với thể tích tổng cộng của chất lưu cần đo áp suất. Trường hợp thứ hai người ta gắn lên thành bình các cảm biến đo ứng suất để đo biến dạng của thành bình, biến dạng này là một hàm của áp suất. Cách thứ ba đo bằng cảm biến áp suất với các vật trung gian thường là các phần tử đo lực có một thông số. Thông số này có khả năng thay đổi dưới tác dụng của lực F = P.S, phổ biến nhất là sử dụng màng. Màng (diaphrahm) là một tấm mỏng, thường là chất bán dẫn, có khả năng bị biến dạng khi có áp suất đặt lên. Khi áp suất bên ngoài tác dụng lên màng, tuỳ thuộc vào sự chênh lệch áp suất cần đo và áp suất chuẩn so sánh mà màng bị biến dạng. Độ biến dạng của màng phụ thuộc vào độ lớn của áp suất tác dụng vào. Cảm biến áp suất kiểu màng có một số cấu trúc như sau: Hình 1.5: Các loại cảm biến áp suất kiểu màng. Cảm biến áp suất tuyệt đối. Cảm biến áp suất tương đối. Cảm biến áp suất vi sai. Người ta có thể biến đổi độ biến dạng của màng mỏng thành các tín hiệu điện thông qua sự biến thiên độ tự cảm, biến thiên điện dung sử dụng hiệu ứng áp điện, dao động cơ điện, dùng phương pháp quang điện, phương pháp transistor áp điện … Trong công nghệ MEMS có hai phương pháp được sử dụng rộng rãi là cảm biến kiểu tụ điện và cảm biến kiểu áp trở. Trong khoá luận này chúng tôi sử dụng đầu đo áp suất thuộc loại vi cảm biến kiểu áp trở. Để đi vào khảo sát các đặc tính của đầu đo này chúng ta cùng tìm hiểu nguyên lý hoạt động cũng như phương pháp chế tạo vi cảm biến áp suất kiểu màng hiệu ứng áp điện trở: Hình 1.7: Cấu trúc cảm biến kiểu áp trở Nguyên lý làm việc chung của các vi cảm biến kiểu áp trở là dựa trên sự thay đổi của cấu trúc màng hay cấu trúc dầm (gọi chung là các phần tử nhạy cơ) được chuyển thành tín hiệu điện tương ứng nhờ các áp điện trở được cấy trên phần tử nhạy cơ. Khi phần tử nhạy cơ bị uốn cong thì các áp điện trở cũng thay đổi giá trị. Độ nhạy cũng như vùng làm việc tuyến tính của vi cảm biến phụ thuộc rất nhiều vào kích thước cấu trúc cơ, dạng và kích thước các áp điện trở, vị trí của các áp điện trở trên phần tử nhạy cơ. Cấu trúc của cảm biến áp suất được chỉ ra trong hình 1.7. Cảm biến được chế tạo trên một phiến (đế) Silic loại n có định hướng bề mặt là {100}, bằng phương pháp ăn mòn điện hoá tạo ra một màng silicon với kích thước và bề dày thay đổi được, màng này rất nhạy với các tín hiệu áp suất. Sau đó bốn điện trở được đặt lên màng silicon tại trung điểm của các cạnh hình vuông bằng phương pháp khuếch tán Boron từ nguồn nạp hoặc bằng phương pháp cấy ion tạo thành cầu Wheatstone. Các điện trở này được đặt một cách chính xác, trong đó hai điện trở được đặt song song với cạnh màng, hai điện trở còn lại được đặt vuông góc với cạnh màng, các cạnh màng có định hướng là {110}. Nguyên lý hoạt động của cảm biến: khi không có áp suất đặt lên màng, cầu điện trở ở trạng thái cân bằng, điện thế lối ra bằng không. Khi có áp suất đặt lên, màng mỏng sẽ bị biến dạng, áp lực phân bố trên màng bị thay đổi dẫn tới các giá trị của các điện trở trong mạch cầu bị thay đổi do hiệu ứng áp điện trở, cụ thể là nếu các điện trở song song với cạnh màng có giá trị giảm đi thì các điện trở vuông góc với cạnh màng sẽ tăng giá trị và ngược lại. Kết quả là cầu sẽ bị mất cân bằng và điện áp lối ra là khác không. Sự thay đổi giá trị điện trở phụ thuộc vào độ biến dạng của màng, tức phụ thuộc vào áp suất, do đó độ lớn của tín hiệu lối ra cũng phụ thuộc vào áp suất. Bằng cách đo điện thế lối ra ta có thể đo được độ lớn tương ứng của áp suất đặt lên màng. Sau đây chúng tôi xin giới thiêu một đầu đo áp suất sử dụng vi cảm biến kiểu áp điện trở có nguyên lý hoạt động cũng như cấu trúc đã nêu ở trên. Sơ đồ đầu đo thường có dạng như hình 1.8. Hình 1.8: Sơ đồ đâu đo áp suất. 1.2.3. Đầu đo áp suất - mức nước. Để đo được độ sâu của nước có rất nhiều cách khác nhau. Trong khoá luận này chúng tôi sử dụng đầu đo áp suất để đo, bởi cảm biến áp suất là một trong những loại cảm biến thường dùng nhất trong công nghiệp. Ưu điểm lớn nhất của cảm biến áp suất vi cơ điện tử là độ nhạy. Cụ thể, đối với dải điện áp thấp, độ nhạy của cảm biến áp suất thay đổi trong khoảng từ 0.1 đến 3mV/mbar (hay 10 đến 300 mV/Pa) phụ thuộc hình dạng của màng và cường độ dòng điện; trong dải áp suất từ vài trăm mbar đến hang trăm bar, độ nhạy thay đổi từ 0.3 đến 12.5mV/bar. Một ưu điểm nữa đó là kích thước của cảm biến này do chế tạo theo công nghệ MEMS nên rất nhỏ, thuận tiện sử dụng trong mọi thiết bị. Phần tử cảm biến trong đầu đo là loại cảm biến áp điện trở có độ nhạy và độ ổn định cao. Tín hiệu ra của cảm biến rất nhỏ nên được khuếch đại ngay khi ra khỏi cảm biến. Ngoài ra, do khoảng cách giữa trạm đo và đầu đo khá xa nên tín hiệu áp được chuyển sang tín hiệu dòng để tránh nhiễu và suy giảm tín hiệu. Cảm biến và mạch khuếch đại được bố trí bên trong một buồng kín bằng thép không gỉ, mặt tiếp xúc với nước của cảm biến được cách ly bằng một lớp lưới bằng thép không gỉ để tránh va chạm vào bề mặt cảm biến. Đầu đo loại này thường có dạng như hình 1.9. Hình 1.9: Đầu đo trước khi lắp ráp. Mô hình hoạt động của đầu đo: Hình 1.10: Mô hình hoạt động của đầu đo. Như vậy bên trong đầu đo vừa chứa áp trở, vừa chứa mạch khuếch đại và tín hiệu trước khi ra ngoài đầu đo đã được xử lý sơ bộ. Ngày nay có nhiều loại cảm biến áp suất dùng siêu âm, có độ tin cậy cao hơn, vì thiết bị đo bằng siêu âm để trên cao, không phải nhúng dưới nước nên bền hơn. Nhưng một nhược điểm của thiết bị đo siêu âm này là chùm tia có góc khoảng 8 độ nên dải đo càng lớn thì không gian nơi cần đo phải càng rộng để phạm vi chum tia siêu âm không được chạm vào vật cản. Đầu đo áp suất ở trên tuy có độ tin cậy không cao bằng thiết bị đo siêu âm nhưng lại có ưu điểm là nhỏ gọn và có thể dễ dàng đo độ sâu của nước tại những nơi có không gian hẹp. Module sensor áp suất có dạng như hình 1.11 Hình 1.11: Module sensor áp suất, trong đó: Vcc = +5V, dải áp suất từ 0 đến 200KPa chân 1 là GND, chân 2 là Vout, chân 3 là Vcc. Trong modul có sử dụng XFPM-200KPG của hãng Fujiura - Nhật với các đặc tính nổi bật sau: Điện áp nguồn làm việc: +5V. Dòng tiêu thụ nhỏ hơn 200mA. Dải nhiệt độ làm việc: -400C → 1250C. Tín hiệu lối ra của sensor bình thường có độ rộng 0.5V → 4.5V. Sensor có thể kết nối trực tiếp vời bộ chuyển đổi A/D hoặc có thể kết nối trực tiếp với Microprocessor xử lý tín hiệu số. Sơ đồ nguyên lý của đầu đo như hình 1.12. Hình 1.12: Sơ đồ nguyên lý của đầu đo. Trong đó, sơ đồ chân của XFPM: Hình 1.13: Sơ đồ chân của XFPM. Với: chân 1 và chân 6: nối đất GND. Chân 2: lối ra Vout. Chân 3: nguồn nuôi Vcc. Chân 4 và chân 5 là không kết nối, chúng hoàn toàn thả nổi, không nối với bất kì đường dây nào và không nối với nhau. Để hiểu rõ hơn vể XFPM bạn có thể xem thêm ở tài liệu tham khảo [7]. Nguyên lý hoạt động của XFPM thể hiện qua công thức: Vout = Vs × (P × α + β) ± (sai số áp suất × sai số theo nhiệt độ × α ×Vs) (1) Trong đó: Vs = 5.0V Điện thế lối ra Vout không hoàn toàn tỉ lệ với điện thế nguồn nuôi). P: áp suất lối vào, đơn vị kPa α, β: các hằng số: α = 0.0045 β = 0.04 Sai số áp suất = 5.0 (kPa) với loại XFPM-200KPG Sai số theo nhiệt độ thể hiện ở đồ thị sau: Hình 1.12: Đồ thị sai số theo nhiệt độ. Từ công thức (1) suy ra: Vout = 5.0 × (P × 0.0045 + 0.04) ± (5.0 × sai số theo nhiệt độ × 0.0045 × 5.0) Chẳng hạn ở nhiệt độ làm việc là 250C thì ta có: Vout = 5 × (P × 0.0045 + 0.04) ± (5 × 1 × 0.0045 × 5) = 5 × (P × 0.0045 + 0.04) ± 0.1125 Thiết bị đo áp suất dựa trên nguyên lý đo áp suất của nước tại một điểm cố định, quan hệ giữa áp suất và độ sâu của nước tại điểm đo là tuyến tính và phụ thuộc vào khối lượng riêng của nước. Độ sâu thực tế của nước được tính theo công thức: Trong đó: h: độ sâu thực tế của nước. h0: độ sâu tham chiếu ban đầu. p: áp suất của nước tương ứng độ cao h. p0: áp suất tham chiếu tương ứng với độ cao tham chiếu h0. ρ: khối lượng riêng của nước. g: gia tốc trọng trường. Như vậy, khi đo điện thế lối ra ta có thể tính được áp suất lối vào cũng như biết được độ sâu của nước tại thời điểm đo. Phần tiếp theo đây chúng ta sẽ tiến hành thử nghiệm khảo sát một số đặc trưng của đầu đo như độ nhạy và độ tuyến tính. 1.3. Khảo sát một số đặc trưng của đầu đo: độ nhạy, độ tuyến tính. 1.3.1. Dụng cụ thí nghiệm Bao gồm: Module sensor áp suất như đã giới thiệu ở trên. Ống nhựa chức nước hình trụ: đường kính 10cm, cao 150cm, một đầu bịt kín, một đầu để hở, thành ống có gắn thang chia độ để dễ theo dõi mực nước. Mạch khuếch đại ngoài sẽ được mô tả ở phần tiếp theo. Nguồn nuôi 3.5V. Đồng hồ đo thế. 1.3.2. Mục đích thí nghiệm. Các thí nghiệm sau đây nhằm mục đích khảo sát độ nhạy, độ tuyến tính, khả năng phân giải của đầu đo, để từ đó viết chương trình nhúng truyền, nhận và xử lý thông tin qua mạng cảm nhận không dây. 1.3.3. Đo điện thế lối ra của đầu đo khi giảm độ cao của cột nước. Mô hình thí nghiệm như sau: Hình 1.13: Sơ đồ thí nghiệm. Đổ đầy nước vào ống chứa nước hình trụ, thả đầu đo vào ống sao cho đầu đo vừa trạm đáy ống, để đầu đo cố định. Lối ra của đầu đo được nối trực tiếp vào đồng hồ đo điện thế (như hình 1.14). Hạ từng cm nước trong ống ta thu được giá trị điện áp lối ra tương ứng của đầu đo tại một số điểm chính như bảng 1.2. Mức nước (cm) 0 20 40 60 80 100 120 140 150 Điện thế ra (mV) 141 175 215 257 298 340 382 425 448 Bảng 1.2: Điện thế lối ra khi hạ dần mức nước. Từ các số liệu thu được ta có đồ thị thể hiện sự tuyến tính của điện thế ra theo mực nước: Hình 1.14: Đồ thị thể hiện thế ra theo mức nước khị hạ từng cm nước. Các số liệu đo cụ thể bạn có thể xem trong phần phụ lục 01. Từ đồ thị 1.15 ta thấy điện thế ra của đầu đo tỉ lệ rất tuyến tính với độ cao của cột nước, cụ thể là khi mực nước giảm thì điện thể lối ra cũng giảm và ngược lại. Độ nhạy của đầu đo chính là hệ số góc của đồ thị, được tính như sau: Gọi ε là độ nhạy của đầu đo thì ta có: ε = (V2 – V1)/(h2 – h1) Với V2 là điện thế ra khi mức nước là h2. V1 là điện thế ra khi mức nước là h1. Độ nhạy của đầu đo chính là sự thay đổi điện thế khi thay đổi một cm nước. Từ thực nghiệm ta có độ lệch điện thế khi thay đổi 1cm nước, hay độ nhạy của đầu đo là ε = 2.074 ± 0.314 (mV/cm) Như vậy, độ nhạy của đầu đo cỡ 2mV/cm, độ phân giải của đầu đo là 1cm, mặc dù ngay bên trong đầu đo đã bao gồm cả khuếch đại nhưng sự khuếch đại này chưa thể hiện được rõ đặc tính trên của đầu đo, do đó ta cần dùng thêm một bộ khuếch đại ngoài, và bởi vì tín hiệu ra của đầu đo được truyền qua mạng cảm nhận không dây qua các lối vào AD(0:2) của module ADC-10bit của nút mạng cơ sở, việc khuếch đại thêm tín hiệu một lần nữa sẽ làm cho độ phân giải của ADC được tốt hơn. Độ phân giải của ADC được tính bằng: Vin max – Vin min 210 Với Vin max, Vin min là các điện thế lối vào cực đại, cực tiểu tương ứng của ADC, cũng chính là lối ra cực đại, cực tiểu của đầu đo; n = 10. Độ phân giải này còn tuỳ thuộc vào tham chiếu ban đầu đặt cho lối vào ADC. Chẳng hạn: nếu lối vào ADC là 0V đến 1.25V thì độ phân giải là: (1250 – 0)/210 = 1.22 (mV) Nếu chọn tham chiếu ban đầu lối vào ADC là 0V đến 3.5V, tức là Vin max = Vcc = 3.5V, khi đó độ phân giải của ADC sẽ là: (3500 - 0)/210 = 3.42 (mV) Ta thấy rằng nếu chọn tham chiếu ADC là 1.25V thì độ phân giải ADC nhỏ hơn độ nhạy của đầu đo, có nghĩa là khi thay đổi 1cm nước thì chưa thể hiện được sự thay đổi thể của lối ra đầu đo. Do đó nên chọn tham chiếu cho ADC là 3.5V thì độ phân giải của ADC lớn hơn độ nhạy của đầu đo, sẽ thể hiện được tốt hơn sự thay đổi thế lối ra của đầu đo khi thay đổi 1cm nước, đáp ứng được yêu cầu độ phân giải của đầu đo là 1cm. Bộ khuếch đại ngoài được dùng trong thực nghiệm là một bộ khuếch đại lặp không đảo, có sơ đồ nguyên lý như hình 1.16. Trong sơ đồ ta có: R1 = 5.52 kΩ R2 = 10.11kΩ Suy ra hệ số khuếch đại của mạch là: A = (1 + R2/R1) ≈ 2.83 Các chân lối vào và ra của bộ khuếch đại: Lối vào: Chân 1 và 7: đất GND. Chân 6: tín hiệu lối vào IN Chân 5 và 9: nguồn Vcc Lối ra: Chân 1 và 2: đất GND. Chân 4: lối ra của bộ khuếch đại OUT. Chân 5: nguồn Vcc Hình 1.15: Sơ đồ nguyên lý của mạch khuếch đại ngoài. Khả năng phân giải của ADC có liên quan đến độ sâu cực đại mà đầu đo có thể đo được. Cụ thể, nếu chọnt ham chiếu lối vào cho ADC là 3.5V, theo trên mạch khuếch đại ngoài có hệ số khuếch đại là 2.83, thì điện thế lối ra cực đại của đầu đo là: 3.5 / 2.83 = 1.24 (V) = 1240 (mV) Độ sâu tối đa của nước mà đầu đo có thể đo được là: 1240(mV) / 2.074(mV/cm) = 598 (cm) Như vậy ta có sơ đồ kết nối như hình 1.17. Hình 1.16: Sơ đồ kết nối giữa đầu đo, bộ khuếch đại và ADC. Sau khi mắc thêm bộ khuếch đại ngoài, tiến hành đo thực nghiệm hạ từng cm nước xuống và đo điện thế tại lối ra của mạch khuếch đại ta thu được kết quả tại một số điểm như bảng 1.3: Mức nước (cm) 0 20 40 60 80 100 120 140 Điện thế ra (mV) 425 503 609 721 836 950 1069 1187 Bảng 1.3: Điện thế lối ra của bộ khuếch đại khi hạ dần mức nước. Các số liệu cụ thể xem ở phần phụ lục 02. Từ các kết quả đó ta có đồ thị hình 1.18: Hình 1.17: Điện thế lối ra của bộ khuếch đại khi hạ dần mức nước. Sự thay đổi điện thế khi hạ dần mức nước là 5.479 mV/cm. Ta thấy rằng khi không dùng mạch khuếch đại ngoài thì độ nhạy của đầu đo là 2.074 mV/cm, dùng thêm bộ khuếch đại thì độ nhạy tăng lên 5.479 mV/cm (tức tăng 2.61 lần). Điều này giúp cho việc đo đạc được dễ dàng hơn và đã thể hiện được rõ khả năng phân giải 1cm của đầu đo, đồng thời ta cũng thấy được điện thế ra rất tuyến tính so với độ sâu của nước tại dải đo. 1.3.4. Đo điện thế lối ra của đầu đo khi tăng độ cao của cột nước. Ở trên ta đo và thấy được độ tuyến tính cũng như độ phân giải của đầu đo khi giảm dần mức nước. Phần này chúng ta sẽ khảo sát xem các đặc tính ấy của đầu đo có còn không khi mực nước tăng dần lên. Mô hình thí nghiêm được bố trí như hình 1.19. Hình 1.18: Sơ đồ thí nghiệm. Lối ra của đầu đo được đưa vào bộ khuếch đại như đã giới thiệu ở trên, lối ra của bộ khuếch đại được nối với đồng hồ số để đo điện thế. Ban đầu trong ống nhựa không chứa nước, đầu đo đặt sát xuống đáy ống và giữ cố định ở đó. Đổ dần nước vào ống, quan sát sự thay đổi điện thế trên đồng hồ đo thế khi tăng dần mức nước ta nhận được kết quả như trong bảng 1.4: Mức nước (cm) 0 20 40 60 80 100 120 140 150 Điện thế ra (mV) 408 494 594 706 817 934 1048 1160 1219 Bảng 1.4: Điện thế lối ra khi tăng dần mức nước. Số liệu cụ thể các bạn xem thêm phần phụ lục 03. Hình 1.19: Đồ thị thể hiện điện thế lối ra khi tăng dần mức nước. Điện thế lối ra vẫn thay đổi tuyến tính theo mực nước, độ phân giải của đầu đo là 1cm. Sự thay đổi điện thế trung bình khi tăng từng cm nước là 5.613 mV/cm. 1.3.5. Kết luận. Như vậy đầu đo áp suất chúng tôi sử dụng có độ tuyến tính tốt với độ phân giải của đầu đo là 1cm, độ nhạy cỡ 2mV/cm khi không dùng thêm bộ khuếch đại ngoài. Đồ thị so sánh điện thế lối ra khi dùng thêm bộ khuếch đại ngoài khi tăng và giảm độ cao của cột nước như hình 1.21. Hình 1.20: Đồ thị so sánh điện thế ra của bộ khuếch đại khi tăng và giảm mức nước. Ta thấy hai đường điện thế khi tăng và giảm mức nước gần sát nhau, lệch nhau không đáng kể. Sự chênh lệch này là đo sai số trong khi đo đạc. Sở dĩ chúng tôi tiến hành đo thực nghiệm với cả khi tăng và hạ mực nước xuống vì khi áp dụng trong thực tế đo độ sâu của nước tại một nơi nào đó thì không phải khi nào nước cũng chỉ lên hoặc chỉ xuống mà độ sâu ấy thăng giáng liên tục theo thời gian. Do vậy, yêu cầu phải có đầu đo ổn định cả khi nước lên hay xuống. Đầu đo chúng tôi sử dụng đáp ứng được yêu cầu đó. Tín hiệu từ đầu đo cần được truyền đi và xử lý. Trong khoá luận này chúng tôi thực hiện việc truyền/nhận qua mạng cảm nhận không dây. Việc ghép nối đầu đo với nút mạng này sẽ được giới thiệu cụ thể ở chương tiếp theo. CHƯƠNG 2 GHÉP NỐI ĐẦU ĐO VỚI NÚT MẠNG CẢM NHẬN KHÔNG DÂY WSN. 2.1. Giới thiệu mạng cảm nhận không dây. Mạng cảm nhận không dây được dịch từ tên tiếng Anh là Wireless Sensor Network, viết tắt là WSN. Khái niệm mạng cảm nhận không dây dựa trên công thức đơn giản sau: Cảm nhận + CPU + Radio = WSN Công thức này ta có thể hiểu là mạng cảm nhận không dây là sự kết hợp của các cảm biến, radios và CPU. Tuy nhiên việc kết hợp các thành phần này vào một mạng cảm nhận không dây đòi hỏi sự hiểu biết chi tiết về khả năng và giới hạn của của các thành phần phần cứng, cũng như hiểu rõ các công nghệ mạng hiện đại, lý thuyết phân bố hệ thống. Một thách thức đặt ra là phải ánh xạ toàn bộ yêu cầu hệ thống vào một thiết bị riêng lẻ. Để làm cho WSN trở nên thực tế, một kiến trúc cần được phát triển nhằm tổng hợp các ứng dụng dựa trên khả năng của phần cứng. Để phát triển kiến trúc hệ thống cần đi từ yêu cầu ứng dụng mức cao xuống các yêu cầu phần cứng mức thấp, và ta chỉ cần tập trung vào một số các ứng dụng được sử dụng nhiều trong thực tế. Từ các ứng dụng này để tìm ra các yêu cầu mức hệ thống cho toàn bộ kiến trúc. Và từ các yêu cầu hệ thống này có thể có các yêu cầu cho các nút mang riêng lẻ. Sau đây tôi xin đưa ra một số ứng dụng của WSN. 2.1.1. Các ứng dụng của mạng cảm nhận. Hầu hết các ứng dụng của mạng cảm nhận không dây WSN đều thuộc một trong ba ứng dụng sau: Thu thập dữ liệu môi trường. Giám sát an ninh. Theo dõi đối tượng. Thu thập dữ liệu môi trường. WSN thu thập dữ liệu môi trường ra đời đáp ứng cho nhu cầu thu thập thông tin tại một tập hợp các điểm xác định trong một khoảng thời gian nhất định nhằm phát hiện xu hướng hoặc quy luật vận động của môi trường. Bài toán này được đặc trưng bời một số lớn các nút mạng, thường xuyên cung cấp thông số môi trường gửi về một hoặc một tập các trạm gốc có kết nối với trung tâm xử lý (thường là hệ thống máy tính) phân tích, xử lý, đưa ra các phương án phù hợp hoặc cảnh báo, hay đơn thuần chỉ là lưu trữ số liệu. Yêu cầu đặt ra đối với mạng kiểu này là thời gian sống phải dài, từ vài tháng đến vài năm, và các nút mạng phải tiêu thụ năng lượng ít. Phần mềm nhúng phải được thiết kế và lập trình sao cho phù hợp nhất với bài toán truyền thông số đo được như nhiệt độ, áp suất, độ ẩm, ánh sang… Phần mềm phải tương thích với phần cứng để hệ có khả năng hoạt động ổn định theo thời gian. Giám sát an ninh: Ứng dụng thứ hai của WSN là giám sát an ninh. Mạng này được tạo bởi các nút đặt ở những vị trí cố định trong môi trường liên tục theo dõi một hay nhiều cảm biến để nhận biết sự bất thường. Sự khác nhau chủ yếu giữa giám sát an ninh và giám sát môi trường là các mạng an ninh không thu thập bất kì dữ liệu nào. Điều này có tác động lớn đến việc tối ưu kiến trúc mạng, việc truyền tức thời và tin cậy của thông điệp cảnh báo là yêu cầu chính của hệ thống. Trong các mạng an ninh, phần lớn năng lượng tiêu thụ dành cho việc xác nhận chức năng của các nút láng giềng và chuẩn bị chuyển tiếp thông báo cảnh báo. Việc truyền dữ liệu hiện thời sẽ tốn một phần năng lượng của mạng. Sự tiêu thụ năng lượng chủ yếu là gặp các yêu cầu báo hiệu cảnh báo khi có sự vi phạm an ninh và sự vi phạm này cần chuyển tới trạm gốc ngay lập tức. Độ trễ của việc truyền dữ liệu tới trạm gốc làm ảnh hưởng nhất định tới hiệu quả của ứng dụng. Việc giảm thời gian trễ của sự truyền cảnh báo quan trọng hơn việc giảm chi phí năng lượng khi truyền. Điều này do các sự kiện cảnh báo rất ít xảy ra và mỗi khi có sự kiện xảy ra thì năng lượng chủ yếu được dùng cho việc truyền. Giảm độ trễ làm tăng năng lượng tiêu thụ vì các nút định tuyến phải giám sát các kênh radio thường xuyên hơn. Theo dõi đối tượng: Đối với các WSN, các đối tượng có thể được theo dõi đơn giản bằng việc gắn với chúng một nút cảm biến nhỏ. Nút này sẽ được theo dõi khi chúng đi qua một trường các nút cảm biến được triển khai tại những vị trí đã biết. Thay vì cảm nhận dữ liệu môi trường, những nút này sẽ cảm nhận các thông điệp RF của các nút gắn với các đối tượng. Chúng có thể được coi như những thẻ để thông báo sự có mặt của một thiết bị (đối tượng). Một cơ sở dữ liệu ghi lại vị trí tương đối của đối tượng đối với các nút mạng, do đó có thể biết được vị trí hiện thời của đối tượng. Trong khoá luận này chúng tôi sử dụng ứng dụng thứ nhất của mạng cảm nhận không dây là thu thập dữ liệu môi trường, thông tin cần thu thập chính là độ sâu của nước. Thông tin được đưa về trung tâm xử lý để tại đây phân tích, xử lý, đưa ra các phương án phù hợp hoặc cảnh báo về độ sâu của nước tại địa điểm cần đo. 2.1.2. Các chỉ tiêu hệ thống. Sau đây là các chỉ tiêu để đánh giá một WSN. Các chỉ tiêu chủ yếu là thời gian sống, độ bao phủ, chi phí và dễ triển khai, thời gian trả lời, độ chính xác thời gian và tốc độ lấy mẫu hiệu quả. Các chỉ tiêu này liên quan với nhau, thông thường khi tăng tham số này lên thì đồng thời cũng làm giảm tham số kia. Thời gian sống là giới hạn của mạng cảm nhận không dây. Hai ứng dụng thu thập dữ liệu môi trường và giám sát an ninh các nút mạng đều được đặt ngoài môi trường, không có người giám sát theo hàng tháng, thậm chí hàng năm. Khó khăn chủ yếu của thời gian sống là năng lượng cung cấp cho nút mạng. Mỗi nút cần được thiết kế quản lý năng lượng cung cấp nội bộ để đảm bảo tối đa thời gian sống của nút mạng, trong một vài trường hợp có thể sử dụng nguồn năng lượng ngoài nhưng điều này lại mâu thuẫn với ưu điểm chính của mạng không dây là tính linh hoạt dễ triển khai. Do đó một giải pháp thoả hiệp là có một nhóm các nút mạng đặc biệt được cấp nguồn ngoài và yêu cầu năng lượng tiêu thụ trung bình của các nút càng ít càng tốt. Độ bao phủ: đây cũng là một thông số để đánh giá cho nút mạng. Nó có thuận lợi là khả năng triển khai trên một vùng rộng lớn. Điều này làm tăng giá trị hệ thống đối với người dùng cuối. Điều quan trọng là độ bao phủ của mạng không được tương đương với khoảng cách kết nối không dây được sử dụng. Ràng buộc khoảng cách sẽ dẫn đến việc mở rộng một số lượng lớn các nút mạng. Giá trị chủ yếu của WSN là khả năng mở rộng, một người dùng có thể triển khai một mạng nhỏ ban đầu và sau đó tiếp tục thêm các nút. Việc tăng nút này lại làm ảnh hưởng đến thời gian sống, càng nhiều điểm cảm nhận thì càng có nhiều dữ liệu được truyền dẫn đến làm tăng năng lượng tiêu thụ của mạng. Chi phí và dễ triển khai: ưu điểm mấu chốt của WSN là dễ triển khai nên hệ thống cần phải tự cấu hình đối với sự lắp đặt nút vật lý. Tuy nhiên, các hệ thống thực thì các nút không thể có khoảng cách vô hạn. WSN cần có khả năng phản hồi, khả năng đánh giá chất lượng của việc triển khai mạng và chỉ rõ các vấn đề tiềm ẩn, có nghĩa là các nút mạng cần có khả năng tìm kết nối và xác định chất lượng kết nối. Bên cạnh đó, hệ thống cần có sự thích nghi đối với sự thay đổi điều kiện môi trường. Để mở rộng khả năng kiểm tra trước khi triển khai, hệ cảm nhận cần được xây dựng để có thể thực hiện việc tự bảo trì. Khi cần, nó có thể tạo ra các yêu cầu bảo trì ngoài. Thời gian đáp ứng: là một thông số quan trọng để đánh giá hệ thống. Các nút mạng cần có khả năng truyền tức thời các thông điệp qua mạng càng nhanh càng tốt. Thời gian đáp ứng cũng quan trọng khi điều khiển máy móc trong nhà máy, những hệ thống này chỉ thành hiện thực khi đảm bảo được thời gian đáp ứng. Khả năng có thời gian đáp ứng ngắn xung đột với các kĩ thuật làm tăng thời gian sống của mạng. Có thể cải thiện thời gian đáp ứng bằng cách cấp nguồn cho một số nút trong toàn bộ thời gian. Tuy nhiên, điều này lại làm giảm tính dễ triển khai của hệ thống. Độ chính xác về thời gian: trong ứng dụng theo dõi đối tượng và giám sát môi trường các mẫu từ nhiều nút có liên quan theo thời gian để xác định các hiện tượng khác thường được theo dõi. Tính chính xác của cơ chế tương quan phụ thuộc vào tốc độ lan truyền của hiện tượng được đo. Để đạt được độ chính xác theo thời gian, mạng cần được xây dựng và duy trì một thời gian cơ sở toàn cục có thể được sử dụng để sắp xếp các mẫu và các sự kiện theo thời gian. Tốc độ thu thập thông tin hiệu quả: đây là tham số đánh giá hiệu suất hệ thống. Đó là mẫu lấy được từ mỗi nút riêng lẻ và truyền về điểm thu thập trung tâm. Thông thường, các ứng dụng thu thập dữ liệu chỉ có tốc độ lấy mẫu là 1-2 mẫu trong một phút. 2.1.3. Các chỉ tiêu nút mạng. Phần này tôi xin đưa ra một số chỉ tiêu để đánh giá nút mạng trong WSN nhằm mục đích là qua các chỉ tiêu đánh giá đó có thể lựa chọn loại vi điều khiển thích hợp và cũng để xây dựng hệ thống hiệu quả. Năng lượng: để duy trì năng lượng hoạt động trong nhiều năm thì các nút mạng cần phải tiêu thụ năng lượng rất thấp. Điều này chỉ đạt được bằng cách kết hợp các thành phần cứng năng lượng thấp và chu trình hoạt động ngắn. Các thuật toán và các giao thức cần được phát triển để giảm hoạt động truyền nhận radio – có thể đạt được bằng cách sử dụng sự tính toán cục bộ để giảm luông dữ liệu nhận được từ cảm biến. Tính mềm dẻo: các nút mạng phải có khả năng thích nghi cao để thích hợp với các môi trường khác nhau. Một kiến trúc WSN cần phải đủ mềm dẻo để cung cấp một dải rộng các ứng dụng. Thêm vào đó, vì lý do chi phí mỗi thiết bị sẽ chỉ có phần cứng và phần mềm cho một ứng dụng cụ thể, kiến trúc phải đơn giản để kết hợp giữa phần cứng và phần mềm. Vì vậy những thiết bị này đòi hỏi tính modul tốc độ cao trong khi vẫn giữ được kết quả. Sức mạnh: modul hoá hệ thống là một công cụ mạnh để phát triển hệ thống. Bằng cách chia hệ thống thành các thành phần con độc lập, mỗi chức năng có thể được kiểm tra đầy đủ trước khi kết hợp chúng thành một ứng dụng hoàn chỉnh. Các thành phần hệ thống phải độc lập đến mức có thể giao tiếp chặt chẽ, để ngăn ngừa các tương tác không mong đợi, có khả năng hoạt động trong môi trường đã có các thiết bị không dây khác hoạt động một hay nhiều tần số. Khả năng tránh tắc nghẽn tần số là điều cốt yếu đảm bảo sự triển khai thành công. Bảo mật: các nút mạng riêng lẻ cần có khả năng thực hiện mã hoá phức tạp và thuật toán xác thực. Truyền dữ liệu không dây rất dễ bi chặn, chỉ có một cách bảo mật là mã hoá toàn bộ dữ liệu truyền, mỗi nút mạng cần tự bảo mật dữ liệu của chúng. Truyền thông: khi độ bao phủ của mạng không bị giới hạn bởi khoảng cách truyền của các nút riêng biệt, khoảng cách truyền có một ảnh hưởng quan trọng tới mật độ tối thiểu các nút có thể chấp nhận được. Tốc độ truyền cũng ảnh hưởng lớn đến hiệu suất của nút mạng. Tốc độ truyền tăng làm cho việc truyền mất ít thời gian hơn và đòi hỏi ít năng lượng hơn. Tuy nhiên, tăng tốc độ cũng thường làm tăng năng lượng tiêu thụ radio dẫn tới tăng hiệu suất hệ thống. Tổng thể, lợi ích của việc tăng tốc độ có thể được bù lại bởi các yếu tố khác. Tính toán: tập trung chủ yếu vào xử lý dữ liệu nội mạng và quản lý các giao thức truyền thông không dây mức thấp. Tốc độ truyền cao đòi hỏi việc tính toán nhanh hơn. Đồng bộ thời gian: các nút cần duy trì đồng bộ thời gian chính xác với các nút khác trong mạng để hỗ trợ tương quan thời gian đọc cảm biến và chu trình hoạt động ngắn của ứng dụng thu thập dữ liệu. Các nút cần ngủ và thức dậy cùng nhau để chúng có thể định kỳ truyền thông cho nhau. Các lỗi trong việc tính thời gian sẽ tạo nên sự hoạt động không hiệu quả dẫn đến tăng chu trình làm việc. Phụ thuộc vào điện áp, độ ẩm, nhiệt độ, thời gian dựa theo lao động sẽ không như nhau. Cần có cơ chế đồng bộ hoá cao để bù lại những sự không chính xác như vậy. Kích thước và chi phí: có ảnh hưởng đến sự dễ dàng và chi phí khi triển khai. Tổng chi phí vật tư và chi phí triển khai ban đầu là hai yếu tố chủ chốt dẫn đễn việc chấp nhận các công nghệ WSN. Kích thước vật ký cũng ảnh hưởng đến sự dễ dàng khi triển khai mạng. Các nút nhỏ có thể được đặt ở nhiều vị trí hơn và được sử dụng trong nhiều tình huống hơn. 2.2. Giới thiệu về nút mạng. 2.2.1. Một số vi điều khiển có thể làm nút mạng cảm nhận. Lựa chọn vi điều khiển (VĐK) là một vấn đề quan trọng. Việc chọn VĐK hợp lý sẽ làm rút ngắn quá trình xây dựng hệ thống, hệ thống hoạt động ổn định, tin cậy và đạt các chỉ tiêu đề ra. Một số tiêu chí quan trọng để chọn VĐK như sau: Tiêu thụ năng lượng thấp. Tích hợp ADC để có thể ghép nối với cảm biến tương tự. Bộ nhớ chương trình cũng như bộ nhớ dữ liệu có kích thước hợp lý. Kích thước vật lý nhỏ. Có công cụ phát triển giúp người phát triển xây dựng hệ thống dễ dàng và thuận tiện như: sử dụng ngôn ngữ cấp cao, có các thư viện hỗ trợ cho việc cảm nhận cũng như truyền nhận không dây, hỗ trợ gỡ lỗi … Giá thành rẻ. Hiện giờ có ba họ VĐK trên thị trường có thể thoả mãn các tiêu chí trên là: Họ VĐK MSP430 của Texas. Họ VĐK ATMEGA của Atmel. VĐK CC1010 của hãng Chipcon. Tuy nhiên, hai họ VĐK đầu tiên không có tích hợp truyền nhận không dây nên nếu sử dụng những VĐK như vậy phải có thêm mạch truyền nhận không dây bên ngoài, như thế làm cho quá trình xây dựng hệ thống sẽ phức tạp. VĐK CC1010 có tích hợp truyền nhận không dây nên được lựa chọn làm nút mạng là hợp lý hơn cả. 2.2.2. Giới thiệu về vi điều khiển CC1010. 2.2.2.1. Các đặc điểm chính. Thu phát không dây 300 – 1000 MHz. Dòng tiêu thụ rất thấp (9.1 mA trong chế độ nhận). Độ nhạy cao (-107 dBm). Có thể lập trình cho công suất đầu ra tới +10 dBm. Tốc độ truyền RF có thể đạt 76.8 Kbps. Cần thêm rất ít thành phần ngoài. Đo được cường độ RF (RSSI). Tương thích họ VĐK 8051. 32kB Flash, 2048 + 128Byte SRAM. 3 kênh ADC 10bít, 4 timers / 2PWMs, 2UARTs, RTC, watchdog, SPI, mã hoá DES, 26 cổng I/O. Có khả năng gỡ lỗi sử dụng chương trình dịch Keil uVision2 IDE qua cổng nối tiếp. Điện áp 2.7 – 3.6 V. 64-lead TQFP (Thin Quad Flat Pack). 2.2.2.2. Cổng. CC1010 có 4 cổng I/O là P0, P1, P2, P3 với 26 chân cổng. Mỗi cổng có hai thanh ghi tương ứng: thanh ghi cổng P0, P1, P2, P3 và các thanh ghi hướng P0DIR, P1DIR, P2DIR, P3DIR. Mỗi bít trong thanh ghi Px có một bít hướng tương ứng trong thanh ghi PxDIR.y. Đặt PxDIR.y = 1 sẽ làm cho Px.y là cổng nhận dữ liệu (input). Đặt PxDIR.y = 0 sẽ làm cho Px.y là cổng xuất dữ liệu (output). 2.2.2.3. Ngắt. CC1010 có tổng cộng 15 nguồn ngắt, chia sẻ 12 đường ngắt. Mỗi ngắt có một mức ưu tiên, vector ngắt, cờ cho phép ngắt và cờ báo ngắt. Các tham số cụ thể được chỉ rõ trong bảng 2.1. Ngắt Mức ưu tiên tự nhiên Điều khiển mức ưu tiên Vectơ ngắt Cờ cho phép ngắt Cờ ngắt Ngắt Flash/debug 0 - 0x33 EICON.PDIE EICON.PDIF Ngắt ngoài 0 1 IP.PX0 0x03 IE.EX0 TCON.IE0 Ngắt Timer 0 2 IP.PT0 0x0B IE.ET0 TCON.TF0 Ngắt ngoài 1 3 IP.PX1 0x13 IE.EX1 TCON.IE1 Ngắt Timer 1 4 IP.PT1 0x1B IE.ET1 TCON.TF1 Ngắt truyền nối tiếp 0 5 IP.PS0 0x23 IE.ES0 SCON0.TI 0 Ngắt nhận nối tiếp 0 SCON0.RI 0 Ngắt truyền nối tiếp 1 6 IP.PS1 0x3B IE.ES1 SCON1.TI 1 Ngắt nhận nối tiếp 1 SCON1.RI 1 Ngắt truyền/nhận RF 7 EIP.PRF 0x43 EIE.RFIE EXIF.RFIF Ngắt Timer 2 8 EIP.PT2 0x4B EIE.ET2 EXIF.TF2 Ngắt ADC 9 EIP.PAD 0x53 EIE.ADIE Và ADCON2. ADCIE EXIF.ADIF và ADCON2. ADCIF Ngắt mã hoá/giải mã DES EIE.ADIE và CRPCON. CRPIE EXIF.ADIF và CRPCON. CRPIF Ngắt Timer 3 10 EIP.PT3 0x5B EIE.ET3 EXIF.TF3 Ngắt thời gian thực 11 EIP.PRTC 0x63 EIE.RTCIE EICON.RTCIF Bảng 2.1: Các tham số ngắt Mặt nạ ngắt: IE.EA là cờ cho phép toàn bộ các ngắt, ngoại trừ ngắt Flash/Debug. Khi IE.EA được thiết lập, mỗi ngắt được che bởi cờ cho phép ngắt được liệt kê trong bảng 2.1. Khi cờ IE.EA bị xoá, tất cả các ngắt bị che, ngoại trừ ngắt Flash/Debug có bít che ngắt riêng EICON.FDIE. Xử lý ngắt: Khi một ngắt được cho phép xảy ra, CPU trỏ tới địa chỉ phục vụ ngắt tương ứng với ngắt đó (ISR) như đã chỉ ra trong bảng 2.1. CC1010 thực hiện ISR để hoàn thành ngắt trừ khi xảy ra một ngắt khác có mức ưu tiên cao hơn. Mỗi ISR kết thúc với lệnh RETI (return from interrupt). Sau khi thực hiện lệnh REIT, CC1010 quay trở lại lệnh tiếp theo sau lệnh đã được thực hiện trước khi xảy ra ngắt. Nếu lệnh đang thực hiện là RETI hay đang ghi vào các thanh ghi IP, IE, EIP, EIE, thì CC1010 hoàn thành thêm một lệnh trước khi phục vụ ngắt. Thứ tự ưu tiên: Các ngắt có hai giai đoạn ưu tiên: mức ngắt và mức tự nhiên. Mức ngắt được ưu tiên trước mức tự nhiên. Mức ngắt có hai mức: thấp và cao. Ngắt có mức ưu tiên cao có thể ngắt ngang chương trình phục vụ ngắt có mức ưu tiên thấp hơn. Nếu các ngắt có cùng mức ưu tiên mà cùng xảy ra đồng thời thì ngắt nào có mức ưu tiên tự nhiên thấp nhất sẽ được phục vụ trước. 2.2.2.4. Biến đổi ADC. Bộ biến đổi ADC của CC1010 có độ phân giải 10 bit, được điều khiển bởi các thanh ghi ADCON và ADCON2. Có ba kênh vào ADC là AD0, AD1 và AD2, các kênh này được chọn bởi thanh ghi ADCON.ADADR. Thanh ghi này cũng được sử dụng để chọn chân AD1 như là điện áp tham chiếu ngoài (khi sử dụng AD0). Khi chân AD1 được dùng như tham chiếu ngoài, chỉ có hai lối vào AD0 và AD2 của ADC được sử dụng. Đầu ra của ADC là đơn cực, nghĩa là giá trị 0 tương ứng với 0V, giá trị 1023 (tức 210) tương ứng với điện áp tham chiếu, điện áp tham chiếu có thể được chọn bằng 1.25V hoặc VDD phụ thuộc vào bit ADCREF. Điện áp tham chiếu analog được điều khiển bởi ADCON.ADCREF. Để tiết kiệm năng lượng thì cần đặt bit ADCON.AD_PD = 1 khi không sử dụng ADC. Biến đổi ADC được bắt đầu sau 5μs sau khi xoá bit điều khiển ADCON.ADCRUN nếu sử dụng VDD hay nguồn tham chiếu ngoài, hoặc bắt đầu sau 100μs nếu sử dụng tham chiếu trong 1.25V. 2.2.2.5. Bộ định thời. CC1010 có bốn bộ định thời Timer 0, Timer 1, Timer 2 và Timer 3 hoạt động như là bộ định thời hoặc bộ đếm (Timer/Counter), trong đó hai bộ định thời Timer 2 và Timer 3 còn có thể hoạt động như bộ điều chế độ rộng xung PWM (Pulse Width Modulation). Timer 0 / Timer 1: Timer / Counter 0 và 1 có thể được lập trình và hoạt động độc lập theo bốn chế độ, được điều khiển bởi các thanh ghi TMOD và TCON. Các chế độ như sau: 13 bit Timer/Counter (mode 0). 16 bit Timer/Counter (mode 1). 8 bit Timer/Counter tự động nạp lại (mode 2). 2 Timer 8 bit (chỉ dùng cho Timer 0, mode 0). Chi tiết về các chế độ, cách điều khiển sử dụng hai thanh ghi TMOD và TCON xin xem thêm phần Tài liệu tham khảo [4]. Timer 2 / Timer 3: Ngoài tính năng như bộ định thời, Timer 2 và 3 có thể được sử dụng như bộ điều chế độ rộng xung PWM. Nếu bít TCON2.M2/TCON2.M3 = 0 thì chúng sẽ là bộ định thời, nếu CON2.M2/TCON2.M3 = 1 thì sẽ là PWM. Khi đó chân P3.4 và chân P3.5 là chân phát xung đầu ra tương ứng cho Timer2/ Timer3. chu kì TnPWM đối với timer n như sau (n = 2, 3): Trong đó thời gian trạng thái cao Tnh là: Điều này có nghĩa là trong chế độ PWM, nếu Tn = 0 thì có mức thấp ở đầu ra và nếu Tn = 255 thì có mức cao. Trong đó thanh ghi Tn và TnPRE được đặt từ trước. 2.2.2.6. Bộ thu phát không dây RF (RF transceiver). 2.2.2.6.1. Miêu tả chung. Bộ thu phát CC1010 UHF RF được thiết kế chững ứng dụng tiêu thụ năng lượng thấp và điện áp thấp. Mạch thu phát được dành cho ISM (Industrial, Scientific and Medical) và SRD (Short Range Device) dải tần 315, 433, 868 và 915 MHz, nhưng có thể dễ dàng lập trình để hoạt động trong dải tần 300 – 1000 MHz. Các thông số chính của CC1010 có thể được lập trình thông qua các thanh ghi chức năng SFRs (Special Function Registers), làm cho CC1010 rất mềm dẻo và dễ sử dụng bộ thu phát vô tuyến. Bộ thu phát RF đòi hỏi rất ít các thành phần tích cực cho hoạt động của mình. Hình 2.1. Sơ đồ khối của bộ thu phát RF Sơ đồ khối đã được đơn giản hoá của bộ thu phát RF mô tả trong hình 2.1. Ở đó chỉ có các chân tín hiệu tương tự được chỉ ra và bus dữ liệu SFR bên trong được dùng để thiết lập giao diện RF và để truyền/nhận dữ liệu. Trong chế độ nhận, CC1010 được cấu hình như bộ thu đổi tần truyền thống. Tín hiệu lối vào RF được khuếh đại bởi bộ khuếch đại ồn thấp LNA (low-noise amplifier) và chuyển xuống thành trung tần (intermediate frequency – IF) bởi bộ trộn MIXER. Trong trạng thái trung tần (IF STAGE) các tín hiệu chuyển đổi này được khuếch đại và lọc trước khi đưa tới bộ giải điều chế DEMOD. Một tín hiệu RSSI hay tín hiệu trung tần IF sau khi được trộn được đưa vào chân AD2 (RSSI/IF). Sau giải điều chế, tín hiệu số được chuyển vào thanh ghi RFBUF. Các ngắt có thể được phát ứng với mỗi bit hoặc byte nhận được (EXIF.RFIF). Trong chế độ truyền, tín hiệu ra của một bộ dao động điều khiển bằng điện áp VCO (Voltage Controlled Oscilator) được đưa trực tiếp tới bộ khuếch đại công suất PA. Lối ra RF là khoá dịch chuyển đổi tần số FSK bởi luồng bít được đưa tới thanh ghi RFBUF. Tại đây các ngắt cũng có thể được sinh ra ứng với mỗi bit hay byte.Mạch chuyển đổi nội tại T/R giúp cho việc giao tiếp với anten dễ dàng hơn mà chỉ sử dụng rất ít các thành phàn ngoại vi. Bộ tổ hợp tần số tạo ra tín hiệu dao động bên trong và đưa tín hiệu này tới bộ MIXER ở chế độ nhận hoặc đưa tới PA ở chế độ truyền. Bộ tổ hợp tần số bao gồm một bộ dao động thạch anh XOSC, một bộ dò pha PD, bộ bơm nạp, bộ lọc, VCO và các bộ chia tần (/N và /R). 2.2.2.6.2. Mạch ứng dụng RF. Bộ thu phát RF đòi hỏi rất ít các thiết bị ngoại vi. Một mạch ứng dụng điển hình được thể hiện ở hình 2.2. Các giá trị cụ thể của các thành phần xin xem thêm Tài liệu tham khảo [4]. Hình 2.2: Mạch ứng dụng RF điển hình. Tương ứng vào/ra: Cặp C31/L32 là đầu vào của bộ nhận, nội trở của L32 có tác dụng định thiên một chiều. C41, L41 và C42 được dùng để tương ứng với bộ truyền có trở kháng 50Ω. Bộ chuyển T/R làm cho nó có thể nối với lối vào và ra với nhau và tương thích với bộ truyền 50Ω ở cả hai chế độ RX và TX. VCO được tích hợp hoàn toàn trừ cuộn cảm L101. Nguồn: các tụ tách và lọc nguồn cung cấp cần được sử dụng (trong sơ đồ mạch ứng dụng không chỉ ra phần này). Các tụ này càng đặt gần chân nguồn càng tốt. Vị trí và kích thước của tụ tách và lọc nguồn cần được chú ý để đạt được độ nhạy tốt nhất. 2.2.2.6.3. Điều khiển bộ thu phát RF và quản lý năng lượng. Thanh ghi RFMAIN điều khiển chế độ hoạt động (RX hay TX), sử dụng hai thanh ghi tần số và các chế độ tiết kiệm năng lượng. Theo cách này vi điều khiển CC1010 có được sự mềm dẻo để quản lý công suất RF nhằm đạt được chính xác năng lượng tiêu thụ đòi hỏi và các ứng dụng chỉ sử dụng pin. Các chế độ năng lượng khác nhau được điều khiển thông qua các bít riêng biệt trong thanh ghi RFMAIN. Các bít này điều khiển phần RX, TX, bộ tổ hợp tần số và bộ dao động thạch anh.. Sự điều khiển riêng biệt này có thể tối ưu hoá để làm cho dòng tiêu thụ thấp nhất có thể trong các ứng dụng nào đó. Một thứ tự bật nguồn điển hình để đạt được dòng tiêu thụ thấp nhất thể hiện ở hình 2.3. Trong hình vẽ này giả thiết tần số A dùng cho RX và tần số B dùng cho TX. Nếu không cần đến trường hợp này thì đảo lại thiết lập cho F_REG. RX hay TX Bật RX: RFMAIN: RXTX=0, F_REG=0 RX_PD=0, FS_PD=0 CURRENT=”RX current” Chờ 250 ms Bật TX: PA_POW=00h RFMAIN: RXTX=1, F_REG=1 TX_PD=0, FS_PD=0 CURRENT=”RX current” Chờ 250 ms Chế độ RX Chế độ TX Tắt RX: RFMAIN: RX_PD=1, FS_PD=1 Tắt TX: RFMAIN: TX_PD=1, FS_PD=1 PA_POW=00h Tắt RF Tắt RF Hình 2.3. Tuần tự bật thu phát RF 2.2.2.6.4. Điều chế dữ liệu và các chế độ dữ liệu. Có bốn chế độ dữ liệu khác nhau có thể lập trình được qua MODEM0.DATA_FORMAT. Các chế độ này khác nhau ở cách mã hoá dữ liệu, cách dữ liệu đến và đi và được chấp nhận, và liệu có sự đồng bộ hóa luồng bit hay không. Định dạng dữ liệu cần được chọn trước khi bộ thu phát RF hoạt động. Hai trong số các chế độ, chế độ đồng bộ NRZ và chế độ đồng bộ Manchester, truyền hay nhận dữ liệu có tốc độ baud được thiết lập trong MODEM0.BAUDRATE. Modem thực hiện đồng bộ hoá trong suốt quá trình nhận. các chế độ NRZ và Manchester chấp nhận và truyền dữ liệu theo cả hai cách một bit hay một byte trong cùng một thời điểm, có thể lập trình được qua RFCON.BYTEMOD. Dữ liệu được truyền đi hay nhận về được đặt trong thanh ghi RFBUF. Tuỳ thuộc vào ngắt RF có được cho phép hay không (EIE.RFIE) mà việc truyền/nhận dữ liệu có thể được điều khiển bởi chương trình phục vụ ngắt hay có thể được thực hiện bằng cách hỏi (polling). Hai chế độ khác, Transparent mode và UART mode, chỉ đơn giản là truyền dữ liệu FSK và thanh ghi RFBUF và UART0, cho phép lựa chọn tốc độ và mã hoá dữ liệu. Chipcon khuyên dùng các chế độ đồng bộ, các chế độ dữ liệu khác bỏ qua mạch quyểt định dữ liệu của bộ thu phát RF và không hỗ trợ chế độ bytemode, chế độ Transparent mode chỉ dùng để kiểm thử. 2.2.2.6.5. Tốc độ Baud. Bit điều khiển MODEM0.BAUDRATE thiết lập tốc độ từ 0.6kBaud đến 76.8kBaud. MODEM0.XOSC_FREQ cũng phải được thiết lập tuỳ vào tinh thể thạch anh đang sử dụng. Tốc độ baud được tính theo công thức: Trong đó: RF_BAUDRATE là tốc độ tính theo Baud. BAUDRATE và XOSC_FREQ là các bit điều khiển trong MODEM0. Sử dụng một trong các thạch anh chuẩn đặt trong MODEM0.XOSC_FREQ sẽ đặt ra các tốc độ chuẩn 0.6, 1.2, 2.4, 4.8, 9.6, 19.2, 38.4, hay 76.8 kbaud. Các tần số thạch anh khác nhau sẽ quy định các tốc độ khác nhau. Tốc độ nhỏ hơn 19.2kbaud có thể được tạo ra bởi bất kì tần số thạch anh nào. Tốc độ lớn hơn 19.2kbaud cần có thêm các sự kết hợp như đưa ra trong bảng 2.2. MODEM0. BAUDRATE /XOSC fxosc (MHz) RF_BAUDRATE (kBaud) 3.6864 7.3728 11.0592 14.7456 18.4320 22.1184 0.6 0/0 0/1 0/2 0/3 0/4 0/5 1.2 1/0 1/1 1/2 1/3 1/4 1/5 2.4 2/0 2/1 2/2 2/3 2/4 2/5 4.8 3/0 3/1 3/2 3/3 3/4 3/5 9.6 4/0 4/1 4/2 4/3 4/4 4/5 19.2 5/0 5/1 5/2 5/3 5/4 5/5 38.4 NA 5/0 NA 5/1 NA 5/2 76.8 NA NA NA 5/0 NA NA Bảng 2.2: Tốc độ Baud theo tần số thạch anh 2.2.2.6.6. Truyền và nhận dữ liệu. Trong chế độ Transparent hay UART dữ liệu đi hay đến được đưa trực tiếp tới bộ điều chế trong chế độ truyền và được nhận trực tiếp trong chế độ nhận. Trong các chế độ NRZ và Manchester dữ liệu được lưu tại RFBUF như được minh hoạ ở hình 2.4. Quá trình truyền: Khi đặt RFCON.BYTEMODE = 1 thì dữ liệu truyền theo bytemode, một thanh ghi 8 bit sẽ dịch từng bit tời bộ điều chế theo nguyên tắc bit cao nhất MSB truyền trước tiên, chu kì phụ thuộc vào tốc độ được lựa chọn. Khi thanh ghi dịch này rỗng sẽ nạp một byte mới từ RFBUF và tiếp tục dịch bit. Nội dung của thanh ghi RFBUF không thay đổi sau khi thanh ghi dịch này lấy dữ liệu từ nó. Khi một ngắt được tạo ta (EICON.RFIF), RFBUF có thể được nạp vào byte dữ liệu mới. Nếu byte mới không được nạp trong chu kì 8 bit (chu kì 8bit trong chế độ NRZ và chu kì 16baud trong chế độ Manchester) thì thời điểm tiếp theo thanh ghi dịch rỗng sẽ lấy lại dữ liệu cũ của thanh ghi RFBUF. Ở chế độ bitmode (khi RFCON.BYTEMODE = 0) cũng xảy ra hiện tượng tương tự như bytemode nhưng chỉ truyền một bít tại một thời điểm. Theo đó, thanh ghi dịch sẽ bạp bit mới từ RFBUF.0 sau khi truyền một bit đi, và ngắt RF được tạo ra để báo có bit mới được nạp. Để ghi bit tiếp theo vào RFBUF.0 trong một chu kì bit ở tốc độ cao nên sử dụng vòng quét nhanh (tight polling loop) thay vị thủ tục truyền dựa trên ngắt. Thanh ghi dịch 8 bit RFBUF Nhân 8051 Điều chế truyền không dây Giải điều chế nhận không dây LSB Hình 2.4: Đệm dữ liệu RF. Đường gạch là chế độ bit Để bắt đầu truyền dữ liệu ngay khi có thể, bit/byte đầu tiên được truyền được ghi vào RFBUF trước khi bộ điều chế hoạt động (RFMAIN.TX_PD = 0). Nó sẽ ngay lập tức được nạp vào thanh ghi dịch và một yêu cầu ngắt được tạo ra cho bit/byte thứ hai được truyền. Điều này đặc biệt quan trọng khi tính đến việc lưu trữ dữ liệu tại cuối một quá trình truyền. Khi bit/byte cuối cùng của một frame hay một packet được nạp vào thanh ghi dịch nó vẫn không được truyền đi. Như vậy yêu cầu ngắt được tạo ra tại cùng thời điểm không bị dừng đối với cả phần tương tự hay số của một quá trình truyền. Quá trình truyền không thể kết thúc một cách an toàn cho tới chu kì 9bit cuối cùng của chế độ bytemode và chu kì 2bit trong chế độ bitmode, khi bit cuối cùng được dịch và được truyền tới anten. Một giải pháp đơn giản là luôn luôn truyền 2byte mở rộng trong chế độ bytemode hay 2bit mở rộng trong chế độ bitmode ở cuối quá trình truyền dữ liệu. Điều này không gây ra vấn đề gì trong thực tế. Quá trình nhận: Khi nhận dữ liệu, lược đồ nhận sẽ hoạt động ngược với quá trình truyền. Từng bit từ bộ giải điều chế được dịch vào thanh ghi dịch 8bit với bit cao nhất MSB trước tiên. Khi thanh ghi dịch đầy nó được nạp vào RFBUF và một yêu cầu ngắt được sinh ra (EICON.RFIF). Byte cần được đọc trong chu kì 1byte (chu kì 8baud trong chế độ NRZ và chu kì 16baud trong chế độ Manchester). Nếu không nó sẽ bị ghi đè bởi byte nhận được tiếp theo và dữ liệu sẽ bị mất. Trong chế độ bitmode quá trình đệm cũng xảy ra tương tự, nhưng mỗi bit tại một thời điểm. Theo đó khi một bit mới tới từ bộ giải điều chế, thanh ghi dịch sẽ lưu nó và lưu bit cuối cùng vào RFBUF.0, lần lượt tạo ra các yều cầu ngắt để có thể đọc được các bit mới. Để có thể đọc bit tiếp theo từ RFBUF.0 trong chu kì 1bit ở tốc độ cao nên sử dụng vòng quét nhanh thay vì dựa vào ngắt. Không có sự cân nhắc đặc biệt nào đối với thời điểm bắt đầu hay kết thúc quá trình nhận. 2.2.2.7. Module CC1010EM. Để dễ dàng và thuận tiện cho việc phát triển các ứng dụng sử dụng vi điều khiển CC1010, hãng Chipcon cũng cung cấp module CC1010EM (Evaluation Module) trên đó có tích hợp hầu hết các linh kiện cần cho việc xây dựng một nút mạng như: Vi điều khiển CC1010. Dao động thạch anh. Antena. Một cảm biến nhiệt độ đưa vào chân AD1. Các chân cổng. Module được mô tả trên hình 2.5. Việc xây dựng thử nghiệm trong khuôn khổ khoá luận này chúng tôi cũng dùng module CC1010EM. Việc thử nghiệm sau này đã cho thấy rằng module này đã đáp ứng được các chức năng cơ bản của nút mạng đó là hai chức năng mạng và cảm nhận. Hình 2.5: Module CC1010EM 2.3. Ghép nối nút mạng CC1010 với đầu đo áp suất - mức nước. Trên đây chúng ta đã tìm hiểu về đầu đo áp suất cùng các đặc tính cơ bản của nó và chúng tôi cũng đã giới thiệu về nút mạng cảm nhận không dây sử dụng vi điều khiển CC1010. Ở phần này sẽ là cách thức ghép nối đầu đo với nút mạng. Sơ đồ tổ chức tổng quát của việc ghép nối và truyền nhận dữ liệu như hình 2.6 và sơ đồ ghép nối giữa vi điều khiển với đầu đo ở hình 2.7. Cảm biến VĐK có tích hợp thu phát RF (Slave) VĐK có tích hợp thu phát RF (Master) Máy tính RS232 Hình 2.6: Sơ đồ tổng quát của mạng có 2 nút mạng Đầu đo áp suất - mức nước CC1010 VDD VDD GND GND ADCi Hình 2.8: Sơ đồ ghép nối giữa VĐK và đầu đo. Trong đó: ADCi là các lối vào AD0, AD1 và AD2. Các lối vào ADCi của CC1010 có điện áp tham chiếu chọn là 1.25V hoặc VDD, sử dụng chung một ADC trên cơ sở hợp kênh lối vào. Trong khoá luận này chúng tôi chọn tham chiếu cho ADC là VDD, tức là bằng 3.5V, như đã nói ở mục 1.3.3. Thí dụ, trong hệ thống nói trên, lối ra của đầu đo sau khi được khuếch đại thì đưa tới AD0 và chương trình khởi tạo quá trình chuyển đổi tương tự - số qua ADC phải tiến hành bằng lệnh: mov ADCON,#0Ch Tức là chọn kênh AD0, điện áp tham chiếu 3.5V, bộ biến đổi ADC ở chế độ hoạt động. Lệnh bắt đầu chuyển đổi ADC: setb ADCRUN Khi ADC thực hiện xong việc chuyển đổi tương tự - số, bit ADCRUN tự động xoá. Thời gian đợi chuyển đổi được thể hiện qua việc quét bit ADCRUN: jb ADCRUN,$ Giá trị chuyển đổi đọc ở hai thanh ghi ADDATL(7:0) và ADDATH(9:8). Giá trị đọc được từ 0 đến 1023 tương ứng với điện áp lối vào ADC từ 0 đến 3.5V. Chương trình đọc giá trị ADC được thực hiện theo các bước sau: Bước 1: Khởi tạo ADC: Đặt bộ biến đổi ADC về chế độ single. Đặt điện áp tham chiếu là 3.5V Bước 2: Đọc giá trị ADC: Chọn kênh ADC. Ra lệnh đọc ADC. Chờ cho ADC biến đổi xong. Đọc giá trị chuyển đổi. 2.4. Kết luận. Chương 2 đã giới thiệu khái quát các khái niệm, ứng dụng của mạng cảm nhận không dây. Hầu hết các ứng dụng của WSN đều thuộc ba một trong ba ứng dụng là: thu thập dữ liệu môi trường, giám sát an ninh và theo dõi đối tượng. Mỗi dạng ứng dụng đều có mục đích và nguyên tắc làm việc riêng, qua đó đòi hỏi phải có các hệ thống khác nhau, tuy nhiên chúng đều có chung các chỉ tiêu đánh giá hệ thống là giống nhau mà tuỳ ứng dụng cụ thể có cách đánh giá các chỉ tiêu đó là khác nhau. Chương này cũng đã giới thiệu một số loại vi điều khiển có thể được dùng làm nút mạng cảm nhận trong hệ thống WSN theo các tiêu chí: năng lượng tiêu thụ thấp, tính mềm dẻo, sức mạnh, tính bảo mật, truyền thông, khả năng tính toán, kích thước của nút mạng. Từ đó đã chọn được loại vi điều khiển CC1010 của hãng Chipcon – Nauy để làm nút mạng. Đây là loại vi điều khiển tương thích họ 8051 thông dụng, sử dụng ngôn ngữ lập trình C và chương trình dịch Keil uVision2. Bên cạnh đó Chipcon cũng cung cấp các thư viện làm việc với CC1010 giúp cho việc viết chương trình trở nên dễ dàng và thuận tiện hơn. Đồng thời chương này đã giới thiệu các bước để giao tiếp giữa vi điều khiển và vi cảm biến, cụ thể là với cảm biến đo áp suất - một loại cảm biến tương tự. Việc ghép nối giữa cảm biến tương tự và vi điều khiển CC1010 được thực hiện qua ba lối vào tương tự của CC1010 là AD0, AD1 và AD2. Từ đó cho thấy rằng CC1010 hoàn toàn có thể làm việc tốt với cảm biến tương tự. Việc giao tiếp giữa vi điều khiển CC1010 và cảm biến tương tự sử dụng chương trình nhúng sẽ được giới thiệu trong chương tiếp theo – chương 3. CHƯƠNG 3 CHƯƠNG TRÌNH NHÚNG TRUYỀN/NHẬN THÔNG QUA NÚT MẠNG CƠ SỞ. 3.1. Giới thiệu về chương trình nhúng. 3.1.1. Tổng quan về phần mềm nhúng. Phần mềm nhúng đang có những bước đột phá mới tạo ra những cuộc cách mạng triệt để trong tương lai. Sự phát triển này xuất phát từ những nhu cầu bức thiết của thực tế và những bước tiến mạnh mẽ trong công nghệ phần cứng. Một phần mềm nhúng phải kết hợp chặt chẽ với môi trường của nó bao gồm phần cứng và các hệ thống liên quan. Nó có những rang buộc vế tốc độ xử lý, dung lượng bộ nhớ và các mức tiêu thụ điện năng… Một phần mềm nhúng tốt là phải đảm bảo các yếu tố trên và đó cũng là hướng phát triển quan trọng của các phần mềm nhúng. Điểm mấu chốt của các phần mềm nhúng hiện nay là việc lựa chọn các phương pháp thực thi của một chức năng giống như một thành phần phần cứng nhưng theo một cách riêng. Vì vậy mà không thể bỏ đi các tính năng “cứng” của phần mềm như các phần mềm truyền thống khác. Một phần mềm nhúng ngày nay được phát triển theo các cách sau: Liên kết phần mềm nhúng từ dưới lên trên, từ các lơp trừu tượng đến các chức năng hệ thống. Liên kết phần mềm nhúng với các nền lập trình được – các nền hỗ trợ nó cung cấp các phương tiện cần thiết để đánh giá các rang buộc đưa ra có thoả mãn nữa hay không. Để làm được như vậy thì cần phải phát triển các kĩ thuật hình thức ở mức trừu tượng để có những đánh giá sớm cùng các nhóm công cụ và phương pháp đúng đắn. Mặt khác cũng cần phải xem xét phần mềm nhúng và kiến trúc phần cứng của nó trong một tổng thể hoàn chỉnh. Do phải thoã mãn nhiều yếu tố khác nhau về phần cứng, môi trường, giá thành, hiệu năng nên tồn tại nhiều thách thức trong việc phát triển phần mềm nhúng hiện nay như: Tăng cường việc tái sử dụng. Đồng thiết kế phần cứng, phần mềm. Xây dựng mô hình các thuộc tính phi chức năng. Chuyển đổi các phần mềm thành các dịch vụ thông qua các thành phần phần mềm. Kiến trúc hệ thống và kiến trúc phần mềm. Đánh giá và kiểm định mức hệ thống. Tương thích phần cứng và phần mềm nhờ các cấu trúc có thể định cấu hình lại và các thành phần Plug hay Play. Xây dựng các hệ thống có khả năng tổ hợp được nhờ các thành phần phần mềm có thể tái sử dụng. 3.1.2. Các bước xây dựng một phần mềm nhúng. Phần mềm nhúng viết cho họ vi xử lý có thể sử dụng các ngôn ngữ khác nhau như C/C++ hoặc Asembler. Tuỳ việc xây dựng hệ thống mà lựa chọn ngôn ngữ thích hợp. Từ đó cũng chọn chương trình dịch thích hợp. Ngày nay, do nhu cầu phát triển hệ thống nhanh, bảo trì dễ dàng nên ngôn ngữ được lựa chọn thường là ngôn ngữ bậc cao như C/C++. Quy trình xây dựng một phần mềm bất kì thường trải qua các bước sau: Tìm hiểu bài toán. Phân tích. Thiết kế. Viết chương trình. Kiểm thử. Việc xây dựng phần mềm nhúng cũng tuân theo các bước như trên. Ngoài ra, phần mềm nhúng còn có đặc trưng là làm việc trực tiếp được với phần cứng. Do đó, để kiểm soát quá trình làm việc với các thành phần chấp hành có đúng đắn hay không là điều đặc biệt quan trọng. 3.2. Phần mềm nhúng viết cho CC1010. Phần mềm nhúng viết cho CC1010 được viết bằng ngôn ngữ C, sử dụng các thư viện cho CC1010 do hãng Chipcon cung cấp, dùng chương trình biên dịch Keil uVision2. Chương trình biên dịch Keil uVision 2.0 do hãng Keil Elektronik GmbH xây dựng là một môi trường phát triển tích hợp IDE (Integrated Development Environment) dùng để xây dựng các chương trình cho các họ vi điều khiển tương thích 8051 của Intel. Đây là bộ chương trình dịch cho phép người viết chương trình có thể soạn thảo chương trình, dịch chương trình và gỡ lỗi trên cùng một môi trường. Chương trình dịch này hỗ trợ cho cả ngôn ngữ C và Asembler. Hãng Chipcon cũng cung cấp một bộ thư viện tiện ích giúp cho việc xây dựng phần mềm cho vi điều khiển CC1010 được dễ dàng và nhanh chóng. CC1010IDE dựa trên công cụ phát triển uVision2 của hãng Keil TM Elektronik GmbH. Công cụ này cung cấp một khung (framework) cho hầu hết các đặc điểm của CC1010IDE và cũng hỗ trợ hầu hết cho các vi điều khiển họ 8051. Trình soạn thảo là một công cụ chủ yếu để soạn thảo các file nguồn và file hợp ngữ. Nó cũng cung cấp các chức năng trợ giúp khác như giao diện đồ hoạ, mô phỏng, gỡ lỗi… Thêm vào đó, IDE cũng cung cấp các giao diện với thư viện liên kết động DLL (Dynamic Linking Library) dùng để mô phỏng và gỡ lỗi trên mạch. Một điểm đặc biệt của chương trình dịch là có thể chuyển dịch các file nguồn được viết bằng ngôn ngữ C sang dạng hợp ngữ để sau đó có thể tối ưu hoá mã lệnh, dạng hợp ngữ sau đó được chuyển thành các file đối tượng (mã máy hoặc dữ liệu nhị phân). Cuối cùng, bộ liên kết đưa ra dạng file thực thi dạng HEX và có thể nạp vào bộ nhớ Flash của vi điều khiển. Mô hình của một phần mềm nhúng viết cho CC1010 như sau: Chương trình ứng dụng Thư viện C chuẩn. thư viện tiện ích Chipcon (Chipcon Utility Library – CUL) thư viện phần cứng (hardware abstractiom library – HAL) Các file định nghĩa phần cứng (hardware definition file – HDF) Bảng 3.1: Mô hình một phần mềm nhúng Các file định nghĩa phần cứng HDF: định nghĩa địa chỉ các thanh ghi, ánh xạ vector ngắt và các hằng số khác. Chúng cũng thường dùng các macro cho CC1010EB, và các định nghĩa hỗ trợ hợp ngữ và ngôn ngữ C. Thư viện phần cứng HAL: đây là thư viện macro và các hàm truy cập phần cứng CC1010 nhằm hỗ trợ việc phát triển chương trình nhanh chóng và dễ dàng. Những thư viện nằm trong HAL thi hành một giao tiếp phần cứng trừu tượng đối với chương trình người dùng. Nhờ đó chương trình người dùng có thể truy cập ngoại vi của vi điều khiển, thông qua các lời gọi hàm/macro, mà không cần hiểu chi tiết vểf phần cứng. Thư viện HAL hỗ trợ các chức năng sau: Truyền/nhận không dây. Đo cường độ RSSI. Truyền nhận RS232. Làm việc với ADC. Xử lý thời gian thực. Mã hoá DES. Thiết lập các bộ định thời. Làm việc với các cổng. Thư viện tiện ích Chipcon CUL: cung cấp một thư viện cho truyền thông RF. Thư viện này thường dùng cho những ứng dụng RF điển hình và cung cấp một giao thức RF đầy đủ. Các chức năng hỗ trợ của CUL: Truyền/nhận không dây. Tính toán mã dư vòng (CRC). Xử lý thời gian thực. Cả hai thư viện HAL và CUL đều hỗ trợ truyền/nhận không dây và xử lý thời gian thực. Tuy nhiên, các hàm ở thư viện CUL làm việc ở mức cao hơn, người viết chương trình cũng dễ dàng và tiện lợi hơn, nhưng bù lại cũng kém mềm dèo hơn so với sử dụng các hàm ở thư viện HAL. Do vậy, đối với những ứng dụng đòi hỏi sự phức tạp thì thường dùng thư viện HAL. Phần mềm mạng cảm nhận không dây viết cho CC1010: Phần mềm viết cho nút mạng CC1010 trong mạng cảm nhận không dây cần thực hiện các chức năng sau đây: Cảm nhận. Tính toán. Truyền thông. Một khó khăn là phải thực hiện tất cả các công việc này trên một vi điều khiển bị ràng buộc về mặt tài nguyên. Điều đó đòi hỏi chương trình viết càng ngắn và càng tốn ít bộ nhớ càng tốt, trong khi vẫn đảm bảo việc viết chương trình nhanh, bảo trì và nâng cấp dễ dàng. Việc cảm nhận và tính toán đã được đề cập chi tiết tại chương 2, con thực hiện việc truyền thông thì chương trình sử dụng các hàm trong bộ thư viện HAL củ Chipcon. Các bước thực hiện truyền thông cho CC1010 như sau: Khởi tạo RF: thiết lập tần số RF, tốc độ truyền, cách điều chế tín hiệu, công suất phát. Trong chương trình cụ thể, các thông số trên lần lượt có giá trị là: 868MHz, 2.4kbps, mã hoá Manchester, 4dBm. Các khai báo này được đặt trong một cấu trúc RF_SETTINGS được khai báo như sau: RF_RXTXPAIR_SETTINGS code RF_SETTINGS = { 0x4B, 0x2F, 0x15, //modem 0, 1 và 2: Manchester, 2.4kBaud 0x75, 0xA0, 0x00, //Freq A 0x58, 0x32, 0x8D, //Freq B 0x01, 0xAB, //FSEP 1 and 0 0x40, //PLL_RX 0x30, //PLL_TX 0x6C, //CURRENT_RX 0xF3, //CURRENT_TX 0x32, //FREND 0xFF, //PA_POW 4bBm 0x00, //MATCH 0x00, //PRESCALER }; Việc khởi tạo RF theo trình tự như sau: halRFCalib(&RF_SETTINGS, &RF_CALDATA); //chuẩn hoá RF INT_GLOBAL_ENABLE(INT_OFF); //cấm ngắt toàn cục INT_SETFLAG(INUM_RF, INT_CLR); //xoá ngắt RF INT_PRIORITY(INUM_RF, INT_HIGH); //mức ưu tiên ngắt RF là cao RF_SET_BYTEMODE(); //RF hoạt động ở chế độ byte RF_SET_PREMBLE_COUNT(PREAMBLE_BYTE_COUNT); //thiết lập số byte dẫn đường RF_SET_SYNC_BYTE(RF_SUITABLE_SYNC_BYTE); //thiết lập byte đồng bộ MODEM1=(MODEM1&0x03)|0x24; //lọc trung bình //Reset preamble detection PDET& = ~0x80; PDET| = 0x80; INT_ENABLE(INUM_RF, INT_OFF); //cấm ngắt RF INT_GLOBAL_ENABLE(INT_ON); //cho phép ngắt toàn cục Nhận dữ liệu RF: việc nhận dữ liệu RF thông qua ngắt. Mỗi khi nhận được một byte, vi điều khiển sinh ra một ngắt. Chương trình xử lý ngắt có nhiệm vụ đưa byte này vào một bộ đệm. Khi toàn bộ gói tin đã nhận xong, ngắt này bị cấm để chờ xử lý trong bộ đệm. Quá trình nhận một byte từ bộ đệm RFBUF vào bộ đệm chương trình như sau: //nhận một byte từ bộ đệm RFBUF vào bộ đệm rf_rx_buf tại vị trí rf_rx_index: Rf_rx_buf[rf_rx_index] = RF_RECEIVE_BYTE(); rf_rx_index ++; Byte đầu tiên của bộ đệm chương trình rf_rx_buf[0] lưu độ dài gói tin. Việc nhận dữ liệu kết thúc khi rf_tx_index bằng giá trị độ dài gói tin, nghĩa là: rf_rx_index = rf_rx_buf[0]; Sau khi toàn bộ gói tin đã được nhận, chương trình sẽ phân tích gói tin, lọc ra các dữ liệu cần thiết. Nếu là nút Master, nó sẽ truyền dữ liệu nhận được về máy tính qua cổng RS232. Nếu là Slave, nó sẽ thực hiện việc cảm nhận, tính toán rồi truyền dữ liệu về Master. Truyền dữ liệu RF: được thực hiện bởi các hàm/macro trong thư viện HAL của Chipcon như sau: halRFSetRxTxOff(RF_TX, &RF_SETTINGS, &RF_CALDATA); // turn on TX RF_START_TX(); //bắt đầu truyền halRFSendPacket(PREAMBLE_BYTE_COUNT, &txDataBuffer[0], 4); //truyền dữ liệu tại txDataBuffer với độ dài là 4 halRFSetRxTxOff(RF_TX, &RF_SETTINGS, &RF_CALDATA); //turn on RX RF_START_RX(); //bắt đầu chế độ nhận INT_SETFLAG(INUM_RF, INT_CLR);//xoá cờ ngắt RF INT_ENABLE(INUM_RF, INT_ON); //cho phép ngắt RF 3.3. Chương trình khảo sát quan hệ áp suất - độ cao cột nước. Module sensor áp suất được ghép với nút mạng sử dụng vi điều khiển với CC1010 và với phần mềm nhúng thích hợp sẽ tạo thành một điểm đo độc lập, tự động đo áp suất, xử lý dữ liệu thu được và truyền không dây định kỳ số liệu đo này về một nút mạng CC1010 khác nối với máy tính xách tay hoặc máy tính để bàn. Sơ đồ khảo sát thực nghiệm như hình 3.1 và các dụng cụa thí nghiệm như hình 3.2. Hình 3.1: Sơ đồ ghép nối đầu đo với nút mạng. Hình 3.2: Đầu đo và các nút mạng cảm nhận. Độ lớn giá trị tần số để CC1010 cung cấp để cảm biến áp suất thực hiện biến đổi ADC, độ lớn gía trị tần số nhịp đồng bộ quá trình truyền và nhận giữa hai vi mạch này, cùng các giá trị địa chỉ dữ liệu, việc xử lý các dữ liệu đọc được đều do phần mềm nhúng trong CC1010 thực hiện. Phần mềm này còn thực hiện chức năng truyền nhận dữ liệu không dây giữa hai CC1010 và truyền về máy tính. Giải thuật của chương trình nhúng như sau: Khởi tạo các tham số: khởi tạo RF, ADC, TIMER khởi tạo sensor cảm biến Đọc ba kênh ADC truyền dữ liệu không dây nhận dữ liệu không dây truyền thông tin về máy tính Đọc dữ liệu cảm biến áp suất Hình 3.3: giải thuật phần mềm nhúng trong CC1010 của nút Master. Ý nghĩa của các bước trong sơ đồ thuật toán: Khởi tạo RF: Mã hoá dữ liệu Manchester. Tốc độ truyền dữ liệu 2.4kbps. Khởi tạo ADC: Điện áp tham chiếu 3.5V internal. 10 bit single. Khởi tạo timer: Sử dụng Timer2 ở chế độ điều chế độ rông xung, tần số 29kHz, dạng xung vuông đối xứng, xung này dùng làm Master Clock (MCLK) cho cảm biến áp suất. Khởi tạo sensor cảm biến: Đưa các chân lối vào và chân đồng bộ quá trình đọc ghi cho cảm biến về trạng thái 0. Đọc các hệ số lưu trong cảm biến áp suất. Đọc ba kênh ADC: Chọn kênh cần đọc. Phát lệnh chuyển đổi ADC. Chờ cho đến khi chuyển đổi ADC kết thúc. Đọc giá trị ADC từ hai thanh ghi ADCDATH và ADCDATL. Đọc dữ liệu cảm biến áp suất: Reset cảm biến. Gửi lệnh cho cảm biến để chọn tham số cần đọc: nhiệt độ hay áp suất. Đọc dữ liệu trả lời từ cảm biến. Chờ nhận lệnh từ máy tính: Nếu có lệnh yêu cầu gửi dữ liệu về trung tâm, Slave sẽ đọc các tham số áp suất rồi truyền về trung tâm. Chương trình nhúng cụ thể: #include #include #include #include #include #include #include #include #include // Water-height packet: #define TBC_NODE_ID_LENGTH 2 // word #define TBC_NODE_NAME_LENGTH 20 #define TBC_TEMP_OFFSET (TBC_NODE_ID_LENGTH + TBC_NODE_NAME_LENGTH) #define TBC_TEMP_LENGTH 2 #define TBC_TEMP0_OFFSET (TBC_TEMP_OFFSET + TBC_TEMP_LENGTH) #define TBC_TEMP0_LENGTH 2 #define TBC_DATA_LEN (TBC_TEMP0_OFFSET + TBC_TEMP0_LENGTH) // Radio related: #define TBC_MY_SPP_ADDRESS 3 #define TBC_RX_INTERVAL 50 #define TBC_PREAMBLE_COUNT 4 // Node registration #define TBC_INVALID_NODE_INDEX 255 #define TBC_UNUSED_NODE_ID 0x0000 // Speed related byte xdata waitMultiplier; // The height "table": #define TBC_MAX_NODE_COUNT 16 word xdata nodeIDs[TBC_MAX_NODE_COUNT]; byte xdata nodeNames[TBC_MAX_NODE_COUNT][TBC_NODE_NAME_LENGTH]; word xdata nodeTemps[TBC_MAX_NODE_COUNT]; word xdata nodeLastT[TBC_MAX_NODE_COUNT]; // SPP variables SPP_SETTINGS xdata sppSettings; SPP_RX_INFO xdata RXI; SPP_TX_INFO xdata TXI; byte xdata rxDataBuffer[TBC_DATA_LEN]; byte xdata txDataBuffer[TBC_DATA_LEN]; // Function prototypes void tbcWaitRandom (void); void tbcTransmit (void); void tbcReceive (void); void tbcPrintTable (void); // Unit name, stored in Flash byte code flashUnitName[TBC_NODE_NAME_LENGTH]; // RAM buffer for Flash copy byte xdata ramBufNonAligned[128]; //---------------------------------------------------------------------------- // MAIN PROGRAM //---------------------------------------------------------------------------- void main (void) { byte xdata n; byte xdata m; #ifdef FREQ868 // X-tal frequency: 14.745600 MHz // RF frequency A: 868.277200 MHz Rx // RF frequency B: 868.277200 MHz Tx // RX Mode: Low side LO // Frequency separation: 64 kHz // Data rate: 19.2 kBaud // Data Format: NRZ // RF output power: 4 dBm // IF/RSSI: RSSI Enabled RF_RXTXPAIR_SETTINGS code RF_SETTINGS = { 0xA3, 0x2F, 0x15, // Modem 0, 1 and 2 0x75, 0xA0, 0x00, // Freq A 0x58, 0x32, 0x8D, // Freq B 0x01, 0xAB, // FSEP 1 and 0 0x40, // PLL_RX 0x30, // PLL_TX 0x6C, // CURRENT_RX 0xF3, // CURRENT_TX 0x32, // FREND 0xFF, // PA_POW 0x00, // MATCH 0x00, // PRESCALER }; #endif #ifdef FREQ915 // X-tal frequency: 14.745600 MHz // RF frequency A: 915.027455 MHz Rx // RF frequency B: 915.027455 MHz Tx // RX Mode: Low side LO // Frequency separation: 64 kHz // Data rate: 19.2 kBaud // Data Format: NRZ // RF output power: 4 dBm // IF/RSSI: RSSI Enabled RF_RXTXPAIR_SETTINGS code RF_SETTINGS = { 0xA3, 0x2F, 0x15, // Modem 0, 1 and 2 0xAA, 0x80, 0x00, // Freq A 0x5C, 0xF4, 0x02, // Freq B 0x01, 0xAB, // FSEP 1 and 0 0x58, // PLL_RX 0x30, // PLL_TX 0x6C, // CURRENT_RX 0xF3, // CURRENT_TX 0x32, // FREND 0xFF, // PA_POW 0x00, // MATCH 0x00, // PRESCALER }; #endif #ifdef FREQ433 // X-tal frequency: 14.745600 MHz // RF frequency A: 433.302000 MHz Rx // RF frequency B: 433.302000 MHz Tx // RX Mode: Low side LO // Frequency separation: 64 kHz // Data rate: 19.2 kBaud // Data Format: NRZ // RF output power: 10 dBm // IF/RSSI: RSSI Enabled RF_RXTXPAIR_SETTINGS code RF_SETTINGS = { 0xA3, 0x2F, 0x0E, // Modem 0, 1 and 2 0x58, 0x00, 0x00, // Freq A 0x41, 0xFC, 0x9C, // Freq B 0x02, 0x80, // FSEP 1 and 0 0x60, // PLL_RX 0x48, // PLL_TX 0x44, // CURRENT_RX 0x81, // CURRENT_TX 0x0A, // FREND 0xFF, // PA_POW 0xC0, // MATCH 0x00, // PRESCALER }; #endif // Calibration data RF_RXTXPAIR_CALDATA xdata RF_CALDATA; // Initialize peripherals WDT_ENABLE(FALSE); RLED_OE(TRUE); YLED_OE(TRUE); GLED_OE(TRUE); BLED_OE(TRUE); // Startup macros for speed and low power consumption MEM_NO_WAIT_STATES(); FLASH_SET_POWER_MODE(FLASH_STANDBY_BETWEEN_READS); // Seed the random generator: halRandomNumberGen(&n, 1); halRandomNumberGen(&m, 1); srand((n << 8) + m); waitMultiplier = 1; // ADC setup halConfigADC(ADC_MODE_SINGLE | ADC_REFERENCE_INTERNAL_1_25, CC1010EB_CLKFREQ, 0); ADC_SELECT_INPUT(ADC_INPUT_AD0); ADC_POWER(TRUE); // RF/SPP setup sppSetupRF(&RF_SETTINGS, &RF_CALDATA, TRUE); sppSettings.myAddress = TBC_MY_SPP_ADDRESS; sppSettings.rxTimeout = TBC_RX_INTERVAL; sppSettings.txAckTimeout = TBC_PREAMBLE_COUNT; sppSettings.txPreambleByteCount = TBC_PREAMBLE_COUNT; RXI.maxDataLen = TBC_DATA_LEN; RXI.pDataBuffer = rxDataBuffer; TXI.destination = SPP_BROADCAST; TXI.flags = 0x00; TXI.pDataBuffer = txDataBuffer; TXI.dataLen = TBC_DATA_LEN; // Initialize the SPP timer sppStartTimer(CC1010EB_CLKFREQ); SPP_INIT_TIMEOUTS(); // Reset the node IDs for (n = 0; n < TBC_MAX_NODE_COUNT; n++) { nodeIDs[n] = TBC_UNUSED_NODE_ID; } // Reset our name buffer for (n = 0; n < TBC_NODE_NAME_LENGTH; n++) { nodeNames[0][n] = 0x00; } // Setup UART0 for polled I/O UART0_SETUP(57600, CC1010EB_CLKFREQ, UART_NO_PARITY | UART_RX_TX | UART_POLLED); // Get our name VT100_CLEAR_SCREEN(); VT100_GO_TOP_LEFT(); // Removed so that CC1010EM can operate stand-alone /* printf("\nEnter node name (use up to 20 characters):"); scanf("%s", &nodeNames[0][0]);*/ // Load name from Flash memcpy(&nodeNames[0][0],flashUnitName,TBC_NODE_NAME_LENGTH); // Get our ID from CRC16(our name) nodeIDs[0] = culFastCRC16Block(&nodeNames[0][0], TBC_NODE_NAME_LENGTH, CRC16_INIT); // Prepare the id+name part of the packet txDataBuffer[0] = (nodeIDs[0] >> 8) & 0xFF; txDataBuffer[1] = nodeIDs[0] & 0xFF; for (n = 0; n < TBC_NODE_NAME_LENGTH; n++) { txDataBuffer[n + TBC_NODE_ID_LENGTH] = nodeNames[0][n]; } // Loop forever while (TRUE) { tbcTransmit(); tbcPrintTable(); tbcWaitRandom(); tbcReceive(); tbcWaitRandom(); } } // main //---------------------------------------------------------------------------- // void tbcWaitRandom (void) // Description: // Wait for a random number of msecs (0 to 255*8=2040) // Note: The function uses busy waiting //---------------------------------------------------------------------------- void tbcWaitRandom (void) { byte xdata time; byte xdata n; time = rand(); for (n = 0; n < waitMultiplier; n++) { halWait (time, CC1010EB_CLKFREQ); } } // tbcWaitRandom //---------------------------------------------------------------------------- // void tbcTransmit (void) // // Description: // Update our temperature value (ADC) and transmit together with our node // ID and node name. //---------------------------------------------------------------------------- void tbcTransmit (void) { word xdata temp; // Indicate transmission RLED = LED_ON; YLED = LED_ON; // Power up the ADC and sample the water-height ADC_SELECT_INPUT(ADC_INPUT_AD0); ADC_POWER(TRUE); ADC_SAMPLE_SINGLE(); temp = ADC_GET_SAMPLE_10BIT(); // Update the TX buffer and the table with the new water-height txDataBuffer[TBC_TEMP_OFFSET] = (temp >> 8) & 0xFF; txDataBuffer[TBC_TEMP_OFFSET + 1] = temp & 0xFF; nodeTemps[0] = temp; nodeLastT[0] = (int) sppGetTime(); YLED = LED_OFF; // Transmit the water-height sppSend(&TXI); do { /*nothing*/ } while (sppStatus() != SPP_IDLE_MODE); RLED = LED_OFF; } // tbcTransmit //---------------------------------------------------------------------------- // void tbcReceive (void) // Description: // Receive a water-height broadcast packet and register it in the table // Heights older than 30 secs get thrown out //---------------------------------------------------------------------------- void tbcReceive (void) { byte xdata n,m,o; byte xdata nodeIndex; word xdata nodeID; // Throw out "old" nodes (no updates during the last 30 seconds) for (n = 0; n < TBC_MAX_NODE_COUNT; n++) { if (((int) sppGetTime() - nodeLastT[n]) > 3000) { // Re-organize the list (by moving the remaining nodes up one index) for (m = n; m < (TBC_MAX_NODE_COUNT - 1); m++) { nodeIDs[m] = nodeIDs[m + 1]; for (o = 0; o < TBC_NODE_NAME_LENGTH; o++) { nodeNames[m][o] = nodeNames[m + 1][o]; } nodeTemps[m] = nodeTemps[m + 1]; nodeLastT[m] = nodeLastT[m + 1]; } } } // Receive the packet (if any) YLED = LED_ON; sppReceive(&RXI); do { /*nothing*/ } while (sppStatus() != SPP_IDLE_MODE); YLED = LED_OFF; // Process the packet if (RXI.status == SPP_RX_FINISHED) { GLED = LED_ON; // Get the node ID nodeID = (rxDataBuffer[0] << 8) + rxDataBuffer[1]; // Get the node's index in the water-height table for (n = 0; n < TBC_MAX_NODE_COUNT; n++) { if (nodeIDs[n] == nodeID) { nodeIndex = n; break; } else if (nodeIDs[n] == TBC_UNUSED_NODE_ID) { nodeIndex = n; break; } else { nodeIndex = TBC_INVALID_NODE_INDEX; } } // Update the table if (nodeIndex != TBC_INVALID_NODE_INDEX) { nodeIDs[nodeIndex] = nodeID; for (n = 0; n < TBC_NODE_NAME_LENGTH; n++) { nodeNames[nodeIndex][n] = rxDataBuffer[n + TBC_NODE_ID_LENGTH]; } nodeTemps[nodeIndex] = (rxDataBuffer[TBC_TEMP_OFFSET] << 8) + rxDataBuffer[TBC_TEMP_OFFSET + 1]; nodeLastT[nodeIndex] = (int) sppGetTime(); } } else { GLED = LED_OFF; } } // tbcReceive //---------------------------------------------------------------------------- // void tbcPrintTable (void) // // Description: // Executes keyboard commands (change of the waiting multiplier) // Prints the water-height table to the terminal window //---------------------------------------------------------------------------- void tbcPrintTable (void) { int xdata n,m; float xdata fTemp; word xdata timeDiff; // Receive key strokes if (RI_0) { RI_0 = 0; if (isdigit(UART0_RECEIVE())) { waitMultiplier = toint(UART0_RECEIVE()); } else if (UART0_RECEIVE() == 'd') { for (n = 1; n < TBC_MAX_NODE_COUNT; n++) { nodeIDs[n] = TBC_UNUSED_NODE_ID; } } else if (UART0_RECEIVE() == 'n') { memset(&nodeNames[0][0],0,TBC_NODE_NAME_LENGTH); printf("\nEnter node name (use up to 20 characters):"); scanf("%s", &nodeNames[0][0]); // Write new name into Flash halCopy2Flash(flashUnitName,&nodeNames[0][0],TBC_NODE_NAME_LENGTH, ramBufNonAligned, CC1010EB_CLKFREQ); // Get our ID from CRC16(our name) nodeIDs[0] = culFastCRC16Block(&nodeNames[0][0], TBC_NODE_NAME_LENGTH, CRC16_INIT); // Prepare the id+name part of the packet txDataBuffer[0] = (nodeIDs[0] >> 8) & 0xFF; txDataBuffer[1] = nodeIDs[0] & 0xFF; for (n = 0; n < TBC_NODE_NAME_LENGTH; n++) { txDataBuffer[n + TBC_NODE_ID_LENGTH] = nodeNames[0][n]; } } } // Header: VT100_GO_TOP_LEFT(); // Items: printf("DO SAU CUA NUOC:"); for (n = 0; n < TBC_MAX_NODE_COUNT; n++) { if (nodeIDs[n] == TBC_UNUSED_NODE_ID) { continue; } // Node number and ID: printf("\n%01X. (0x%X) ", n, nodeIDs[n]); // Node name: for (m = 0; m < TBC_NODE_NAME_LENGTH; m++) { UART0_WAIT_AND_SEND(nodeNames[n][m]); } // mức nước: fTemp = nodeTemps[n]; printf(" - ADC: %d", nodeTemps[n]); fTemp -= 122; fTemp /= 1.5625; printf(" - AD0: %3.2f", fTemp); // Time after the last update timeDiff = abs((int) sppGetTime() - nodeLastT[n]) * 10; printf(" - AGE (msecs): %d", timeDiff); VT100_CLEAR_LINE_RIGHT(); } // Available keyboard input options VT100_INSERT_BLANK_LINE(); printf("\nPress '0'-'9' to change the waiting multiplier"); VT100_CLEAR_LINE_RIGHT(); printf("\nPress 'd' to empty the table"); VT100_CLEAR_LINE_RIGHT(); printf("\nPress 'n' to give the unit a new name"); VT100_CLEAR_LINE_RIGHT(); VT100_CLEAR_SCREEN_DOWN(); } // tbcPrintTable // Flash interrupt handler (do nothing) // We need to handle the interrupt even though we do not do anything. // If not, the program will not run correctly except under the debugger, // which has its own Flash interrupt handler void FlashIntrHandler(void) interrupt INUM_FLASH { INT_SETFLAG(INUM_FLASH, INT_CLR); return; } 3.4. Kết luận. Ở chương 3 này tôi đã giới thiệu tổng quan về chương trình nhúng cũng như các bước xây dựng một chương trình nhúng. Từ đó đưa ra một chương trình nhúng cụ thể cho việc ghép nối đầu đo áp suất - mức nước với nút mạng cảm nhân không dây sử dụng vi điều khiển CC1010. Việc thử nghiệm với nút mạng được tiến hành từ mạng gồm hai nút mạng đến nhiều nút mạng để khảo sát quan hệ áp suất - mức nước. Kết quả thực nghiệm cho thấy vi điều khiển CC1010 tiêu thụ mức năng lượng thấp, một tiêu chí quan trọng của mạng cảm nhận không dây; đồng thời cũng cho thấy việc truyền nhận dữ liệu ổn định và tin cậy, không xảy ra xung đột. PHẦN KẾT LUẬN Bản luận văn đã giới thiệu về bộ cảm biến cũng như một số đặc trưng cơ bản của nó như: hàm truyền, độ lớn tín hiệu vào, sai số và độ chính xác. Từ đó giới thiệu về một loại cảm biến áp suất sử dụng công nghệ MEMS. Các loại vi cảm biến có rất nhiều ứng dụng trong khoa học cũng như trong thực tế. Trong khoá luận này, chúng tôi khảo sát một ứng dụng của vi cảm biến áp suất mang lại rất nhiều lợi ích cho đời sống con người, đó là đầu đo áp suất - mức nước. Nhu cầu đo mực nước trong các ngành kinh tế quốc dân rất lớn, điển hình là các lĩnh vực như cấp nước đô thị, thuỷ lợi và phòng chống thiên tai. Thiết bị này có thể được sử dụng để đo mực nước ở các đô thị, các nhà máy nước, các cơ quan xử lý nước thải, và đặc biệt là nhu cầu đo mực nước của hệ thống tưới tiêu sông ngòi, hồ ao… nhằm quản lý tốt hơn nguồn nước quốc gia. Hiện nay, mỗi công trình thuỷ nông đều cần hàng chục đầu đo, thiết bị đo mực nước từ xa để phục vụ quy trình vận hành trạm bơm, đảm bảo đủ nước tưới tiêu cho vùng công tác rộng mà vẫn đảm bảo tiết kiệm điện, không lãng phí nước. Loại đầu đo áp suất chúng tôi sử dụng thuộc loại vi cảm biến kiểu áp trở có độ nhạy và độ ổn định cao, với các đặc tính nổi bật là: dòng tiêu thụ nhỏ hơn 200mA, dải nhiệt độ làm việc từ -40 đến 125 độ C, dải tín hiệu lối ra của sensor bình thường có độ rộng từ 0.5 đến 4.5V, sensor có thể kết nối trực tiếp với bộ chuyển đổi tương tự - số hoặc có thể kết nối trực tiếp với vi điều khiển, có thể dễ dàng ghép nối với bộ chuyển đổi áp – dòng (với dải 0.4 đến 20mA) dùng cho mạch xử lý tín hiệu số. Kết quả thực nghiệm đo điện thế lối ra của đầu đo khi tăng/giảm độ cao của cột nước cho thấy quan hệ giữa điện thế - mức nước là rất tuyến tính với độ phân giải của đầu đo là 1cm, độ nhạy cỡ 2mV/cm. Hệ thống làm việc chính xác và khá ổn định. Để xử lý dữ liệu từ đầu đo, chúng tôi thực hiện việc truyền/nhận không dây qua hệ thống mạng cảm nhận không dây WSN. Trong bản luận văn này tôi cũng đã giới thiệu về WSN với một số ứng dụng điển hình của nó là: thu thập dữ liệu môi trường, giám sát an ninh và theo dõi đối tượng. Từ đó đưa ra các chỉ tiêu đánh giá hệ thống mạng cũng như đánh giá các nút mạng. Bên cạnh đó bản luận văn cũng giới thiệu vi điều khiển CC1010 của hãng Chipcon dùng để làm nút mạng cảm nhận không dây đáp ứng được các tiêu chí của nút mạng cảm nhận như: năng lượng tiêu thụ thấp, tính mềm dẻo, sức mạnh của nút mạng, tính bảo mật, tính truyền thông, khả năng tính toán và kích thước của nút mạng. Đây là vi điều khiển tương thích họ 8051 thông dụng, sử dụng ngôn ngữ lập trình C và chương trình biên dịch Keil uVision2. Từ việc nghiên cứu về hệ thống mạng WSN sử dụng CC1010 đó chúng tôi đã tiến hành thực nghiệm ghép nối đầu đo áp suất - mức nước với nút mạng, xây dựng các bước để giao tiếp giữa vi điều khiển và vi cảm biến tương tự - đầu đo áp suất. Việc ghép nối giữa cảm biến tương tự và vi điều khiển CC1010 được thực hiện qua ba lối vào tương tự của CC1010, đó là các chân AD0, AD1 và AD2. Bản luận văn cũng đã giới thiệu vể phần mềm nhúng cùng các yêu cầu, các bước để xây dựng một phần mềm nhúng cho nút mạng. Phần mềm nhúng cho vi điều khiển CC1010 sử dụng chương trình biên dịch Keil uVision2 – môi trường phát triển tích hơp IDE cho phép người sử dụng có thể soạn thảo chương trình, dịch và gỡ lỗi trên cùng một môi trường, và sử dụng bộ thư viện do hãng Chipcon cung cấp nhằm hỗ trợ cho việc xây dựng phần mềm được dễ dàng và nhanh chóng hơn. Bộ thư viện đó bao gồm: thư viện tiện ích chipcon CUL, thư viện phần cứng HAL, các file định nghĩa phần cứng HDF. Việc thử nghiêm ghép nối đầu đo áp suất với nút mạng cảm nhận không dây được thực hiện từ một hệ thống mạng gồm hai nút mạng và mở rộng ra nhiều nút mạng. Kết quả thực nghiệm cho thấy nút mạng cảm nhận sử dụng vi điều khiển CC1010 đạt được một số tiêu chí cho nút mạng đã đề ra, đó là tiêu thụ mức năng lượng thấp, việc truyền nhận dữ liệu ổn định và tin cậy, không bị xung đột. Cũng từ kết quả trên cho thấy việc xây dựng một mạng cảm nhận không dây WSN bước đầu đã đạt được một số kết quả mang tính cơ bản, cho phép tiếp tục phát triển và đi sâu theo hướng đã xác lập. Việc theo dõi thông số môi trường trở nên dễ dàng và tiện lợi, người sử dụng chỉ cần ngồi tại một chỗ cũng có thể giám sát các thông số đó nhằm phục vụ cho công việc của mình cũng như cho đời sống con người. PHỤ LỤC Phụ lục 01: Điện thế lối ra của đầu đo khi hạ từng cm nước: Trong đó: (1): mức nước (cm) (2): điên thế lối ra (mV) (1) (2) (1) (2) (1) (2) 150 448 99 338 49 234 149 445 98 335 48 232 148 443 97 333 47 230 147 440 96 331 46 228 146 438 95 329 45 226 145 436 94 326 44 224 144 433 93 325 43 221 143 431 92 323 42 219 142 429 91 320 41 217 141 427 90 318 40 215 140 425 89 316 39 213 139 422 88 314 38 211 138 420 87 312 37 209 137 418 86 310 36 207 136 416 85 308 35 205 135 414 84 306 34 203 134 412 83 304 33 201 133 410 82 302 32 199 132 408 81 299 31 197 131 405 80 298 30 194 130 404 79 295 29 193 129 401 78 293 28 191 128 399 77 291 27 189 127 397 76 289 26 187 126 394 75 287 25 185 125 392 74 285 24 183 124 390 73 283 23 181 123 388 72 281 22 179 122 386 71 279 21 177 121 384 70 277 20 175 120 382 69 274 19 173 119 380 68 272 18 171 118 377 67 270 17 169 117 376 66 268 16 167 116 373 65 267 15 165 115 371 64 264 14 163 114 369 63 263 13 161 113 367 62 261 12 160 112 365 61 259 11 158 111 363 60 257 10 156 110 361 59 254 9 154 109 358 58 252 8 152 108 356 57 250 7 150 107 355 56 248 6 148 106 352 55 246 5 147 105 350 54 244 4 144 104 348 53 242 3 143 103 346 52 240 2 142 102 344 51 238 1 141 101 342 50 236 0 140 Phụ lục 02: Điện thế lối ra của đầu đo theo mức nước khi sử dụng mạch khuếch đại ngoài và hạ dần mức nước. (1) (2) (1) (2) (1) (2) 142 1197 97 934 45 637 141 1192 95 922 43 626 139 1182 93 909 41 614 137 1169 91 897 39 604 135 1157 89 886 37 593 133 1148 87 876 35 582 131 1135 85 864 33 570 129 1124 83 852 31 559 127 1112 81 842 29 549 125 1100 79 830 27 539 123 1087 77 819 25 529 121 1074 75 807 23 518 119 1064 73 795 21 508 117 1051 71 784 19 499 115 1039 69 772 17 488 113 1027 67 761 15 479 111 1016 65 749 13 470 109 1004 63 737 11 463 107 991 61 726 9 453 105 980 59 716 7 445 103 968 57 704 5 438 101 956 55 692 3 430 99 945 53 683 1 425 51 671 Phụ lục 03: Điện thế lối ra của đầu đo theo mức nước khi sử dụng mạch khuếch đại ngoài và tăng dần mức nước: (1) (2) (1) (2) (1) (2) 0 408 68 751 116 1025 6 428 69 758 117 1030 7 433 70.5 765 118 1036 11 452 73 778 119 1042 13 459 75 791 120 1048 14 463 77 804 121 1054 15 468 79.5 817 122 1059 17 478 81.5 827 123 1065 21 497 83.5 839 124 1070 23 507 84.5 847 125 1076 24.5 515 87 857 126 1082 26.5 525 88.5 868 127 1087 28 533 90.5 878 128 1093 30 543 92 889 129 1098 31.5 550 94 899 130 1104 34 563 96 910 131 1110 36 574 97.5 920 132 1116 38 584 99 928 133 1121 39.4 594 100 934 134 1126 41 603 101 939 135 1132 44 617 102 945 136 1143 45.5 627 103 951 138 1149 47.5 637 104 958 139 1154 49 645 105 962 140 1160 50 651 106 968 141 1166 51 658 107 975 142 1173 52.5 666 108 979 143 1178 54.5 675 109 985 144 1183 56.5 687 110 990 145 1190 58 697 111 997 146 1194 60 706 112 1002 147 1200 62 717 113 1008 148 1205 64 728 114 1014 149 1212 65.5 738 115 1019 150 1219 TÀI LIỆU THAM KHẢO Tài liệu tiếng Việt: [1] Khảo sát đặc trưng và khả năng ứng dụng của cảm biến gia tốc MEMS, [2] Vương Đạo Vy, Nguyễn Thế Sơn, Phùng Công Phi Khanh, Hoà Quang Dự, Xây dựng hệ tự động đo khí áp sử dụng cảm biến áp suất MEMS và các thí nghiệm kiểm tra, Tóm tắt các báo cáo Hội thảo Quốc gia lần thứ VIII, Hải Phòng 25-27/08/2005, Một số vấn đề chọn lọc của công nghệ thông tin và truyền thông, Chủ đề Mã nguồn mở, Hải Phòng 08/2005. [3] Vương Đạo Vy, Nguyễn Thế Sơn, Thiết kế chế tạo, vận hành và đo thử nghiệm mạng cảm nhận không dây (wireless sensor network) trên cơ sở sử dụng chip vi điều khiển có mật độ tích hợp cao làm nút mạng và xây dựng phần mềm nhúng nạp trong các vi điều khiển này, tr.5-15. Tài liệu tiếng Anh: [4] Chipcon, CC1010 Datasheet, www.chipcon.com [5] Chipcon, CC1010IDE Manual, www.chipcon.com [6] Jason Lester Hill, A System Architecture for Wireless Sensor Networks, University of California, Berkeley, 2000. [7] XFPM,XHPM Datasheet, www.servoflo.com

Các file đính kèm theo tài liệu này:

  • docm7841ng c7843m nh7853n khng dy c cc nt m7841ng samp7917.doc