Đề tài Truyền dữ liệu lưu lượng và áp lực nước qua tin nhắn SMS

ời mở đầu. Trang 1

Chương 1: CƠ SỞLÝ THUYẾT . Trang 2

1.1 Giới thiệu sơlược vềvi điều khiển AVR . .Trang 2

1.1.1 Giới thiệu . Trang 2

1.1.2 ATmega32. Trang 3

1.1.3 Đặc tính của ATmega32. Trang 4

1.1.3.1 Cổng vào ra . Trang 7

1.1.3.2 Cấu trúc bộnhớ.Trang 10

1.2 Ngôn ngữlập trình cho AVR. Trang 13

1.3 Giới thiệu BasCom AVR. Trang 14

1.4 Giới thiệu sơlược vềVisual Basic . Trang 15

1.2.1 Giới thiệu . Trang 15

1.2.2 Các bước xây dựng một chương trình . Trang 23

1.5 Cảm biến áp lực . Trang 24

1.6 Giới thiệu GPRS Modem G2403R . Trang 26

Chương 2: THỰC TRẠNG TẠI CÔNG TY . Trang 29

Chương 3: GIẢI PHÁP VÀ HOÀN THIỆN. Trang 30

3.1 Bộphận phát .Trang 31

3.1.1 Nguyên lý hoạt động. Tang 31

3.1.2 Thiết kếphần cứng. Trang 31

3.1.2.1 Mạch nguồn ổn áp . Trang 31

3.1.2.2 Mạch RCV420 chuyển đổi dòng sang áp. Trang 36

3.1.2.3 Mạch nạp AVR. Trang 37

3.1.2.4 Mạch ứng dụng AVR ATmega32 . Trang 38

3.1.3 Thiết kếphần mềm . Trang 42

3.2 Bộphận thu .Trang 59

3.2.1 Nguyên lý hoạt động. Trang 59

3.2.2 Giao diện với máy tính . Trang 60

PHẦN KẾT LUẬN VÀ KIẾN NGHỊVỀNỘI DUNG NGHIÊN CỨU TIẾP

THEO . Trang 75

Ý NGHĨA KHOA HỌC. Trang 76

ỨNG DỤNG THỰC TIỄN . Trang 77

DANH MỤC TÀI LIỆU THAM KHẢO. Trang 78

PHỤLỤC. Trang 79

