TRƯỜNG ĐẠI HỌC SAO ĐỎ - CƠ SỞ GIÁO DỤC THEO ĐỊNH HƯỚNG ỨNG DỤNG

CHẤT LƯỢNG TOÀN DIỆN - HỢP TÁC SÂU RỘNG - PHÁT TRIỂN BỀN VỮNG

ỨNG DỤNG VI ĐIỀU KHIỂN ARDUINO UNO R3 ĐIỀU KHIỂN ĐÓNG NGẮT TỪ XA NGUỒN ĐIỆNTẠI TRUNG TÂM THỰC HÀNH THỰC NGHIỆM ĐIỆN

Thứ hai - 09/12/2024 12:00
ỨNG DỤNG VI ĐIỀU KHIỂN ARDUINO UNO R3 ĐIỀU KHIỂN ĐÓNG NGẮT TỪ XA NGUỒN ĐIỆNTẠI TRUNG TÂM THỰC HÀNH THỰC NGHIỆM ĐIỆN
Người viết: Nguyễn Trương Huy
                                                                                            GV: Thực hành Điện

 

I. Tìm hiểu về bo mạch Arduino Uno R3

Mạch Arduino Uno là dòng mạch Arduino phổ biến, khi mới bắt đầu làm quen, lập trình với Arduino thì mạch Arduino thường nói tới chính là dòng Arduino Uno. Hiện dòng mạch này đã phát triển tới thế hệ thứ 3 (Mạch Arduino Uno R3).
Arduino Uno R3 là dòng cơ bản, linh hoạt, thường được sử dụng cho người mới bắt đầu.
Arduino Uno là bo mạch vi xử lý hoạt động dựa trên ATmega328. Bo mạch này có 14 chân input/output digital (trong đó có 6 chân được dùng cho điều chế xung đầu ra PWM), 6 đầu vào analog, tần số giao động thạch anh là 16MHz, kết nối USB, jack cắm nguồn, chân tiêu đề ICSP, một nút reset. Bo mạch này chứa tất cả các tính năng cần thiết để hỗ trợ kết nối với các vi điều khiển khác. Nguồn sử dụng cho bo mạch có thể qua USB, sử dụng pin hoặc nguồn thông qua bộ chuyển đổi AC–DC.
cc
Hình 1.1. Bo mạch Arduino Uno chip cắm
ccc
Hình 1.2. Arduino Uno R3 chíp dán CH340
Arduino Uno khác với tất cả các bo mạch khác ở chỗ nó không sử dụng chip điều khiển nối tiếp FTDI USB. Thay vào đó các tính năng của ATmega16U2 được lập trình để chuyển đổi USB nối tiếp.
Ở phiên bản thứ hai: bo mạch Uno có điện trở nối đường 8U2 HWB với đất, do đó ta dễ dàng hơn trong việc thiết lập chế độ DFU.
Ở phiên bản sửa đổi thứ 3 của bo mạch có các tính năng mới dưới đây:
- Sơ đồ chân 1.0: Thêm các chân SDA và SCL gần với chân AREF và 2 chân mới được đặt gần chân RESET, IOREF cho phép Shield nhận nguồn cấp từ bo mạch. Trong tương lai, Shield sẽ tương thích với các bo mạch có sử dụng AVR, có điện áp hoạt động là 5V và Arduino Due hoạt động ở 3,3V. Một số chân trong bo mạch không được kết nối gì để dành cho mục đích trong tương lai.
- Mạch Reset mạnh mẽ hơn.
- ATmega 16U2 thay thế cho 8U2.
"Uno" là từ trong tiếng Ý và được đặt tên để đánh dấu việc phát hành phiên bản Arduino 1.0. Uno và phiên bản 1.0 sẽ là phiên bản tham khảo của Arduino, và luôn có sự cải tiến. Uno là một trong những bo mạch mới nhất trong một loạt các bo mạch USB Arduino, và là mô hình tham chiếu nền tảng của Arduino, để so sánh với phiên bản trước đó, xem các thông số của bo mạch Arduino.
er

1.1. Thông số kỹ thuật Arduino Uno R3

