Arduino uno的警报短信系统

目录

前言

一、模块选型

二、元器件说明

1.1602A背光显示屏

2.有源蜂鸣器

3.4*4矩阵键盘

4.SR602微型人体感应模块

​编辑

5.SIM800C_MINI

三、使用步骤

1.初始化函数

2.功能函数

3.loop函数

总结


前言

提示:这是大一的作业,使用的东西都会较为简单。有些元器件涉及的内容是直接将卖家的说明书截取出来使用的,然后代码中有需要优化的欢迎大家评论区留言。然后大家购买元器件时可以自发找客服拿相关说明材料

元器件检测到人后发出警报,如果是发现并希望能安静的可以按下按键来关闭,如果熟人是不想麻烦主人回来,可以按下已知的暗号,这时会向指定手机再发送一次暗号短信,主人发现是熟人就可以不回来检查。


提示:以下是本篇文章正文内容,下面案例可供参考

一、模块选型

  • 主控模块:Arduino UNO
  • 输出模块:1602A背光显示屏、有源蜂鸣器
  • 输入模块:4*4矩阵、SR602微型人体感应模块
  • 通信模块:SIM800C_MINI

二、元器件说明

1.1602A背光显示屏

~引脚说明:【接线为此案例所接引脚】

PIN引脚

引脚说明

接线

PIN引脚

引脚说明

接线

VSS

电源地

GND

D0

数据

VDD

电源正级

+5V

D1

数据

VL

液晶显示偏压

接一个10k电位器再接GND

D2

数据

RS

数据/命令选择

A0

D3

数据

RW

读/写选择

GND

D4

数据

A2

E

使能信号

A1

D5

数据

A3

A

背光源正极

5V

D6

数据

A4

K

背光源负级

GND

D7

数据

A5

PS:电位器是调节阻值到使1602A显示的更为清晰的状态

实物图如下: 

2.有源蜂鸣器

~引脚说明【需要它鸣叫时将其正极+拉高即可】

pin引脚

说明

+

D13

-

接GND

3.4*4矩阵键盘

PIN引脚

说明

接线PIN引脚说明接线

1

行1

D25列1D6

2

行2

D36列2D7

3

行3

D47列3D8

4

行4

D58列4D9

4.SR602微型人体感应模块

 ~引脚说明:【out为高/1时检测到人,为低/0是没有检测到】

pin引脚说明
+接Arduino3V
-接GND
out数据输出/接D10

5.SIM800C_MINI

~引脚说明:【带颜色的为此次用到的】

PIN引脚

引脚说明

PIN引脚

引脚说明

V-IN

DC5V-18V电源输入,推荐使用DC9V

VBAT

鲤电池输入引脚DC3.5-4.5v

EN

电源开关使能引脚默认使能

GND

电源的地【可与PWM短接】

GND

电源的地

PWM

启动引脚和GND短路可实现开机自启动

TXD

GSM模块的TXD引脚接其他模块的RXD

GND

电源的地

RXD

GSM模块的RXD引脚接其他模块的TXD

VRTC

RTC外置电池引脚

DTR

数据终端准备

RI

内核振铃提示引脚

SPKP

内核音频输出引脚

MICP

内核音频输入引脚

SPKN

内核音频输出引脚

MICN

内核音频输入引脚

~SIM卡底座:使用2/3/4G卡【移动/联通卡】

~模块指示灯【下图蓝色圈处的灯,观察其闪烁的间隔】

LED 指示灯状态

SIM800C 工作状态

熄灭

SIM800C 没有工作

60ms 亮/800ms 熄灭

SIM800C 没有找到服务(GSM 卡无服务)

60ms 亮/3000ms 熄灭

SIM800C 连接到服务信号

60ms 亮/300ms 熄灭

SIM800C 正在 GPRS 通讯

~模块使用【此案例用到的指令】

AT ,点击发送,看到 返回 AT OK 这样最基础的通讯成功了。然后可以测试其它常用指令了

AT+CMGF: 用于设置短消息模式, SIM800 支持 PDU 模式和文本 ( TEXT)模式 2 种模 式,发送: AT+CMGF=1,即可设置为文本模式。

AT+CSCS: 用于设置 TE 字符集,默认的为 GSM 7 位缺省字符集, 在发送纯英文短信的时候,发送: AT+CSCS=”GSM”,设置为缺省 字符集即可。

AT+CMGS: 用于发送短信,在“ GSM”字符集下,最大可以发送 180 个字节的英文字符。

三、使用步骤

1.初始化函数