pdf90 trang | Chia sẻ: lethao | Lượt xem: 2582 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Đề tài Truyền dữ liệu lưu lượng và áp lực nước qua tin nhắn SMS, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
lay nhiều controls hơn bằng cách chọn Components... Từ context menu (chọn Toolbox rồi bấm nút phải của mouse để display context menu) hay dùng menu command Project | Components. Ngoài việc trình bày Toolbox mặc định, bạn có thể tạo cách trình bày khác bằng cách chọn Add Tab... từ context menu và bổ sung các control cho tab từ kết quả. Hình 1.11 Toolbox • Project Explorer Sẽ liệt kê các forms và các modules trong project hiện hành của bạn. Một project là sự tập hợp các files mà bạn sử dụng để tạo một trình ứng dụng. Tức là, trong VB6, khi nói viết một program có nghĩa là triển khai một project. • Properties window Liệt kê các đặc tính của các forms hoặc controls được chọn. Một property là một đặc tính của một object chẳng hạn như size, caption, hoặc color. Khi bạn sửa đổi một property bạn sẽ thấy hiệu quả ngay lập tức, thí dụ thay đổi property Font của một Label sẽ thấy Label ấy được display bằng Font chữ mới. Khi bạn chọn một Property của control hay form trong Properties window, phía bên phải ở chỗ value của property có thể display ba chấm (. . .) hay một tam giác chỉa xuống. Bấm vào đó để display một dialog cho bạn chọn value. Thí dụ dưới đây là dialog để chọn màu cho property ForeColor của control Label1. Hình 1.12 Properties • Form Layout Bạn dùng form Layout để chỉnh vị trí của các forms khi form hiện ra lần đầu lúc chương trình chạy. Dùng context command Resolution Guides để thấy nếu dùng một màn ảnh với độ mịn (resolution) tệ hơn, thí dụ như 640 X 480, thì nó sẽ nhỏ như thế nào. Hình 1.13 Form layout • Form Designer Dùng để thiết kế giao diện lập trình. Bạn bổ sung các controls, các đồ họa (graphics), các hình ảnh và một form để tạo sự ma sát mà bạn muốn. Mỗi form trong trình ứng dụng của bạn có designer form riêng của nó. Khi bạn maximise một form designer, nó chiếm cả khu làm việc. Muốn làm cho nó trở lại cở bình thường và đồng thời để thấy các form designers khác, click nút Restore Window ở góc bên phải, phía trên. Hình 1.14 Designer • Immediate Window Dùng để gở rối (debug) trình ứng dụng của bạn. Bạn có thể display dữ kiện trong khi chạy chương trình ứng dụng. Khi chương trình đang tạm ngừng ở một break point, bạn có thể thay đổi giá trị các variables hay chạy một dòng chương trình. • View Code button Click đôi vào form để xem code của một form mà bạn đã chọn. Window của code giống như dưới đây: Hình 1.15 Giao diện viết code Trong Code window bạn có thể chọn display tất cả Sub của code cùng một lúc như trong hình hay display mỗi lần chỉ một Sub bằng cách click button nằm ở góc bên trái phía dưới. • View form button Click đôi vào form muốn xem để xem form mà bạn đã chọn. Trong hình dưới đây, Properties Window và Form Layout đã được kéo ra ngoài cho floating. Hình 1.16 Properties Window và Form Layout. Ưu điểm: - Tiết kiệm được thời gian và công sức so với một số ngôn ngữ lập trình có cấu trúc khác vì bạn có thể thiết lập các hoạt động trên từng đối tượng được VB cung cấp. - Khi thiết kế chương trình có thể thấy ngay kết quả qua từng thao tác và giao diện khi thi hành chương trình. - Cho phép chỉnh sửa dễ dàng, đơn giản. - Làm việc với các điều khiển mới (ngày tháng với điều khiển MonthView và DataTimePicker, các thanh công cụ có thể di chuyển được CoolBar, sử dụng đồ họa với ImageCombo, thanh cuộn FlatScrollBar,…). - Làm việc với cơ sở dữ liệu. - Các bổ sung về lập trình hướng đối tượng. - Khả năng kết hợp với các thư viện liên kết động DLL. • Nhược điểm: - Yêu cầu cấu hình máy khá cao. - Chỉ chạy được trên môi trường Win95 trở lên. 1.4.2. Các bước xây dựng một chương trình: Để xây dựng một chương trình ứng dụng cần thực hiện theo các bước sau đây: • Bước 1: Phân tích bài toán Là quá trình tìm hiểu bài toán, xác định các dữ kiện nhập, dữ kiện xuất và đi tìm một giải thuật thích hợp nhất. Bước này cần thực hiện trên giấy cho rõ ràng để tạo thói quen lập trình tốt. • Bước 2: Thiết kế giao diện Người lập trình phải thiết kế giao diện thích hợp cho việc nhập, xuất dữ liệu, cần chú ý đến cách trang trí, cách bố trí, thứ tự, màu sắc, … • Bước 3: Thiết kế chương trình Là bước viết chương trình dựa trên giải thuật đã xây dựng ở bước 1, chạy thử chương trình để kiểm tra, phát hiện các lỗi đặc biệt và sửa chữa. • Bước 4: Cải tiến Đây là bước hoàn thiện chương trình ở mức độ cao hơn. 1.5. Cảm biến áp lực . Hình1.17 Cảm biến áp lực Thiết kế để sử dụng trong công nghiệp nặng. • Áp lực trong phạm vi đo (tương đối) hay tuyệt đối từ 0 đến 600 bar • Tất cả các tín hiệu đầu ra tiêu chuẩn: 4-20 mA, 0-5 V,1-5 V, 1-6 V, 0-10 V, 1-10 V. Mô tả Áp lực nhỏ gọn truyền MBS 3000 được thiết kế để sử dụng trong hầu hết tất cả công nghiệp ứng dụng, và là một áp lực đáng tin cậy đo lường, ngay cả trong môi trường khắc nghiệt điều kiện. Áp lực có các dạng tín hiệu đầu ra khác nhau, tuyệt đối và gauge (tương đối) phiên bản, đo khoảng từ 0-1 tới 000-600 bar và nhiều áp lực và kết nối điện. Độ rung động ổn định, mạnh mẽ xây dựng,và một mức độ cao của EMC / EMI trang bị bảo hộ các bộ truyền áp lực để đáp ứng nhất nghiêm ngặt các yêu cầu công nghiệp. Ngõ ra tín hiệu: 4-20 mA Độ chính xác (bao gồm cả phi linearity, hysteresis và lặp) ± 0.5% FS (typ.) ± 1% FS (tối đa) Non-linearity BFSL (phù hợp) ≤ ± 0.5% FS Từ trễ và lặp ≤ ± 0.1% FS Nhiệt điểm số không thay đổi ≤ ± 0,1% FS/10K (typ.) ≤ ± 0,2% FS/10K (tối đa) Nhiệt độ nhạy (span) chuyển dịch ≤ ± 0,1% FS/10K (typ.) ≤ ± 0,2% FS/10K (tối đa) Thời gian đáp ứng <4 ms Áp lực quá tải (tĩnh) 6 × FS (tối đa 1500 bar) Burst áp lực> 6 × FS (tối đa 2000 bar). Hình 1.18 Sơ đồ kết nối điện 1.6. Giới thiệu GPRS Modem G2403R Hình1.19 GPRS Modem G2403R Giao tiếp với máy tính: Kết nối thông qua cổng RS232 (COM) Để test ta có thể dùng các chương trình cổng COM như HyperTerminal, Terminal… Hoặc dùng các chương trình lập trình Visual Basic, Visuall C để lập trình. Giao tiếp với vi điều khiển: Dùng các chân TX (truyền) và RX (nhận). Sử dụng chức năng uart của vi điều khiển để giao tiếp với module. Quá trình trao đổi dữ liệu giữa máy tính và Modem được thực hiện theo cơ chế bắt tay phần cứng hay phần mềm. Quy tắc truyền lệnh trên Modem: - Mỗi dòng lệnh của modem bắt đầu bằng ký tự AT. - Dòng lệnh có thể chứa nhiều lệnh. - Kết thúc lệnh bằng ký tự Enter (mã ASCII là 13). - Dòng lệnh cuối cùng được lưu trong modem. Có thể dùng lệnh A/ để thực hiện lại lệnh này. - Thông báo kết quả thực hiện lệnh của modem có thể ở dạng từ chữ hay số (giá trị mặc định là chữ). Có thể sử dụng lệnh V để lựa chọn dạng thông báo là chữ hay số. - Để hoạt động đúng, modem cần có các thông số xác định. Nếu không có sự thay đổi cần thiết, modem hoạt động theo giá trị mặc định(default). Nếu thông số trong lệnh bị bỏ qua, giá trị thông số mặc định là 0. Các lệnh AT dùng để gởi và nhận tin nhắn: Một dòng lệnh cho phép bạn phát hành một số các lệnh tại một thời gian chứ không phải là ban hành và phải chờ đợi cho modem để phản ứng với mỗi lệnh riêng rẽ. Dưới đây là một số nguyên tắc mà bạn phải tuân theo khi phát hành một dòng lệnh vào modem. • Mỗi dòng lệnh phải bắt đầu bằng các chữ AT. • Bởi vì tất cả các không gian được bỏ qua trong các dòng lệnh, bạn có thể để lại dấu cách giữa mỗi lệnh, và giữa mỗi ký tự của tất cả các lệnh. Bạn cũng có thể bao gồm các dấu chấm câu trong số điện thoại, và gõ lệnh, hoặc trong UPPER-hay chữ thườngVí dụ, lệnh sau đây là giống nhau: ATDT8005551234 hay atdt (800) 876-5555 • Để hủy bỏ một lệnh thọai trong tiến trình, bấm phím bất kỳ trên bàn phím. • Nếu bạn thực hiện một lỗi, Backspace để xoá nó, và Nhập lại các ký Để thực hiện các dòng lệnh, bấm hoặc trên bàn phím của bạn. • AT + CMGR: Đọc Tin nhắn • AT + CMGS: Gửi tin nhắn • AT + CMGD: Xóa tin nhắn. • AT + CMGW: Viết tin nhắn vào bộ nhớ • AT + CMSS: Gửi tin nhắn từ bộ nhớ • AT + CMGF = 1 : kiểm tra modem hỗ trợ chế độ văn bản • AT + CPIN = "0000" : Nếu modem chứa một thẻ SIM có được bảo đảm bằng một mã PIN, chúng ta nhập vào mã pin bằng lệnh này. Chương 2: THỰC TRẠNG TẠI CÔNG TY Nước từ trạm bơm nước thô được bơm lên bể trộn Æ bể lắng Æ bể lọc Æ bể chứa Æ bơm ra mạng. Hiện nay, hầu hết các thiết bị đều được bán tự động và xu hướng trong tương lai sẽ là tự động hóa, các quá trình được điều khiển và xử lý bởi hệ thống vi tính. Điều này giúp cho việc quản lý chất lượng nước xử lý và phát hiện các sự cố được chính xác hơn. Tất cả các tín hiệu dừng máy, chạy máy, thông báo sự cố của thiết bị , tín hiệu của thiết bị đo… đều được hiển thị trên màn hình SCADA. SCADA (Supervisory Control and Data Acquisition) là hệ thống điều khiển, kiểm soát thu thập dữ liệu. Khi nhân viên ở các bộ phận khác cần xác định giá trị của dữ liệu lưu lượng, áp… lực thì phải liên hệ đến phòng SCADA. Nhưng nếu khi cần biết thì phải gọi điện đến phòng SCADA thì sẽ mất thời gian, và khi gọi điện đến phòng SCADA mà không có nhân viên trực tại phòng thì sao? Hiện tại bộ truyền dữ liệu lưu lượng và áp lực của công ty được nhập từ Đan Mạch với gía thành cao. Chương 3: GIẢI PHÁP VÀ HOÀN THIỆN Để giải quyết vấn để trên em xin đưa ra giải pháp của mình là ta có thể dùng một hệ thống truyền dữ liệu qua tin nhắn SMS, sẽ khắc phục được những khó khăn gặp phải khi cần dữ liệu. Với ưu điểm : Nhận được tín hiệu và các dữ liệu của lưu lượng, áp lực tại phòng SCADA. Lấy giá trị tức thời, theo giờ, theo ngày. Gía thành hợp lý. Hình 3.1: Sơ đồ khối hệ thống 3.1. Bộ phận phát: 3.1.1. Nguyên lý hoạt động: Tín hiệu được lấy từ đồng hồ lưu lượng và cảm biến áp lực vào dưới dạng dòng từ 4 – 20 mA sẽ được chuyển thành tín hiệu áp từ 0 – 5V thông qua mạch chuyển đổi RCV420. Sau đó tín hiệu áp sẽ được đưa vào mạch vi điều khiển AVR xử lí và chuyển tới modem phát để truyền tín hiệu về bộ thu. 3.1.2. Thiết kế phần cứng: 3.1.2.1. Mạch nguồn ổn áp: Mạch điều khiển AVR Modem thu Modem phát Giao tiếp với máy tính Giao tiếp với ĐTDĐ Cảm biến áp lực Đồng hồ lưu lượng Nguồn điện là thành phần không thể thiếu được trong các mạch điện tử và nó đóng thành phần quan trọng ảnh hưởng tới hoạt động của mạch. Việc cung cấp nguồn điện 1 chiều có điện áp 5V, 6V, 9V, 12V, 15V,18V, 24V để cung cấp cho các thiết bị điện tử thông dụng chạy điện 1 chiều. Do ngoài thực tế nguồn điện chúng ta không ổn định so với giá trị yêu cầu ở lý thuyết nên ổn áp lại 1 giá trị điện áp đầu ra không thay đổi để cho mạch điện chúng ta hoạt động ổn định và chính xác. Thông thường có 2 phương pháp ổn áp :Ổn áp dùng IC số và ổn áp dùng transitor kết hợn với zenner ổn áp. Ở đây chúng ta làm mạch ổn áp đơn giản dùng họ 78xx với dòng điện >=1A. • Sơ đồ mạch điện đơn giản C1 J1 CON2 1 2 C2 T3 TRANSFORMER 1 5 4 8 D2 R1 +- ~ ~ D1 VCC LM 7805 1 2 3 in outgn d + C4+ C3 Hình 3.2 Mạch nguồn 5V • Các linh kiện: LM 7805: IC ổn áp ra 5V. J1: 220VAC T3: biến thế D1: diode cầu D2: led C1: 2200uF 16V C2: tụ 104 C3:1000uF 10V C4: tụ 104 R1: 303Ω +15V + - ~ ~ D1 R1 7915 2 1 3IN G N D OUT 1 2 3in gn d out R2 -15V C4 0V 15V C3 15V C5 OV J1 CON3 1 2 3 C6 C2 J2 CON3 1 2 3 7815 C1 Hình 3.3 Mạch nguồn ± 15V • Các linh kiện: J1: con 3: input J2: con 3: output D1: diode cầu. C1:1000μF C2: 1000μF C3: 1000μFb C4: 1000μF C5: tụ 104 C6: tụ 104 R1: 6 Ω 5W R2: 6 Ω 5W 7815: IC ổn áp 15V 7915: IC ổn áp 15V • Phân tích mạch điện Mạch điện gồm những phần sau : Hạ áp, chỉnh lưu, lọc, biến đổi (78xx). Nguồn điện xoạy chiều 220VAC-50Hz qua biến áp là hạ áp xuống còn 24VAC - 1A và được qua bộ chỉnh lưu nhằm biến đổi điện xoay chiều thành điện 1 chiều. Thành phần 1 chiều này có độ gợn nên phải qua bộ lọc C để san phảng điện áp gợn đó cho ra điện áp 1 chiều. Sau đó điện áp 1 chiều này qua bộ ổn áp 78xx cho ra điện áp ổn áp mà mình cần. Hạ áp : Ở đây chúng ta biến đổi điện áp lưới 220VAC-50Hz xuống còn 24VAC - 1A. Mục đích là cấp đầy vào cho bộ biến đổi và bộ lọc để có điện áp một chiều mong muốn. Chỉnh lưu: Thành phần chỉnh lưu là biến đổi tín hiệu xoay chiều thành tín hiệu 1 chiều thông qua 4 con diode chỉnh lưu. Đây là sơ đồ chỉnh lưu cả chu kì với dạng sóng đầu vào và đầu ra sau chỉnh lưu như sau: Hình 3.4 Sơ đồ chỉnh lưu + Điện áp đầu vào của bộ chỉnh lưu: Uv = 24sqrt2 = 34VDC. + Điện áp sụt áp trên cầu là : 34VDC - 1.5VDC = 32.5VDC (Do đi qua 2 diode nên mỗi diode bị sụt áp mất 0.7V). + Điện áp sau chỉnh lưu là : Ucl = 32.5 * 0.9 = 29VDC ( 0.9 là hệ số chỉnh lưu của chỉnh luu cầu). Dạng điện áp sau chỉnh lưu vẫn còn các sóng nhấp nhô như ngọn núi và dạng điện áp này vẫn được coi là điện áp 1 chiều nhưng chưa ổn định. Thành phần lọc : Mạch này dùng lọc C cho đơn giản. Chúng ta có thể dùng mạch lọc RC, CRC. Và ần phải quấn thêm cuộn cảm. + Tụ C1 và C3 lọc các thành phần điện áp nhấp nhô sau chỉnh lưu cho nó bằng phẳng. + Tụ C2 và C4 lọc các thành phần cao tần. Hình 3.5 Dạng điện áp sau khi qua bộ lọc. Dựa vào nguyên tắc phóng nạp của tụ điện mà nó cho ra dòng điện 1 chiều thằng như trên hình vẽ. Tụ càng lớn thì độ gợn điện áp càng giảm. Những sóng có tần số cao tần phải được lọc đi nhờ 2 tụ kẹo C2 và C4 vì trong mạch dùng IC nếu tồn tại những thành phần này thì sẽ gây ra những sai sót khó phát hiện làm cho mạch hoạt động không bình thường. Qua bộ lọc là ta đã tạo được điện áp 1 chiều cấp vào cho bộ biến đổi đổi hay là bộ ổn áp. Bộ ổn áp : Hình 3.6 LM78xx + Dòng họ 78xx cho ra nhiều loại ổn áp điện khác nhau : như 7805 nó ổn áp 5V, 7806 cho ổn áp 6V... + Điện áp đầu vào của họ 78xx là điện áp 1 chiều và max <=40V. Dòng điện không vượt quá 1A + Đảm bảo thông số là : Vi - V0 = 2V đến 3V ( lúc đó mạch mới hoạt động ổn áp được) + Tản nhiệt tốt cho 78xx. Khi hoạt động với tải thì 78xx rất nóng. Đối với cấp điện áp là 29V thì 78xx nóng khi có tải và chúng ta chú ý tản nhiệt tốt cho nó. 3.1.2.2. Mạch RCV420 chuyển đổi dòng sang áp: J1 1 2 3 C2-15V J3 CON2 1 2 +15V C4 OV C3 J2 CON2 1 2 RCV 420 1 2 3 6 7 8 9 10 11 12 13 14 15 16 5 4 -IN Ct +IN NC RNR Ref Trim NC Ref Fb Ref Out Ref In Rcv Com Rcv Out Rcv Fb V+ Ref Com V- C1 Hình 3.7 Sơ đồ nguyên lý mạch RCV420. Hình 3.8 Mạch RCV420. • Các linh kiện: J1: Con 3 :cấp nguồn ± 15V J2: Con 2: đưa vào tín hiệu 4-20 mA J3: Con 2: đưa ra tín hiệu 0-5V C1: tụ 104 C2: tụ 10μF C3: tụ 104 C4: tụ 10μF RCV420: IC chuyên dụng chuyển dòng sang áp. • Phân tích mạch điện RCV420 là IC chuyên dụng, mạch RCV420 nhận tín hiệu ngõ vào từ 4 đến 20 mA sau đó chuyển đổi thành nguồn áp từ 0-5V. Các tụ C1, C2, C3 và C4 trong mạch có nhiệm vụ lọc nguồn và chống nhiễu tín hiệu vào và ra cho mạch. 3.1.2.3. Mạch nạp AVR: Hình 3.9 Sơ đồ nguyên lý mạch nạp AVR Hình 3.10 Mạch nạp AVR. 3.1.2.4. Mạch ứng dụng AVR ATmega32: VCC J3 LC D 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 VCC A Tm eg a3 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 PB0[T0] PB1[T1 ] PB2[AIN0] PB3[AIN1] PB4[SS] PB5[MOSI] PB6[MISO] PB7[SCK] /RST VCC GND XTAL2 XTAL1 PD0[RXD] PD1[TXD] PD2[INT0] PD3[INT1] PD4[OC1B] PD5[OC1A] PD6[ICP] PD7 PC0 PC1 PC2 PC3 PC4 PC5 PC6[TOSC1] PC7[TOSC2] AVCC AGND AREF PA7[ADC7] PA6[ADC6] PA5[ADC5] PA4[ADC4] PA3[ADC2] PA2[ADC2] PA1[ADC1] PA0[ADC0] + C2 VCC C8 VR J1 1 2 3 4 5 Y2 DU ON G NA P pin R4 MAX232 16 1 3 14 13 7 8 9 10 11 12 5 4 26 15 V C C C1+ C1- /T1OUT R1IN /T2OUT R2IN /R2OUT T2IN T1IN /R1OUT C2- C2+ V+V- G N D R3 R5 J2 0-5V 1 2 R6 VCC R2 DS1307 8 7 6 54 3 2 1 VCC SQW/OUT SCL SDAGND Vbat X2 X1 VCC C6 VCC C7 + C1 VCC R7 D1 LED + C4 +C3 R8 Y1 + C5 VCC U1 C O N G C O M 2 3 5 RXD TXD GND R1 Hình 3.11 Sơ đồ nguyên lý mạch ứng dụng AVR. Hình 3.12 Mạch AVR. • Các linh kiện: J1: con 5 đường nạp chương trình cho AVR. J2: con 2 đưa vào tín hiệu 0-5V. J3: con 16 kết nối hiện thị ra LCD. Y1: thạch anh 11MHz. Y2: thạch anh D1: led R1: điện trở 10K R2: điện trở 10K R3: điện trở 10K R4: điện trở 10K R5: điện trở 10K R6: điện trở 100Ω R7: điện trở 10K R8: điện trở 330Ω VR: biến trở C1: 10 uF C2: 10uF C3: 10uF C4: 10uF C5: 10uF C6: tụ 104 C7: tụ 22 C8: tụ 22 U1: cổng com DS1307: dalad MAX232: IC ATmega32: IC vi điều khiển. • Phân tích mạch điện Các chân nguồn cho chip: bạn cần cấp nguồn và mass cho chip, bạn phải nối chân VCC (chân 10 của chip ATmega32), và AVCC (chân 30) với nguồn VCC, nối các chân GND và AGND với mass. - Các đường nạp chip: chúng ta dành sẵn các đường này để có thể kết nói với các mạch nạp mà không cần tháo chip khỏi mạch ứng dụng. Bạn nên bố trí các đường này theo thứ tự mà mạch nạp của bạn được bố trí (ví dụ GND, VCC, RESET, SCK, MISO, MOSI). - Bộ tạo dao động - Thạch anh (Crystal): đây là nguồn xung giữ nhịp "nuôi" chip, không có xung giữ nhịp chip sẽ không hoạt động. Tuy nhiên, đa số các chip AVR đều hỗ trợ nguồn xung giữ nhịp bên trong với tần số tối ta 8MHz. Nếu bạn thấy không cần thiết đến tần số hoạt động cao bạn có thể dùng nguồn xung giữ nhịp trong chip, khi đó bạn có thể bỏ qua bộ tạo xung (gồm thạch anh và 2 tụ điện như trong hình). Việc chọn nguồn xung "nuôi" chip được xác lập bởi các Fuse bits. Một chú ý khác là trên dòng chip ATmega, fuse bits được set mặc định để sử dụng nguồn xung nội 1MHz, vì thế với các chip này, khi mới mua về bạn có thể không cần dùng thạch anh ngoài. Nhưng một khi bạn đã set fuse bits để chọn nguồn xung ngoài thì không được bỏ qua mạch thạch anh này. (Các chip AT90S..mặc định lấy nguồn xung ngoài). - Chân AREF là chân điện áp tham chiếu cho các bộ ADC. Đối với các chip AVR khác, bạn có thể tạo mạch ứng dụng theo cách tương tự như mạch điện này. • UART viết tắt của Universal Asynchronous Receiver – Transmitter – thường là một mạch tích hợp được sử dụng trong việc truyền dẫn dữ liệu nối tiếp giữa máy tính và thiết bị ngoại vi thông qua cổng nối tiếp. Rất nhiều vi điều khiển hiện nay đã tích hợp UART. Để bắt đầu việc truyền dữ liệu bằng UART, một start bit được gửi đi, sau đó là 5-8 bit dữ liệu, sau đó là stop bit. Start bit có trạng thái ngược với trạng thái bình thường của đường truyền dữ liệu. Stop bit có cùng trạng thái với trạng thái bình thường của đường truyền dữ liệu. Tốc độ của UART được quy định bởi tốc độ baud. Một số interface chuẩn của UART là EIA, RS 232, RS 422 và RS 485. • Tín hiệu truyền theo chuẩn RS-232 của EIA (Electronics Industry Associations). Chuẩn RS-232 quy định mức logic 1 ứng với điện áp từ - 3V đến -25V (mark), mức logic 0 ứng với điện áp từ 3V đến 25V (space) và có khả năng cung cấp dòng từ 10 mA đến 20 mA. Ngoài ra, tất cả các ngõ ra đều có đặc tính chống chập mạch. Chuẩn RS-232 cho phép truyền tín hiệu với tốc độ đến 20.000 bps nhưng nếu cáp truyền đủ ngắn có thể lên đến 115.200 bps. • Truyền nhận nối tiếp theo chuẩn UART, các đường truyền TXD và RXD luôn ở bit 1 (5V theo chuẩn TTL). Đến khi có tín hiệu được truyền thì đường truyền được hạ xuống bit 0 ( 0V theo chuẩn TTL) để bắt đầu bit START. Chuẩn RS-232 qui định bit 1 là mức áp thấp từ -3V đến - 12V, bit 0 là mức áp cao từ +3V đến +12V. Chuẩn TTL lại qui định ngược lại, bit 1 là mức áp cao ( tối đa +5V), bit 0 là mức áp thấp (thấp nhất là 0V). Do đó ở đây ta qui ước mức cao là áp dương +5V hay +12V, mức thấp là áp âm -12V hay 0V. 3.1.3. Thiết kế phần mềm: $regfile = "m32def.dat" $crystal = 11059200 $baud = 19200 $hwstack = 32 $swstack = 10 $framesize = 40 'some subroutines Declare Sub Getline(s As String) Declare Sub Getline1(s As String) Declare Sub Flushbuf() Declare Sub Showsms(s As String ) $lib "ds1307clock.lib" ' modified lib 'used variables Dim Bit_tang_ngay As Bit Dim I As Byte , B As Byte , Weekday As Byte , Addr As Byte , Value As Byte , K As Byte , Num_sms As Word Dim W0 As Word , W1 As Word Dim Kenh0(24) As Word , Kenh1(24) As Word Dim Sret As String * 6 , Stemp As String * 16 Dim S_data As String * 16 , S_number As String * 5 Dim Number_phone As String * 30 , Number_tong_dai As String * 15 ‘we use a serial input buffer 'Config Serialin = Buffered , Size = 12 ' buffer is small a bigger chip would allow a bigger buffer Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.4 , Rs = Portc.5 Config Adc = Single , Prescaler = Auto , Reference = Avcc Config Sda = Portc.7 Config Scl = Portc.6 Config Clock = User ' this will dim the bytes automatic Config Int0 = Falling 'define a constant to enable LCD feedback Const Pincode = "AT+CPIN=1234" ' pincode change it into yours! Const So_Thoa = "AT+CMGS=+84907039071" Const Khau_lenh = "SENDDATA" Const Khau_lenh1 = "SENDALLDATA" Const Ma_gui_sms = "AT+CMGS=" Const Baudrate_115200 = 51 Const Baudrate_19200 = 350 Const Baudrate_9600 = 22 Const Ds1307w = &HEF ' Addresses of Ds1307 clock Const Ds1307r = &HD4 On Int0 Isr_int0 'enable the interrupts because the serial input buffer works interrupts driven Ddrd.3 = 0 Ddra.0 = 0 Ddra.1 = 0 ' input adc Cls Start Adc 'wait until the mode is ready after power up 'Wait 15 Ubrrl = Baudrate_115200 Do Wait 1 Print Chr(27) ' ma thoat ra khoi bi treo Waitms 200 Print "ATE0" Getline Stemp Loop Until Stemp = "OK" Lcd "SMS READY" 'Gosub Khoi_tao_ds1307 For I = 1 To 24 K = I * 2 Readeeprom Kenh0(i) , K If Kenh0(i) > 999 Then Kenh0(i) = 0 End If K = K + 48 Readeeprom Kenh1(i) , K If Kenh1(i) > 999 Then Kenh1(i) = 0 End If Next I Gosub Getdatetime Enable Interrupts Enable Int0 Main: Do Main1: Getline Sret ' wait for a modem response Cls Lcd "Msg from modem" Home Lower : Lcd Sret Waitms 500 If Sret = "RING" Then Goto Main1 End If I = Instr(sret , ":") ' look for : If I > 0 Then 'found it Stemp = Left(sret , I) Select Case Stemp Case "+CMTI:" : Showsms Sret ' we received an SMS ' hanle other cases here End Select End If Loop ' for ever End 'end program 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ht_time Ht_time: Bit_tang_ngay = 0 Locate 2 , 1 Lcd " " Locate 2 , 3 Lcd _hour ; ":" ; _min ; ":" ; _sec Return 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX CHUONG TRINH TEST SO PHONE GUI TOI Lay_num_phone: I = Instr(s_number , ",") I = I + 2 Number_phone = Mid(s_number , I) I = Instr(number_phone , ",") I = I - 2 Number_phone = Left(number_phone , I) S_data = Ucase(s_data) ' chuyen thanh chu hoa het If S_data = Khau_lenh Then W0 = Getadc(0) : W1 = Getadc(1) Print "AT+CMGS=" ; Number_phone Cls Wait 2 S_data = "MODEM GUI VE: LUU LUONG: " Sret = Str(w0) S_data = S_data + Sret S_data = S_data + " AP LUC: " Sret = Str(w1) S_data = S_data + Sret S_data = S_data + " TIME: " S_data = S_data + Time$ S_data = S_data + " DATE: " S_data = S_data + Date$ Print S_data Elseif S_data = Khau_lenh1 Then Bit_tang_ngay = 1 Locate 2 , 1 Lcd "yeu cau alldata" Gosub Thu_data Else I = Instr(s_data , " ") Decr I Number_phone = Left(s_data , I) If Number_phone = "DOISO" Then I = I + 2 Number_tong_dai = Mid(s_data , I) Writeeeprom Number_tong_dai , 300 Cls Lcd "DOI SO MOI" Locate 2 , 1 Lcd Number_tong_dai End If End If Return 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Doi_baudrate: Print "AT+IPR?" Getline Stemp Locate 2 , 1 Lcd " " Locate 2 , 1 Lcd Stemp 'Do 'Loop Until Stemp = "OK" Print "ATE0" Waitms 100 Print "AT+IPR=9600" Waitms 500 Ubrr = Baudrate_9600 Return 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Delete_sms: Cls Lcd "DANG XOA SMS" For I = 1 To 100 Print "AT+CMGD=" ; I Getline Sret Locate 2 , 1 Lcd " " Locate 2 , 1 Lcd Sret ; " " ; I Next I Return 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Getdatetime Getdatetime: I2cstart ' Generate start code I2cwbyte Ds1307w ' send address I2cwbyte 0 ' start address in 1307 I2cstart ' Generate start code I2cwbyte Ds1307r ' send address I2crbyte _sec , Ack I2crbyte _min , Ack ' MINUTES I2crbyte _hour , Ack ' Hours I2crbyte Weekday , Ack ' Day of Week I2crbyte _day , Ack ' Day of Month I2crbyte _month , Ack ' Month of Year I2crbyte _year , Nack ' Year I2cstop _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour) Weekday = Makedec(weekday) : _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year) Return 'XXXXXXX

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

  • pdfbao_cao_NCKH.pdf
  • pdfbai_bao.pdf