Vi xử lý: ATmega 328
Điện áp hoạt động: 5V
Điện áp đầu vào: 7-12V
Điện áp đầu vào (giới hạn): 6-12V
Chân vào/ra (I/O) số: 14 (6 chân có thể cho đầu ra PWM)
Chân vào tương tự: 6
Dòng điện trong mỗi chân I/O: 40mA
Dòng điện chân nguồn 3,3V: 50mA
Bộ nhớ trong: 32KB (ATmega328)
SRAM: 2KB (ATmega328)
EEPROM: 1KB (ATmega328)
Xung nhịp: 16 MHz

1.2. Cấu trúc phần cứng

1..2.1. Khối nguồn

          a. Sử dụng chuyển đổi AC sang DC
Nguồn vào sử dụng Jack (7-12V), đường kính 2.1mm, chốt trung tâm là cực dương và ống bọc bên ngoài được nối đất.
dd
b. Sử dụng cáp USB
Nguồn vào sử dụng công USB B, dòng diện cung cấp cho board mạch là 500mA ở điện áp 5V nếu kết nồi được liệt kê và 100mA ở điện áp 5V nếu kết nối không được Liệt kê
ddd
Trong trường hợp chỉ có 1 trong 2 nguồn cung cấp thì Board Arduino sẽ sử dụng nguồn cung cấp đó.
Trong trường hợp có cả 2 nguồn cung cấp thì Arduino sẽ ưu tiền lựa chọn nguồn cung cấp từ Jack DC thay vì từ cổng USB.
Việc ưu tiên này được thực hiện bởi Opamp LMV358 và Mosfet FDN340P.
dc

1.2.2. Vi xử lý trung tâm

dv
Arduino Uno có thể sử dụng 3 vi điều khiển họ 8bit AVR là: ATmega8 (Board Arduino Uno r2), ATmega168, ATmega328 (Board Arduino Uno R3). Bộ não này có thể xử lí những tác vụ đơn giản như điều khiển đèn LED nhấp nháy, xử lí tín hiệu cho xe điều khiển từ xa, điều khiển động cơ bước, điều khiển động cơ serve, làm một trạm đo nhiệt độ – độ ẩm và hiển thị lên màn hình LCD,… hay những ứng dụng khác.
Mạch Arduino Uno R3 với thiết kế tiêu chuẩn sử dụng vi điều khiển ATmega328. Tuy nhiên nếu yêu cầu phần cứng của bạn không cao hoặc túi tiền không cho phép, bạn có thể sử dụng các loại vi điều khiển khác có chức năng tương đương nhưng rẻ hơn như ATmega8 (bộ nhớ flash 8KB) hoặc ATmega168 (bộ nhớ flash 16KB).

1.2.3. Khối tạo dao động

Mạch giao động tạo ra các xung clock giúp cho vi điều khiển hoạt động, thực thi lệnh… Board mạch Arduino Uno R3 sử dụng thạch anh 16 MHz làm nguồn dao động.

1.2.4. Khối mạch reset

Để vi điều khiển thực hiện khởi động lại thì chân RESET phải ở mức logic LOW (»0V) trong một khoảng thời gian đủ yêu cầu. Mạch reset của boad Arduino Uno R3 phải đảm bảo được hai việc:
          - Reser bằng tay: Khi nhấn nút, chân RESET nối với GND làm cho MCU RESET. Khi không nhấn nút chân Reset được kéo 5V.
          - Reser tự động: Reser tự động được thực hiện ngay khi cấp nguồn cho vi điều khiển nhờ sự phối hợp giữa điện trở nối lên nguồn và tụ điện nối đất. Thời gian tụ điện nạp giúp cho chân RESET ở mức LOW trong một khoảng thời gian đủ để vi điều khiển thực hiện reset.
          - Khởi động vi điều khiển trước khi nạp chương trình mới.

1.2.5. Mạch nạp và giao tiếp máy tính

          - Vi điều khiển ATmega328P trên Board Arduino Uno R3 đã được nạp sẵn 1 bootloader, cho phép nhận chương trình mới thông qua chuẩn giao tiếp UART (chân 0 và 1) ở những giây đầu sau khi vi điều khiển reset.
