Professional Documents
Culture Documents
1.DeCuong Nhom 4 Final
1.DeCuong Nhom 4 Final
ĐỀ TÀI
Kết nối module SIM(900) với Arduino, nhắn tin điều khiển chăm sóc hồ cá
thủy sinh
Giảng viên hướng dẫn: Phù Trần Tín
Nhóm sinh viên thực hiện:
STT Họ và tên MSSV
1 Trần Thanh Tường 17077381
2 Phạm Ngọc Thịnh 17070941
3 Nguyễn Hữu Thắng 17055561
4 Đặng Gia Bảo 17025451
5 Vũ Chí Tiến 17030831
1
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
2
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
I. Đặt vấn đề
Bạn có sở thích nuôi cá và chăm sóc thủy sinh nhưng không thường xuyên ở nhà
vì phải đi học, đi làm,...
Vì thế bạn không thể cho cá ăn đúng giờ,cây thủy sinh thiếu ánh sáng,không
bật tắt đèn,oxi đúng giờ nhằm tiết kiệm điện
Để giải quyết các vấn đề trên, nhóm đã quyết định thực hiện đề tài là “Kết nối module
SIM(900) với Arduino, nhắn tin điều khiển chăm sóc hồ cá thủy sinh”
3
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
Tuần 4 Tổng hợp các Đánh giá,ghi Đánh giá,ghi Mô phỏng mạch Mô phỏng
code thành 1 nhận lại tiến nhận lại tiến độ trên Proteus mạch trên
phần hoàn độ thực hiện thực hiện Proteus
chỉnh.
Tuần 5 Thiết kế, bổ Lên danh Lên danh sách Thiết kế, bổ Thiết kế, bổ
sung thêm các sách các vật các vật dụng,linh sung thêm các sung thêm các
chức năng,linh dụng,linh kiện cần mua. chức năng,linh chức năng,linh
kiện (nếu cần) kiện cần kiện (nếu cần) kiện (nếu cần)
mua.
4
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
Tuần 9 Tổng hợp báo Tổng hợp Tổng hợp báo cáo Tổng hợp báo Tổng hợp báo
cáo từng báo cáo từng từng tuần(PP và cáo từng tuần(PP cáo từng
tuần(PP và tuần(PP và 1. 2: Word)
Bảng Phân công thực hiện và Word) tuần(PP và
Word) Word) Phát triển sản Phát triển sản Word)
Phát triển sản Phát triển sản phẩm phẩm Phát triển sản
phẩm phẩm phẩm
Tuần 10 Báo cáo sản Báo cáo sản Báo cáo sản Báo cáo sản Báo cáo sản
phẩm, thuyết phẩm, thuyết phẩm, thuyết phẩm, thuyết phẩm, thuyết
trình trình trình trình trình
5
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
Mục lục
7
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
8
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
Nhắc tới dòng mạch Arduino dùng để lập trình, cái đầu tiên mà người ta 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 (R3).
Vì giá thành rẻ và số chân digital(14 chân)vừa đủ để thực hiện đề tài nên nhóm chọn
Arduino UNO R3
9
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
10
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
+ GND (Ground): cực âm của nguồn điện cấp cho Arduino UNO. Khi bạn dùng
các thiết bị sử dụng những nguồn điện riêng biệt thì những chân này phải được nối với
nhau.
+ 5V: cấp điện áp 5V đầu ra. Dòng tối đa cho phép ở chân này là 500mA.
+ 3.3V: cấp điện áp 3.3V đầu ra. Dòng tối đa cho phép ở chân này là 50mA.
+ Vin (Voltage Input): để cấp nguồn ngoài cho Arduino UNO, bạn nối cực dương
của nguồn với chân này và cực âm của nguồn với chân GND.
+IOREF: điện áp hoạt động của vi điều khiển trên Arduino UNO có thể được đo ở
chân này. Và dĩ nhiên nó luôn là 5V. Mặc dù vậy bạn không được lấy nguồn 5V từ chân
này để sử dụng bởi chức năng của nó không phải là cấp nguồn.
+ RESET: việc nhấn nút Reset trên board để reset vi điều khiển tương đương với
việc chân RESET được nối với GND qua 1 điện trở 10KΩ.
1.1.2 Bộ nhớ
Vi điều khiển Atmega328 tiêu chuẩn cung cấp cho người dùng:
- 32KB bộ nhớ Flash: những đoạn lệnh bạn lập trình sẽ được lưu trữ trong bộ nhớ
Flash của vi điều khiển. Thường thì sẽ có khoảng vài KB trong số này sẽ được dùng cho
bootloader nhưng đừng lo, bạn hiếm khi nào cần quá 20KB bộ nhớ này đâu.
- 2KB cho SRAM (Static Random Access Memory): giá trị các biến bạn khai báo
khi lập trình sẽ lưu ở đây. Bạn khai báo càng nhiều biến thì càng cần nhiều bộ nhớ RAM.
Tuy vậy, thực sự thì cũng hiếm khi nào bộ nhớ RAM lại trở thành thứ mà bạn phải bận
tâm. Khi mất điện, dữ liệu trên SRAM sẽ bị mất.
- 1KB cho EEPROM (Electrically Eraseble Programmable Read Only Memory):
đây giống như một chiếc ổ cứng mini – nơi bạn có thể đọc và ghi dữ liệu của mình vào
đây mà không phải lo bị mất khi cúp điện giống như dữ liệu trên SRAM.
11
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
- 2 chân Serial: 0 (RX) và 1 (TX): dùng để gửi (transmit – TX) và nhận (receive –
RX) dữ liệu TTL Serial. Arduino Uno có thể giao tiếp với thiết bị khác thông qua 2 chân
này. Kết nối bluetooth thường thấy nói nôm na chính là kết nối Serial không dây. Nếu
không cần giao tiếp Serial, bạn không nên sử dụng 2 chân này nếu không cần thiết
Chân TX-RX của Adruino nối với chân RX-TX của module sim900 để khi module
sim900 nhận được cái lệnh từ tin nhắn sẽ truyền cho arduino để điều khiển các thiết
bị led, servo motor
- Chân PWM (~): 3, 5, 6, 9, 10, và 11: cho phép bạn xuất ra xung PWM với độ
phân giải 8bit (giá trị từ 0 → 28-1 tương ứng với 0V → 5V) bằng hàm analogWrite().
Nói một cách đơn giản, bạn có thể điều chỉnh được điện áp ra ở chân này từ mức 0V đến
5V thay vì chỉ cố định ở mức 0V và 5V như những chân khác. Chân 9 (PWM~) được
nói với động cơ servo điều khiển servo làm cần gạt cho thức ăn xuống hồ cá .
- Chân giao tiếp SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Ngoài các chức
năng thông thường, 4 chân này còn dùng để truyền phát dữ liệu bằng giao thức SPI với
các thiết bị khác. LED được nói với chân 12 để cho adruino điều khiển bật tắt led khi
tiếp nhận thông tin từ module sim900
- LED 13: trên Arduino UNO có 1 đèn led màu cam (kí hiệu chữ L). Khi bấm nút
Reset, bạn sẽ thấy đèn này nhấp nháy để báo hiệu. Nó được nối với chân số 13. Khi chân
này được người dùng sử dụng, LED sẽ sáng. Chân số 13 được sử dụng để điều khiển
mortor hoạt động tạo oxi trong hồ cá
12
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
1.2.2 Relay
14
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
- Rơ le có 2 mạch độc lập nhau hoạt động. Một mạch là để điều khiển cuộn dây của rơ le:
Cho dòng chạy qua cuộn dây hay không, hay có nghĩa là điều khiển rơ le ở trạng thái ON
hay OFF. Một mạch điều khiển dòng điện ta cần kiểm soát có qua được rơ le hay không
dựa vào trạng thái ON hay OFF của rơ le.
- Dòng chạy qua cuộn dây để điều khiển rơ le ON hay OFF thường vào khoảng 30mA
với điện áp 12V hoặc có thể lên tới 100mA. Và bạn thấy đó, hầu hết các con chip đều
không thể cung cấp dòng này, lúc này ta cần có một BJT để khuếch đại dòng nhỏ ở ngõ
ra IC thành dòng lớn hơn phục vụ cho rơ le.
c) Thông số kỹ thuật:
- Điện trở tiếp xúc: <= 100m (ohm)
- Tuổi thọ điện: 100.000
- Cuộn dây điện áp định mức: 3-48VDC
- Công suất cuộn: 0,36W, 0,45W
- Nhiệt độ môi trường: -25 độ C đến +70 độ C
1.2.3 Modul relay 1 kênh 5V
b. Thông số kỹ thuật
15
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
16
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
phản ứng nhanh, được tích hợp sẵn Driver điều khiển động cơ, dễ dàng điều khiển góc
quay bằng phương pháp điều độ rộng xung PWM.
b) Thông số kỹ thuật
Kích thước: 23mmX12.2mmX29mm
Trọng lượng: 9 gram
Điện áp hoạt động: 4.2-6V
Nhiệt độ: 0 ℃ --55 ℃
Tốc độ: 0.3 giây / 60 độ
c) Nguyên lý hoạt động
Kết nối dây màu đỏ với 5V, dây màu nâu với mass, dây màu cam với chân
phát xung của vi điều khiển.
Ở chân xung cấp một xung từ 1ms-2ms theo để điều khiển góc quay theo ý
muốn
1.2.6 Máy bơm nước mini DC Motor 12V
a) Giới thiệu chung
Máy bơm nước mini DC sử dụng động cơ Motor 12V là máy bơm nước loại mini
motor DC12V được sử dụng phổ biến trong ứng dụng gia dụng, Y tế, thiết bị bể cá, hệ
thống cấp và tuần hoàn nước,...
Máy bơm nước mini DC sử dụng động cơ 12V có công suất tốt, hoạt động bền bỉ, liên
lục.
b) Thông số kỹ thuật
Điện áp làm việc:12VDC
Dòng điện không tải: 0.23
Lưu lượng tối đa: 2-3 lít / phút
Áp suất tối đa: 1-2,5 kg
Giờ làm việc bình thường: 2-3 năm.
Lực hút tối đa: 2 mét
Chiều dài động cơ: 32MM
Đường kính động cơ: 28MM
Đường kính bơm:40MM * 35MM
Hình 1. 8: Máy bơm nước mini DC Motor
Trọng lượng: 111g
12V
18
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
Bất cứ khi nào bạn nhất nút Reset, chương trình của bạn sẽ trở về lại trạng thái như khi
Arduino mới được cấp nguồn.
--Để cho dễ hiểu hơn thì ta đi vào ví dụ đơn giản trước đó là làm sáng tắt đèn led 13 trên
board arduino với chu kỳ 1 giây.
Chương trình như sau:
int led = 13;
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}
Khi bạn cấp nguồn cho Arduino, lệnh “pinMode(led, OUTPUT);” sẽ được chạy 1 lần để
khai báo.
Sau khi chạy xong lệnh ở setup(), lệnh ở loop() sẽ được chạy và được lặp đi lặp lại liên
tục, tạo thành một chuỗi
Chương 3: THIẾT KẾ
3.1 THIẾT KẾ
19
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
3.1.2 Sơ đồ khối
Khối nguồn: cung cấp nguồn cho toàn mạch, sử dụng nguồn 12v và 5v.
Khối xử lý trung tâm: Arduino thực hiện và xử lý mọi lệnh, tín hiệu nhận
được; kết nối tất cả các khối với nhau.
Khối thu phát tín hiệu: Module SIM900A nơi gửi và nhận thông tin điều
khiển.
Khối điều khiển: gồm các relay điều khiển thiết bị.
Khối thiết bị: bao gồm Servo, Motor và đèn Led.
20
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
21
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
22
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
23
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
Uno có 14 chân đầu vào / đầu ra digital (trong đó 6 chân có thể được sử dụng làm đầu ra
PWM), 6 đầu vào analog, kết nối USB, giắc cắm nguồn, nút reset và nhiều thứ khác nữa.
Nó chứa mọi thứ cần thiết để hỗ trợ vi điều khiển. Arduino UNO có thể sử dụng 3 vi điều
khiển họ 8bit AVR là ATmega8, ATmega168, ATmega328
3.2.3 Khối điều khiển thiết bị (Khối Relay)
24
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
- Mục đích của R2, R3, R6 là tạo dòng vào cực B của trans tới ngưỡng bão hòa để trans
hoạt động như 1 chiếc khóa có điều kiện.
- Lưu ý: Dòng vào của Tín hiệu là rất nhỏ không thể chạy thẳng Role được nên ta mới sử
dụng transistor để kích dòng cho role.
b) Ưu điểm
- Có thể cách li hoàn toàn phần tín hiệu điều khiển với phần nguồn cấp cho Relay.
- Nhờ cách li tốt qua Opto nên hạn chế nhiễu khi hoạt động.
c) Phù hợp ứng dụng cho Bật/Tắt các loại tải cảm như động cơ, máy
bơm…
d) Nhược điểm
- Tốn nhiều linh kiện hơn –> Chi phí sản xuất, chế tạo cao hơn.
- Phức tạp với người mới tiếp cận.
3.2.4 Khối thu phát tín hiệu
Tích hợp nguồn xung và ic đệm được thiết kế nhỏ gọn nhưng vẫn giữ được các yếu tố cần
thiết của thiết kế Module Sim như: Mạch chuyển mức tín hiệu logic sử dụng Mosfet, IC
25
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
giao tiếp RS232 MAX232, mạch nguồn xung dòng cao, khe sim chuẩn và các đèn led báo
hiệu, mạch còn đi kèm với Anten GSM.
Tắt nguồn bình thường bằng cách gửi lệnh AT “AT + CPOWD = 1”.
Bộ quản lý nguồn tắt nguồn cung cấp năng lượng cho phần băng tần cơ sở và chỉ còn lại
nguồn cung cấp điện cho RTC. Phần mềm không hoạt động. Các cổng nối tiếp không thể
truy cập được. Nguồn điện (kết nối với VBAT) vẫn được áp dụng.
Lệnh AT “AT + CFUN” có thể được sử dụng để đặt mô-đun ở chế độ chức năng tối
thiểu. Trong chế độ này, chức năng RF và chức năng thẻ SIM có thể bị vô hiệu hóa,
nhưng cổng nối tiếp thì vẫn có thể truy cập được. Mức tiêu thụ điện ở chế độ này thấp
hơn chế độ bình thường.
26
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
27
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
4.1 MẠCH IN
28
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
29
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
Các lệnh tin nhắn trong đề tài cho Module Sim900A để điều khiển Arduino :
#A.led on * : tất cả các led bật
#A.led off * : tất cả các led tắt
#A.90* :servo xoay 90 độ
#A.150* :servo xoay 150 độ
#A.motor on* : động cơ motor hoạt động
#A.motor off* : tắt động cơ motor
#A.all.on* : tất cả đều hoạt động
# A.all.off* :tất cả ngưng hoạt động
# A.state* :báo trạng thái đang hoạt động (nhận phản hồi từ module
sim900)
30
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
31
Code Arduino
#include <Servo.h>
#define Motor 13
#define Light 12
#define SERVO_PIN 9
#define LightPIR 8
int PIR =7;
int val = 0;
int temp=0,i=0;
int led=2;
char str[15];
void setup()
{
pinMode (PIR,INPUT);/////////////////////////////
pinMode (LightPIR,OUTPUT);
Serial.begin(9600);
pinMode(Motor, OUTPUT);
digitalWrite(Motor, HIGH);
pinMode(Light, OUTPUT);
32
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
digitalWrite(Light, HIGH);
gServo.attach(SERVO_PIN);
gServo.write(0);
delay(100);
gServo.write(90);
delay(100);
gServo.write(0);
delay(100);
pinMode(led, OUTPUT);
Serial.println("AT+CNMI=2,2,0,0,0\r");
delay(500);
Serial.println("AT+CMGF=1\r");
delay(1000);
}
void loop()
{
val = digitalRead(PIR); /////////////
digitalWrite (LightPIR, val);
if(temp==1)
{
check();
temp=0;
i=0;
delay(1000);
}}
void serialEvent()
33
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
{ while(Serial.available())
{
if(Serial.find("#A."))
{ digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
while (Serial.available())
{
char inChar=Serial.read();
str[i++]=inChar;
if(inChar=='*')
{
temp=1;
return;
}}}}}
void check()
{
if(!(strncmp(str,"90",2)))
{
gServo.write(0);
delay(100);
gServo.write(90);
delay(100);
gServo.write(0);
delay(100); }
if(!(strncmp(str,"150",3)))
{
34
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
gServo.write(0);
delay(100);
gServo.write(150);
delay(200);
gServo.write(0);
delay(100); }
if(!(strncmp(str,"motor on",8)))
{
digitalWrite(Motor, HIGH);
motorState = "ON"; }
if(!(strncmp(str,"motor off",9)))
{
digitalWrite(Motor, LOW);
motorState = "OFF"; }
if(!(strncmp(str,"led on",6)))
{
digitalWrite(Light, HIGH);
lightState = "ON"; }
if(!(strncmp(str,"led off",7)))
{
digitalWrite(Light, LOW);
lightState = "OFF"; }
if(!(strncmp(str,"all on",6)))
{
digitalWrite(Light, HIGH);
lightState = "ON";
digitalWrite(Motor, HIGH);
35
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
motorState = "ON"; }
if(!(strncmp(str,"all off",7)))
{
digitalWrite(Light, LOW);
lightState = "OFF";
digitalWrite(Motor, LOW);
motorState = "OFF"; }
if(!(strncmp(str,"state",5)))
{
String message ="Light is "+ lightState +" and "+"Motor is "+ motorState ;
sendSMS(message); }}
void sendSMS(String message){
Serial.println("AT+CMGF=1\r");
delay(1000);
Serial.println("AT+CMGS=\"+84968781077\"\r");
delay(1000);
36
Thực hành điện tử nâng cao GVHD:TS. Phù Trần Tín
https://mlab.vn/index.php?_route_=huong-dan-su-dung-module-sim900.html
http://arduino.vn/
https://iotmaker.vn/relay-1-kenh-5v.html
https://arduinokit.vn/dong-co-servo-la-gi
37