Đề tài Nghiên cứu xây dựng bộ điều khiển các thiết bị điện bằng sóng radio và thiết bị di động(GSM)

pdf 94 trang huongle 1650
Bạn đang xem 20 trang mẫu của tài liệu "Đề tài Nghiên cứu xây dựng bộ điều khiển các thiết bị điện bằng sóng radio và thiết bị di động(GSM)", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

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

  • pdfde_tai_nghien_cuu_xay_dung_bo_dieu_khien_cac_thiet_bi_dien_b.pdf

Nội dung text: Đề tài Nghiên cứu xây dựng bộ điều khiển các thiết bị điện bằng sóng radio và thiết bị di động(GSM)

  1. 1 LêI NãI §ÇU Ngôi nhà thông minh đang được nghiên cứu và phát triển trên thế giới. Việc điều khiển các thiết bị điện trong nhà trực tiếp và từ xa là yêu cầu cơ bản của điều khiển ngôi nhà thông minh. Việc điều khiển từ xa có thể có thiết bị riêng có thể sử dụng mạng internet và đặc biệt là sử dụng một phương tiện đang thịnh hành là điện thoại di động. Nghiên cứu ứng dụng công nghệ di động sử dụng cho mục đích ngoài thông tin liên lạc cũng đang trở thành một đề tài thu hút nhiều công trình khoa học trên thế giới cũng như trong nước tham gia. Chính vì thế đề tài “Nghiên cứu xây dựng bộ điều khiển các thiết bị điện bằng sóng radio và thiết bị di động(GSM)” chỉ tập trung vào nghiên cứu việc điều khiển từ xa thiết bị điện trong nhà bằng điện thoại di động nhằm bước đầu làm quen, tiếp cận và xây dựng hệ thống điều khiển từ xa cơ bản dựa trên công nghệ di động. Đề tài tập chung nghiên cứu xây dựng một hệ thống điều khiển đồng bộ bao gồm phần mềm trên máy tính nhận, xử lý các tin nhắn điều khiển, và phần cứng thực thi các lênh điều khiển đó. Phần cứng xây dựng dựa trên nền tảng là modem GSM và chip PIC của hãng Microchip. Đối tượng điều khiển là các thiết bị điện gia dụng với mục tiêu tạo thuận tiện cho người dùng trong việc bật tắt nguồn và giám sát thiết bị từ đó góp phần giảm thời gian tiêu hao năng lượng, thực hiện tiết kiệm điện, , đáp ứng nhu cầu điều khiển từ xa.
  2. 2 Chương 1 §iÒu khiÓn ng«i nhµ th«ng minh b»ng c«ng nghÖ di ®éng Nhà thông minh là ngôi nhà mà các thiết bị của nó có cấu trúc đặc biệt cho phép chủ nhân của chúng có thể điều khiển từ xa hoặc cho toàn bộ các thiết bị điện trong nhà hoạt động tự động theo chương trình định trước bằng 1 lệnh đơn giản. Ví dụ như, chủ nhà có thể sử dụng một chiếc điện thoại để ra lệnh cho hệ thống an ninh, điều khiển nhiệt độ, bật tắt một vài thiết bị, điều khiển hệ thống chiếu sáng, cho phép hệ thống giải trí hay hệ thống rạp hát tại nhà hoạt động, hay thực hiện nhiều tác vụ khác. Phạm vi của hệ thống “Ngôi nhà thông minh” ngày càng được mở rộng theo sự phát triển của công nghệ điện tử. Mạng của ngôi nhà bao gồm các hệ thống thông tin, giải trí, an ninh, điều khiển các phụ tải, điều hòa nhiệt độ . Các tín hiệu sẽ gửi lệnh tới các địa chỉ tương ứng hoặc các vị trí cụ thể của từng thiết bị. Hình 1.1. Mô hình tổng quan Mục đích của đề tài là thiết kế và thi công hệ thống điều khiển thiết bị điện từ xa bằng tin nhắn SMS thông qua mạng điện thoại di động với khả năng phản hồi trạng thái, kết quả điều khiển thiết bị bằng tin nhắn
  3. 3 phản hồi, và tự động gọi điện cho người điều khiển khi hệ thống đã hoàn thành nhiệm vụ, tạo cảm giác yên tâm cho người điều khiển. Một mô hình nhà thông minh đơn giản như trong hình 1.1 . Trong đó điện thoại di động làm tác nhân trung gian thông qua một hệ thống xử lý tín hiệu để điều khiển bật tắt các thiết bị như: tivi, tủ lạnh, máy giặt, đèn, quạt Như vậy điện thoại giờ đây ngoài các tính năng thông tin liên lạc còn được ứng dụng để điều khiển từ xa. Sẽ thật thuận tiện nếu chủ nhân ngôi nhà đang làm việc ở công ty hoặc đang trên đường trở về nhà, nhắn 1 tin nhắn yêu cầu ngôi nhà bật điều hòa hay bật bình nóng lạnh, lúc đó chủ nhân về tới nhà chỉ việc sử dụng, điều này sẽ giảm thiểu thời gian chờ đợi, mang lại tiện ích rất lớn. Hiện nay, “Ngôi nhà thông minh” đang được các nước trên thế giới nghiên cứu và xây dựng thành 1 hệ thống hoàn chỉnh, có rất nhiều phương án khác nhau để xây dựng. Điều khiển từ xa các thiết bị điện trong nhà qua điện thoại di động cũng là một phần của hướng nghiên cứu. 1.1. T×nh h×nh nghiªn cøu øng dông c«ng nghÖ di ®éng trong vµ ngoµi n•íc 1.1.1. VÊn ®Ò nghiªn cøu øng dông c«ng nghÖ di ®éng trong c¸c hÖ thèng ®iÒu khiÓn gi¸m s¸t trªn thÕ giíi Trong những năm gần đây, sự phát triển bùng nổ của công nghệ di động đã khiến công nghệ di động không còn đơn thuần chỉ dùng để liên lạc đàm thoại. Công nghệ di động được ứng dụng vào rất nhiều lĩnh vực khác nhau như: an ninh, giải trí, giao thông vận tải, và hiện nay công nghệ di động đang được triển khai ứng dụng trong các hệ thống điều khiển giám sát tự động, ứng dụng cho “Ngôi nhà thông minh” Trên thế giới hiện nay có rất nhiều hãng sản xuất thiết bị đưa các ứng dụng của công nghệ di động vào sản phẩm của mình. Hình 1.2. là 1 thiết bị điều khiển qua điện thoại di động của hãng Siemen.
  4. 4 Hình 1.2. Một thiết bị ứng dụng điện thoai di động Do những ưu việt của điện thoại di động, các hệ thống điều khiển qua điện thoại đi động đã được nhiều hãng sản xuất thiết bị trên thế giới phát triển. Đặc điểm cơ bản của các hệ thống này là có sự kết hợp chặt chẽ giữa thiết bị xử lý viễn thông (điện thoại hoặc modem GSM - Global System for Mobile Communications, mạng di động, ) và các hệ thống vi xử lý. System Cotroller System Cotroller Hình 1.3. Mô hình hệ thống điều khiển qua SMS
  5. 5 Một hệ thống cơ bản có thể thấy như ở Hình 1.3 là hệ thống kết nối qua tin nhắn SMS (Short Message System), trong đó điện thoại di động ngoài tính năng xử lý thông tin thông thường thì còn có thể kết nối với hệ thống máy tính. Chúng ta có thể coi điện thoại đầu cuối là Client và máy tính là Server. Thông tin điều khiển được chứa trong tin nhắn SMS tuỳ từng hệ thống quy định, ví dụ như “on10” thì có tác dụng bật đầu ra Output 10 để bật sáng Led hay động cơ hoặc thiết bị nào đã được kết nối. Tương tự, tin nhắn từ phần cứng Master có thể được thiết lập và gửi trở lại thiết bị đầu cuối cho biết trạng thái hệ thống. Ứng dụng trong công nghiệp: Trung tâm SMS công nghiệp (Industrial SMS Center) giúp người sử dụng truy cập nhanh chóng tới các hệ thống thông tin thông qua mạng nhắn tin GSM-SMS. Với những lợi ích từ hệ thống GSM (không dây), dữ liệu có thể được truy nhập ở mọi nơi, mọi lúc bởi bất cứ người sử dụng nào mà không cần có mặt tận nơi, SMS công nghiệp phát triển linh hoạt nhằm kết nối với các dữ liệu chuẩn từ của Yokogawa Exaquanium (gồm Wonderware InSQL, Oracle, SQL) và các cơ sở dữ liệu khác hỗ trợ DDE. Bên cạnh các hệ thống điều khiển sử dụng tin nhắn SMS còn có các hệ thống sử dụng giao thức truyền dữ liệu GPRS (General Packet Radio Service) hoặc MMS 1.1.2. VÊn ®Ò øng dông c«ng nghÖ di ®éng trong c¸c lÜnh vùc t¹i ViÖt Nam Tại Việt Nam, các mạng điện thoại di động đã và đang phát triển với tốc độ cao. Hiện nay chúng ta đã có 5 nhà cung cấp dịch vụ điện thoại di động lớn đó là: Viettel, Vinaphone, Mobile Phone, S-fone, EVN-Telecom . Sự cạnh tranh giữa các nhà cung cấp đã làm giá thành các dịch vụ trên điện thoại di động giảm đi nhiều lần so với trước đây và gần xấp xỉ với mức giá tại các nước phát triển. Ngoài việc sử dụng điện thoại di động cho mục đích liên lạc, hiện nay ở nước ta, điện thoại di động còn được sử dụng với các mục đích:
  6. 6 +) Dịch vụ truy cập internet trên điện thoại di động qua WAP hoặc GPRS. +) Dịch vụ giải trí dự đoán kết quá trên truyền hình và các dịch vụ dựa trên tin nhắn SMS khác. +) Ứng dụng công nghệ GSM vào quản lý vận hành giao thông +) Ứng dụng điện thoại di động trong điều khiển các thiết bị điện trong nhà Ngoài ra, còn một số dịch vụ khác trên điện thoại di động, nhưng nhiên ít phổ biến hơn. Đặc biệt, việc tích hợp các ứng dụng về bảo vệ, cảnh báo vào điện thoại di động chưa được phát triển, có thể do một số điều kiện hạ tầng trong nước chưa thích hợp, hoặc do các thiết bị hầu hết được nhập khẩu từ nước ngoài có giá thành khá cao và khá phức tạp. Hệ thống điều khiển giám sát qua điện thoại di động đã được hãng Siemens và một số hãng khác đưa vào giới thiệu tại nước ta trong năm 2006. Đặc tính của các hệ thống này là có khả năng tích hợp với các thiết bị điều khiển đã được lắp đặt của Siemen một cách đồng bộ. Tuy nhiên, nó thường chỉ sử dụng cho các ứng dụng trong công nghiệp và giá thành khá cao. 1.1. hÖ thèng ®iÒu khiÓn thiÕt bÞ ĐIỆN TỪ XA qua tin nh¾N CỦA ĐIỆN THOẠI DI ĐỘNG 1.2.1. Chøc n¨ng cña hÖ thèng Hiện nay, vấn đề tiết kiệm điện đang trở nên nóng bỏng tại nước ta. Có rất nhiều nguyên nhân khách quan và chủ quan dẫn đến lãng phí điện. Nếu có thể tích hợp khả năng tắt, mở các thiết bị dân dụng qua điện thoại di động sẽ tạo cho con người khả năng quan sát điều khiển các thiết bị trong gia đình ở bất cứ nơi đâu. Tiện ích này có thể góp phần vào việc tiết kiệm điện, hạn chế lãng phí điện và khai thác an toàn các thiết bị đó. Một ví dụ đơn giản về bình nóng lạnh, để có nước nóng chúng tả chỉ cần sử dụng điện thoại bật điện đun trước 15 phút thay vì bật liên tục.
  7. 7 Như vậy hệ thống điều khiển từ xa các thiết bị điện qua điện thoại di động được xây dựng với chức năng cơ bản là điều khiển và giám sát các thiết bị điện dân dụng qua điện thoại di động ứng dụng cho “Ngôi nhà thông minh”. 1.2.2. CÊu tróc cña hÖ thèng Hệ thống được cấu tạo từ 2 thành phần cơ bản: Thiết bị đầu cuối hay Client chính là điện thoại di động, và thiết bị phần cứng nhận, xử lý tin nhắn. Hình 1.4 là sơ đồ khối của hệ thống +) Thiết bị đầu cuối - Client Mobile: được sử dụng đồng thời là điện thoại liên lạc của người quản lý hệ thống (admin).Admin sẽ sử dụng điện thoại có gắn sim được đăng kí số thuê bao trong hệ thống, để nhắn tin điều khiển. +) Thiết bị phần cứng bao gồm: - Thiết bị nhận tin nhắn: Điện thoại Nokia6230 - Máy tính có chạy phần mểm điều khiển - Card điều khiển Thiết bị Client chấp Mobile hành SMS Tín hiệu Card phản hồi digital Modem điều GSM USB Máy tính RS232 khiển (Nokia 6230) Tín hiệu phản hồi Analog Hình 1.4. Sơ đồ khối hệ thống
  8. 8 Khi tin nhắn từ Admin được gửi tới thiết bị nhận tin nhắn, nó sẽ được xử lý qua máy tính, máy tính sẽ truyền các lệnh điều khiển trong nội dung tin cho card điều khiển để bật tắt thiết bị. Các tín hiệu phản hồi về trạng thái on/off , nhiệt độ của các thiết bị liên tục được cập nhập bởi Card điều khiển, và có thể được gửi tới Admin nếu Admin yêu cầu.
  9. 9 Chương 2 Vi ®iÒu khiÓn Pic16f877A, Modem Nokia6230 cÊu tróc tin nh¾n cña ®iÖn tho¹i 2.1. Vi ®iÒu khiÓn pic16F877A Hình 2.1. Sơ đồ chân của PIC16F877A 2.1.1. Giíi thiÖu chung PIC là tên viết tắt của Máy tính khả trình thông minh (Programable Intelligent Computer) do hãng General Instrument đặt tên, con vi điều khiển đầu tiên của họ là PIC1650. Hãng Microchip tiếp tục phát triển các dòng sản phẩm này. Cho đến nay, các sản phẩm vi điều khiển PIC của Microchip đã gần 100 loại, từ họ 10Fxxx đến các họ 12Cxxx, 17Cxx, 16Fxx, 16Fxxx, 16FxxxA, 16LFxxxA, 18Fxxx 18LFxxx. Trên hình 2.1 và hình 2.2 là sơ đồ chân của Pic16f877A
  10. 10 Hình 2.2. Sơ đồ chân của PIC16F877A Bảng 2.1. thông số kĩ thuật Pic6F877A
  11. 11 2.1.2 Ph©n lo¹i PIC theo ký tự +) Nhóm thứ nhất có ký tự C, họ PIC xxCxxx được đưa vào một nhóm, gọi là OTP (One Time Programable) chỉ có thể lập trình một lần duy nhất. +) Nhóm thứ hai có ký tự F, LF, họ PIC xxFxxx, xxFxxx, gọi là Flash, cho phép ghi/xóa nhiều lần bắng các mạch điện thông thường. 2.1.3. Ph©n lo¹i PIC theo ký số +) Loại thứ nhất là dòng PIC cơ bản (Base-Line), gồm các PIC 12Cxxx, có độ dài lệnh là 12 bit. +) Loại thứ hai là các dòng PIC 10F, 12F, và 16F, gọi là dòng phổ thông (Mid-Range), có độ dài lệnh là 14 bit. +) Loại thứ ba là dòng PIC 18F (High-End), có độ dài lệnh là 16 bit. PIC là một vi điều khiển với kiến trúc RISC, sử dụng microcode đơn giản đặt trong ROM, chạy một lệnh một chu kỳ máy (4 chu kỳ của bộ dao động). PIC nhờ có EEPROM nên tạo thành 1 bộ điều khiển vào ra khả trình, có rất nhiều dòng PIC với hàng loạt các mô-đun ngoại vi tích hợp sẵn (như USART, PWM, ADC ), với bộ nhớ chương trình từ 512 Word đến 32K Word. PIC16F877A là dòng PIC phổ biến nhất, đủ mạnh về tính năng, 40 chân, bộ nhớ đủ lớn cho hầu hết các ứng dụng thông thuờng. 2.1.4. CÊu tróc tæng qu¸t PIC16F877A +) 8 K Flash ROM +) 368 bytes RAM +) 256 bytes EEPROM +) 5 Port I/O (A, B, C, D, E), ngõ vào/ra với tín hiệu điều khiển độc lập +) 2 bộ định thời 8 bit Timer 0 và Timer 2 +) 1 bộ định thời 16 bit Timer 1, có thể hoạt động trong cả chế độ tiết kiệm năng lượng (Sleep Mode) với nguồn xung clock ngoài +) 2 bộ CCP, Capture/Compare/PWM - tạm gọi là: Bắt giữ / So sánh / Điều biến xung
  12. 12 +) 1 bộ biến đổi tương tự – số (ADC) 10 bit, 8 ngõ vào +) 2 bộ so sánh tương tự (Comparator) +) 1 bộ định thời giám sát (WDT – Watch Dog Timer) +) 1 cổng song song (Parallel Port) 8 bit với các tín hiệu điều khiển +) 1 cổng nối tiếp (Serial Port) +) 15 nguồn ngắt (Interrupt) +) Chế độ tiết kiệm năng lượng (Sleep Mode) TM +) Nạp chương trình bằng cổng nối tiếp ICSP (In-Circuit Serial Programing) +) Nguồn dao động lập trình được tạo bằng công nghệ CMOS +) 35 tập lệnh có độ dài 14 bit +) Tần số hoạt động tối đa là 20 MHz - Cấu trúc phần cứng PIC16F877A PIC là một vi điều khiển với kiến trúc RISC, chạy một lệnh một chu kỳ máy (4 chu kỳ của bộ dao động).Trên hình 2.3 là sơ đồ khối phần cứng của Vi điều khiển Pic16f877A, PIC16F877A là họ vi điều khiển có 40 chân, mỗi chân có một chức năng khác nhau. Trong đó có một số chân đa công dụng (đa hợp), mỗi chân có thể hoạt động như một đường xuất/nhập (I/O) độc lập hoặc là một chức năng đặc biệt dùng để giao tiếp với các thiết bị ngoại vi.
  13. 13 Hình 2.3. Sơ đồ khối của PIC16F877A
  14. 14 2.2. HÖ thèng th«ng tin di ®éng toµn cÇu GSM 2.2.1. Giíi thiÖu chung GSM (Global System for Mobile communications) là hệ thống thông tin di động toàn cầu sử dụng kỹ thuật đa truy cập phân chia theo thời gian TDMA. GSM ra đời đầu tiên tại châu Âu, từ nghiên cứu vào năm 1982, các nước Bắc Âu gửi đề nghị đến CEPT để quy định một dịch vụ viễn thông chung toàn châu Âu ở băng tần 900 MHz. Hệ thống GSM chính thức đưa vào sử dụng năm 1991 ở một số nước châu Âu và trở thành hệ thống thông tin di động toàn cầu. Hệ thống GSM lần đầu xuất hiện tại Việt Nam vào năm 1993. Tính đến nay hệ thống GSM được phát triển mạnh, tương đối hoàn chỉnh, bao gồm nhiều giao diện vô tuyến, kết cấu mạng, các giao diện và dịch vụ khác nhau. Tuy nhiên trong tương lai do một số yêu cầu về bảo mật và các dịch vụ mở rộng, công nghệ GSM có thể sẽ được thay thế dần bởi các công nghệ truyền thông thế hệ mới. Trong mỗi máy di động cầm tay khi liên lạc, nhà quản lý điều hành mạng sẽ quản lý theo hai mã số: - Số SIM đây là mã nhận dạng di động thuê bao Quốc tế, dựa vào mã số này mà nhà quản lý có thể quản lý được các cuộc gọi cũng như các dịch vụ gia tăng khác . - Số IMEI đây là số nhận dạng di động Quốc tế, số này được nạp vào bộ nhớ ROM khi điện thoại được xuất xưởng, mỗi máy điện thoại có một số IMEI duy nhất, ở các nước trên thế giới số IMEI được các nhà cung cấp dịch vụ quản lý, vì vậy ở nước ngoài nếu một điện thoại di động bị đánh cắp thì chúng cũng không thể sử dụng được . 2.2.2. C¸c dÞch vô trªn GSM Dịch vụ được cung cấp phụ thuộc vào 3 yếu tố sau: - Nhu cầu sử dụng dịch vụ của khách hàng - Khả năng thực hiện dịch vụ của mạng mà thuê bao đăng ký - Chức năng được hỗ trợ của thiết bị mà thuê bao sử dụng
  15. 15 2.2.2.1. DÞch vô tho¹i Đây là dịch vụ quan trọng nhất được cung cấp bởi GSM. Nó cho phép các cuộc gọi hai chiều diễn ra giữa người sử dụng GSM và bất kỳ thuê bao nào trong tất cả các mạng điện thoại. Dịch vụ cuộc gọi khẩn là một loại dịch vụ khác bắt nguồn từ dịch vụ thoại. Dịch vụ cuộc gọi khẩn cho phép người sử dụng có thể liên lạc với các dịch vụ khẩn cấp như cảnh sát hay cứu hoả mà có thể có hay không có SIM card trong máy di động. Một dịch vụ khác nữa là hộp thư thoại, cho phép lưu trữ các bản tin thoại rồi lấy ra ở thời điểm bất kỳ. 2.2.2.2. DÞch vô d÷ liÖu GSM được thiết kế để cung cấp rất nhiều các dịch vụ dữ liệu. Các dịch vụ dữ liệu được phân biệt với nhau bởi người sử dụng phương tiện (người sử dụng của mạng điện thoại, của mạng ISDN hoặc một mạng đặc biệt), bởi bản chất của luồng thông tin đầu cuối (dữ liệu thô, fax, videotext, teletext, ) bởi phương tiện truyền dẫn (gói hay mạch, đồng bộ hay không đồng bộ, ) hay bởi bản chất của thiết bị đầu cuối. Tốc độ dữ liệu được cung cấp bởi GSM là 300 bps, 600 bps, 1200 bps, 2400 bps, và 9600bps. Trong thế hệ GSM 2+, mạng có thể được cải tiến để cung cấp tốc độ truyền dữ liệu cao hơn. Dữ liệu chuyển mạch mạch tốc độ cao (HSCSD) cung cấp tốc độ đến 64 kbit/s, cho phép nối liền thực sự với ISDN. Dịch vụ vô tuyến gói chung (GPRS) cung cấp tốc độ dữ liệu lên đến 100 kbit/s. Cả HSCSD và GPRS đều hoạt động trên nền cơ sở hạ tầng của GSM với sự nâng cấp chi phí thấp. 2.2.2.3. DÞch vô nh¾n tin ng¾n Dịch vụ nhắn tin ngắn (SMS - Short Message Service) là dịch vụ gửi và nhận bản tin ngắn giữa các máy điện thoại di động. Bản tin nhắn có thể bao gồm các ký tự chữ và số. SMS được tạo ra như là một phần của chuẩn GSM pha 1. Lần đầu tiên SMS được gửi từ PC tới điện thoại di động là vào tháng
  16. 16 12 năm 1992 trên mạng Vodaphone GSM ở Anh. Mỗi bản tin nhắn có thể có độ dài tới 160 ký tự nếu sử dụng bảng chữ cái Latin, hoặc 70 ký tự, nếu sử dụng bảng chữ cái phi Latin (chẳng hạn như bảng chữ cái Ả rập hoặc Trung Quốc, hoặc bảng mã Unicode). Có hai loại dịch vụ nhắn tin ngắn: - Dịch vụ nhắn tin ngắn truyền điểm-điểm: là loại bản tin truyền giữa hai thuê bao. Có hai loại: +) Dịch vụ nhắn tin ngắn kết cuối Mobile, điểm-điểm (SMS- MT/PP): là loại dịch vụ cho phép máy di động nhận các bản tin ngắn. +) Dịch vụ nhắn tin ngắn khởi đầu từ Mobile, điểm-điểm cho phép người sử dụng GSM gửi bản tin đến người sử dụng GSM khác. - Dịch vụ nhắn tin ngắn phát quảng bá: cho phép các bản tin ngắn gửi đến tất cả các máy di động trong một vùng địa lý nhất định. 2.2.2.4. C¸c dÞch vô kh¸c Các dịch vụ bổ sung và làm phong phú thêm các dịch vụ cơ bản, chủ yếu cho phép người sử dụng lựa chọn cuộc gọi đến và đi sẽ được mạng xử lý như thế nào hoặc cung cấp cho người sử dụng các thông tin cho phép sử dụng dịch vụ một cách hiệu quả hơn. 2.3. Modem nokia 6230 Điện thoại di động (ĐTDĐ) còn được biết tới như một modem không dây hay GSM Modem. Nếu như modem là thiết bị truyền nhận dữ liệu qua dây (wire) thì ĐTDĐ là thiết bị truyền nhận dữ liệu qua sóng vô tuyến (wireless). Cũng như modem, chúng ta hoàn toàn có thể điều khiển được ĐTDĐ qua tập lệnh AT do Viện Tiêu Chuẩn Viễn Thông Châu Âu (EuropeanTelecommunication Standards Institute - ETSI) đưa ra. Trong phạm vi nghiên cứu cấp sinh viên tôi sử dụng điện thoại di động nokia 6230 làm modem cho mô hình của mình. Modem6230 là điện thoại có hỗ trợ các tập lệnh AT cho việc truy cập vào máy để đọc, gửi tin nhắn .
  17. 17 Các đặc điểm của Modem6230 - Giao ng truyền usb(sử dụng cáp dữ liệu DKU2) - Hỗ trợ các tập lênh AT cho việc truy cập vào modem - Tốc độ gửi tin nhắn nhanh Do modem chỉ hỗ trợ giao tiếp qua đường usb lên việc giao tiếp trực tiếp với vi điều khiển trở lên khó khăn . do đó chỉ có thể giao tiếp được thông qua máy tính( làm nhân tố trung gian) để điều khiển và giám sát. . Khi gắn cab nối DKU2 vào modem và máy tính thì đòi hỏi máy tính cần phải cài driver của modem để có thể sử dụng được. Sau khi cài driver, máy tính sẽ tạo ra 1 cổng com ảo, và mọi việc giao tiếp với modem sẽ thông qua cổng com này. 2.4. Ph©n tÝch lÖnh vµ cÊu tróc tin nh¾n Để truy cập vào bộ nhớ trong sim cho việc đọc, gửi tin nhắn, ta phải sử dụng tập lênh AT. Lệnh giao tiếp luôn bắt đầu bằng chuỗi “AT” và kết thúc bằng ký tự (có giá trị là 13 trong bảng mã ACCII). Thông tin trả về từ modem luôn được bắt đầu và kết thúc bởi 2 ký tự đi kèm (giá trị 13 và 10 trong mã ACCII). - Nếu lệnh truyển cho module không đúng chuỗi ERROR sẽ được trả về. - Nếu lệnh truyền đi đúng nhưng thông số bị sai thì chuỗi +CME ERROR : hoặc +CME ERROR : trả về với lỗi code. - Nếu lệnh truyền đi đúng và thành công thì chuỗi OK sẽ được trả về - Khi một tin nhắn được gửi tới modem chúng ta sẽ sử dụng lênh sau để đọc tin:
  18. 18 AT+CMGF=1 AT+CMGL=”REC UNREAD” Trong đó lệnh : AT+CMGF=1 để set modem sang chế độ textmod, là chế độ đọc tin nhắn dạng text, nếu không sử dụng lênh này thì mặc định modem sẽ trả về tin nhắn dang Binary lúc đó phải giải mã chuỗi Binary. Lệnh AT+CMGL=”REC UNREAD” là lệnh đọc tin nhắn với những tin mới nhất, ở đây ta chỉ quan tâm tới những tin nhắn mới nhất, các tin đã được đọc thì sẽ không được hiện với lệnh này. Sau khi sử dụng 2 lệnh trên modem sẽ trả về cho máy tính 1 chuỗi tin nhắn có cấu trúc như sau: +CMGL: , "REC UNREAD", " ", , , OK - Modem6230 chỉ hỗ trợ tới 40 tin nhắn có trong mục inbox của máy, nếu vượt quá con số này thì mặc dù bản thân modem vẫn nhận được tin nhắn gửi đến , nhưng khi sử dụng lênh trên để đọc tin nhắn sẽ không có tác dụng. Vì vậy mỗi khi đọc tin nhắn xong, ta phải xóa tin nhắn đó đi để tránh trường hợp vượt quá số lượng tin nhắn cho phép. Cấu trúc lệnh xóa tin nhắn: AT+CMGD= - Lệnh gửi tin nhắn phản hồi: AT+CMGS= [Nội dung tin nhắn] - Lệnh gọi điện : ATD ; - Lệnh kết thúc cuộc gọi : AT+CHUP Như vậy, với tập lênh AT ta hoàn toàn có thể truy cập vào điện thoại di động để điều khiển. Ứng với mỗi loại điện thoại cụ thể sẽ có tập lênh AT
  19. 19 tương ứng với Modull bên trong điện thoại và do các hãng quy định khác nhau. Trong phạm vi đề tài, tôi sử dụng các lệnh trên cho các modem GSM của hãng Nokia, vì vậy nó có thể được sử dụng ở hầu hết các điện thoại của hãng Nokia.
  20. 20 Chương 3 ThiÕt kÕ phÇn cøng, x©y dùng phÇn mÒm ®iÒu khiÓn c¸c thiÕt bÞ ®iÖn trong nhµ Hệ Thống điều khiển qua tin nhắn SMS được phân chia thành 3 khối (Hình 3.1): +) Khối nhận tin nhắn SMS ( Điện thoại di động) Nhận tin nhắn SMS Xử lý Điều khiển tin nhắn thiết bị Hình 3.1. Sơ đồ khối của hệ thống Thiết bị nhận tin nhắn SMS được sử dụng là modem nokia 6230. modem kết nối với máy tính qua cáp truyền usb (DKU-2). Để sử dụng được modem , máy tính cần phải cài đặt driver của cáp DKU-2 có trong CD di kèm với cáp. Modem có nhiệm vụ nhận tin nhắn đến và truyền nội dung tin nhắn cho máy tính. +) Khối chương trình xử lý tin nhắn ( Máy tính và phần mềm): Phần mềm có nhiệm vụ : - Xử lý nội dung tin nhắn có trong modem - Truyền lệnh điều khiển cho khối điều khiển thiết bị - Trình diễn thông tin về trạng thái thiết bị lên giao diện chính - Đưa ra lệnh tương tác với tin nhắn và lệnh gọi thoại cho modem +) Khối điều khiển thiết bị ( Vi điều khiển) Khối này bao gồm mạch điều khiển, và mạch động lực có nhiệm vụ :
  21. 21 - Điều khiển đóng mở thiết bị điện trong nhà - Thu thập thông tin về trạng thái đóng mở, nhiệt độ của các thiết bị. 3.1. THIÕT KÕ CARD §IÒU KHIÓN Do Vi điều khiển Pic16f877A tích hợp sẵn bộ chuyển đổi ADC 10bit do đó ta sẽ sử dụng các chân đầu vào analog (AN0-AN7) làm các chân đo nhiệt độ của các thiết bị.Các chân từ D0-D6 sẽ làm 7 chân đầu ra điều khiển ,Các chân từ B0-B6 sẽ làm 7 chân đầu vào biểu hiện cho trạng thái đóng mở của 7 thiết bị điện. Ngoài ra Vi điều khiển Pic 16f877A còn cho phép sử dụng nhiều cổng giao tiếp bằng cách set các chân RXD và TXD tương ứng(Multi RS232). Như vậy ta có thê mở rộng được cổng giao tiếp RS232 để sử dụng cho mục đích mở rộng đầu vào/ra thiết bị. Các chân của portC sẽ được set làm cổng giao tiếp RS232 đó là các chân: RC4, RC5: giao tiếp với modun mở rộng. RC6,RC7 sẽ giao tiếp với máy tính để nhận tín hiệu điều khiển từ máy tính. Các cổng giao tiếp này đều có tốc độ: 9600 baud ,8bit chẵn lẻ, 1 bit stop. 3.1.1. S¬ ®å m¹ch nguån cho vi ®iÒu khiÓn + - Hình 3.2. Sơ đồ mạch nguồn cho vi điều khiển
  22. 22 Hình 3.2 là sơ đồ mạch nguồn cho vi điều khiển. Nguồn cấp cho vi điều khiển là nguồn +5V, và cần ổn định, mạch nguồn sử dụng IC ổn áp 7805, là loại Ic cho đầu ra nguồn +5V,đầu vào J9 có mức điện áp là +12V, các tụ C7(0.1uF),C8(0.33uF) là các tụ lọc để loại trừ nhiễu cho vi điều khiển. 3.1.2. S¬ ®å m¹ch giao tiÕp RS232 Hình 3.3.Sơ đồ mạch giao tiếp RS232 Tín hiệu RS232 từ cổng com của máy tính có mức điện áp là: +12V(mức 0) và -12V (mức 1). Tuy nhiên tín hiệu RS232 từ Pic16f877A lại có mức điện áp: 0V(mức 0), 5V(mức 1).Để thực hiện giao tiếp, cần phải chuyển đổi giữa 2 mức điện áp này. Hình 3.3 là sơ đồ mạch giao tiếp giữa máy tính với Vi điều khiển pic16f877A. IC Max232 trong sơ đồ sẽ thực hiện việc chuyển đổi chuẩn RS232 của máy tính sang TLL , điện áp đầu vào sẽ bị đổi mức ở đầu ra. Cụ thể: áp ra chân 7 là +12V thì chân 10 (ngõ vào của chân 7) áp sẽ là 0V, ngược lại nếu áp chân 7 là -12V thì tại chân 10 áp sẽ là 5V, tương tự với chân 8 và 9 của MAX232, khi áp chân 8 là +12V thì tai chân 9 áp sẽ là 0V, nếu tại chân 8 áp vào là -12V thì chân 9 áp là 5V. 2 điện trở R2,R3 có tác dụng làm tăng trở kháng của mạch, tránh gây hỏng cổng RS232
  23. 23 của máy tinh do chạm chập trong quá trình ghép nối . Sơ đồ nguyên lý mạch điều khiển được thể hiện trên hình 3.4 3.1.3. S¬ ®å nguyªn lý m¹ch ®iÒu khiÓn Hình 3.4 Sơ đồ nguyên lý mạch điều khiển
  24. 24 Hình 3.5 Sơ đồ mạch in điều khiển
  25. 25 3.2. ThiÕt kÕ m¹ch ®éng lùc Mạch động lực có tác dụng đóng mở Role cấp nguồn 220V cho các thiết bị điện gia dụng. Hình 3.6 là sơ đồ nguyên lý mạch động lực. Tín hiệu đầu ra từ các chân của vi điều khiển có mức điện áp +5V sẽ được khuyếch đại để đóng mở cho Role 12V qua IC UNL2003A Để phản hồi trạng thái on/off của thiết bị, trong đề tài đã sử dụng tiếp điểm đầu ra của Rơle để tạo tín hiệu phản hồi trang thái, khi đó Rơle được chọn là loại Rơle 8 chân, có mức điện áp đầu vào cuộn hút là 12V, điện áp tiếp điểm là 220V xoay chiều. Một tiếp điểm đầu ra dùng làm công tắc đóng mở cấp nguồn cho diode ghép quang, tạo ra tín hiệu phản hồi cho vi điều khiển, để báo thiết bị đã được cấp nguồn . Tiếp điểm thứ 2 dùng để đóng cắt nguồn cho thiết bị. Các đầu vào IN(1B-7B) của UNL2003A được nối với các chân D0-D6 của vi điều khiển. Các đầu phản hồi tín hiệu “Back” được nối với các chân B0-B6 của Vi điều khiển. Sau khi thiết kế tác giả đã thực hiện chế tạo mạch in hình 3.7, chọn các linh kiện cần thiết, lắp ráp ra thiết bị hoàn chỉnh hình 3.8
  26. 26 Hình 3.6. Sơ đồ nguyên lý mạch động lực
  27. 27 Hình 3.7. Sơ đồ mạch in mạch động lực
  28. 28 Hình 3.8. Mạch thực tế sau khi thiết kế và thi công
  29. 29 3.3. XÂY DỰNG PHẦN MỀM TRÊN MÁY TÍNH 3.3.1. L•u ®å thuËt gi¶i Trên hình 3.9 là sơ đồ thuật giải điều khiển các thiết bị qua điện thoại di động. Begin Delay 5s Xóa tin S Kiểm tra Hiển thị trạng thái thiết tin nhắn Điều khiển từ bị PC Đ S Kiểm tra Số thuê bao Đ Delay 3s Truyền tín hiệu cho vi điều khiển Gọi điện cho số thuê bao nhắn tin S Tín hiệu yêu cầu phản hồi “RT” Đ Nhắn tin phản hồi trạng thái thiết bị Hình.3.9 Sơ đồ thuật giải điều khiển từ xa thiết bị điện qu di động
  30. 30 Giải thích Ban đầu, Vi điều khiển sẽ truyền tín hiệu yêu cầu chương trình kiểm tra tin nhắn mới, tín hiệu này cứ 5 giây sẽ được phát một lần. Nếu có tin nhắn mới được nhắn tới, chương trình sẽ kiểm tra số thuê bao nhắn tin, nếu số đó trùng với 1 trong 4 số thuê bao được đăng kí trong chương tình thì sẽ xử lý nội dung tin. Nội dung tin nhắn sẽ được cắt nhỏ (dựa vào dấu “,” có trong tin) :”on1,on2,off5,on10” sau đó truyền cho vi điều khiển. Tiếp theo chương trình sẽ gọi điện cho số máy nhắn tin đó, thời gian đợi là 10s, để báo cho người điều khiển biết hệ thống đă hoàn thành nhiệm vụ . Đồng thời chương trình sẽ kiểm tra trong nội dung tin nhắn có yêu cầu nhắn tin phản hồi hay không ( trong tin nhắn có kí tự “RT”) nếu có, chương trình sẽ nhắn tin phản hồi trang thái các thiết bị. Tín hiệu phản hồi trạng thái thiết bị truyền từ vi điều khiển tới máy tính sẽ được cập nhập liên tục (0,5s). Ngoài ra có thể điều khiển trực tiếp các thiết bị từ giao diện chính của chương trình. 3.3.2. X©y dùng phÇn mÒm Để tạo giao diện thân thiện cho người sử dụng, tôi lựa chọn 2 ngôn ngữ lập trình là ActionScript và Visual Basic 6.0. ActionScript là 1 ngôn ngữ lập trình flash ứng dụng cho thiết kế web. Flash movie gồm các scence(cảnh) , mỗi cảnh sẽ có 1 timeline(thời gian biểu), trong timeline sẽ có các frame(khung) bắt đầu từ số 1. Thông thường thì Flash sẽ chạy từ frame 1 tới frame cuối cùng. Việc nhúng Flash trong Visual Basic sẽ tạo ra những hiệu ứng đẹp mắt mà vẫn giữ được các tính năng của chương trinh. ActionScript sử dụng trong Flash nhằm giao tiếp với Visual Basic để thực hiện các lệnh điều khiển từ người dùng. Flash sẽ được nhúng trong Visualbasic, 2 chương trình sẽ giao tiếp với nhau thông qua lệnh “Fscommand” Ví Dụ: Trong flash khi muốn truyền thông số cho Visual Basic, ta lập trình như sau:
  31. 31 fscommand("b1","true"); khi đó trong Visual Basic ta dùng hàm sau để nhận thông số đó: Private Sub swfF_FSCommand(ByVal command As String, ByVal args As String) Lúc này biến command sẽ được gán là “b1” còn biến args sẽ được gán là “true”. Như vậy trong Visual Basic ta đã thu được 2 thông số là “b1” và “true” từ giao diện flash, phục vụ cho việc xử lý dữ liệu từ người dùng. Để điều khiển một đối tượng trong flash từ Visual Basic ta dùng hàm sau: swfF.SetVariable "b1", false Khi đó biến “b1” trong flash sẽ có giá trị là “false” +) Viết giao diện: - Giao diện chính (Hình 3.10): Ở giao diện này người điều khiển có thể quan sát và điều khiển trực tiếp các thiết bị, bằng các nút ấn trong chương trình. Hình 3.10. Giao diện chính của chương trình - Mục seting: khi click vào Buttion Seting người sử dụng sẽ vào 1 trong các lựa chọn sau: + Seting lưu số điện thoại điều khiển (Hình 3.11): Người điều khiển muốn điều khiển được thiết bị thì bắt buộc phải nhập số điện thoại cho phép
  32. 32 điều khiển vào trong mục này. Chương trình hỗ trợ 4 số điện thoại điều khiển. Tuy nhiên không nhất thiết phải nhập cả 4 số, có thể chỉ nhập 1, 2 hay 3 số Hình 3.11. Seting lưu số điện thoại điều khiển Nhập xong, click save , chương trình sẽ lưu lại cho lần sử dụng tiếp theo + Seting lựa chọn tiêu đề hiển thị cho kênh analog (Hình 3.12): Chọn mục này, người điều khiển có thể thay đổi chữ hiển thị nhiệt độ trên giao diện chính. Ví dụ: Nhiet do phong 1 la: , Hoặc: Nhiet do binh nong lanh la:
  33. 33 Hình 3.12. Seting lựa chọn tiêu đề hiển thị nhiệt độ Hình 3.13. Seting lựa chọn cổng com cho vi điều khiển và điện thoại
  34. 34 + Seting lựa chọn cổng giao tiếp với vi điều khiển và điện thoại (Hình 3.13): Ở mỗi máy tính có rất nhiều cổng giao tiếp, gồm cả cổng ảo (do chương trình tạo ra) và cổng thật trên phần cứng của máy tính, Vì vậy việc lựa chọn đúng cổng giao tiếp là rất quan trọng. Điện thoại giao tiếp với máy tính qua cổng com ảo, còn Vi điều khiển giao tiếp với máy tính qua cổng RS232 có trên phần cứng máy tính. Code chương trình con stop(); _root.onEnterFrame = function() { if (tt0=="1") {CopyOf_windmill1._alpha=100; CopyOf_windmill1.play(); } else if (tt0=="0") {CopyOf_windmill1._alpha=0; CopyOf_windmill1.stop(1);} if (tt1=="1") {CopyOf_windmill2._alpha=100; CopyOf_windmill2.play(); } else if (tt1=="0") {CopyOf_windmill2._alpha=0; CopyOf_windmill2.stop(1);} if (tt2=="1") {CopyOf_windmill3._alpha=100; CopyOf_windmill3.play(); } else if (tt2=="0") {CopyOf_windmill3._alpha=0; CopyOf_windmill3.stop();} if (tt3=="1")
  35. 35 {CopyOf_windmill4._alpha=100; CopyOf_windmill4.play(); } else if (tt3=="0") {CopyOf_windmill4._alpha=0; CopyOf_windmill4.stop();} if (tt4=="1") {CopyOf_windmill5._alpha=100; CopyOf_windmill5.play(); } else if (tt4=="0") {CopyOf_windmill5._alpha=0; CopyOf_windmill5.stop();} if (tt5=="1") {CopyOf_windmill6._alpha=100; CopyOf_windmill6.play(); } else if (tt5=="0") {CopyOf_windmill6._alpha=0; CopyOf_windmill6.stop();} if (tt6=="1") {CopyOf_windmill7._alpha=100; CopyOf_windmill7.play(); } else if (tt6=="0") {CopyOf_windmill7._alpha=0; CopyOf_windmill7.stop();} if (tt7=="1") {CopyOf_windmill8._alpha=100; CopyOf_windmill8.play(); } else if (tt7=="0") {CopyOf_windmill8._alpha=0;
  36. 36 CopyOf_windmill8.stop();} if (tt8=="1") {CopyOf_windmill9._alpha=100; CopyOf_windmill9.play(); } else if (tt8=="0") {CopyOf_windmill9._alpha=0; CopyOf_windmill9.stop();} if (tt9=="1") {CopyOf_windmill10._alpha=100; CopyOf_windmill10.play(); } else if (tt9=="0") {CopyOf_windmill10._alpha=0; CopyOf_windmill10.stop();} if (tt10=="1") {CopyOf_windmill11._alpha=100; CopyOf_windmill11.play(); } else if (tt10=="0") {CopyOf_windmill11._alpha=0; CopyOf_windmill11.stop();} if (tt11=="1") {CopyOf_windmill12._alpha=100; CopyOf_windmill12.play(); } else if (tt11=="0") {CopyOf_windmil12._alpha=0; CopyOf_windmill12.stop();} if (tt12=="1") {CopyOf_windmill13._alpha=100;
  37. 37 CopyOf_windmill13.play(); } else if (tt12=="0") {CopyOf_windmill13._alpha=0; CopyOf_windmill13.stop();} if (tt13=="1") {CopyOf_windmill14._alpha=100; CopyOf_windmill14.play(); } else if (tt13=="0") {CopyOf_windmill14._alpha=0; CopyOf_windmill14.stop();} if (tt14=="1") {CopyOf_windmill15._alpha=100; CopyOf_windmill15.play(); } else if (tt14=="0") {CopyOf_windmill15._alpha=0; CopyOf_windmill15.stop();} if (tt15=="1") {CopyOf_windmill16._alpha=100; CopyOf_windmill16.play(); } else if (tt15=="0") {CopyOf_windmill16._alpha=0; CopyOf_windmill16.stop();} if (tt16=="1") {CopyOf_windmill17._alpha=100; CopyOf_windmill17.play(); } else if (tt16=="0") {CopyOf_windmill17._alpha=0; CopyOf_windmill17.stop();}
  38. 38 if (tt17=="1") {CopyOf_windmill18._alpha=100; CopyOf_windmill18.play(); } else if (tt17=="0") {CopyOf_windmil18._alpha=0; CopyOf_windmill18.stop();} if (tt18=="1") {CopyOf_windmill19._alpha=100; CopyOf_windmill19.play(); } else if (tt18=="0") {CopyOf_windmil19._alpha=0; CopyOf_windmill19.stop();} if (tt19=="1") {CopyOf_windmill20._alpha=100; CopyOf_windmill20.play(); } else if (tt19=="0") {CopyOf_windmill20._alpha=0; CopyOf_windmill20.stop();} if (tt20=="1") {CopyOf_windmill21._alpha=100; CopyOf_windmill21.play(); } else if (tt20=="0") {CopyOf_windmill21._alpha=0; CopyOf_windmill21.stop();} if (tt21=="1") {CopyOf_windmill22._alpha=100; CopyOf_windmill22.play(); }
  39. 39 else if (tt21=="0") {CopyOf_windmill22._alpha=0; CopyOf_windmill22.stop();} if (tt22=="1") {CopyOf_windmill23._alpha=100; CopyOf_windmill23.play(); } else if (tt22=="0") {CopyOf_windmill23._alpha=0; CopyOf_windmill23.stop();} if (tt23=="1") {CopyOf_windmill24._alpha=100; CopyOf_windmill24.play(); } else if (tt23=="0") {CopyOf_windmill24._alpha=0; CopyOf_windmill24.stop();} if (tt24=="1") {CopyOf_windmill25._alpha=100; CopyOf_windmill25.play(); } else if (tt24=="0") {CopyOf_windmill25._alpha=0; CopyOf_windmill25.stop();} if (tt25=="1") {CopyOf_windmill26._alpha=100; CopyOf_windmill26.play(); } else if (tt25=="0") {CopyOf_windmill26._alpha=0; CopyOf_windmill26.stop();} if (tt26=="1")
  40. 40 {CopyOf_windmill27._alpha=100; CopyOf_windmill27.play(); } else if (tt26=="0") {CopyOf_windmill27._alpha=0; CopyOf_windmill27.stop();} if (tt27=="1") {CopyOf_windmill28._alpha=100; CopyOf_windmill28.play(); } else if (tt27=="0") {CopyOf_windmill28._alpha=0; CopyOf_windmill28.stop();} if (tt28=="1") {CopyOf_windmill29._alpha=100; CopyOf_windmill29.play(); } else if (tt28=="0") {CopyOf_windmill29._alpha=0; CopyOf_windmill29.stop();} if (tt29=="1") {CopyOf_windmill30._alpha=100; CopyOf_windmill30.play(); } else if (tt29=="0") {CopyOf_windmill30._alpha=0; CopyOf_windmill30.stop();} }; Chương trình con được biên dịch thành file: doan.swf, và được lưu cùng thư mục với chương trình chính.
  41. 41 +) Chương trình chính (Phụ lục 1) Chương trình chính được viết bằng Visualbasic để xử lý tin nhắn, giao tiếp với vi điều khiển và điện thoại. 3.4. Ch•¬ng tr×nh cho vi ®iÒu khiÓn 3.4.1. L•u ®å thuËt gi¶i Trên hình 3.14 là sơ đồ thuật giải cho vi điều khiển Begin Delay 5s Truyền tín hiệu yêu cầu đọc tin Ngắt RA Printf: adc , nhắn B0,B1,B2,B3,B4,B5,B6 Ra=on1:D1=1 Ra=on2:D2=1 Ra=on3:D3=1 Ra=on4:D4=1 Ra=on5:D5=1 Ra=on6:D6=1 Ra=on7:D7=1 Ra=off1:D1=0 Ra=off2:D2=0 Ra=off3:D3=0 Ra=off4:D4=0 Ra=off5:D5=0 Ra=off6:D6=0 Ra=off7:D7=0 Hình 3.14 Sơ đồ thuật giải cho vi điều khiển Vi điều khiển có nhiệm vụ cập nhập trang thái on/off , nhiệt độ của các thiết bị, nhận tín hiệu điều khiển từ Máy tính, đưa ra yêu cầu đọc tin nhắn cho chương trình chính. Code chương trình (Phu lục 2)
  42. 42 3.5. kÕt qu¶ ®¹t ®•îc vµ h•íng ph¸t triÓn cña ®Ò tµi 3.5.1. Kết quả đạt được của đề tài Sau quá trình nghiên cứu, thực thi, đề tài đã thu được các kết quả sau: -Tìm hiểu được hệ thống thông tin liên lạc toàn cầu GSM - Tìm hiểu được cấu trúc các tập lệnh điều khiển, cấu trúc tin nhắn của modem GSM - Xây dựng được cấu trúc tổng thể của một hệ thống điều khiển các thiết bị điện trong nhà từ xa qua điện thoại di động, - Xây dựng được chương trình giám sát và điều khiển chạy trên máy tính - Xây dựng thành công mô hình thực tế xử lý các lệnh điều khiển của tin nhắn SMS, để điều khiển các thiết bị trong gia đình (hình 3.16) còn hình 3.15 là hình ảnh khi hệ thống hoạt động. . Hình 3.15. Hệ thống hoạt động
  43. 43 Hình 3.16. Bộ điều khiển các thiết bị điện bằng điện thoại di động khi đang hoạt động Hệ thống điều khiển thiêt bị điện từ xa qua tin nhắn SMS điện thoại di đông là 1 hệ thống tương đối hoàn chỉnh, với 2 chức năng chính: - Điều khiển thiết bị thông qua tin nhắn SMS điện thoại di động - Tự động quay số và nhắn tin phản hồi trạng thái thiết bị. Mô hình mà tác giả sử dụng trong đề tài có thể đóng cắt cho 7 thiết bị điện khác nhau, và có thêm cổng mở rộng giao tiếp RS232 có thể kết hợp với các môdull khác để tạo khả năng điều khiển cho nhiều thiết bị điện khác. Mô hình có thể được sử dụng cho 1 hộ gia đình có nhiều người, trong đó cho phép đăng kí 4 số điện thoại riêng biệt để điều khiển. Hệ thống điều khiển trong đề tài chỉ cho phép các số điện thoại được đăng kí trong hệ thống mới có thể nhắn tin điều khiển được. Vì sử dụng tin nhắn điện thoại di động để điều khiển, do vậy việc điều khiển là khá dễ dàng và giảm được chi phí điều khiển. Người sử dụng chỉ việc nhắn tin theo cấu trúc như sau: +) Để bật công tắc cấp nguồn cho thiết bị ta sọan tin: “on1,on2,on3,on4,on5, .”
  44. 44 “on1” là thiết bị thứ nhất,”on2” là thiết bị thứ 2, . Việc soạn tin không nhất thiết phải tuân theo thứ tự thiết bị Ví dụ: ta có thể soạn tin như sau: “on1,on5,on7, ” +) Để tắt công tắc ta soạn tin: “off1,off2,off3, ” Hệ thống có tuỳ chọn cho phép hệ thống ở nhà sử dụng nhắn tin phản hồi hay không Ví dụ: Trước khi điều khiển, người điều khiển có thể yêu cầu hệ thống nhắn tin phản hồi trạng thái các thiết bị có trong nhà bằng cách soạn tin : “rt” rồi gửi tới số máy ở nhà, khi nhận được tin nhắn , hệ thống sẽ nhắn 1 tin phản hồi có cấu trúc như sau: “nhietdo:27,4:0:0:0:0:0:0:0:do,I/O:0:1:1:0:0:0:0” Vị trí các thiết bị trong tin nhắn phản hồi được ngăn cách nhau bởi dấu “:”,Và tuân theo thứ tự địa chỉ các thiết bị trong hệ thống. Phần phản hồi “I/O” nếu là “1” thì thiết bị có vị trí tương ứng đã được bật, nếu là “0” thì thiết bị đang tắt. Ngoài ra trong 1 tin nhắn điều khiển cũng có thể yêu cầu hệ thống nhắn tin phản hồi sau khi thực hiên xong công việc: VD: “on1,on2, ,rt” hoặc “on1,off2,off5, ,rt”, chỉ cần trong nội dung tin nhắn điều khiển có kí tự “rt” thì hệ thống sẽ nhắn tin phản hồi. Sau khi hệ thống hoàn thành công việc thì sẽ tự động quay số gọi tới số máy vừa điều khiển. Thời gian chờ là 10s, sau đó sẽ tự động cúp máy , vì vậy người điều khiển có thể biết được hệ thống có hoạt động hay không. 3.5.2. H•íng ph¸t triÓn cña ®Ò tµi - Hệ thống phần cứng nhận và xử lý tin nhắn trong mô hình chưa thực sự tách dời với máy tính. Điều này hoàn toàn có thể khắc phục bằng hệ thống sử dụng modem GSM trên thị trường, khi đó các modem này sẽ được ghép nối trực tiếp với vi điều khiển - Việc phải nhớ các lệnh điều khiển cũng là một khó khăn lớn cho người điều khiển. Vì vậy tác giả có hướng phát triển các chương trình ứng
  45. 45 dụng tương tác với điện thoại di động, chương trình được viết bằng ngôn ngữ lập trình java và đang được xây dựng, sau đó sẽ được cài đặt trong điện thoại di động có hỗ trợ java của người điều khiển, lúc này các thiết bị trong nhà sẽ được hóa thành các nút ấn trên điên thoại. Như vậy người điều khiển chỉ cần lựa chọn thiết bị, chương trình sẽ tự động gửi tin lệnh điều khiển tương ứng với thiết bị đó. Hệ thống điều khiển các thiết bị điện trong nhà bằng tin nhắn SMS điện thoại di động có thể được kết hợp với các loại hình điều khiển khác, Ví dụ : điều khiển bằng Remod hồng ngoại (hoặc RF),điều khiển qua mạng internet, để trở thành 1 hệ thống điều khiển hoàn chỉnh, tạo sự tiện lợi cho người sử dụng. Khi đó hệ thống này sẽ được đặt ở vị trí trung tâm điều khiển, nắm giữ địa chỉ của các thiết bị. Hệ thống có thể mở rộng để điều khiển cho nhiều thiết bị, các thiết bị đều có địa chỉ riêng, và được phân chia thành từng nhóm ,Ví Dụ: 7 thiết bị 1 nhóm , và do 1 modull mở rộng của hệ thống quản lý, khi đó sẽ hình thành lên 1 mạng điều khiển. Trung tâm điều khiển sẽ truyền tín hiệu điều khiển tới các modull mở rộng . Lúc đó người sử dụng có thể tùy chon sử dụng bao nhiêu modull mở rộng ứng với số thiết bị có trong nhà.
  46. 46 Như đã trình bày từ phần giới thiệu, đề tài chỉ tập trung vào điều khiển thiết bị điện từ xa qua điện thọai di động mà không thực hiện điều khiển qua sóng radio, phần vì do thời gian có hạn phần do điện thoại di động hiện nay đang là thiết bị được sử dụng rộng rãi. Trong thời gian làm đề tài, với sự hạn chế về thời gian và tài liệu đòi hỏi bản thân tác giả phải cố gắng tìm tòi học hỏi để nghiên cứu thành công đề tài một cách trọn vẹn bởi vì để làm đề tài, cần phải có kiến thức tổng hợp về nhiều mặt: kiến thức về xử lý tín hiệu, xử lý chuỗi tin nhắn, kiến thức về cấu trúc phần cứng, phần mềm điện thoại di động, kiến thức về lập trình phần mềm trên máy tính, lý thuyết mạch, kiến thức phần cứng và phần mềm của vi xử lý. Đề tài có thể phát triển lên thành nhiều ứng dụng khác nhau cho công nghệ di động, không chỉ điều khiển trong phạm vi các thiết bị điện dân dụng mà còn ứng dụng trong công nghiệp, để quản lý, vận hành các dây truyền sản xuất, góp phần vào công cuộc công nghiệp hóa, hiện đại hóa đất nước. Đề tài “Nghiên cứu xây dựng bộ điều khiển các thiết bị điện bằng sóng radio và thiết bị di động(GSM)” cơ bản đã hoàn thành mục tiêu đề ra là chế tạo thành công một thiết bị điều khiển từ xa các thiết bị điện qua điện thoại di động. Tuy đề tài còn những nhược điểm cần bổ xung tiếp nhưng cơ bản có thể đem ứng dụng trong thực tế.
  47. 47 TµI LIÖU THAM KH¶O . 000 1. Trường cao đẳng dạy nghề Cần Thơ (2008), Giáo trình điện thoại di động 2008, Nhà xuất bản khoa học và kĩ thuật. 2. Lê Minh Hoàng (2007), Lập trình ACTIONSCRIPT cho FLASH, Nhà xuất bản Lao động Xã hội . 3. Trương Công Tuân – Nguyễn Văn Dũng (2006), Tự học lập trình Visual Basic 6.0, Nhà xuất bản Văn hoá – thông tin. 4. Trường Đại Học Kỹ Thuật TP.HCM (2004), Giáo trình vi điều khiển, Nhà xuất bản Giáo dục. 5. Ngô Diên Tập (2006), Vi Điều Khiển Với Lập Trình C, Nhà xuất bản Khoa học và kĩ thuật. 6. Ngô Diên Tập (2002), Vi xử lý trong đo lường và điều khiển,Nhà xuất bản khoa học và kỹ thuật. 7. Dương Minh Trí (1997), Sơ đồ chân linh kiện bán dẫn, Nhà xuất bản khoa học và kỹ thuật. Trang web:
  48. 48 Phụ lục 1 Dim dk1, ten, dk2, dk3, dk4, dk5, dk6, dk7, dk8, dk9, dk10, dk11, dk12 Dim dk13, dk14, dk15, dk16, dk17, dk18, dk19, dk20, dk21, dk22, dk23, dk24, dk25, dk26, dk27, dk28 Dim dk29, dk30, dk31, dk32, dk33, dk34, dk35, dk36, dk37, dk38, dk39, dk40, dk41, dk42 Dim chuoi1, chuoi2, chuoi3, chuoi4, chuoi5, chuoi6, chuoi7, chuoi8, chuoi9, chuoi10, chuoi11, chuoi12, chuoi13 Dim thongtin, tio, i, read, sodienthoai, tuo, g, thm, nhietdo, nt, ntnh Dim analog1, analog2, analog3, analog4, analog5, analog6, analog7, analog8 Dim tencong1, tencong2, tinnhanphanhoi, io, temp, tinnhan Dim Buffer As Variant Dim str As String, Arr As Variant, Arr1 As Variant, data2 As Variant, data3 As Variant Private Sub sleep() For u = 0 To 1000 For i = 0 To 1000 Next Next End Sub Private Sub Form_Load() tinnhanphanhoi = 0 swfF.Movie = App.Path + "\chinh.swf" doctencong1 doctencong2 With MSComm1 .Settings = "9600,N,8,1"
  49. 49 .CommPort = tencong1 .RThreshold = 1 .SThreshold = 0 .InputMode = comInputModeText .InputLen = 0 .Handshaking = comNone .InBufferSize = 1024 .OutBufferSize = 1024 If .PortOpen = False Then .PortOpen = True End If End With With MSComm2 .Settings = "4800,N,8,1" .CommPort = tencong2 .RThreshold = 1 .SThreshold = 0 .InputMode = comInputModeText .InputLen = 0 .Handshaking = comNone .InBufferSize = 1024 .OutBufferSize = 1024 If .PortOpen = False Then On Error Resume Next .PortOpen = True If Err Then thm = MsgBox("Mobile chua duoc ket noi" & vbCrLf & " Ban co muon tiep tuc khong?", vbQuestion + vbOKCancel, "Thong bao")
  50. 50 If thm = 2 Then End End If Else thm = 0 End If End If End With thongtin = "" MSComm2.Output = "ate" & Chr$(13) & Chr(10) dk1 = 0 dk2 = 0 dk3 = 0 dk4 = 0 dk5 = 0 dk6 = 0 dk7 = 0 dk8 = 0 dk9 = 0 dk10 = 0 dk11 = 0 dk12 = 0 dk13 = 0 dk14 = 0 dk15 = 0 dk16 = 0 dk17 = 0 dk18 = 0
  51. 51 dk19 = 0 dk20 = 0 dk21 = 0 dk22 = 0 dk23 = 0 dk24 = 0 dk25 = 0 dk26 = 0 dk27 = 0 dk28 = 0 dk29 = 0 dk30 = 0 docsodienthoai docanalog1 docanalog2 docanalog3 docanalog4 docanalog5 docanalog6 docanalog7 docanalog8 MSComm1.RThreshold = 0 MSComm2.RThreshold = 0 sleep MSComm1.RThreshold = 1 MSComm2.RThreshold = 1 nt = "" data3(1) = 0
  52. 52 End Sub Private Sub swfF_FSCommand(ByVal command As String, ByVal args As String) If command = "b1" Then If args = "true" Then If dk1 = 0 Then MSComm1.Output = "on1" & Chr$(13) dk1 = 1 ElseIf dk1 = 1 Then MSComm1.Output = "off1" & Chr$(13) dk1 = 0 End If End If End If If command = "b2" Then If args = "true" Then If dk2 = 0 Then MSComm1.Output = "on2" & Chr$(13) dk2 = 1 ElseIf dk2 = 1 Then MSComm1.Output = "off2" & Chr$(13) dk2 = 0 End If End If End If If command = "b3" Then If args = "true" Then
  53. 53 If dk3 = 0 Then MSComm1.Output = "on3" & Chr$(13) dk3 = 1 ElseIf dk3 = 1 Then MSComm1.Output = "off3" & Chr$(13) dk3 = 0 End If End If End If If command = "b4" Then If args = "true" Then If dk4 = 0 Then MSComm1.Output = "on4" & Chr$(13) dk4 = 1 ElseIf dk4 = 1 Then MSComm1.Output = "off4" & Chr$(13) dk4 = 0 End If End If End If If command = "b5" Then If args = "true" Then If dk5 = 0 Then MSComm1.Output = "on5" & Chr$(13) dk5 = 1 ElseIf dk5 = 1 Then MSComm1.Output = "off5" & Chr$(13) dk5 = 0
  54. 54 End If End If End If If command = "b6" Then If args = "true" Then If dk6 = 0 Then MSComm1.Output = "on6" & Chr$(13) dk6 = 1 ElseIf dk6 = 1 Then MSComm1.Output = "off6" & Chr$(13) dk6 = 0 End If End If End If If command = "b7" Then If args = "true" Then If dk7 = 0 Then MSComm1.Output = "on7" & Chr$(13) dk7 = 1 ElseIf dk7 = 1 Then MSComm1.Output = "off7" & Chr$(13) dk7 = 0 End If End If End If If command = "b8" Then If args = "true" Then If dk8 = 0 Then
  55. 55 MSComm1.Output = "on8" & Chr$(13) dk8 = 1 ElseIf dk5 = 1 Then MSComm1.Output = "off8" & Chr$(13) dk8 = 0 End If End If End If If command = "b9" Then If args = "true" Then If dk9 = 0 Then MSComm1.Output = "on9" & Chr$(13) dk9 = 1 ElseIf dk5 = 1 Then MSComm1.Output = "off9" & Chr$(13) dk9 = 0 End If End If End If If command = "b10" Then If args = "true" Then If dk10 = 0 Then MSComm1.Output = "on10" & Chr$(13) dk10 = 1 ElseIf dk10 = 1 Then MSComm1.Output = "off10" & Chr$(13) dk10 = 0 End If
  56. 56 End If End If If command = "b11" Then If args = "true" Then If dk11 = 0 Then MSComm1.Output = "on11" & Chr$(13) dk11 = 1 ElseIf dk11 = 1 Then MSComm1.Output = "off11" & Chr$(13) dk11 = 0 End If End If End If If command = "b12" Then If args = "true" Then If dk12 = 0 Then MSComm1.Output = "on12" & Chr$(13) dk12 = 1 ElseIf dk12 = 1 Then MSComm1.Output = "off12" & Chr$(13) dk12 = 0 End If End If End If If command = "b13" Then If args = "true" Then If dk13 = 0 Then MSComm1.Output = "on13" & Chr$(13)
  57. 57 dk13 = 1 ElseIf dk13 = 1 Then MSComm1.Output = "off13" & Chr$(13) dk13 = 0 End If End If End If If command = "b14" Then If args = "true" Then If dk14 = 0 Then MSComm1.Output = "on14" & Chr$(13) dk14 = 1 ElseIf dk14 = 1 Then MSComm1.Output = "off14" & Chr$(13) dk14 = 0 End If End If End If If command = "b15" Then If args = "true" Then If dk15 = 0 Then MSComm1.Output = "on15" & Chr$(13) dk15 = 1 ElseIf dk1 = 1 Then MSComm1.Output = "off15" & Chr$(13) dk15 = 0 End If End If
  58. 58 End If If command = "b16" Then If args = "true" Then If dk16 = 0 Then MSComm1.Output = "on16" & Chr$(13) dk16 = 1 ElseIf dk16 = 1 Then MSComm1.Output = "off16" & Chr$(13) dk16 = 0 End If End If End If If command = "b17" Then If args = "true" Then If dk17 = 0 Then MSComm1.Output = "on17" & Chr$(13) dk17 = 1 ElseIf dk1 = 1 Then MSComm1.Output = "off17" & Chr$(13) dk17 = 0 End If End If End If If command = "b18" Then If args = "true" Then If dk18 = 0 Then MSComm1.Output = "on18" & Chr$(13) dk18 = 1
  59. 59 ElseIf dk18 = 1 Then MSComm1.Output = "off18" & Chr$(13) dk18 = 0 End If End If End If If command = "b19" Then If args = "true" Then If dk19 = 0 Then MSComm1.Output = "on19" & Chr$(13) dk19 = 1 ElseIf dk1 = 1 Then MSComm1.Output = "off19" & Chr$(13) dk19 = 0 End If End If End If If command = "b20" Then If args = "true" Then If dk20 = 0 Then MSComm1.Output = "on20" & Chr$(13) dk20 = 1 ElseIf dk20 = 1 Then MSComm1.Output = "off20" & Chr$(13) dk20 = 0 End If End If End If
  60. 60 If command = "b21" Then If args = "true" Then If dk21 = 0 Then MSComm1.Output = "on21" & Chr$(13) dk21 = 1 ElseIf dk21 = 1 Then MSComm1.Output = "off21" & Chr$(13) dk21 = 0 End If End If End If If command = "b22" Then If args = "true" Then If dk22 = 0 Then MSComm1.Output = "on22" & Chr$(13) dk22 = 1 ElseIf dk22 = 1 Then MSComm1.Output = "off22" & Chr$(13) dk22 = 0 End If End If End If If command = "b23" Then If args = "true" Then If dk23 = 0 Then MSComm1.Output = "on23" & Chr$(13) dk23 = 1 ElseIf dk23 = 1 Then
  61. 61 MSComm1.Output = "off23" & Chr$(13) dk23 = 0 End If End If End If If command = "b24" Then If args = "true" Then If dk24 = 0 Then MSComm1.Output = "on24" & Chr$(13) dk24 = 1 ElseIf dk24 = 1 Then MSComm1.Output = "off24" & Chr$(13) dk24 = 0 End If End If End If If command = "b25" Then If args = "true" Then If dk25 = 0 Then MSComm1.Output = "on25" & Chr$(13) dk25 = 1 ElseIf dk25 = 1 Then MSComm1.Output = "off25" & Chr$(13) dk25 = 0 End If End If End If If command = "b26" Then
  62. 62 If args = "true" Then If dk26 = 0 Then MSComm1.Output = "on26" & Chr$(13) dk26 = 1 ElseIf dk26 = 1 Then MSComm1.Output = "off26" & Chr$(13) dk26 = 0 End If End If End If If command = "b27" Then If args = "true" Then If dk27 = 0 Then MSComm1.Output = "on27" & Chr$(13) dk27 = 1 ElseIf dk27 = 1 Then MSComm1.Output = "off27" & Chr$(13) dk27 = 0 End If End If End If If command = "b28" Then If args = "true" Then If dk28 = 0 Then MSComm1.Output = "on28" & Chr$(13) dk28 = 1 ElseIf dk28 = 1 Then MSComm1.Output = "off28" & Chr$(13)
  63. 63 dk28 = 0 End If End If End If If command = "b29" Then If args = "true" Then If dk29 = 0 Then MSComm1.Output = "on29" & Chr$(13) dk29 = 1 ElseIf dk29 = 1 Then MSComm1.Output = "off29" & Chr$(13) dk29 = 0 End If End If End If If command = "b30" Then If args = "true" Then If dk30 = 0 Then MSComm1.Output = "on30" & Chr$(13) dk30 = 1 ElseIf dk30 = 1 Then MSComm1.Output = "off30" & Chr$(13) dk30 = 0 End If End If End If If command = "so dien thoai" Then sodienthoai = args
  64. 64 ghisodienthoai End If If command = "analog1" Then analog1 = args ghianalog1 End If If command = "analog2" Then analog2 = args ghianalog2 End If If command = "analog3" Then analog3 = args ghianalog3 End If If command = "analog4" Then analog4 = args ghianalog4 End If If command = "analog5" Then analog5 = args ghianalog5 End If If command = "analog6" Then analog6 = args ghianalog6 End If If command = "analog7" Then analog7 = args
  65. 65 ghianalog7 End If If command = "analog8" Then analog8 = args ghianalog8 End If If command = "congcom1" Then tencong1 = args ghitencong1 End If If command = "congcom2" Then tencong2 = args ghitencong2 End If End Sub Private Sub MSComm1_OnComm() If MSComm1.CommEvent = comEvReceive Then Dim Buffer As Variant, datavdk As Variant, datavdk1 As Variant, digo ttvdk = ttvdk & MSComm1.Input If InStr(1, ttvdk, Chr(13)) 0 Then On Error Resume Next MSComm2.Output = "ate" & Chr$(13) & Chr(10) MSComm2.Output = "at+cmgf=1" & Chr$(13) & Chr(10) MSComm2.Output = "at+cmgl=" & Chr(34) & "REC UNREAD" & Chr(34) & Chr$(13) & Chr(10) ElseIf InStr(1, ttvdk, "DA") <> 0 Then
  66. 66 datavdk1 = Split(ttvdk, "DA") If InStr(1, datavdk1(1), ":") 0 Then temp = Left(datavdk1(1), InStr(1, datavdk1(1), Chr(13)) - 2) Else temp = datavdk1(1) End If For chay2 = 0 To 8 On Error Resume Next nhietdo = Round((4.3 / 255) * datavdk2(chay2) * 23.7) nt = nt & nhietdo & ":" ntnh = nt swfF.SetVariable "ADC" & chay2, nhietdo Next End If ElseIf InStr(1, ttvdk, "DI") 0 Then If InStr(1, datavdk1(1), Chr(13)) <> 0 Then io = Left(datavdk1(1), InStr(1, datavdk1(1), Chr(13)) - 2) End If datavdk3 = Split(datavdk1(1), ":") For chay3 = 0 To 50 On Error Resume Next
  67. 67 swfF.SetVariable "tt" & chay3, datavdk3(chay3) Next End If End If tinnhan = "nhietdophong:" & ntnh & "do, I/O:" & io ttvdk = MSComm1.Input ttvdk = "" digo = "" nt = "" End If End If End Sub Private Sub MSComm2_OnComm() Timer4.Enabled = False MSComm1.RThreshold = 0 If MSComm2.CommEvent = comEvReceive Then Data = datta & MSComm2.Input If InStr(Data, Chr(13) & Chr(10)) 0 Then If InStr(1, Arr(6), ",") 0 Then tinnhanphanhoi = 1
  68. 68 End If Arr1 = Split(Arr(6), ",") For chay1 = 0 To 50 On Error Resume Next MSComm1.Output = Arr1(chay1) & Chr$(13) sleep Next Timer2.Enabled = True Timer1.Enabled = False Timer2.Interval = 5000 MSComm2.RThreshold = 0 Else data2 = Split(thongtin, ",") data3 = Split(data2(0), " ") If InStr(1, LCase(Arr(6)), "rt") 20 Then
  69. 69 Timer3.Enabled = True Timer3.Interval = 2000 End If End If End If Data = "" End If End If MSComm1.RThreshold = 1 End Sub Private Sub docsodienthoai() Dim strALine As String Dim strLocalFolder As String Dim strFullPathFileName As String strLocalFolder = App.Path If Right(strLocalFolder, 1) <> "\" Then strLocalFolder = strLocalFolder & "\" End If strFullPathFileName = strLocalFolder & "Friends.txt" If Dir(strFullPathFileName) = "" Then swfF.SetVariable "sdt", "moi nhap so" sodienthoai = strALine Else Open strFullPathFileName For Input As #1 ' Read till End-Of-File Line Input #1, strALine swfF.SetVariable "sdt", strALine sodienthoai = strALine
  70. 70 If Not EOF(1) Then Line Input #1, strALine sodienthoai = strALine End If Close #1 ' Close the file End If End Sub Private Sub ghisodienthoai() Dim strALine As String Dim strLocalFolder As String Dim strFullPathFileName As String strLocalFolder = App.Path If Right(strLocalFolder, 1) <> "\" Then strLocalFolder = strLocalFolder & "\" End If strFullPathFileName = strLocalFolder & "Friends.txt" If Dir(strFullPathFileName) = "" Then Open strFullPathFileName For Append As #1 Print #1, sodienthoai Close #1 Else Open strFullPathFileName For Output As #1 Print #1, sodienthoai Close #1 ' Close the file End If End Sub Private Sub ghianalog1() Dim strALine As String
  71. 71 Dim strLocalFolder As String Dim strFullPathFileName As String strLocalFolder = App.Path If Right(strLocalFolder, 1) "\" Then strLocalFolder = strLocalFolder & "\" End If strFullPathFileName = strLocalFolder & "analog2.txt" If Dir(strFullPathFileName) = "" Then Open strFullPathFileName For Append As #1
  72. 72 Print #1, analog2 Close #1 Else Open strFullPathFileName For Output As #1 Print #1, analog2 Close #1 ' Close the file End If End Sub Private Sub ghianalog3() Dim strALine As String Dim strLocalFolder As String Dim strFullPathFileName As String strLocalFolder = App.Path If Right(strLocalFolder, 1) <> "\" Then strLocalFolder = strLocalFolder & "\" End If strFullPathFileName = strLocalFolder & "analog3.txt" If Dir(strFullPathFileName) = "" Then Open strFullPathFileName For Append As #1 Print #1, analog3 Close #1 Else Open strFullPathFileName For Output As #1 Print #1, analog3 Close #1 End If End Sub Private Sub ghianalog4()
  73. 73 Dim strALine As String Dim strLocalFolder As String Dim strFullPathFileName As String strLocalFolder = App.Path If Right(strLocalFolder, 1) "\" Then strLocalFolder = strLocalFolder & "\" End If strFullPathFileName = strLocalFolder & "analog5.txt" If Dir(strFullPathFileName) = "" Then
  74. 74 Open strFullPathFileName For Append As #1 Print #1, analog5 Close #1 Else Open strFullPathFileName For Output As #1 Print #1, analog5 Close #1 End If End Sub Private Sub ghianalog6() Dim strALine As String Dim strLocalFolder As String Dim strFullPathFileName As String strLocalFolder = App.Path If Right(strLocalFolder, 1) <> "\" Then strLocalFolder = strLocalFolder & "\" End If strFullPathFileName = strLocalFolder & "analog6.txt" If Dir(strFullPathFileName) = "" Then Open strFullPathFileName For Append As #1 Print #1, analog6 Close #1 Else Open strFullPathFileName For Output As #1 Print #1, analog6 Close #1 End If
  75. 75 End Sub Private Sub ghianalog7() Dim strALine As String Dim strLocalFolder As String Dim strFullPathFileName As String strLocalFolder = App.Path If Right(strLocalFolder, 1) "\" Then strLocalFolder = strLocalFolder & "\" End If
  76. 76 strFullPathFileName = strLocalFolder & "analog8.txt" If Dir(strFullPathFileName) = "" Then Open strFullPathFileName For Append As #1 Print #1, analog8 Close #1 Else Open strFullPathFileName For Output As #1 Print #1, analog8 Close #1 End If End Sub Private Sub docanalog1() Dim strALine As String Dim strLocalFolder As String Dim strFullPathFileName As String strLocalFolder = App.Path If Right(strLocalFolder, 1) <> "\" Then strLocalFolder = strLocalFolder & "\" End If strFullPathFileName = strLocalFolder & "analog1.txt" If Dir(strFullPathFileName) = "" Then swfF.SetVariable "analog1", "" swfF.SetVariable "al1", "" Else Open strFullPathFileName For Input As #1 ' Read till End-Of-File Line Input #1, strALine ' Read a line swfF.SetVariable "analog1", strALine
  77. 77 swfF.SetVariable "al1", strALine Close #1 End If End Sub Private Sub docanalog2() Dim strALine As String Dim strLocalFolder As String Dim strFullPathFileName As String strLocalFolder = App.Path If Right(strLocalFolder, 1) <> "\" Then strLocalFolder = strLocalFolder & "\" End If strFullPathFileName = strLocalFolder & "analog2.txt" If Dir(strFullPathFileName) = "" Then swfF.SetVariable "analog2", "" swfF.SetVariable "al2", "" Else Open strFullPathFileName For Input As #1 Line Input #1, strALine ' Read a line swfF.SetVariable "analog2", strALine swfF.SetVariable "al2", strALine Close #1 End If End Sub Private Sub docanalog3() Dim strALine As String Dim strLocalFolder As String Dim strFullPathFileName As String
  78. 78 strLocalFolder = App.Path If Right(strLocalFolder, 1) "\" Then strLocalFolder = strLocalFolder & "\" End If strFullPathFileName = strLocalFolder & "analog4.txt" If Dir(strFullPathFileName) = "" Then swfF.SetVariable "analog4", "" swfF.SetVariable "al4", ""
  79. 79 Else Open strFullPathFileName For Input As #1 ' Read till End-Of-File Line Input #1, strALine ' Read a line swfF.SetVariable "analog4", strALine swfF.SetVariable "al4", strALine Close #1 End If End Sub Private Sub docanalog5() Dim strALine As String Dim strLocalFolder As String Dim strFullPathFileName As String strLocalFolder = App.Path If Right(strLocalFolder, 1) <> "\" Then strLocalFolder = strLocalFolder & "\" End If strFullPathFileName = strLocalFolder & "analog5.txt" If Dir(strFullPathFileName) = "" Then swfF.SetVariable "analog5", "" swfF.SetVariable "al5", "" Else Open strFullPathFileName For Input As #1 ' Read till End-Of-File Line Input #1, strALine ' Read a line swfF.SetVariable "analog5", strALine swfF.SetVariable "al5", strALine
  80. 80 Close #1 End If End Sub Private Sub docanalog6() Dim strALine As String Dim strLocalFolder As String Dim strFullPathFileName As String strLocalFolder = App.Path If Right(strLocalFolder, 1) <> "\" Then strLocalFolder = strLocalFolder & "\" End If strFullPathFileName = strLocalFolder & "analog6.txt" If Dir(strFullPathFileName) = "" Then swfF.SetVariable "analog6", "" swfF.SetVariable "al6", "" Else Open strFullPathFileName For Input As #1 ' Read till End-Of-File Line Input #1, strALine ' Read a line swfF.SetVariable "analog6", strALine swfF.SetVariable "al6", strALine Close #1 End If End Sub Private Sub docanalog7() Dim strALine As String Dim strLocalFolder As String
  81. 81 Dim strFullPathFileName As String strLocalFolder = App.Path If Right(strLocalFolder, 1) "\" Then strLocalFolder = strLocalFolder & "\" End If strFullPathFileName = strLocalFolder & "analog8.txt" If Dir(strFullPathFileName) = "" Then swfF.SetVariable "analog8", ""
  82. 82 swfF.SetVariable "al8", "" Else Open strFullPathFileName For Input As #1 ' Read till End-Of-File Line Input #1, strALine ' Read a line swfF.SetVariable "analog8", strALine swfF.SetVariable "al8", strALine Close #1 End If End Sub Private Sub ghitencong1() Dim strALine As String Dim strLocalFolder As String Dim strFullPathFileName As String strLocalFolder = App.Path If Right(strLocalFolder, 1) <> "\" Then strLocalFolder = strLocalFolder & "\" End If strFullPathFileName = strLocalFolder & "comVDK.txt" If Dir(strFullPathFileName) = "" Then Open strFullPathFileName For Append As #1 Print #1, tencong1 Close #1 Else Open strFullPathFileName For Output As #1 Print #1, tencong1 Close #1 End If
  83. 83 End Sub Private Sub ghitencong2() Dim strALine As String Dim strLocalFolder As String Dim strFullPathFileName As String strLocalFolder = App.Path If Right(strLocalFolder, 1) "\" Then strLocalFolder = strLocalFolder & "\" End If
  84. 84 strFullPathFileName = strLocalFolder & "ComVDK.txt" If Dir(strFullPathFileName) = "" Then swfF.SetVariable "VDK", "1" tencong1 = 1 Else Open strFullPathFileName For Input As #1 Line Input #1, strALine swfF.SetVariable "VDK", strALine tencong1 = strALine Close #1 End If End Sub Private Sub doctencong2() Dim strALine As String Dim strLocalFolder As String Dim strFullPathFileName As String strLocalFolder = App.Path If Right(strLocalFolder, 1) <> "\" Then strLocalFolder = strLocalFolder & "\" End If strFullPathFileName = strLocalFolder & "comMobile.txt" If Dir(strFullPathFileName) = "" Then swfF.SetVariable "MB", "2" tencong2 = 2 Else Open strFullPathFileName For Input As #1 Line Input #1, strALine swfF.SetVariable "MB", strALine
  85. 85 tencong2 = strALine Close #1 End If End Sub Private Sub ShockwaveFlash1_OnReadyStateChange(newState As Long) End Sub Private Sub SswfF_OnReadyStateChange(newState As Long) End Sub Private Sub Timer2_Timer() MSComm1.RThreshold = 0 MSComm2.RThreshold = 0 sleep MSComm2.Output = "atd" & sodienthoai & ";" & Chr(13) & Chr(10) sleep Data = "" Timer1.Enabled = True Timer1.Interval = 10000 MSComm1.RThreshold = 1 Timer2.Enabled = False End Sub Private Sub Timer1_Timer() MSComm1.RThreshold = 0 MSComm2.Output = "at+chup" & Chr$(13) & Chr(10) sleep If tinnhanphanhoi = 1 Then MSComm2.Output = "ate" & Chr$(13) & Chr(10)
  86. 86 MSComm2.Output = "at+cmgf=1" & Chr$(13) & Chr(10) MSComm2.Output = "at+cmgs=" & Chr(34) & sodienthoai & Chr(34) & Chr$(13) & Chr(10) MSComm2.Output = tinnhan & Chr(26) tinnhanphanhoi = 0 End If Timer1.Enabled = False On Error Resume Next If data3(1) > 4 Then Timer3.Enabled = True Timer3.Interval = 2000 End If MSComm1.RThreshold = 1 MSComm2.RThreshold = 1 End Sub Private Sub Timer3_Timer() MSComm1.RThreshold = 0 MSComm2.RThreshold = 0 On Error Resume Next For tuo = 1 To data3(1) MSComm2.Output = "at+cmgd=" & tuo & Chr$(13) & Chr(10) sleep Next Timer3.Enabled = False MSComm1.RThreshold = 1 MSComm2.RThreshold = 1 End Sub
  87. 87 Phụ lục 2 // CHUONG TRINH CHO VDK // #include #device *=16 ADC=10 #fuses HS, NOWDT, NOLVP, NOBROWNOUT, NOPROTECT, PUT #use delay(clock=20000000) #use rs232(baud=9600, xmit=PIN_C6,rcv=PIN_C7) #define INTS_PER_SECOND 76 BYTE seconds; BYTE int_count; #byte port_B=0x06 #byte port_D=0x08 #bit D1=port_d.1 #bit D2=port_d.2 #bit D3=port_d.3 #bit D4=port_d.4 #bit D5=port_d.5 #bit D6=port_d.6 #bit D7=port_d.7 #include int1 i1, i2,i3,i4; int1 i5, i6,i7,i8; int1 bc; char c,t; int8 i,k,po; char r[20]; char b1[10];
  88. 88 int8 a,u[10]; int16 adc; long result; #int_rtcc void clock_isr() { if( int_count==0) { ++seconds; int_count=INTS_PER_SECOND; } } #int_rda void dem_nhan() { c=getchar(); if(c==13) { strlwr (r); strcpy(b1,"on1"); if (strstr (r, b1) && strlen(b1)==t ) {d1=1; strcpy(r,"");} strcpy(b1,"off1"); if (strstr (r,b1) && strlen(b1)==t) {d1=0; strcpy(r,"");} strcpy(b1,"on2");
  89. 89 if (strstr (r, b1) && strlen(b1)==t) {d2=1; strcpy(r,"");} strcpy(b1,"off2"); if (strstr (r, b1) && strlen(b1)==t) {d2=0; strcpy(r,""); } strcpy(b1,"on3"); if (strstr (r, b1) && strlen(b1)==t) {d3=1; strcpy(r,"");} strcpy(b1,"off3"); if (strstr (r, b1) && strlen(b1)==t) {d3=0; strcpy(r,""); } strcpy(b1,"on4"); if (strstr (r, b1) && strlen(b1)==t) {d4=1; strcpy(r,"");} strcpy(b1,"off4"); if (strstr (r, b1) && strlen(b1)==t) {d4=0; strcpy(r,"");} strcpy(b1,"on5"); if (strstr (r, b1) && strlen(b1)==t) {d5=1; strcpy(r,"");}
  90. 90 strcpy(b1,"off5"); if (strstr (r, b1) && strlen(b1)==t) {d5=0; strcpy(r,"");} strcpy(b1,"on6"); if (strstr (r, b1) && strlen(b1)==t) {d6=1; strcpy(r,"");} strcpy(b1,"off6"); if (strstr (r, b1) && strlen(b1)==t) {d6=0; strcpy(r,"");} strcpy(b1,"on7"); if (strstr (r, b1) && strlen(b1)==t) {d7=1; strcpy(r,"");} strcpy(b1,"off7"); if (strstr (r, b1) && strlen(b1)==t) {d7=0; strcpy(r,""); } strcpy(r,""); t=0; } else { r[t]=c; t++; }
  91. 91 } void nhan_adc() { Setup_ADC ( ADC_CLOCK_div_64 ) ; setup_adc_ports( an0 ); set_adc_channel(0); delay_us(15); a=read_adc(); } void inputmod() { i1=input(pin_b6); i2=input(pin_b5); i3=input(pin_b4); i4=input(pin_b3); i5=input(pin_b2); i6=input(pin_b1); i7=input(pin_b0); } void main() { int_count=INTS_PER_SECOND; set_timer0(0); setup_counters( RTCC_INTERNAL, RTCC_DIV_256 | RTCC_8_BIT); enable_interrupts(INT_RTCC); enable_interrupts(int_rda); enable_interrupts(GLOBAL);
  92. 92 set_tris_b(0xff); set_tris_D(0x00); port_d=0x00; t=0; while(1) { if (seconds>=7) { printf("at\n\r\n\r"); seconds=0; } else { for (po=0;po<=2;po++) { nhan_adc(); adc+=a; delay_ms(100); } result=adc/3; adc=0; inputmod(); printf("DA%Lu:0:0:0:0:0:0:0\n\r",result); printf("DI%u:%u:%u:%u:%u:%u:%u:%u\n\r",i1,i2,i3,i4,i5,i6,i7,i8); delay_ms(50); } } }
  93. MỤC LỤC LêI NãI §ÇU 1 Chương 1: §iÒu khiÓn ng«i nhµ th«ng minh b»ng c«ng nghÖ di ®éng 2 1.1. T×nh h×nh nghiªn cøu øng dông c«ng nghÖ di ®éng trong vµ ngoµi n•íc 3 1.1.1. VÊn ®Ò nghiªn cøu øng dông c«ng nghÖ di ®éng trong c¸c hÖ thèng ®iÒu khiÓn gi¸m s¸t trªn thÕ giíi 3 1.1.2. VÊn ®Ò øng dông c«ng nghÖ di ®éng trong c¸c lÜnh vùc t¹i ViÖt Nam 5 1.1. hÖ thèng ®iÒu khiÓn thiÕt bÞ ĐIỆN TỪ XA qua tin nh¾N CỦA ĐIỆN THOẠI DI ĐỘNG 6 1.2.1. Chøc n¨ng cña hÖ thèng 6 1.2.2. CÊu tróc cña hÖ thèng 7 Chương 2: Vi ®iÒu khiÓn Pic16f877A, Modem Nokia6230 cÊu tróc tin nh¾n cña ®iÖn tho¹i 9 2.1. Vi ®iÒu khiÓn pic16F877A 9 2.1.1. Giíi thiÖu chung 9 2.1.2 Ph©n lo¹i PIC theo ký tự 11 2.1.3. Ph©n lo¹i PIC theo ký số 11 2.1.4. CÊu tróc tæng qu¸t PIC16F877A 11 2.2. HÖ thèng th«ng tin di ®éng toµn cÇu GSM 14 2.2.1. Giíi thiÖu chung 14 2.2.2. C¸c dÞch vô trªn GSM 14 2.2.2.1. DÞch vô tho¹i 15 2.2.2.2. DÞch vô d÷ liÖu 15 2.2.2.3. DÞch vô nh¾n tin ng¾n 15 2.2.2.4. C¸c dÞch vô kh¸c 16 2.3. Modem nokia 6230 16 2.4. Ph©n tÝch lÖnh vµ cÊu tróc tin nh¾n 17 Chương 3: ThiÕt kÕ phÇn cøng, x©y dùng phÇn mÒm ®iÒu khiÓn c¸c thiÕt bÞ ®iÖn trong nhµ 20 3.1. THIÕT KÕ CARD §IÒU KHIÓN 21
  94. 3.1.1. S¬ ®å m¹ch nguån cho vi ®iÒu khiÓn 21 3.1.2. S¬ ®å m¹ch giao tiÕp RS232 22 3.1.3. S¬ ®å nguyªn lý m¹ch ®iÒu khiÓn 23 3.2. ThiÕt kÕ m¹ch ®éng lùc 25 3.3. XÂY DỰNG PHẦN MỀM TRÊN MÁY TÍNH 29 3.3.1. L•u ®å thuËt gi¶i 29 3.3.2. X©y dùng phÇn mÒm 30 3.4. Ch•¬ng tr×nh cho vi ®iÒu khiÓn 41 3.4.1. L•u ®å thuËt gi¶i 41 3.5. kÕt qu¶ ®¹t ®•îc vµ h•íng ph¸t triÓn cña ®Ò tµi 42 3.5.1. Kết quả đạt được của đề tài 42 3.5.2. H•íng ph¸t triÓn cña ®Ò tµi 44 46 TµI LIÖU THAM KH¶O 47 Phụ lục 1 Phụ lục 2