- Máy tính giao tiếp với Board mạch Arduino qua chuẩn giao tiếp USB (D+/D-), thông qua một vi điều khiển trung gian là ATmega16u2 hoặc một IC trung gian là CH340 (thường thấy trong các mạch sử dụng chip dán). Vi điều khiển hoặc IC này có nhiệm vụ chuyển đổi chuẩn giao tiếp USB thành chuẩn giao tiếp UART để nạp chương trình hoặc giao tiếp truyền nhận dữ liệu với máy tính.
Phần thiết kế mạch nạp có tích hợp thêm 02 đèn LED, nên khi nạp chương trình các bạn sẽ thấy 2LED này nhấp nháy. Còn khi giao tiếp, nếu có dữ liệu từ máy tính gửi xuống vi điều khiển thì đèn LED Rx sẽ nháy. Còn nếu có dữ liệu từ vi điều khiển gửi lên máy tính thì đèn Tx sẽ nháy. 
db
dn
Hình 1.8. Mạch nạp và giao tiếp máy tính

1.3. Giới thiệu Module SIM900

1.3.1. Tổng quan về Module SIM900

Một modem GSM là một modem wireless, nó làm việc cùng với một mạng wireless GSM. Một modem wireless thì cũng hoạt động giống như một modem quay số. Điểm khác nhau chính ở đây là modem quay số thì truyền và nhận dữ liệu thông qua một đường dây điện thoại cố định trong khi đó một modem wireless thì việc gửi nhận dữ liệu thông qua sóng.  
Giống như một điện thoại di động GSM, một modem GSM yêu cầu 1 thẻ sim với một mạng wireless để hoạt động. 
Module SIM 900 là một trong những loại modem GSM. Nhưng Module SIM 900 được nâng cao hơn có tốc độ truyền dữ liệu nhanh hơn. Nó sử dụng công nghệ GSM/GPRS hoạt động ở băng tầng GSM 850 MHz, EGSM 900MHz, DCS 1800 MHz và PCS 1900 MHz, có tính năng GPRS của SIM900. 
dm

1.3.2. Đặc điểm của module SIM900

Nguồn cung cấp khoảng 3,4 – 4,5V
- Nguồn lưu trữ
- Băng tần: GSM 850 MHz EGSM 900MHz, DCS 1800 MHz và PCS 1900 MHz SIM900 có thể tự động tìm kiếm các băng tần.
- Phù hợp với GSM Pha 2/2
+ Loại GSM là loại MS nhỏ
+ Kết nối GPRS 
- 8 lớp điện dung 
- 10 lớp điện dung
-  Giới hạn nhiêt độ:
+ Bình thường -300 0C tới +800 0C
+ Hạn chế: -400 0C tới -300 0C và +800 0C tới +850 0C
+ Nhiệt độ bảo quản: - 450 0C tới 900 0C
- Dữ liệu GPRS: 
+ GPRS dữ liệu tải xuống: Max 85,6 kbps
+ GPRS dữ liệu up lên: Max 42,8 kbps
+ Sơ đồ mã hóa: CS-1, CS-2, CS-3 và CS-4
+ Sim 900 hổ trợ giao thức PAP, kiểu sử dụng kết nối PPP 
+ Sim 900 tích hợp giao thức TCP/IP 
+ Chấp nhận thông tin được điều chỉnh rộng rãi 
- SMS: 
+ MT, MO, CB, Text and PDU mode
+ Bộ nhớ SMS: Sim card 
- Sim card:  Hỗ trợ sim card: 1,8 V; 3V 
- Anten ngoài: Kết nối thông qua anten ngoài 500km hoặc đế anten
- Âm thanh: 
+ Dạng mã hòa âm thanh.
+ Mức chế độ (ETS 06.20)
+ Toàn bộ chế độ (ETS 06.10)
+ Toàn bộ chế độ tăng cường (ETS 06.50/ 06.06/ 06.80)
+ Loại bỏ tiếng dội 
- Giao tiếp nối tiếp và sự ghép nối: 
+ Cổng nối tiếp: 8 Cổng nối tiếp (ghép nối) 
+ Cổng kết nối có thể Sd với CSD Fax, GPRS và gửi lệnh ATCommand tới module điều khiển
+ Cổng nối tiếp có thể Sd chức năng giao tiếp
+ Hỗ trợ tốc độ truyền 1200 BPS tới 115200 BPS
+ Cổng hiệu chỉnh lỗi: 2 cổng nối tiếp TXD và RXD
+ Cổng hiệu chỉnh lỗi chỉ sử dụng sửa lỗi
- Quản lý danh sách: Hỗ trợ mẫu danh sách: SM, FD, LD, RC, ON, MC
- Đồng hồ thời gian thực:  Người cài đặt
          - Times function: 