#include <Keypad.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
#define ROWS 4  //行所用针脚数
#define COLS 4  //列所用针脚数
#define RX 12   //uno板的输入引脚接SIM800C的输出TX脚
#define TX 11   //uno板的输出引脚接SIM800C的输入RX脚
#define Buzzerpin 13  //蜂鸣器引脚
#define PIR_sensor 10    //微人体感应引脚
unsigned char buffer [64];
SoftwareSerial GPRS (RX, TX);
char keys[ROWS][COLS]={     //二维数组设置键盘
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS]={2,3,4,5};   //行所使用的针脚 connect to the row pinouts of the Keypad
byte colPins[ROWS]={6,7,8,9};
Keypad customKeypad = Keypad(makeKeymap(keys) ,rowPins ,colPins ,ROWS ,COLS );  //构造
LiquidCrystal lcd (A0,A1,A2,A3,A4,A5);    //定义液晶引脚(RS,E,D4,D5,D6,D7)
byte back[8] =               //定义一个自定义字符数组变量back[];字符的像素数据
{
  0b00000,
  0b00000,
  0b11111,
  0b10101,
  0b11011,
  0b11111,
  0b00000,
  0b00000
};
String number="19047082845";   //拨打或发送短信的电话号码,由按键输入//也可以改成写定
String instr="";
int someone_falg = 0;
int sms_flag=0;
int ring =0;
int i = 0;

void setup() {
  Serial.begin(9600);
  pinMode (PIR_sensor ,INPUT);    //设置微人体感应模块为输入状态
  pinMode (Buzzerpin ,OUTPUT);    //设置蜂鸣器对应引脚为输出状态
  GPRS.begin(9600);
  lcd.createChar(1,back);   //createChar(num,data);num:所创建字符的编号,data:字符的像素数据
  lcd.begin(16,2);    //LCD字符的行列个数
  lcd.print("System Ready..");    //系统准备,初始化
  delay(1000);
  gsm_init();
  lcd.clear();
  lcd.print("Ststem Ready");    //系统准备完成
  delay(1000);
}

void gsm_init() //sim800c初始配置确定
{
  lcd.clear();    //清屏
  lcd.print("Finding Mobile..");   //寻找信号
  GPRS.println("AT");   //
  Serial.println("AT");  //return OK you can using the model
  delay(1000);
  if(Serial.find("OK")) lcd.print("AT OK");
  lcd.clear();    //清屏
  GPRS.println("ATEI");         //recoming to serial
  lcd.print("Finding Network..");
  GPRS.println("AT+CPIN?");   //查询SIM卡状态,返回 +CPIN:READY 则状态正常
  delay(1000);
  lcd.setCursor(0,1);
  if(Serial.find("+CPIN: READY")) lcd.print("READY");
  delay(1000);
  lcd.clear();
  lcd.print("Network Found..");
  delay(1000);
  lcd.clear();
}

2.功能函数

代码如下(示例):

void Alarm()  //蜂鸣器警报
{
  someone_falg++;
  lcd.clear();
  lcd.print("END-->D");
  for (int val = 0; val<10; val++) 
  {
    char key1=customKeypad.getKey();
    if(key1=='D') 
    {
      sms();
      break;
    }
    digitalWrite(Buzzerpin, HIGH);
    delay(500);
    digitalWrite(Buzzerpin ,LOW);
    delay(500);
  }
}
void someone()
{
  if (digitalRead(PIR_sensor) ==1) 
  {
    GPRS.println("AT+CMGF=1");
    delay(500);
    GPRS.println("AT+CSCS=\"GSM\"");           //√开启GSM字符集
    delay(500);
    GPRS.println("AT+CMGS=\"19047082845\""); 
    delay(1000);
    GPRS.print("Someone is coming"); 
    GPRS.write(0x1A);
    delay(500);
    Alarm();
  }

}

void sms()  //函数说明:
{
  lcd.clear();
  lcd.print("IN SMS");
  delay(1000);
  GPRS.println("AT+CMGF=1");                 //√AT+CMGF= 0为pdu模式 1为txt模式
  delay(1000);
  GPRS.println("AT+CSCS=\"GSM\"");           //√开启GSM字符集
  delay(1000);
  lcd.clear();
  lcd.print("SEND to master");
  lcd.setCursor(0,1);
  lcd.print("Press A");
  delay(2000);
  GPRS.println("AT+CMGS=\"1**********\"");    //√这个要换行;测试*AT+CMGS="号码"发送短信 
  lcd.clear();
  lcd.print("After Enter MSG");
  lcd.setCursor(0,1);
  lcd.print ("Write PASSWORD");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0,0);
  while(1)
  {
    char key =customKeypad.getKey();
    if(key)
    {
      if(key=='A')
      {
        lcd.clear();
        lcd.print("Sending SMS...");
        GPRS.write(0x1A);     //√在短信结束时不用换行发送十六进制的1A
        delay(5000);
        lcd.clear();
        lcd.print("SMS Sent to");
        lcd.setCursor(0,1);
        lcd.print("190****2845");
        delay(2000);
        lcd.clear();
        break;
      }
      else
      { 
        GPRS.print (key);
        lcd.print(key);
      }
    }
  }
}

3.loop函数

代码如下(示例):

void loop() {
  // put your main code here, to run repeatedly:
  someone();
}

四、接线图与实物图

ps:这里V0需要接一个10K电位器,但是不想改图了,凑合着看吧 


总结

本文仅仅简单介绍了SIM800C的使用,而SIM800C提供了大量接收电话、短信一类的指令,感兴趣的可以了解一下。并且会有一些错误,未来应该会进行修改以及完善一些细节。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值