Tài liệu Đề tài Xây dựng ứng dụng của mạng cảm nhận không dây: Mục Lục
LỜI CẢM ƠN
Trước hết em xin được bày tỏ lòng biết ơn sâu sắc đối với thầy giáo hướng dẫn Thạc sĩ Hòa Quang Dự, Khoa Công Nghệ Thông Tin - Đại học Dân Lập Hải Phòng đã tận tình giúp đỡ, chỉ bảo em trong những năm học qua và đã dành rất nhiều thời gian quí báu để giúp em hoàn thành Luận văn tốt nghiệp này.
Em xin gửi lời cảm ơn đến Ban giám hiệu, các Thầy cô giáo của Trường Đại học Dân Lập Hải Phòng đã giảng dạy chúng em trong suốt quãng thời gian qua, cung cấp cho chúng em những kiến thức chuyên môn cần thiết và quý báu giúp chúng em hiểu rõ hơn các lĩnh vực đã nghiên cứu để hoàn thành đề tài được giao .
Xin cảm ơn các bạn bè và gia đình đã động viên cổ vũ, đóng góp ý kiến, trao đổi, động viên trong suốt quá trình học cũng như làm tốt nghiệp, giúp em hoàn thành đề tài đúng thời hạn.
Hải Phòng, tháng 7 năm 2007
NGUỄN XUÂN HÙNG
MỤC ĐÍCH CỦA ĐỀ TÀI
Đề tài tìm hiểu và tổng quan được những nét lớn, cơ bản của mạng cảm nhận không dây.Các ứng dụng cơ bản của mạng cảm nhận không...
71 trang |
Chia sẻ: hunglv | Lượt xem: 1381 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Xây dựng ứng dụng của mạng cảm nhận không dây, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Mục Lục
LỜI CẢM ƠN
Trước hết em xin được bày tỏ lòng biết ơn sâu sắc đối với thầy giáo hướng dẫn Thạc sĩ Hòa Quang Dự, Khoa Công Nghệ Thông Tin - Đại học Dân Lập Hải Phòng đã tận tình giúp đỡ, chỉ bảo em trong những năm học qua và đã dành rất nhiều thời gian quí báu để giúp em hoàn thành Luận văn tốt nghiệp này.
Em xin gửi lời cảm ơn đến Ban giám hiệu, các Thầy cô giáo của Trường Đại học Dân Lập Hải Phòng đã giảng dạy chúng em trong suốt quãng thời gian qua, cung cấp cho chúng em những kiến thức chuyên môn cần thiết và quý báu giúp chúng em hiểu rõ hơn các lĩnh vực đã nghiên cứu để hoàn thành đề tài được giao .
Xin cảm ơn các bạn bè và gia đình đã động viên cổ vũ, đóng góp ý kiến, trao đổi, động viên trong suốt quá trình học cũng như làm tốt nghiệp, giúp em hoàn thành đề tài đúng thời hạn.
Hải Phòng, tháng 7 năm 2007
NGUỄN XUÂN HÙNG
MỤC ĐÍCH CỦA ĐỀ TÀI
Đề tài tìm hiểu và tổng quan được những nét lớn, cơ bản của mạng cảm nhận không dây.Các ứng dụng cơ bản của mạng cảm nhận không dây cũng như các mục tiêu thực hiện của mạng cảm nhận không dây.
Tìm hiểu tình hình ứng dụng của mạng cảm nhận không dây trên thế giới và trong nuớc ta. Đưa ra được những ưu điểm, nhược điểm của mạng cảm nhận không dây. Tìm hiểu nhưng ứng dụng của mạng cảm nhận không dây có thể ứng dụng trng thực tiễn của nước ta . Xây dựng mô hình và đánh giá cho một ứng dụng cụ thể trong lĩnh vực nuôi trồng thuỷ sản của mạng cảm nhận không dây.
NỘI DUNG LUẬN VĂN
Trên thế giới, mạng không dây phát triển mạnh và được chuẩn hoá thành các loại khác nhau. Về bản chất chúng đều là mạng truyền thông không dây, nhưng cấu hình, quy mô, mục đích sử dụng khác nhau nên chúng có những điểm giống nhau và những điểm khác nhau. Trong số các mạng không dây, mạng cảm nhận không dây ra đời trên cơ sở ứng dụng những thành tựu cao của công nghệ chế tạo linh kiện điện tử và sự chín muồi trong việc hiểu biết và làm chủ kiến thức phần mềm hệ điều hành mạng. Mỗi nút mạng trong mạng cảm nhận không dây được xem như những hạt bụi (motes) vì kích thước của chúng rất bé, tiêu thụ năng lượng rất ít nhưng chính chúng có thể đảm đương chức năng nút mạng, và hơn thế, chúng còn có chức năng đo các thông số môi trường (chức năng cảm nhận) nơi chúng có mặt. Lợi ích mà mạng cảm nhận không dây đem lại là to lớn, trên thế giới đang hình thành những trào lưu nghiên cứu, chuẩn hoá, phát triển và khai thác các ứng dụng rất đa dạng của nó.
Trong lĩnh vực đo lường điều khiển tự động từ xa, việc ứng dụng công nghệ mạng cảm nhận không dây để thu nhận dữ liệu, và điều khiển, tìm được rất nhiều ứng dụng. Ví như đo các thông số môi trường cho nuôi trồng thuỷ sn, dự báo cháy rừng, dự báo lũ trên các sông, theo dõi sức khỏe….
Với các nhận thức trên cùng với sự khuyến khích động viên, hướng dẫn của Thầy giáo hướng dẫn và mong muốn được tìm hiểu, thử nghiệm ứng dụng công nghệ mạng không dây em đã chọn đề tài “Xây dựng ứng dụng của mạng cảm nhận không dây”
Đề tài gồm 2 chương như sau:
Chương 1: Giới thiệu về mạng cảm nhận không dây
Chương 2: Những ứng dụng của mạng cảm nhận không dây trên thế giới
Chương 3: Những ứng dụng của mạng cảm nhận không dây có thể ứng dụng ở nước ta.
Chương 4: Thực nghiệm của mạng cảm nhận không dây
Em xin chân thành cảm ơn thầy giáo hướng dẫn Th.s Hòa Quang Dự đã tận tình chỉ bảo, hướng dẫn và động viên em hoàn thành đề tài này. Em xin chân thànhg cảm ơn các Thầy, Cô trong Trường Đại học Dân lập Hải Phòng đã nhiệt tình dạy dỗ, truyền đạt kiến thức chuyên môn và tạo điều kiện thuận lợi để em hoàn thành đề tài này.
Hải Phòng, tháng 4 năm 2007
Nguyễn Xuân Hùng
CHƯƠNG 1
GIỚI THIỆU VỀ MẠNG CẢM NHẬN KHÔNG DÂY
1. Giới thiệu về mạng cảm nhận không dây
1.1. Định nghĩa về mạng cảm nhận không dây
Mạng cảm nhận không dây (Wireless Sensor Network - WSN) là một mạng không dây mà các nút của nó sử dụng các vi điều khiển, cảm biến, Bộ truyền tín hiệu sóng Radio,… với kích thước rất nhỏ, tiêu thụ năng lượng ít, tự tổ chức, giá thành thấp dùng để đo các dữ liệu và truyền thông không dây giữa các nút trong mạng.
Hình 1.1: một mô hình của mạng cảm nhận không dây
1.2. Yêu cầu của WSN
1.2.1. Khả năng tự cấu hình
- Ưu điểm mấu chốt của WSN đó là tính dễ triển khai, để triển khai thành công , thì khi đưa ra sử dụng các nút mạng phải có chức năng tự cấu hình . Các nút khi được đặt vào môi trường và có thể hoạt động ngay. Một vài nút vì một số lí do không hoạt động , để mạng tiếp tục hoạt động nó phải có khả năng tự cấu hình lại, Nghĩa là phải phát hiện ra các nút bị hỏng hoặc định kỳ thực hiện cấu hình lại mạng.
- Việc mạng phải thực hiện cấu hình có thể do nhiều nguyên nhân khác nhau như : càn phải thích ứng với sự thay đổi của môi trường, do khoảng cách giữa các nút mạng bị thay đổi… Chính vì vậy việc cấu hình lại là việc cần thiết để duy trì hoạt động của mạng.
- Để khắc phục điều này thì giải pháp tốt nhất đó là dùng kiến trúc bó và khẳ năng tự cấu hình của bó. Kiến trúc bó là kiến trúc mà các nút mạng theo một tiêu chuẩn nào đó mà thành lập bó ( Vd các nút ở cạnh nhau có thể được tạo thành một bó, trong mỗi bó thì có một nút đầu bó để nhận dữ liệu gửi về từ các nút trong bó sau đó các nút đầu bó có thể gửi dữ liệu cho nhau để chuyền về máy tính…)
1.2.2. Vấn đề tiết kiệm năng lượng
Nguồn năng lượng của các nút mạng cảm nhận không dây thường là pin. Chính vì vậy mà nguồn năng lượng này là có hạn dẫn đến việc tiết kiệm năng lượng là yêu cầu cần thiết. Theo các nhà nghiên cứu thì mức điện tiêu thụ trung bình của một nút mạng trong mạng cảm nhận không dây là trên dưới 50 MW
- Để đảm bảo các nút mạng có thể hoạt động được trong thời gian dài (hàng năm) thì việc cần thiết là phải sử dụng các phần cứng tiêu thụ hết it điện năng. Ngoài nguồn điện năng là pin thì ta có thể dùng các nguồn năng lượng khác để có thể tiết kiệm năng lượng như: Nguồn năng lượng có thể tự tạo ra từ môi trường hoạt động của mạng ( VD: Dùng năng lượng mặt trời, năng lượng được tạo ra từ nhiệt … ).
- Việc sử dụng các phần mềm nhúng với các thuật toán nhằm tiết kiệm năng lượng cũng có thể là một giải pháp hữu hiệu đối với việc tiết kiệm năng lượng.
1.2.3. Giá thành thấp
Do quy mô của mạng cảm nhận không dây la rất rộng do vậy chi phí cho mỗi nút mạng cũng ảnh hưởng tới việc chiển khai mạng. 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 có thể chấp nhận các công nghệ WSN. Với mộ ngân sách cố định thì việc làm giảm giá thành trên mỗi nút sẽ làm cho khả mua thêm nhiều nút, triển khai một mạng thu thập với mật độ cao hơn, và thu thập được nhiều dữ liệu hơn.
1.2.4. An toàn bảo mật dữ liệu
Mạng cảm nhận không dây thường được dùng ở ngoài môi trường, phạm vi rộng, giao tiếp với nhau dưới dạng sóng ( sóng Radio, sóng vô tuyến.. ) chính vì vậy mà việc khi dữ liệu gửi đi bị nhiễu là hoàn toán không thể tránh khỏi, hay việc bất kỳ một người nào cũng có thể truy nhập vào để lấy thông tin của mạng, yêu cầu đặt ra là phải đảm bảo an toàn và bảo mật.
- Việc mã hóa thông tin để đảm bảo tính an toàn trong mạng, cần bảo đảm cho bất kỳ người nhận được thông báo từ người gửi không bị sửa đổi thông tin bên trong bằng bất kỳ cách nào.
- Các nút mạng trước khi truyền dữ liệu đi cần phải được mã hóa bằng các thuật toán mã hóa như: mã hóa DES…
1.3. Các ứng dụng của WSN
Ngày nay với sự phát triển của công nghệ cao, các mạng cảm nhận không dây không ngừng được phát triển và được ứng dụng rất nhiều vào cuộc sống. Các ứng dụng của mạng cảm nhận không dây mà chúng ta có thể thấy rõ nhất như là:
- Điều khiển và giám sát công nghiệp.
- Nhà điều khiển tự động và điều khiển điện tiêu dùng tự động
- Thu thập thông tin trong An ninh và Quân đội
- Theo dõi tài sản và quản lý dây chuyền cung cấp
- Nông nghiệp và cảm nhận môi trường thông minh
- Theo dõi sức khỏe...
+ Thu thập thông tin trong An ninh và Quân đội
Việc sử dụng mạng cảm nhận không dây đầu tiên là được ứng dụng trong quân đội. Các nút mạng cảm nhận có thể thay thế các lính gác khi đó có thể đảm bảo an toàn cho họ. Mạng có thể sử dụng để kiểm soát việc đột nhập bất ngờ bằng cách các nút mạng có thể được gắn các cảm biến đo chấn động, đo thân nhiệt .. khi đó có thể kiểm soát được việc đột nhập bất hợp pháp trong khi đó các nút mạng trong mạng cảm nhận không dây là rất nhỏ do đó rễ dàng ngụy trang cho các nút mạng này ( có thể dấu vào bụi cây, hòn đá…). Ngoài ra còn có thể dung để thay thế con người trong các công việc nguy hiểm ( như trong hầm mỏ, nơi nhiễm phóng xạ..)
+ Nông nghiệp và cảm nhận môi trường thông minh
Trong các trang trại thì diệm tích thường rất lớn do vậy việc kiểm soát cây trồng cũng như điềm kiện tự nhiên của tường khu vực là khó khăng, nhất là lượng mưa trong từng khu vực vì mỗi khu vực thường có lượng mưa khác nhau khi đó mạng cảm nhận không dây có thể thu thập về lượng mưa của từng khu vực.
Mạng cảm nhận không dây có thể thu thập dữ liệu của môi trường sống của cây trồng, vật nuôi (độ ẩm, nhiệt độ.. ) để cho con người tìm cách trăm sóc cây trồng, vật nuôi để đạt được năng suất cao.
1.4. Tình hình nghiên cứu và ứng dụng mạng cảm nhận không dây trên thế giới và trong nước
1.4.1. Trên thế giới
Trên thế giới thì việc phát triền của mạng cảm nhận không dây đã ra đời được một thời gian khá lâu do vậy họ đã ứng dụng vào một số lĩnh vực trong đời sống. Không những thế mà còn nghiên cứu để phát triển thêm mạng này kết hợp với việc công nghệ điện tử ngày càng phát triển với giá thành ngày càng thấp. Việc phát triển mạng cảm nhận không dây điược nghi lại với những mốc quan trọng nhu sau:
Tương ứng với sự phát triên và mở rộng của hệ thống truyền thông không dây sự phát triển cuả mạng cảm nhận không dây bắt đầu từ 1978 khi DARPA tài trợ cho Sensor Nets Workshop trường đại học Mellon Pittsburgh, Pennsylvania theo yêu cầu cảu hệ thống giám sát quân đội.
Tiếp đó 1990 dự án SensIT. 1998 tiêu điểm về mạng không dây cho hệ thống cảm biến quân đội phân tán tổng số 29 dự án nghiên cứu 25 cơ quan được cấp vốn dưới dự án này.
1993 Trường DDH California Los Angeles hợp tác với trung tâm Rock well đã có một mạng tích hợp cảm biến không dây Wireless Intergate Network Sensor (WINS) và được thương mại hóa thành công ty Sensonia – California 1998.
Jan M. Rabaey DDH California bắt đầu chương trình PicoRadio.
Dựa trên những nghiên cứu đó kể từ đây hàng loạt các nghiên cứu , dự án về phát triển mạng cảm nhận không dây ra đời ;
MAMPS là chương trình do Principal Investigator Anantha Chandrakasan –viện công nghệ Massachusetts tập trung vào sự phát triển của một hệ thống đầy đủ mạng cảm biến không dây nhấn mạnh việc tiêt kiệm năng lượng : và giao thức truyền thông cho magnj cảm biến này đó là phân cấp xếp nhóm Adaptive năng lượng thấp LEACH.
Dự án Terminodes và mạng di động đặc biệt MANET của IETF – Intenet Engineering Task Force với mức tiêu thụ điện thấp, vấn đề địa chỉ và lộ trình trong mạng cảm nhận không dây với các nút mạng lưu động.
Mạng không gian sâu và âm thanh dưới nước ,với những đặc tính phạm vi rộng, truyền dữ liệu bằng mạng Radio.
Mạng cảm nhận không dây là chìa khóa để thu thập thông tin cần thiết qua những môi trường nhạy cảm, cho dù trong những tòa nhà, những nơi công cộng, khu công nghiệp, tàu thuyền, các hệ thống chuyên chở tự động hay bất cứ nơi nào khác. Mạng không dây làm tăng khả năng trao đổi dữ liệu. Sự phát triển mạnh mẽ của công nghệ liên quan, các nhà kinh doanh đã đưa ra các bộ cảm ứng sẵn có nhiều loại mà phù hợp cho các ứng dụng của mạng cảm nhận không dây với các chuẩn được đưa ra:
+ 802.11 Wireless Local Area Netwrok.
+ Bluetooth 1. (802.15.1)
+ Home RF (Radio Frequency)
+ 802.15.4 WPAN :chuẩn với những cải tiến vượt bậc : sự phức tạp thấp, giá và năng lượng tiêu thụ thấp, ổn định, uyển chuyển. được phê chuẩn tháng 5 năm 2003.
Như vậy với nhu cầu trao đổi thông tin của xã hội cùng với sự phát triển mạnh mẽ của các công nghệ liên quan mà mà mạng cảm nhận không dây được phát triển mạnh mẽ và đang được ứng dụng rộng rãi trong đời sống.
1.4.2 Ở trong nước
Ở nước ta bài toán tự động hoá đang được đặt ra cho mọi lĩnh vực kinh tế, quốc phòng...nhằm nâng cao hiệu quả công việc,tiến kịp trình độ chung của khu vực và thế giới .
Trong lĩnh vực đo lường điều khiển tự động từ xa, việc ứng dụng công nghệ mạng cảm nhận không dây để thu nhận dữ liệu, và điều khiển, tìm được rất nhiều ứng dụng. Ví như đo các thông số môi trường dự báo thời tiết, cho nuôi trồng thuỷ sản, dự báo cháy rừng, dự báo lũ trên các sông, …
Mới bắt đầu nghiên cứu và chưa có ứng dụng cụ thể nào .Do Những điều kiện về vật chất, thiết bị, cũng như đây là một vấn đề rất mới đối với nước ta, nên hiện dang fchỉ có một vài trung tâm khoa hoc công nghệ lớn dang quá trình nghiên cứu: Trung tâm thông tin KH& CN quốc gia, Hội đồng khoa học trường đại học công nghệ đại hoc Quốc Gia Hà Nội: Nghiên cứu về lý thuyết, truyền thông giữa 2 nút, truyền thông tuyến tính đa bước để đo một số thông số cơ bản: nhiệt độ, độ ẩm, quang...Nhận rõ sức mạng ứng dụng thực tế của WSN , hi vọng trong tương lai gần WSN sẽ không ngừng được mở rộng nghiên cứu,và ứng dụng rộng rãi trong nước.
1.5. Kiến trúc
1.5.1. Kiến trúc mạng
Do việc ứng dụng trong thực tế mà kiến trúc của mạng thường hay dùng là dạng hình cây, dạng tuyến tính và Kiến trúc mạng dạng bó.
1.5.1.1. Kiến trúc mạng dạng tuyến tính
Mạng cảm nhận không dây sử dụng kiến trúc dạng tuyến tính thì trong mạng gồm có các thành phần sau: Nút gốc, nút trung gian và nút cảm biến.
: Nút gốc
: Nút trung gían
: Nút cảm ứng
Hình 1.2: Kiến trúc mạng dạng tuyến tính
- Ưu điểm của
+ Lập trình hoạt động cho các nút mạng đơn giản ( Dễ dàng trong việc tìm đường đi ).
+ Dễ kiểm soát các nút trong mạng
+ Mạng có thể phát triển theo chiều dài tốt
- Nhược điểm
+ Phạm vi của mạng không lớn.
+ Việc phát triển mạng theo chiều rộng là khó.
1.5.1.2. Kiến trúc mạng dạng hình cây
Trong mạng này gồm có các thành phần: Nút gốc là nới tiếp nhận toàn bộ dữ liệu thu thập được trong mạng để chuyển đến người dùng, nút cảm nhận là nơi thu thập thông tin( nhiệt độ, độ ẩm… ) .
: Nút Gốc
: Nút cảm nhận
Hình 1.3: Kiến trúc mạng dạng hình cây
- Ưu điểm
+ Quy mô của mạng rộng
- Nhược điểm
+ Việc lập trình cho các nút mạng này là khó khăn ( do việc phân bố cảu cà nút là rộng do vậy thì các nút cần phải thay nhau làm nút gốc của nhánh để tiết kiếm năng lượng.
+ Số lượng nút là lớn và ở trên diện rộng do vậy việc kiểm soát các nút mạng là khó khăn.
Trong trường hợp nếu muốn mở rộng mạng này theo chiều dày thì có thể kết hợp cả kiến trúc mạng hình cây và kiến trúc mạng dạng tuyến tính. Trong trường hợp này thì các nút cảm ứng không truyền dữ liệu trực tiếp về nút gốc mà phải truyền qua các nút trung gian.
Hình 1.4: Kiến trúc mạng dạng kết hợp
1.5.1.3. Kiến trúc mạng dạng bó (linked cluster architecture_LCA)
Nhóm các nút vào trong các bó, tập hợp dữ liệu và đánh dấu một nút giữ vai trò truyền thông với trạm gốc
Hình 1.5 : Kiến trúc mạng dạng bó
Trong mạng tổ chức thành một tập hợp của những bó các nút, mỗi nút thuộc về ít nhất một bó. Mỗi bó có tiều đề bó hành động như một điều khiển cục bộ cho những nút bên trong bó. Những cổng vào của các nút cung cấp truyền thông giữa các bó.
- Ưu điểm: Quy mô của mạng rộng nhất. năng lượng tiêu thụ của các nút mạng là ít nhất trừ nút đầu bó ( do các nút trong bó chỉ phải gửi dữ liệu đến các nút đầu bó không phải gửi dữ liệu đi xa )
- Nhược điểm: Nếu nút đầu bó ngưng hoạt động thì các nút trong bó cũng sẽ bị ngưng hoạt động trừ khi các nút có sử dụng giải thuật chọn lại nút đầu bó. Việc lập trình cho kiến trúc dạng bó là hết sức phức tạp nhất là trong trường hợp chọn lại nút đầu bó.
1.5.2. Kiến trúc một nút mạng ( nút mạng CC1010 )
Ứng dụng của mỗi nút mạng là thu thập thông tin dữ liệu, các thông tin có thể là nhiệt độ, độ ẩm, ánh sáng, áp suất độ PH,…trong văn phòng, nhà xưởng, hầm mỏ, viện bảo tàng, trong nông nghiệp, trong y tế, trong công nghiệp, …WSN còn có khả năng theo dõi và cảnh báo mức độ an toàn môi trường hoặc định vị sự di chuyển của các đối tượng trong phạm vi của nó
Hiện nay trên thị trường có nhiều loại vi điều khiển,có thể chia thành 3 họ vi điều khiển chính như sau:
Họ vi điều khiển MSP430
Họ vi điều khiển ATMEGA
Họ vi điều khiển CC1010
Nhưng dựa trên các tiêu chí :
-Tiêu thụ năng lượng thấp
-Giá thành rẻ
-Tích hợp ADC có khả năng ghép nối với cảm biến
-Kích thước vật lý nhỏ
-Hỗ trợ lập trình các ngôn ngữ bậc cao,bậc trung,gỡ lỗi…
Vi điều khiển CC1010 được lựa chọn làm nút mạng vì đáp ứng được gần như đầy đủ các tiêu chí 1 vi điều khiển của mạng cảm nhận không dây.
CC1010 được tích hợp nhiều các tính năng phục vụ cho các ứng dụng không dây như bộ truyền - nhận vô vuyến, bộ biến đổi ADC, bộ nhớ lập trình Flash, kích thước nhỏ, tiêu thụ năng lượng thấp... Vì vậy CC1010 chỉ cần đến ít các thành phần phụ trợ khác để có thể trở thành một nút mạng của mạng cảm nhận không dây. Do đó chip CC1010 là một bộ vi xử lí thích hợp cho các ứng dụng truyền nhận không dây. Sau đây là các đặc điểm nổi bật của CC1010, các chế độ hoạt động và cách thức xây dựng mô hình mạng cảm nhận không dây sử dụng CC1010.
1.5.1.1. Đặc điểm chung của CC1010
Vi điều khiển CC1010 chứa nhân CPU 8051, được tích hợp với bộ thu phát sóng vô tuyến, cùng các thành phần phụ trợ khác và có mức tiêu thụ năng lượng thấp, đã được lựa chọn để xây dựng nút mạng. Các thành phần trong CC1010 và đặc tính của chúng như sau:
Lõi là vi điều khiển 8051.
Tốc độ xử lý bằng 2.5 lần vi điều khiển 8051 chuẩn.
32 kB flash, 2048 + 128 Byte SRAM.
3 kênh ADC 10 bit.
4 bộ định thời.
2 cổng UART, RTC.
Watchdog.
Giao diện lập trình SPI.
Bộ mã hóa DES tích hợp bên trong.
26 chân vào ra chung.
Nguồn cung cấp 2.7 - 3.6 V.
Bộ thu phát sóng vô tuyến 300-1000MHz.
Tiêu thụ dòng thấp (9.1 mA trong chế độ thu).
Công suất phát có thể lập trình được (có thể lên tới +10dBm).
Tốc độ thu phát dữ liệu lên tới 76.8 kbit/s.
Hình 1.5: cấu tạo của một nút mạng dùng CC1010
Hình 1.6: cấu tạo của một bảng mạch để kết nối giữa CC1010 với máy tính
CHƯƠNG 2
MỘT SỐ ỨNG DỤNG CỦA MẠNG CẢM NHẬN KHÔNG DÂY TRÊN THẾ GIỚI
2.1. Cấu trúc của mạng wsn
Mạng cảm nhận không dây bao gồm các thành phần cơ bản sau:
1. Cảm biến ( sensor ) : Là thiết bị vật lý để đo các thông số của môi trường được truyền thông qua sóng vô tuyến. Nó gồm 5 thành phần: Phần cứng cảm nhận, bộ nhớ, nguồn pin, vi sử lý được lập trình nhúng, thiết bị thu.
2. Người dùng: Là người cuối cùng nhận được thông tin của mạng cảm nhận gửi lại, Người dùng là người yêu cầu mạng thu thập thông tin gì và nhận đựơc kết quả của những thông tin đó. Trong một mạng cảm nhận thì có thể có nhiều nguời dùng cuối.
2.2. Một số ứng dụng mạng cảm nhận không dây ở nứớc ngoài.
Trong các ứng dụng sau đây chúng ta sẽ sử dụng những cảm biến thông minh. Chúng không phải là những cảm biến bình thường mà là nhữn cảm biến rất nhỏ ( Được chế tạo bàng công nghê nano ) được kết hợp với các mạnh điện. Được sử dụng trong ứng dụng đo lượng gluco và để khôi phục hình võng mạc. Những thiết bị yêu cầu trong các ứng dụng này là : Máy tính được dùng để nhận dữ liệu qua mạn không dây. Và các cảm biến thông minh.
2.2.1. Võng mạc nhân tạo
Trong phần này chúng tôi muốn nói đến các ứng dụng của mạn cảm nhận không dây cũng như các cảm biến thông minh dùng trong lĩnh vực y tế đó là võng mạc nhân tạo. Trong các cảm biến này cần phải có các đầu cảm nhận ánh sáng. Trong đây chúng tôi sử dụng các cảm biến thông minh được đặt trong võng mạc và những dự án vimo của trường đại học Wayne và viện mắt Kresge . Mục đích của ứng dụng này để tạo ra các võng mạc nhân tạo giúp nhữn người mất khả năng quan sát hay những người khiếm thị có thể nhìn thấy với một mức độ cho phép.
Trong dây sử dụng các cảm biến thông minh được đặt vào mắt 100 cảm biến rất nhỏ. Chún tôi đã xây dựng được một hệ thồn bên ngoài để thử võng mạc ( Hình 2.1 đã miêu tả được cấu tạo cơ bản của một mảng )
Cảm biến thông minh gồm có 2 thành phần: Một mạc tổ hợp và một mảng các cảm biến. Mạch tổ hợp bao gồm một bộ chíp đa hợp. với nhiều đường truyền thông tin giữa các chíp, dòn kện, dữ liệu được truyền giữa nhau trên tầm số 40 KHz, với những sữ chuyển đổi và những mạch chíp để hỗ trợ 10x10 lưới liên kết. Mạch có 2 khă năng truyền và nhận dữ liệu. Mạch được chế tạo bằng nhôm trên bề mặt được gắn các cảm biến. Ở đây đã sử dụng song một kỹ thuật gọi là kỹ thuật liên kết dính, đặt một chất dính lên chíp cho phép những cảm biến được gắn chặt với chíp. Với mỗi cảm biến dược định vị trên một bề mặt đầu dò. Bên trên bề mặt trừ nhữn vùng đầu dõ được phủ lên một chất hoat tính sinh học. Các cảm biến tạo lên 10x10 mảng điện cực. Khoảng các giữa các cảm biến là 70 micrômet. Các cảm biến một đầu là hình chữ nhật và một đầu là hình thoi với kết thúc là một điểm để cho phép sự tiếp súc giữa mạng cảm biến và võng mã không xẩy ra được việ bị dục võng mạc.
Hình 2.1: sự Minh họa (của) Mảng cảm biến thông minh
Các cảm biến và các mạch được đặt trong mắt như Hình 2. Không giống một số hệ thống khác mà đã được đề xướng, những cảm biến khôn khéo này được đặt ở trên võng mạc và đủ nhỏ và đủ nhẹ để được giữ đúng chỗ với một cách tương đối lực nhỏ. Những cảm biến này sản xuất những tín hiệu điện mà được chuyển đổi bởi màng mỏng nằm bên dưới và bên trong một sự đáp lại hóa học, tương tự nhữn hành vi vận dụng bình thường võng mạc từ những kích thích nhẹ. Sự đáp lại số thực chất sản xuất truyền thông tuần tự số học. Một thiết kế tương tự là hiện thân được dùng một mô cấy vỏ não. Mặc dù để cách giữa hai khoảng cách lớn hơn để phù hợp với để cách đang gia tăng giữa hạch trong vỏ trực quan. Như khi đưa vào Hình 2.2, chính diện của võng mạc trong sự tiếp xúc với mảng cảm biến nhỏ. Cạnh sau của võng mạc bị kích thích điện (qua một phục hình võng mạc nhân tạo) bởi những cảm biến trên chíp cảm biến thông minh. Những tín hiệu điện này được chuyển đổi vào trong hóa chất những tín hiệu bởi hạch và khác nằm ở dưới những cấu trúc vải mỏng và sự đáp lại được mang qua thần kinh thị giác tới não.
Sự truyền Tín hiệu từ những cảm biến thông minh ghi khắc trong mắt những hình ảnh đồng dạng với hướng ngược. Kết quả thần kinh nhận những tín hiệu từ những kích thích được nhặt lên bởi cảm biến ,tín hiệu và cường độ tương đối có thể được truyền ra khỏi cảm biến thông minh. Dần dần. mảng cảm biến sẽ được sử dụng cho cả sự tiếp nhận lẫn sự truyền ở một sự phản hồi hệ thống và kinh niên cấy bên trong mắt. Dù mảng cảm biến và điện tử có liên hệ đã được phát triển, thách thức tại điểm này là kết nối mạng không dây của cảm biến này với một bộ phận xử lý ngoài để xử lý những tín hiệu phức tạp để gửi tới mảng.
Từ những lý do để cho thông tin phát ra khỏi võng mạc có lẽ ít hiển nhiên hơn. Mục đích của điều đảo ngược luồng dữ liệu sẽ xác định ánh xạ giữa những ảnh đầu vào và tín hiệu thần kinh kết quả mà cho phép chúng ta nhìn thấy hình. Hiện thời, ánh xạ thực tế từ đầu vào ảnh đến não thì chưa được hiểu cẩn thận.
Hình 2.2: Định vị của Cảm biến thông minh bên trong Mắt
Những cảm biến với một hệ thống xử lý ngoài là một khía cạnh cơ sở của việc thực thi tiềm năng của một võng mạc nhân tạo. Trong chẩn đoán và những thao tác cứu chữa cũng sẽ yêu cầu sự truyền của dữ liệu từ mảng cảm biến đến một máy tính chủ đặt bên ngoài. Những yêu cầu này ngoài chức năng bình thường (ủa thiết bị, mà truyền thông không dây sử dụng từ một camêra nhúng trong một kính đeo mắt vào trong cảm biến thông minh.
Hình 3.3 miêu tả những bước xử lý từ sự tiếp nhận ảnh ngoài đến sự truyền tới võng mạc. Một camêra được lên trên Một khung kính đeo mắt đã có thể định hướng sự gửi ra tới một thời gian thực làm cho sự giảm dữ liệu và xử lý nó ( Chẳng hạn., Sự nhận dạng cạnh ). Camêra được kết hợp với một con trỏ laze tự động lập mã ảnh kết quả vào trong một khuôn dạng gọn rồi truyền theo sóng vô tuyến vào trong để giải mã bởi những chíp. Cài đặt trong Hình 3 cho thấy một thiết bị thu phát không dây mà bên trong thân thể, nhưng không phải bên trong võng mạc. Ngoài mục đích nghiên cứu cuối cùng sẽ hỗ trợ một mảng 1600 chíp cảm biến thông minh, từng cái với một 25 x 25 lưới điện cực. Theo chức năng, những mảng điện cực bên trong trung tâm của điểm võng mạc sẽ phải khuyến khích võng mạc khác nhau so với ngoại biên được đặt những mảng điện cực, mỗi cảm biến thông minh được sẽ có được kết hợp với những cảm biến thông minh khác dựa vào một giải thuật xử lý ảnh được thiết kế để kiểm soát một sự chết của cảm biên thông minh những mảng, mỗi bản in rời gửi đầu vào cho những vùng võng mạc theo chức năng khác nhau.Tại màn hình sử dụng thị giác ngoại vi, từ đó võng mạc ngoại vi có quyết định thời gian tốt hơn hơn.
2.2.1.1. Mạng và xử lý những yêu cầu cảu mạng
Trong mục này, những yêu cầu chức năng của hệ thống được mô tả cùng với một số tùy chọn thiết kế. Đề xuất những giải pháp được thúc đẩy bởi những yêu cầu này. Trong mệnh lệnh để đạt được khi hình dung chức năng, thông tin hai chiều sẽ được cần giữa một máy tính ngoài và xác định phải chăng ảnh mong muốn được " nhìn thấy " bằng cách cấy vào nhữn cảm biến trong vỏ não xẽ cho chúng ta thấy được bệnh nhân đã thấy nhữ gì. 'Chúng tôi cũng cần thông tin hai chiều với mô cấy thuộc võng mạc sao cho Chúng tôi có thể xác định mà những cảm biến trong võng mạc là sự vận dụng như được chờ đợi. Không kể đầu vào từ camêra, chúng tôi cũng cần khả năng cung cấp đầu vào trực tiếp tới mô cấy võng mạc để xác định nếu bệnh nhân nhìn thấy cái gì được chờ đợi từ mẫu đầu vào đó. Kế hoạch sẽ dùng tới một mảng 25 x 25 cảm biến khôn khéo trên một chíp đơn cho sự cấy ghép võng mạc con người. Như sự khảo sát tiến triển, nhiều những chíp này sẽ được chèn cho một hệ thống cuối cùng 1000 x 1000 mảng cảm biến ( 40 x 40 mảng của những chíp, nơi mỗi chíp có một 25 x 25 mảng cảm biến).Tạo một đoạn xấp xỉ 200 250 ms. Bởi vậy, sự xử lý sẽ được thực hiện định kỳ xử lý vào một vòng là 200- 250 ms. Từ đây, dữ liệu sẽ đưựơc truyền bốn hay năm lần trên giây.
Hinh 2.3: những bước xử lý dự án phục hình võng mạc
Sau khi xem xét tất cả các nhân tố , thì ứng dụng của chúng tôi có thể được triển khai trong thực tế, bằng việc dùng những cảm biến đủ nhỏ với việc truyền nhận bằng sóng vô tuyến để không gây ảnh hưởng đến con người.
2.2.2. Theo dõi mức Glucoza
Học viện Quốc gia (NIH) của Viện Sức khỏe Quốc gia Mỹ về Bệnh đái đường và những bệnh về Tiêu hóa và nhữn báo cáo về các bệnh về thận 15.7 triệu người – 5.9% dân cư Mỹ mắc bệnh đái đường vào 1999 . Những sự phức tạp mà xuất hiện từ bệnh đái đường bao gồm bệnh tim, đột quỵ, cao huyết áp, bệnh về thận… Nhữn căn bệnh này là một trong 7 nguyên nhân hàng đầu gây tử vong ở mỹ, rõ ràng rằng đây là một bệnh mà cần sự chú ý nghiêm túc . Sự điều trị bệnh đái đường bao gồm một chế độ sinh hoạt chính xác : sự ăn kiêng, bài tập, và theo dõi nồng độ đường trong máu mọi lúc mọi nơi. Khi đó mạng cảm nhận không dây dùng nhữn cảm biến thông có thể chu cấp một cách có hiệu quả hơn tới việc theo dõi bệnh đái đường i, bằng việc cung cấp một phương pháp chắc chắn, chính xác, và ít ảnh hưởng tới con nguời hơn để theo dõi những mức Glucoza. Hiện thời, theo dõi những mức Glucoza máu, người ta sẽ phải dùng các thử máu bằng cách lấy máu trên các đầu ngón tay mà trong khi đó việc theo dõi này cần được thực hiện liên tục khi đó nó sẽ ngây ảnh hưởng tới bệnh nhân. Mạng cảm nhận không dây sẽ có thể khắc phục được điều này cùng với việc sử dụng các cảm biến thông minh. Cảm biến theo dõi những mức Glucoza và truyền những kết quả tới một màn hình hiển thị.Các cảm biến được làm rất nhỏ rùi đưa vào mạch máu của con người nó sẽ đo được nồng độ Glucoza chính sác hơn và đểu đặn hơn.
2.2.3 Dò tìm ung thư
Ung thư là một trong nhữ nguyên nhân dẫn đến cái chết trong Chúng ta, với 563,100 người tử vong do ung thư được báo cáo vào 1999. Hiện thời 9 triệu người đã chẩn đoán có thể ung thư, với 1, 221, 800 trường hợp mới được chẩn đoán vào 1999. Mà hiện tại việc chữa trị bệnh ung thư khi đã tái phát là rất khó mà gần như là không thể. Chính vì vậy việc phát hiện sớm là chìa khóa để cứu sống những người bị ung. Những cảm biến thông minh Không dây có thể đóng góp một vai trò chìa khóa trong sự dò tìm sớm đó. Những sự nghiên cứu đã hiện ra mà những tế bào ung thư có ảnh hưởng đến luồng máu trong vùng bị bao vây một khối u . Một cảm biến với khả năng để phát hiện ra những sự thay đổi này trong luồng máu có thể được đặt trong những vị trí khả nghi. Cách này là một cách đặc biệt hữu ích cho những người người mà có một lịch sử gia đình có nhiều ngừoi bị ung thư, tiềm ẩn ung thư cao. Nghiên cứu đang cũng được chỉ đạo trên việc đặt những cảm biến trên một cái kim, Khi đó công việc của nhữ thầy thuốc khi chữa bệnh sẽ đơn giản hơn và khả năng cứu chữa cao hơn. Những cảm biến được dùng trong thiết bị này có khả năng để phân biệt giữa nhữn tế bào bình thường và những tế bào bị ung thư.
2.2.4. Theo dõi sức khỏe toàn diện
Mạng cảm nhận không dây với những cảm biến thông minh đã được sử dụng để theo dõi sức khỏe của con nguời bằng cách đưa vào trong cơ thể qua đuờng tiêu hóa. Các nhân viên của NASA làm việc ngoài không gian với những điều kiện khác hẳn trên trái đất khi đó mạng cảm nhận không dây sẽ được dùng để theo dõi sức khỏe của họ trong điều kiện ngoài không gian để gửi về trung tâm sử lý trên mặt đất . Nuốt một viên chứa một cảm biến thông minh có thể gửi cho chúng ta thông tin về độ axit đường ruột, sức ép, hay những sự làm giảm bớt của)cơ trơn cho phép những bác sỹ tốt hơn hơn chẩn đoán những bệnh dạ dày-ruột non trong một thái độ không tiếp cận được với những người đó.
CHƯƠNG 3
NHỮNG ỨNG DỤNG CỦA MẠNG CẢM NHẬN KHÔNG DÂY CÓ THỂ ỨNG DỤNG Ở NƯỚC TA
Do những điều kiện về nền kinh tế, kỹ thuật mà việc ứng dụng mạng cảm nhận không dây trong lỹ vực y tế ở nước ta rất khó triển khai. Dưới đây là một số ứng dụng của mạng cảm nhận không dây có thể ứng dụng được ở nước ta
3.1. Trong nông nghiệp
Do nước ta là nước đang phát triển với nền nông nghiệp lớn. Số lượng các trang trại của nước ta nhiều do đó việc theo dõi là rất tốn nhân công. Trong khi đó việc đầu tư để phát triển một mạng cảm nhận không dây không phải là cao. Mạng có thể được dùng để đo dộ ảm ở từng khu vực trong trang trại, hay lượng mưa ở những khu vực khác nhau
Hình 3.1 : Ứng dụng của mạng cảm nhận không dây sử dụng trong nông nghiệp
Các nút mạng được bố trí tại các cánh đồng khác nhau để thu thập các thông tin về môi trường sau đó chuyển dữ liệu về co người sử dụng. Người sử dụng khi có các thông tin về môi trường ở từng khu vực khác nhau sẽ đưa ra các phương hướng chăm sóc khác nhau đối với từng khu vực để chăm sóc cho tốt.
3.2. Trong việc dự báo cháy rừng
Tài nguyên thiên nhiên rừng ở Việt Nam rất phong phú. Trữ lượng gỗ lớn. Có các cánh rừng nguyễn sinh như: Cát Bà, Cúc Phương, …. Mang lại rất nhiều nguồn lợi cho nước ta. Chính vì vậy việc giữ gìn và bảo tồn chúng là rất khó khăn. Trong đó việc cháy rừng do hạn hán, kho hanh thường xuyên sẩy ra do diện tích một khu rừng là rất lớn việc do độ ẩm của khu rừng trong từng khu vực là khó khăn.
Hình 3.2: Ứng dụng của mạng cảm nhận không day trong cảnh bảo cháy rừng
Mạng cảm nhận không dây sẽ giúp cho chúng ta được điều này bằng cách mỗi nút mạng sẽ gắn một cảm biến đo nhiệt độ, độ ẩm của không khí… gửi về cho con người sẽ giúp cho chúng ta biết cách quản sử lý tình trạng cháy rừng ro thiên tai gây ra.
3.3. Trong việc cảnh báo lũ
Các nút mạng cảm nhận không dây có thể được gắn ở hai bên bờ sông trên thượng nguồn khi đó nó có thể thông báo cho chúng ta biết lượng lước trên thượng nguồn nhất là khi mùa mưa đến để đưa ra những thông báo về lũ chính xác nhất.
3.4. Trong nuôi trồng thuỷ sản
Ở nước ta số hộ sông ở ven biến thì việc nuôi trồng thủy sản đem lại nguồn lợi kinh tế rất lớn. Với một quy mô lớn với nhiều đầm nuôi thủy sản Trong khi đó nước chính là môi trường sống của các loài thủy sản việc môi trường sồng này bị ô nhiễm hay bị thiếu ô xy sẽ ảnh hưởng tới đời sống hay năng suất của nguồn thủy sản này. Trong khi đó việc theo dõi nguồn nuớc (các thông số của nguồn nước như nồng độ oxy độ PH trong nước) đề phải tiến hành trong phong thín nghiệm và việc đo đạc lại hết sức khó khăn do mỗi hồ nuôi tròng thủy sản thì nguông nước lại khac nhau. Chính vì vậy mạng cảm nhận không dây có thể ứng dụng được rất tốt ở đây.
Mạng cảm nhận không dây có thể được dùng để đo nồng độ ôxy độ PH trong các hồ nuôi trồng hải sản khi đó có thể điều khiển tự động các quạt đạp nước cung cấp ôxy cho đầm nầy và thông báo cho người chăn nuôi biết được tình hình về nguồn nước hiện tại trong các hồ nước này.
Hồ nuôi
Quạt đạp nước
Hình 3.4 : Sơ đồ ứng dụng của mạng cảm nhận không dây trong nuôi trồng thủy sản
Nút mạng có lắp Sensor đo ôxy hoặc CO2 được thả xuống đầm để đo lượng Ôxy gửi dữ liệu qua cac nút trung gian về máy tính, máy tính được kết nối và lập trình điều khiển bật tắt các quạt đạp nước trong một khoảng thời gian nhất định phụ thuộc vào nồng độ Ôxy đo được tại đầm tại các thời điểm khác nhau. Toàn bộ hệ thống được tiến hành tự động.
CHƯƠNG 4
THỰC NGHIỆM CỦA MẠNG CẢM NHẬN KHÔNG DÂY
4.1 Bài toán
Xây dựng mạng cảm nhận để đo nhiệt độ ở các diểm khác nhau. Đưa ra thông bao khi có nhiệt độ tại một nut lớn hơn mức cho phép
4.2 Mô hình của mạng cảm nhận
….
Nút 1
Nút 2
Nút n ( <=16)
Nút trung gian
Nút gốc
Hình 3.1: Mô hình của mạng cảm nhận
4.3 Mục đích của bài toán gốc
Đo nồng độ ôxy trong các hồ nuôi tôm kết nối với thiết bị điều khiển quạt nước.
Do mạng cảm nhận không dây ở nước ta mới trong quá trình nghiên cứu do vây điều kiên vật chất để em thực nghiệm là chưa có. Cụ thể là không có đầu đo nồng độ ôxy chính vì vậy mà việc đo nồng độ oxy xẽ được thay bằng đo nhiệt độ, Việc điều khiển quạt nước được thay bằng hiền thị thông báo trên màn hình PC.
4.4 Phân tích bài toán
4.4.1. yêu cầu cảu bài toán
Đo nhiệt độ ở môi trường trong các khu vực khác nhau sau đó giửi dữ liệu về máy tính thông qua mạng cảm nhận không dây. Máy tính nhận các dữ liệu do mạng cảm nhận không dây gửi về xử lý các dữ liệu đó rồi đưa ra thông báo cho người dùng nếu có nhiệt độ tại khu vực nào đó vượt qua ngưỡng cho phép.
4.4.2. Thiết kế mạng
Mạng gồm có các nút cảm nhận được gắng với các đầu đo nhiệt độ. Máy tính dùng để nhận dữ liệu
Các nút mạng thì gồm có nút cảm nhận, nút trung gian, nút nhận. Các nút cảm nhận thì đo nhiệt độ chuyển về nút nut trung gian, các nút trung gian nhận dữ liệu từ các nút cảm nhận gửi về rồi gửi về nút nhận. Nút nhận được kết nối trực tiếp với máy tính qua cổng com.
Kiến trúc mạng được sử dụng là kiến trúc hình cây là do số lượng các nút mạng trong qua trình thực nghiệm là nhỏ ( cả nước ta hiện có 7 nút mạng thì trường Đại học Quốc gia giữ 3 nút để phục vụ giảng dậy, chúng em chi được thực nghiệm trên 4 nút ) dẫn dến việc sử dụng các kiến trúc khác là khó khăn Vd như kiến trúc bó…
4.4.3. Thuật toán
B1: Nhiệt độ được đo tại các nút cảm nhận
B2: Dữ liệu nhiệt độ đo được tại các nút cảm nhận được gửi về nút trung gian.
B3: Nút trung gian sau khi nhận dữ liệu từ các nút cảm nhận gửi về thì gửi lại về nút nhận
B4: Nút nhận nhận dữ liệu từ nút trung gian sau đó chuyển về máy tính qua cổng com.
B5: Máy tính nhận được dữ liệu qua công com thì đọc dữ liệu đó và xử lý.
4.4.4. Sơ đồ khối
Nút cảm nhận
( Đo nhiệt độ )
Nút trung gian
Nút nhận
Cổng Com
(của máy tính )
Đọc
cổng Com
Hiển thị ra màn hình
Có dữ liệu
Đ
S
Không Có dữ liệu
Begin
Hình 3.3: Sơ đồ khối của bài toán
Mô tả sơ đồ: Dữ liệu về nhiệt độ được đo tại các nút cảm nhận sau đó được gửi về nút trung gian. Nút trung gian sau khi nhận được dữ liệu từ các nút cảm nhận gửi về thì gửi lại các thông tin đó về nút nhận. Nút nhận được kết nối với máy tính thông qua cổng Com khi đó dữ liệu sẽ được gửi từ nút nhận vào máy tính thông qua cổng Com. Chương trình trên máy tính sẽ có nhiệm vụ đọc dữ liệu từ cổng Com nếu có dữ liệu thì sử lý dữ liệu đó ( So sánh nhiệt độ nhậ dược với ngưỡng nhiệt độ cho phép, nếu vượt qua ngưỡng cho phép thì dưa ra cảnh báo )sau đó lại quay lại đọc cổng Com để cập nhật nhiệt độ tại thởi điểm hỉện thời. Nếu không có dữ liệu thì việc đọc dữ liệu từ cổng Com luôn luôn được thực hiện. Việc sau khi nhận được dữ liệu tự cổng Com sau đó bao lâu thì cập nhật dữ liệu mới là do người dùng.
4.4.5. Lập trình
A. Lập trình để nghi lên chip CC1010
* Chương trình dùng để lập trình
+ Keil uVision3 của hãng Keil Elektronik GmbF
* Tac dụng của chương trình : Dùng để dịch trương trình từ ngôn ngữ lập trình thành mã máy dưới dạng tệp tin *.hex tệp tin này sẽ được nạp vào chip thông qua chương trình CHIPCON CC1010 Flash programmer có trong bộ CC1010 Developement Kit để lạp trực tiếp vào chip
* Giao diện lập trình :
* Ngôn ngữ lập trình
Sử dụng ngôn ngũ lập trình C với các thư viện hỗ trợ của CC1010 một số thư viện hỗ trợ cần chú ý là
Hardware Definition Files (HDF)
Hardware Abstraction Library (HAL)
Chipcon Utility Library (CUL)
Application examples
Trong đó:
+ Hardware Definition Files (HDF) chứa địa chỉ của các thanh ghi, bản đồ véc tơ ngắt, và một số hằng số phần cứng khác được xác định trước. Nó bao gồm c
+ Hardware Abstraction Library (HAL): Thư viện này bao gồm rất nhiều các macro và các hàm nhằm làm đơn giản hoá việc truy cập vào phần cứng của CC1010.Thông qua việc gọi các macro và hàm này người sử dụng có thể truy cập vào các thành phần vi điều khiển một cách dễ dàng mà không cần phải tìm hiểu một cách chi tiết về phần cứng.
+ Chipcon Utility Library (CUL): Ngoài ra, modul HAL trong CC1010IDE cũng cung cấp một thư viện gồm các khối sẵn có để xây dựng việc truyền thông RF được đặt trong Chipcon Utility Library (CUL). Thư viện này cung cấp đầy đủ các hỗ trợ cho các ứng dụng RF đặc trưng và nó còn cung cấp một giao thức RF đầy đủ .
* Các hàm và các thư viện cơ bản
Do việc thiết kế mạng của bài toán mà phần lập trình có 3 phần cơ bản đó là lập trình cho chip dể đo nhiệt độ và truyền về nút trung gian, lập trình cho nút chung gian, lập trình cho nút được nối trực tiếp với máy tính.
+ Lập trình cho nút dùng để đo nhiệt độ
- Hàm main
void main (void) {
byte xdata n;
byte xdata m;
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
};
// Định dạng kích cỡ dữ liệu
RF_RXTXPAIR_CALDATA xdata RF_CALDATA;
// Khởi tạo các thiết bị ngoại vi
WDT_ENABLE(FALSE);
RLED_OE(TRUE);
YLED_OE(TRUE);
GLED_OE(TRUE);
BLED_OE(TRUE);
// Khởi động các chế dộ ưu tiên và tiêu thụ điện năng
MEM_NO_WAIT_STATES();
FLASH_SET_POWER_MODE(FLASH_STANDBY_BETWEEN_READS);
//
halRandomNumberGen(&n, 1);
halRandomNumberGen(&m, 1);
srand((n << 8) + m);
waitMultiplier = 1;
// Hàm dùng để cấu hình ADC
halConfigADC(ADC_MODE_SINGLE | ADC_REFERENCE_INTERNAL_1_25, CC1010EB_CLKFREQ, 0);
ADC_SELECT_INPUT(ADC_INPUT_AD1);
ADC_POWER(TRUE);
// Thiết lập các tuyến nhận
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;
// Khởi đông thiết bị bấm giờ
sppStartTimer(CC1010EB_CLKFREQ);
SPP_INIT_TIMEOUTS();
// Khởi tạo lại các nút mạng
for (n = 0; n < TBC_MAX_NODE_COUNT; n++) {
nodeIDs[n] = TBC_UNUSED_NODE_ID;
}
// Đặt lại tên cho nút mạng
for (n = 0; n < TBC_NODE_NAME_LENGTH; n++) {
nodeNames[0][n] = 0x00;
}
// Cài đặt các thiế bị vào ra
UART0_SETUP(57600,CC1010EB_CLKFREQ, UART_NO_PARITY | UART_RX_TX | UART_POLLED);
// Xuất ra tên
VT100_CLEAR_SCREEN();
VT100_GO_TOP_LEFT()
// Nạp tên từ bộ nhớ flash
memcpy(&nodeNames[0][0],flashUnitName,TBC_NODE_NAME_LENGTH);
nodeIDs[0] = TBC_MY_SPP_ADDRESS;
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];
}
+ Lập trình cho nút dùng trung gian
- Hàm sinh số ngẫu nhiên
halRandomNumberGen(&n, 1);
halRandomNumberGen(&m, 1);
srand((n << 8) + m);
waitMultiplier = 1;
- Nhận các gói tin gồm có tên nhiệt dộ và địa chỉ, chuyền các gói tin vừa nhậ được
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];
}
while (TRUE) {
tbcReceive();
// Tien hanh truyen goi tin nhan duoc
tbcTransmit();
tbcWaitRandom();
}
+ Nút nối trực tiếp với máy tính
- Đặt p2 ở chế độ out dữ liệu
P2DIR = 0X00;
- Nhận các dữ liệu và in ra các thông tin cần thiết rồi gửi về máy tính
while (TRUE) {
delay(2000);
tbcReceive();
for (n = 0; n <= TBC_MAX_NODE_COUNT; n++)
{
if (nodeIDs[n] == TBC_UNUSED_NODE_ID)
{
continue;
}
// Node name:
for (m = 0; m < TBC_NODE_NAME_LENGTH; m++) {
UART0_WAIT_AND_SEND(nodeNames[n][m]);
}
if(nodeIDs[n]==2){
// Temperature:
fTemp = nodeTemps[n];
fTemp -= 492;
fTemp /= 8.192;
sprintf(so,"%2.3f",fTemp);
// Chia ra các tình huống:
if(fTemp<70){
printf("Nhiet tai nut 1: %2.3f\n",fTemp);
printf("Tinh trang nut 1: An toan\n");
delayy(10000);
}
else{
printf("Nhiet tai nut 1: %2.3f\n",fTemp);
printf("Tinh trang nut 1: Bao dong\n");
delayy(10000);
}
}
else{
printf("Hien tai chua co du lieu\n");
}
}
B Lập trình chương trình sử lý trên máy tính
Chương trình sử lý trên máy tính có chức năng nhận những dữ liệu do mạng cảm nhận không dây gửi về đọc thông tin gửi về đó và phân ra các dữ liệu cần thiết : nhiệt độ hiện thời, địa chỉ nút. Sau đó so sánh nhiệt độ nhận được với nhiệt độ ở ngưỡng cho phép. Nếu nhiệt độ đó vượt qua ngưỡng thì mở tệp tin âm thanh đồng thời hiện lên dòng thông báo
* Ngôn ngũ lập trình
Ngôn ngũ lập trình được sử dụng là Visual Basic có trong bộ Visual Studio . Sử dụng ngôn ngữ lập trình này là do trong đó có hỗ trợ lập trình đa phương tiệm như : Đọc dữ liệu từ cổng Com, Lập trình âm thanh….
* Giao diện của chương trình sử lý trên máy tính
Khi nhiệt độ chuyền về chưa vượt qua ngưỡng cho phép :
Khi nhiệt độ chuyền về vượt qua ngưỡng cho phép ( Thực hiện cảnh báo ) :
*Các hàm chính của chương trình
Hàm dùng để thiết lập các giá trị tại cổng Com
Dim str As String
cmdngung.Enabled = True
Timer1.Enabled = True
cmdok.Enabled = False
If Check1.Value = 0 Or cbport.Text = "None" Or cbtime.Text = "None" Then
MsgBox "Chua thiet lap du thong tin", vbRetryCancel, "Thong bao loi"
Else
If cbport.Text = "COM1" Then
port = 1
End If
If cbport.Text = "COM2" Then
port = 2
End If
Timer1.Interval = CInt(cbtime.Text)
Label2.Caption = "§ang kÕt nèi víi m¹ng c¶m nhËn "
MSComm1.CommPort = port ' mo cong COM
MSComm1.Handshaking = 2 - comRTS
MSComm1.RThreshold = 1
MSComm1.RTSEnable = True
str = ""
str = str & 57600 & ",n," & 8 & "," & 1
MSComm1.Settings = str
MSComm1.SThreshold = 1
End If
End Sub
Dọan mã lấy đọc dữ liệu gửi về từ cổng Com sử lý và đua ra cảnh báo tại điều khiển timer
Private Sub Timer1_Timer()
Label1.Caption = Time
'===========lay thong tin nhiet do==============
Dim n As Integer, nhietdo As String, h As Integer
Dim diachi As String
Dim kt As String * 1
Dim nd As String * 7
Dim kt1 As String * 1
Dim tg As String * 10
If List1.List(0) = "" Or List1.List(1) = "" Then
List1.List(0) = "Danh sach nhiet do :"
List1.List(1) = "0. (0x9438) thunghem- TEMP: 25.5 - AGE (msecs): 20"
'End If
Else
'==========bat dau qua trinh ghi du lieu ============
Dim tenfile, sofile, temmp As Integer
Dim nguong, datnguong As Double
tenfile = App.Path
If Right(tenfile, 1) "\" Then tenfile = tenfile & "\"
tenfile = tenfile & "dulieu1.txt" ' Xuat ra ngoai file danhsach.txt
Const ForReading = 1, ForWriting = 2
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(tenfile, ForWriting, True)
f.Write Text1.Text
Set f = fso.OpenTextFile(tenfile, ForReading)
Do Until (f.AtEndOfStream)
writetofile = f.ReadLine
List1.List(1) = writetofile
Loop
m = Len(Trim(List1.List(1)))
h = 0
nhietdo = " "
For j = 1 To m
kt = Mid(List1.List(1), j, 1)
If kt = ":" Then
nd = Mid(List1.List(1), j + 1, 6)
nhietdo = nhietdo & nd
txtnhietdo.Text = Trim(nhietdo)
Exit For
End If
Next j
tg = " "
Dim state As String
state = 0
diachi = " "
For j = 1 To m
kt = Mid(Trim(List1.List(1)), j, 1)
If kt = ":" And state = 0 Then
state = 1
kt = Mid(Trim(List1.List(1)), j + 1, 1)
End If
If kt = "(" Then
tg = Mid(List1.List(1), j + 1, 6)
diachi = diachi & tg
txtdiachi.Text = Trim(diachi)
Exit For
End If
Next j
End If
nguong = CDbl(txtnhietdo.Text)
datnguong = CDbl(txtdatnguong.Text)
If nguong > datnguong Then
frmbaodong.Show
frmbaodong.WindowsMediaPlayer1.Controls.play
End If
If nguong < datnguong Then
frmbaodong.WindowsMediaPlayer1.Controls.stop
Unload frmbaodong
End If
'=====================
Text1.Text = ""
'==================Ket thuc==========================
End Sub
4.4.6. Kết quả của chương trình
Chương trình thu nhận thông tin nhiệt độ của môi trường ở các địa điểm khác nhau sau đó gửi về máy tính thông qua cổng Com. Chương trình trên máy tính sau khi nhận được dữ liệu từ mạng cảm nhận gửi về sẽ lấy thông của nhiệt độ của các nút mạng gửi về và đưa ra thông báo đồng phát một tệp tin âm thanh để cảnh báo cho người dùng.
4.4.7. Nhận xét và đánh giá chương trình
* Chương trình đã lập trình giúp các nút trong mạng có thể truyền dữ liệu cho nhau ( các nút cảm nhận gửi dữ liệu đến nút trung gian, nút trung gian nhận được dữ liệu và truyền đến nút nhận ). Nhận dữ liệu từ mạng cảm nhận không dây và đưa vào máy tính. Máy tính sử lý dữ liệu nhận đựơc. Và đưa ra cảnh báo.
* Giới hạn của trương trình: Do điều kiện thực tế số lượng các nút có hạn chính vì vậy mà việc thực nghiệm của em mới được tiến hành trên 3 nút trong đó một nút cảm nhận nhiệt độ, một nút trung gian và một nút nhận.
4.4.8. Phương hướng phát triển đề tài
Nếu số lượng nút mạng có đủ và có đầu đo nồng độ oxy cũng như độ PH trong nước và các nút có thể họa động được trong môi trường nước thì sẽ tiến hành làm ứng dụng trong nuôi trồng thủy sản. Khi đó hệ thống sẽ có ý nghĩa rất lớn trong thực tiễn để nâng cao năng suất trong việc nuôi trồng thủy sản.
Các Tài liệu liên quan
Tiếng việt
[1] 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- Nguyễn Thế Sơn.
[2]. Hòa Quang Dự , Phần mềm nhúng cho vi điều khiển CC1010 và phưong thức giải quyết vấn đề truyền dữ liệu không dây trên khoảng cách xa đến nơi nhận, Luận văn Cao học, Trường ĐHDL Hải Phòng.
[3]. Vương Đạo Vy, Trần Thanh Hải, Phạm Đình Tuấn, Trần Anh Tuấn, Hòa Quang Dự, Phùng Công Phi Khanh, Mạng cảm nhận không dây thu thập dữ liệu môi trường sử dụng vi điều khiển Chipcon CC1010, Khoa Điện tử - Viễn thông, Trường Đại học Công nghệ, ĐHQGHN
Tiếng anh
[4] wireless sensor networks: a survey I.F. Akyildiz, W. Su*, Y. Sankarasubramaniam, E. Cayirci
[5] Broadband and Wireless Networking Laboratory, School of Electrical and Computer Engineering, Georgia Institute of Technology,
Atlanta, GA 30332, USA.
[6]. Sensor Network Protocols – Deborah
[7] Guoliang Xing, Xiaorui Wang, Yuanfang Zhang, Chenyang Lu, Robert Pless, and Christopher D. Gill. Integrated coverage and connectivity configuration for energy conservation in sensor networks. ACM Transactions on Sensor Networks, 1(1), 2005.
[8]. Chipcon, CC1010IDE Manual (2003), www.Chipcon.com
[9].
PHỤ LỤC
Mã nguồn chương trình nạp vàp chíp cảm nhận dùng để đo nhiệt độ
/************************************************************* Chuong trinh truyen nhiet do di xa o muc nut don. O muc nay` khoang cach truyen
toi da la 300m ngoai troi, 150m trong nha
*************************************************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include
// Temperature 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_DATA_LEN (TBC_NODE_ID_LENGTH + TBC_NODE_NAME_LENGTH + TBC_TEMP_LENGTH)
// Radio related:
#define TBC_MY_SPP_ADDRESS 1
#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 temperature "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;
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
};
// 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_AD1);
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();
// Load name from Flash
memcpy(&nodeNames[0][0],flashUnitName,TBC_NODE_NAME_LENGTH);
// Get our ID from CRC16(our name)
nodeIDs[0] = TBC_MY_SPP_ADDRESS;
// 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();
tbcWaitRandom();
}
} // main
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) {
word xdata temp;
// Indicate transmission
RLED = LED_ON;
YLED = LED_ON;
// Power up the ADC and sample the temperature
ADC_SAMPLE_SINGLE();
temp = ADC_GET_SAMPLE_10BIT();
// Update the TX buffer and the table with the new temperature
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 temperature
sppSend(&TXI);
do { } while (sppStatus() != SPP_IDLE_MODE);
RLED = LED_OFF;
} // tbcTransmit
Mã nguồn chương trình nạp vàp chíp trung gian
/**************************************************************
chuong trinh` nhan va` truyen chuyen tiep tin hieu truyen duoc.
**************************************************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
// Temperature 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_DATA_LEN (TBC_NODE_ID_LENGTH + TBC_NODE_NAME_LENGTH + TBC_TEMP_LENGTH)
// Radio related:
#define TBC_MY_SPP_ADDRESS 2
#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 temperature "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;
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
};
// 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;
// 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();
// Load name from Flash
memcpy(&nodeNames[0][0],flashUnitName,TBC_NODE_NAME_LENGTH);
// Get our ID from CRC16(our name)
nodeIDs[0] = TBC_MY_SPP_ADDRESS;
// 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) {
tbcReceive();
// Tien hanh truyen goi tin nhan duoc
tbcTransmit();
tbcWaitRandom();
}
} // main
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) {
word xdata temp;
int m,n;
// Indicate transmission
RLED = LED_ON;
YLED = LED_ON;
for (n = 0; n <= TBC_MAX_NODE_COUNT; n++) {
if (nodeIDs[n] == TBC_UNUSED_NODE_ID) {
continue;
}
// Node name:
for (m = 0; m < TBC_NODE_NAME_LENGTH; m++) {
UART0_WAIT_AND_SEND(nodeNames[n][m]);
}
if(nodeIDs[n]==1){
// Temperature:
temp = nodeTemps[n];
break;
}
}
// temp=30;
// Update the TX buffer and the table with the new temperature
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 temperature
sppSend(&TXI);
do { /*nothing*/ } while (sppStatus() != SPP_IDLE_MODE);
RLED = LED_OFF;
} // tbcTransmit
void tbcReceive (void) {
byte xdata n,m,o;
byte xdata nodeIndex;
word xdata nodeID;
// Throw out "old" nodes (no updates during the last 3 seconds)
for (n = 0; n < TBC_MAX_NODE_COUNT; n++) {
if (((int) sppGetTime() - nodeLastT[n]) > 300) {
// 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 temperature 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
Mã nguồn chương trình nạp vàp chíp nối trực tiếp với máy tính
#include
#include
#include
#include
#include
#include
#include
#include
#include
//LCD define
#define LCDPORT P2
sbit _RS=LCDPORT^0;
sbit _RW=LCDPORT^1;
sbit _E =LCDPORT^2;
#include "lcd.h"
// Temperature 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_DATA_LEN (TBC_NODE_ID_LENGTH + TBC_NODE_NAME_LENGTH + TBC_TEMP_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 temperature "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);
void delayy(int ms);
// 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;
float xdata fTemp;
char so[15];
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
};
// 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;
// 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();
// Load name from Flash
memcpy(&nodeNames[0][0],flashUnitName,TBC_NODE_NAME_LENGTH);
// Get our ID from CRC16(our name)
nodeIDs[0] = TBC_MY_SPP_ADDRESS;
// 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];
}
// Dat P2 o che do out du lieu
P2DIR = 0X00;
// Loop forever
while (TRUE) {
delay(2000);
tbcReceive();
for (n = 0; n <= TBC_MAX_NODE_COUNT; n++) {
if (nodeIDs[n] == TBC_UNUSED_NODE_ID) {
continue;
}
// Node name:
for (m = 0; m < TBC_NODE_NAME_LENGTH; m++) {
UART0_WAIT_AND_SEND(nodeNames[n][m]);
}
if(nodeIDs[n]==2){
// Temperature:
fTemp = nodeTemps[n];
fTemp -= 492;
fTemp /= 8.192;
sprintf(so,"%2.3f",fTemp);
// Phan doan tinh` trang he thong:
if(fTemp<70){
printf("Nhiet tai nut 1: %2.3f\n",fTemp);
printf("Tinh trang nut 1: An toan\n");
delayy(10000);
}
else{
printf("Nhiet tai nut 1: %2.3f\n",fTemp);
printf("Tinh trang nut 1: Bao dong\n");
delayy(10000);
}
}
else{
printf("Hien tai chua co du lieu\n");
}
}
}
} // main
void tbcWaitRandom (void) {
byte xdata time;
byte xdata n;
time = rand();
for (n = 0; n < waitMultiplier; n++) {
halWait (time, CC1010EB_CLKFREQ);
}
} // tbcWaitRandom
void tbcReceive (void) {
byte xdata n,m,o;
byte xdata nodeIndex;
word xdata nodeID;
// Throw out "old" nodes (no updates during the last 3 seconds)
for (n = 0; n < TBC_MAX_NODE_COUNT; n++) {
if (((int) sppGetTime() - nodeLastT[n]) > 300) {
// 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 temperature 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
// ------------------------------
// ham delayy
// ------------------------------
void delayy(int ms){
int i,j;
for(i=0;i<125;i++) {
for(j=0;j<ms;j++)
{;}
}
}// delay
Các file đính kèm theo tài liệu này:
- bao cao LV.doc
- ung dung mang cam nhan.ppt