+ Lập trình thông qua AT Command
- Đặc tính vật lý (đặc điểm): Kích thước 24mmx24mmx24mm; nặng 3.4g 

1.3.3. Khảo sát sơ đồ chân và chức năng từng chân của SIM900  

ff
Hình 1.10. Sơ đồ chân SIM900
SIM900 đã được thiết kế kết nối phù hợp thành module để tiện phục vụ cho nội dung cần thiết trong đồ án.
fg
Hình 1.11. Sơ đồ thiết kế Breakout của Module SIM900
Bảng 1.1. Sơ đồ chân Breakout
1 3 5 7 9 11 13 15 17 19
ON/OFF LED VRTC ADC SPK1P MIC1N MIC1P MIC1P VCC VCC
 
2 4 6 8 10 12 14 16 18 20
RTS CTS DCD RI DTR TXD RXD RST GND GND
 
- Chân 1: Chân ON/OFF ta cần kích 1 xung có mức tích cực dương vào khoảng 1s, lúc này đèn status sẽ sáng, sau đó chớp nháy với tần suất nhanh báo hiệu SIM900 đang khởi động và tìm mạng. Sau 10s sau Led Status nhấp nháy chậm báo hiệu SIM900 đã hoạt động bình thường.
- Chân 2: Request to send.
- Chân 3: Đầu ra dùng để chỉ báo mạng kết nối được hệ thống.
- Chân 4: Clear to send.
- Chân 5: Đầu vào pin dự phòng cho Module.
- Chân 6: Data carrier detection.
- Chân 7: Chân vào của bộ chuyển đổi tín hiệu tương tự sang số
- Chân 8: Ring chân ra loa báo hiệu có cuộc gọi đến.
- Chân 9, 11: Chân loa nghe cuộc thoại
- Chân 13,15: Chân MIC.
- Chân 10: Chân đầu cuối dữ liệu.
- Chân 12: Chân truyền dữ liệu.
- Chân 14: Chân nhận dữ liệu.
- Chân 16: Chân RESET SIM900.
- Chân 17, 19: Chân nguồn cấp cho sim hoạt động.
- Chân 18, 20: Chân mass.
II. Thiết kế hệ thống điều khiển đóng ngắt từ xa nguồn cấp điện

2.1. Tủ cấp nguồn điện tại trung tâm thực hành thực nghiệm điện

2.1.1. Cấu tạo

 
fj
Hình 2.1. Tủ điện tổng
Tủ cấp nguồn điện tại trung tâm thực hành thực nghiệm điện (tủ điện tổng) được trang bị gồm:
- Áp tô mát tổng SINO 150A: Lấy nguồn từ trạm điện 560KVA thông qua cáp CXV-3x75+1x50 cấp điện cho các áp tô mát nhánh.
- Áp tô mát nhánh SINO 60A: Lấy nguồn từ áp tô mát tổng cấp điện cho các phòng 101, 102, 103, 104, 105.
- Áp tô mát nhánh SINO 60A: Lấy nguồn từ áp tô mát tổng cấp điện cho các phòng 106, 107, 108 và phòng trưởng khoa Điện.
- Áp tô mát nhánh SINO 60A: Lấy nguồn từ áp tô mát tổng cấp điện cho các phòng 201, 202, 203, 204.
- Áp tô mát một pha VANLOCK 32A: Lấy nguồn từ áp tô mát tổng cấp điện cho hệ thống chiếu sáng trung tâm thực hành thực nghiệm điện và khu WC.

2.1.2.  Quy trình vận hành

          Tủ điện tổng có chức năng đóng/cắt và bảo vệ quá dòng, ngắn mạch cho các phụ tải trong trung tâm thực hành thực nghiệm điện.
           a. Trình tự đóng điện
- Áp tô mát tổng: Sẽ được đóng trước
- Các áp tô mát nhánh: Lần lượt đóng sau.
           b. Trình tự ngắt điện
- Các áp tô mát nhánh: Sẽ được lần lượt ngắt trước
- Áp tô mát tổng: Ngắt sau cùng.
2.2. Sơ đồ khối và chức năng các khối hệ thống điều khiển đóng ngắt từ xa nguồn cấp điện
eeee
 
Hình 2.2. Sơ đồ khối hệ thống điều khiển
          Ap to mat tổng: Thực hiện đóng/cắt cấp nguồn cho các ap to mat nhánh và bảo vệ cho các phụ tải đứng sau nó.
          Contactor: Thực hiện đóng/cắt cấp nguồn cho các ap to mat nhánh. Việc đóng/cắt cấp nguồn cho các ap to mat nhánh thông qua bộ điều khiển đóng ngắt từ xa.
    Bộ điều khiển đóng ngắt từ xa: Sử dụng vi điều khiển Arduino Uno R3, giao tiếp SMS, Module SIM900A.
          Ap to mat nhánh: Thực hiện đóng/cắt cấp nguồn cho các phụ tải và bảo vệ cho các phụ tải đứng sau nó.
          Phụ tải điện: Bao gồm phụ tải một pha và ba pha sử dụng nguồn điện từ ap to mat nhánh.

2.3. Yêu cầu công nghệ

Tủ cấp nguồn điện tại trung tâm thực hành thực nghiệm điện chỉ thực hiện vận hành trực tiếp, tại chỗ trong việc cấp điện và bảo vệ cho hệ thống điện chiếu sáng và động lực trong trung tâm thực hành thực nghiệm điện.
Muốn giám sát và thực hiện điều khiển đóng cắt nguồn điện từ xa sẽ không thực hiện được.
Để khắc phục tồn tại trên. Nhóm tác giả sử dụng vi điều khiển Arduino UNO R3 kết hợp giao tiếp SMS (modul Sim 900A). Sử dụng điện thoại để điều khiển các thiết bị với yêu cầu đạt được:
- Điều khiển không giới hạn khoảng cách thông qua tin nhắn SMS và vi điều khiển (phụ thuộc vào khu vực được phủ sóng điện thoại).
- Hệ thống làm việc tin cậy, không giới hạn công suất điện.
- Giám sát được chế độ đóng cắt

2.3. Thiết kế mạch điều khiển

Sơ đồ và chức năng các khối mạch điều khiển

fk
- Khối nguồn: Cung cấp nguồn một chiều cho hệ thống điều khiển làm việc
- Khối module SIM900A: là module giao tiếp SMS
- Khối module Arduino Uno R3: Nhận tín hiệu lối vào từ khối module SIM900A để nhận lệnh từ điện thoại hoặc gửi dữ liệu lên điện thoại, từ đó đưa ra các hành động thích hợp như tính toán và điều khiển đóng/cắt các thiết bị điện.
          - Khối module Relay: Nhận tín hiệu từ module Arduino Uno R3 thực hiện điều khiển đóng/cắt cho thiết bị điện.

2.4. Lập trình điều khiển hệ thống

2.4.1. Bảng kết nối giữa các module

Cách sử dụng module SIM900A với module Arduino
Module SIM900A có nhiều chân nhưng tất cả chúng đều có một số yêu cầu phần cứng được nêu trong datasheet. Có một loạt bo mạch được thiết kế sẵn để giải quyết yêu cầu của phần cứng
fl

2.4.2. Các lệnh điều khiển tin nhắn

Lệnh: AT+CMGF=1<CR><LF>
Mô tả: Lệnh đưa SMS về chế độ Text, phải có lệnh này mới gửi nhận tin nhắn dạng Text
Lệnh: AT+CMGS=” Số_điện _thoại”<CR><LF>
Đợi đến khi có ký tự ‘>’ được gửi về thì đánh nối dung tin nhắn  
Gửi mã Ctrl+Z  hay 0x1A hoặc giá trị 26 để kết thúc nội dung và gửi tin nhắn
Mô tả: Lệnh gửi tin nhắn
Lệnh: AT+CMGR=x<CR><LF>
x là địa chỉ tin nhắn cần đọc
Mô tả: Đọc một nhắn vừa gửi đến, lệnh được trả về nội dung tin nhắn, thông tin người gửi, thời gian gửi
Lệnh: AT+CMGDA=” DEL ALL”<CR><LF>
Mô tả:  Xóa toàn bộ tin nhắn trong các hộp thư
Lệnh: AT+CNMI=2,2<CR><LF>

2.4.3. Chương trình điều khiển (Nội dung trong phần phụ lục)

III. Thực nghiệm và đánh giá kết quả

3.1. Đấu nối mô hình

gf
Hình 3.1. Đấu nối mô hình

3.2. Mô hình điều khiển đóng ngắt từ xa nguồn điện tại trung tâm thực hành thực nghiệm điện

hk

Hình 3.2. Mô hình điều khiển đóng ngắt từ xa nguồn điện tại trung tâm thực hành thực nghiệm điện
          Ngoài ra để giám sát và gửi tin nhắn tới bộ điều khiển là điện thoại di động thông thường.
gh
Hình 3.3. Điện thoại di động

3. 3. Thực nghiệm

3.3.1. Kết nối mô hình với nguồn điện

gd
Hình 3.4. Kết nối mô hình với nguồn điện         

3.3.2. Khởi động điện thoại di động

hh
          Điện thoại di động được bật màn hình và chuyển sang chế độ tin nhắn.

3.3.3. Vận hành mô hình

          - Nhập địa chỉ tin nhắn sẽ gửi đến: Số 0338924105 là số SIM trên Module 900A.
          - Soạn tin nhắn On trên điện thoại rồi gửi tới số điện thoại 0338924105. Contactor làm việc, đèn báo sáng. Màn hình điện thoại báo “DA DONG DIEN”
Để bảo mật và giới hạn quyền truy nhập vào số điện thoại 0338924105. Được cài đặt trong chương trình điều khiển.
- Soạn tin nhắn Off trên điện thoại rồi gửi tới số điện thoại 0338924105. Contactor dừng làm việc, đèn báo tắt. Màn hình điện thoại báo “DA TAT DIEN”.
            *Lưu ý:
          - Khi sử dụng mô hình, bật tắt thiết bị ta nên đợi 5s để tin nhắn phản hồi về điện thoại rồi tiếp tục gửi lệnh tiếp theo để tránh xung và vi xử lý thực hiện được lệnh.
          - Mô hình sử dụng điện áp từ 9-12VDC nên tránh trường hợp cấp nhầm điện áp dẫn đến hư hỏng mô hình và các thiết bị bên trong.
          Qua kết quả thực nghiệm cho thấy, thông qua việc gửi tin nhắn đến số điện thoại 0338924105 đã giám sát và điều khiển Relay làm việc thực hiện đóng/ngắt nguồn điện tại trung tâm thực hành thực nghiệm điện an toàn, tin cậy.
          Thực nghiệm với khả năng điều khiển qua mạng SMS: Hệ thống điều khiển với khoảng cách xa, ổn định.
         

Tài liệu tham khảo

[1]. Quách Tuấn Ngọc (2003), “Ngôn ngữ lập trình C++”, Nxb. Thống kê
           [2]. Ngô Diên Tập (2004), “Vi xử lý trong đo lường và điều khiển”, Nxb. Khoa học và Kỹ thuật
           [3]. Lê Văn Thảnh (1996), “Nguyên lý Tổng đài điện tử”, Trung tâm đào tạo Bưu chính viễn thông II
[4]. “Thiết bị đầu cuối thông tin” – Tổng cục bưu điện
           [5]. F. H. Mitchell (1988), “Introduction To Electronics Design”, Nxb. Printice  Hall
[6]. Tocci (1994), “Digitall System”, Nxb. Printice Hall
           [7]. Whitham D.Reeve(1995), “Subscriber Loop Signaling &Transmission Handbook: Digital”, Nxb. IEEE Press
 [8]. Http://www.MT.com                                        [Trang chủ IC MT8880]
 

PHỤ LỤC

// Relay được điều khiển có cú pháp nhắn tin như sau:
// Chỉ có 3 số điện thoại có thể điều khiển được hệ thống là:  T.Huy 0984852180; T.Các 0975799421; T.Tảo 0985032766
// on -> Gửi đến số 0338.924.105: Relay On; tin nhắn được gửi đến số điện thoại có yêu cầu với nội dung; Da dong dien
// off -> Gửi đến số 0338.924.105: Relay Off; tin nhắn được gửi đến số điện thoại có yêu cầu với nội dung; Da tat dien
//--------------------------
#include <SoftwareSerial.h>
SoftwareSerial SIM900A(2,3);
#define Baud 9600
const int Relay = 8;
//---------------------
String sms="";
String TextMsg="";
String Msg="";
//---------------------
int F_RUN=0;
int Flag=0;
//---------------------
void setup(void);
int SendMessage(String s, int fk);
void RecieveMessage();
int ControlRelay(String p, int fv);
//---------------------------
void loop()
{
  if(SIM900A.available()>0)
  {
      if(F_RUN==0)
      {
        sms=SIM900A.readString();
        TextMsg+=sms;
        if(TextMsg.length()>=52)
        {
          Msg=TextMsg;
          TextMsg="";
          Serial.println(Msg);
          F_RUN=1;
        }
        //delay(50);
      };     
  };
  //------------------------------
  if(F_RUN==1)
  {
     Msg.toUpperCase();
     //Serial.println(Msg);
     //delay(10);
     if (Msg !="")
     {
        Serial.println(Msg);
        if(Msg.indexOf("+84984852180")>=0) Flag=3; // T.Huy
        if(Msg.indexOf("+84975799421")>=0) Flag=2; // T.Các
        if(Msg.indexOf("+84985032766")>=0) Flag=1; // T.Tảo
        Flag=ControlRelay(Msg, Flag);
        F_RUN=0;
     };    
  };
}
//------------------------------------
// Function: Setup
// Purpose: Initialies system
// Input: Node
// Output: Node
//------------------------------------
void setup(void)
{
  SIM900A.begin(Baud);   // Thiết lập module Sim 900A 
  Serial.begin(Baud);    // Thiết lập cổng nối tiếp
  delay(500);
  // Thiết lập địa chỉ điều khiển ra
  pinMode(Relay,OUTPUT);  
  // Đặt địa chỉ ra lên mức cao
  digitalWrite(Relay,HIGH);
  // AT command to set SIM900 to SMS mode
  //SIM900A.print("AT+CMGF=1");
  //delay(100);
  // Set module to send SMS data to serial out upon receipt
  SIM900A.print("AT+CNMI=2,2,0,0,0");
  delay(100);
  Serial.println ("SIM900A Ready");
}
//-------------------------
// Function: ControlRelay
// Purpose: Relay controller
// Input: One string and flag (selection numberphone)
// Output: Node
//-------------------------
int ControlRelay(String p, int fv)
{
  if(p.indexOf("ON")>=0)
  {
    digitalWrite(Relay,LOW);
    Msg="";   
    fv=SendMessage("Da dong dien", fv);
    delay(1000);
    SIM900A.println("AT+CMGDA=\”DEL ALL\”");// "AT+CMGD=1,4" Delete all sms
    delay(100);
    //Serial.println("Da dong dien");
  }
  else 
  {
    if(p.indexOf("OFF")>=0)
    {
      digitalWrite(Relay,HIGH);
      Msg="";            
      fv=SendMessage("Da tat dien", fv);
      delay(1000);
      SIM900A.println("AT+CMGDA=\”DEL ALL\”");// "AT+CMGD=1,4" Delete all sms
      delay(100);
      //Serial.println("Da tat dien");
    }
  };
  return fv;
}
//-------------------------
// Function: SendMessage
// Purpose: Send one mesage to number phone
// Input: One string and flag (selection numberphone)
// Output: Node
//-------------------------
int SendMessage(String s, int fk)
{
  if(fk!=0)
  {
    //Sets the GSM Module in Text Mode
    SIM900A.println("AT+CMGF=1");
    delay(500); 
    if(fk==3)SIM900A.println("AT+CMGS=\"+84984852180\"\r"); // T.Huy
    if(fk==2)SIM900A.println("AT+CMGS=\"+84975799421\"\r"); // T.Cac
    if(fk==1)SIM900A.println("AT+CMGS=\"+84985032766\"\r"); // T.Tao
    delay(100);
    SIM900A.println(s);// Messsage content
    delay(100); 
    SIM900A.println((char)26);// ASCII code of CTRL+Z
    delay(100);
    if(fk==3)Serial.println ("So Thay Huy");
    if(fk==2)Serial.println ("So Thay Cac");
    if(fk==1)Serial.println ("So Thay Tao");
    fk=0;
    delay(3000);
   };
   return fk;
   }
 
 
 
 

Tổng số điểm của bài viết là: 0 trong 0 đánh giá

Click để đánh giá bài viết
Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây