最好的电子音响科技diy制作网站

haoDIY_音响电子电脑科技DIY小制作发明

基于Arduino的GSM短信远程控制单元

时间:2017-05-18 22:20来源:未知 作者:admin 点击:
脉冲,CCCC 设置特定的信道脉冲输出。 如果没有设置,将被设置为锁存输出通道。 PulseTime,T 秒脉冲输出时间设置(0 .. 10s) inputon,CCCC 设置通道,必须触发,发送短信时的状态变化从去上 inputoff,CCCC 设置
基于Arduino的GSM短信远程控制单元

这样的一个范围广泛的GSM模块可供业余爱好者,我们中的大多数人最终购买。我买了一sim800l模块局部,并最终在该模块的不同的命令。

用Arduino Uno和Arduino IDE,我能够把我的想法变成现实。这并不容易,与<strong>单一最大的问题</strong>是限制只有2KB SRAM。互联网上许多不同的论坛,研究之后,我能够克服这一局限性。

不同的编程技术,更好的了解了Arduino编译器,使用SIM卡的EEPROM内存,保存了这个项目。经过对代码的一些变化,一个稳定的原型构建和测试在一周的时间。

有限的SRAM的缺点是单位没有配备显示器,用户密钥。这导致了一个完整的重写代码。没有用户界面,剩下的唯一选择继续这个项目,是利用短信配置单元,以及用户。

这是一个令人兴奋的项目,更增加了继续发展期货。

我的主要目标是坚持用Arduino Uno,或在这种情况下,该atmega328p,不使用任何表面贴装元件。这将是大众复制更容易。

单位的规范:

  • 最多250个用户可编程的单元
  • 四个数字输出
  • 四个数字输入
  • 每个输出可配置为脉冲或开关输出
  • 输出脉冲持续时间可设定在0.5 ..10秒
  • 每个输入可以配置为触发开关上的变化。
  • 每个输入可以配置为触发对更改
  • 每个输入延迟时间可设置0秒和1小时之间
  • 在输入变化的短信可以发送到5个不同的用户
  • 名称和每个输入的文本状态可由用户设定
  • 名称和每个输出状态文本可以由用户设置
  • 单元可以被配置为通过USSD短信收到SIM卡余额信息。
  • 所有的用户都可以请求I/O单元的状态更新
  • 所有的用户都可以控制单个输出通过短信
  • 所有用户可以通过调用单元控制单个输出

安全功能

  • 单位的初始设置只能在单位。
  • 初始设置只能由主用户进行
  • 十分钟后,初始设置命令被自动禁用。
  • 只有电话和短信的消息,从已知的用户可以控制单元
  • 用户只能通过掌握用户指定的输出

其它特性

  • 调用这个单位是免费的,因为电话从来没有得到回答。
  • 当单位称,该呼叫将只有2秒后下降。这是确认对方的单位响应号召。
  • 如果SIM卡服务提供商支持USSD短信,查询余额可由主用户。含平衡USSD消息,将被转发到主用户。

步骤1:电源

电源供应

为了确保装置可以连接到标准的安全系统(报警系统、电动车库门、电动门电机),单位将从12V直流通常可在系统供电。

适用于<strong>12V</strong>电源端子、保护和<strong>0v</strong>,由1A保险丝。额外的终端提供<strong>了2v</strong> 1,也是保护熔断器。

二极管D1保护单元反极性连接12V的线。

电容C1和C2滤出在12V电源线的任何噪音。12V电源用于发电机组的继电器。

5V电源由一lm7805l电压调节器,并为sim800l GSM模块所需要的输出稳定的+5V,以及微处理机。电容C3和C4滤除噪音可能对+5V电源线是存在的。使用相对大尺寸的电解电容,为sim800l GSM模块并使用相当多的电力传输时。

没有散热片上电压调节器的要求。

步骤2:数字输入

数字输入

数字输入信号都是12V的,并且必须与5V微控制器接口。为此,光电耦合器,用于从5V系统12V信号分离。

1K的输入电阻限制输入电流的光电耦合器在10ma。

由于空间的限制,没有空间可在PC板上5V的上拉电阻。微控制器的设置使输入引脚的弱上拉。

目前在无信号输入(低)的光电耦合器,没有电流流过光耦的LED。因此,光耦晶体管关闭。微控制器中的弱上拉会拉起来的收藏家几乎5V,而且会被视为逻辑高的微控制器。

带12V应用(高)的光电耦合器的输入,在10ma流过光耦的LED。因此,光耦晶体管将被打开。这将把收集到的几乎为0V,将被视为逻辑低的微控制器。

请注意,由微控制器看到输入倒比12V输入。

正常的代码读取输入引脚看起来如下:

布尔输入= //读出数字接口的值(inputpin);

正确的反转信号,使用下面的代码:

<strong>布尔输入=!//读出数字接口的值(inputpin)</strong>;//注意!在读前

现在,由微控制器看到输入对应的12V输入。

最后输入电路包括4个数字输入。每个输入终端连接到PC板上。

步骤3:数字输出

数字输出

通常,一个电路的驱动只有最小数量的继电器,最好的方法是使用一个晶体管驱动电路如图所示。它是简单的,低成本的,有效的。

电阻器提供下拉到地,与晶体管的基极电流限制。晶体管是用来增加电流可驱动继电器。与仅为1mA从微控制器引脚拉,晶体管可以切换负载100mA。足够用的继电器类型最多。二极管是二极管中飞回来,继电器开关保护电路从高电压尖峰。使用这种电路的附加利益,是继电器的工作电压可以不同于微控制器的电压。因此,而不是使用一个5V继电器,一个可以使用的任何直流电压48V。

引入ULN2803

一个项目需要更多的保护,更高的元件数量。这将使PCB设计更加困难,并可能使用了宝贵的电路板空间。但使用晶体管阵列,像ULN2803,必将有助于保持PCB尺寸小。
的ULN2803非常适合于微控制器3.3V和5V输入,可驱动继电器到48V直流。这ULN2803有8个人的晶体管电路,安装所需的所有组件,开关继电器电路。

最终的输出电路由一uln3803,驾驶4 12V直流输出继电器。每个继电器触点可在PC板的终端。

步骤4:微控制器振荡器

微控制器的振荡器

振荡器电路

微控制器需要一个振荡器正常工作。让Arduino Uno的设计,电路将使用标准的16mhz振荡器。两个选项是可用的:

水晶

这种方法使用一个晶体负载电容器连接到两个。这是最常见的选择。

谐振器

基本上是一个晶体谐振器和加载电容器在一个单一的3引脚封装。这减少了零件的数量,并增加在PC板上的可用空间。

保持尽可能低的元件数量,我选择使用16MHz的谐振器。

步骤5:指示灯

指示灯

没有任何电路,LED将是什么?提供了对PC板3mm的发光二极管。

1k电阻用来限制电流通过LED小于5mA,当使用3mm高亮度发光二极管,亮度好。

对于状态LED容易解释,使用两种颜色。由两个LED闪烁的标志相结合,相当多的信息可以从只有两LED获得。

红色LED

红色LED用来指示故障的条件下,长时间的延迟,任何错误的命令。

绿色LED

绿色LED用来指示健康和/或正确输入命令。

步骤6:微处理器复位电路

微处理器复位电路

出于安全原因,一些单位的功能仅可在10分钟后供电单元。#p#分页标题#e#

一个复位按钮,电源不需要断电复位装置。

工作原理

10K电阻将复位线接近5V。当按下按钮,复位线将被拉到0V,从而使微控制器复位。当松开按钮,复位线返回% V,resterting微控制器。

步骤7:sim800l模块

sim800l模块

本单元的核心是sim800l GSM模块。该模块只使用3个I / O引脚微控制器。

模块接口的微控制器通过一个标准的串行端口。

  • 所有命令的单位是通过使用标准的串口发送命令。
  • 有来电时,或者当一个短信接收的信息是通过使用ASCII文本。串口发送到微控制器

为了节省空间,GSM模块连接的PC板通过一个针头。这使得GSM模块容易去除。这也使得用户能够方便地插入/删除模块底部的SIM卡。

一个活跃的SIM卡是必需的,和SIM卡必须能够发送和接收短信。

该sim800l GSM模块设置

在供电单元、GSM模块复位引脚被拉低,第二。这确保了GSM模块只启动后电力供应稳定。GSM模块需要几秒钟来重新启动,那么等待5秒再发送任何命令模块。

确保GSM模块配置正确与微控制器进行通信,在启动过程中使用的命令如下:

用来确定是否一个GSM模块是可用的

在CREG?

轮询这个命令直到GSM模块在手机网络注册

在+ CMGF = 1

设置短信为ASCII模式

在北马里亚纳群岛联邦= 1,2,0,0,0

如果短信值班,发送短信的详细介绍GSM模块串口

在cmgd = 1

删除任何短信存储在SIM卡

在+修饰=“SM

套GSM模块SIM卡电话簿

在+警察= 2,然后在CLTS = 1,然后在+警察= 0

将GSM模块时间手机网络的时间

等待5秒的时间将

在CUSD = 1

使USSD短信功能

 
  • sim800手册sim800手册
    下载

步骤8:微控制器

微控制器

微控制器是一个标准的atmega328p,相同的使用Arduino Uno。代码从而与两。为了便于在板编程,一个6编程头可在PC板。

该单元的不同部分连接微型处理器,并包括以下:

  • 四个数字输入
  • 四个数字输出
  • 振荡器
  • 两个指示灯
  • 复位电路
  • sim800l GSM模块

所有的通信和GSM模块进行了功能softwareserial()。这种方法被用来释放主串口Arduino IDE开发阶段。

只有2KB SRAM、EEPROM和1KB的,没有足够的内存来存储超过一对夫妇的用户可以连接到单元。自由的SRAM中,所有的用户信息在GSM SIM卡上存储。这样的安排,单位可以提供多达250个不同的用户。

该单元的配置数据存储在EEPROM中,从而将用户数据和系统数据相互。

还有几个备用的I / O引脚可用,但是,增加一个液晶显示器和/或键盘的选择是不可能的由于大量的SRAM的softwareserial()用于接收和发送缓冲区,

因为任何类型的单位用户界面的缺乏,所有的设置和用户使用短信程序。

 
  • gsm_remote_sch.schgsm_remote_sch.sch
    下载

步骤9:优化SRAM存储器

优化的SRAM存储器

在发展阶段比较早,Arduino IDE报低的SRAM存储器编译代码时。有几种方法来克服这一。

限制数据的串口接收

GSM模块将所有消息发送到微控制器的串口报告。当收到一些短信,收到的消息的总长度可以超过200个字符。这可以很快消耗掉所有的SRAM可在AtMega芯片,并且会导致稳定性问题。

为了避免这种情况,只有前200个字符的任何消息接收GSM模块将使用。下面的示例显示了如何通过计算接收到的字符变反了。

/ /扫描软件串口
 / ----------------------------------------------- 
 rxstring =“”数据;
反= 0;
而(sserial。available()){ 
延迟(1);/ /短时间延迟给新的数据放在缓冲区
 /得到新的特征
 RXCHAR =字符(sserial。read());
 /先添加200字符的字符串
如果(反<200){ 
 rxstring .concat(RXCHAR);
计数器计数器+ 1 =

减少print()编码序列。

虽然方便在开发过程中,Arduino串口监控,使用了大量的SRAM。代码是使用尽可能少的代码开发print()系列。代码一一个部分进行了测试工作,所有的序列。print()代码从代码的那一部分删除。

使用串口打印(F((“”))的代码

很多通常显示在Arduino串口监控信息更有意义,当描述添加。看看下面的例子:

串行out.println(“等待具体行动”);

字符串“等待具体行动”是固定的,不能改变的。

代码的编译时,编译器将包含字符串“在闪存等具体行动”。

此外,编译器认为该字符串是一个常数,由“串行使用。打印”或“打印指令序列。”。该微启动期间,这个常数也放置到SRAM存储器。

通过使用“F”前缀序列。print()功能,它告诉编译器该字符串在闪存是唯一可用的。在这个例子中,字符串包含28个字符。这是28个字节,可以释放在SRAM。

串行。println(F(“等待具体行动”));

这种方法也适用于softwareserial print()命令。作为GSM模块工作在命令代码包含众多softwareserial。打印(“XXXX”)命令。使用“F”前缀释放了近300字节的SRAM。

不使用硬件串口

经过调试,硬件串口的串口print()命令移除所有残疾人。这让一些额外的字节的SRAM。

没有任何序列。print()命令代码中的左,一个额外的128字节的SRAM是可用的。这是从代码中删除硬件串口完成。弗莱德的64位字节的发送64字节的接收缓冲区。

/ /串口。开始(9600);//硬件串行端口禁用

使用EEPROM的字符串

每个输入和输出,三弦需要拯救。他们的频道名,频道在字符串时,字符串当通道关闭。

共有8个I/O通道,他们将

  • 8字符串包含频道名称,每10个字符长
  • 8字符串包含描述的通道,每10个字符长
  • 8字符串包含信道下的描述,每10个字符长

这个广告多达240字节的SRAM。而不是存储这些字符串在SRAM,它们被存储在EEPROM。这释放了一个额外的240字节的SRAM。

宣布与正确的长度的字符串

变量通常是在开始的代码声明。一个常见的错误,当声明一个字符串变量,是我们不正确的字符数声明字符串。

字符串gsm_nr =“”;
字符串gsm_name =“”;
字符串gsm_msg =;

在启动过程中,微控制器将不在SRAM的这些变量分配内存。这可能导致不稳定的时候,这些字符串的使用。

为了防止这一点,声明字符串正确数量的字符的字符串将使用该软件。

字符串gsm_nr =“1000000000”;
字符串gsm_name =“2000000000”;
字符串gsm_msg =“;

注意,我没有申报的字符串相同的字符。如果你将这些字符串都说“1234567890”,编译器将在三变量相同的字符串,只分配足够的内存SRAM中的一个字符串。

步骤10:软件串口缓冲区大小

Serial Buffer Size软件

在下面的代码中,你会发现,最多200个字符,可以从软件串口读。

/ /扫描软件串口
 / ----------------------------------------------- 
 rxstring =“”数据;
反= 0;
而(sserial。available()){ 
延迟(1);/ /短时间延迟给新的数据放在缓冲区
 /得到新的特征
 RXCHAR =字符(sserial。read());
 /先添加200字符的字符串
如果(反<200){ 
 rxstring .concat(RXCHAR);
计数器计数器+ 1 =#p#分页标题#e#

这需要一个缓冲区至少200字节的软件串行口以及。默认情况下,软件串口缓冲区只有64个字节。增加这个缓冲区,下列文件搜索:

softwareserial。H

用文本编辑器打开该文件,并改变缓冲区的大小为200。

/ ****************************************************************************** 
 *定义
 ****************************************************************************** / 
 
 #则_ss_max_rx_buff 
 #定义_ss_max_rx_buff 200 
 / /接收缓冲区的大小
 # endif

步骤11:PC板的制作

PC板的制作

PC板是用CadSoft Eagle免费版设计(我相信名字变了)。

  • PC板是一种单面设计。
  • 不使用表面贴装元件。
  • 所有组件都安装在PC板,包括sim800l模块。
  • 无需外部元件或连接是必需的
  • 跳线是隐藏的组件为一个更清洁的外观。

我用下面的方法来将PC板:

  • PC板上印制图像使用激光打印机press-n-peel。
  • 的press-n-peel然后放在一块干净的PC板,并与一些胶带固定。
  • 然后PC板图像从press-n-peel转移到空白的PC板通过板通过层压机。对我来说,10次效果最好。
  • 在PC板冷却至室温的press-n-peel慢慢抬起,从板。
  • 然后PC板采用过硫酸铵晶体溶解在热水中蚀刻。
  • 蚀刻后,蓝press-n-peel和黑色碳粉用丙酮清洗蚀刻的PC板拆除。
  • 板然后用Dremel尺寸切割
  • 所有通孔元件孔用1mm的钻头钻。
  • 端子螺丝连接器采用1.2mm钻头钻。
 
  • gsm_remote_pcb.brdgsm_remote_pcb.brd
    下载

步骤12:PC板的装配

PC板的装配

组件添加最小的元件,首先做的,和你的方式工作的最大的组成部分。

所有组件使用int下面,不包括sim800模块,是源于我的本地供应商。认为他们总是有股。请在南非的网站看一看:

http://www.shop.rabtron.co.za/catalog/index.php

注!第一焊两跳线设下的atmega328p IC。

顺序如下:

  • 电阻和二极管
  • 复位按钮
  • IC插座
  • 电压调节器
  • 头脚
  • 小电容器
  • LEDs
  • 保险丝座
  • 接线端子
  • 继电器
  • 电解电容器

插入IC之前,将设备连接至12V,测试电压是正确的。

最后,使用一些透明漆,覆盖PC板铜面保护它的元素。

当漆干燥后,插入集成电路,但离开GSM模块直到AtMega被编程。

步骤13:规划atmega328p

规划atmega328p

我使用的Arduino Uno和程序单元编程屏蔽。为更多的信息关于如何使用Arduino Uno作为一个程序员,参考下面:

Arduino Uno为atmega328p程序员

GSM模块需要从PC板获得编程头。注意不要拆卸GSM模块时损坏的天线导线。

连接的程序员和使用编程的头在PC板单元之间的编程电缆,并上传图形单位。

外部12V电源不需要程序的单元。PC板将动力从Arduino通过编程电缆。

在Arduino IDE打开附件,并计划到单位。

编程后,除去编程电缆,并插入GSM模块。

单位现在准备使用。

 
  • v300e.inov300e.ino
    下载

步骤14:连接单元

连接单元

对单位所有的连接是通过螺丝端子。

供电单元

确保你有一个注册插入SIM卡在GSM模块和SIM卡能够发送和接收短信。

连接12V直流电源12V和任何0V端子。一旦开机,红色LED在PC板上会打开。大约一分钟,GSM模块应该连接到手机网络。红色LED将关闭,和一个红色LED的GSM模块会快速闪烁。

一旦已达到这个阶段,单位准备配置。

输入连接

数字输入工作在12V的。把一个输入,12v有待于输入。除12V将输入。

输出连接

每个输出由一个转换触点。每个接触线的要求。

步骤15:初始设置

初始设置

单位的初始设置,必须进行以确保所有的参数都设置为出厂默认值,和SIM卡配置在正确的格式接受用户信息。

当所有的命令都是基于短信的,你将需要另一个手机进行设置。

对于初始设置,你需要在单位。

设置主用户的电话号码

只有掌握用户可以配置单元,这一步必须先进行。

  • 单位必须提供动力。
  • 按下复位按钮,等待红灯的PC板关闭。
  • 网络上的LED会快速闪烁的GSM模块。
  • 单位现在可以接受的初始设置命令。这必须在10分钟内进行。
  • 发送一个包含主短信,到单位电话号码的描述。
  • 如果收到,绿色LED将闪烁两次在PC板。
  • 掌握用户已编程。

恢复到出厂默认值的单位

在掌握用户已被编程,该单元的设置必须设置为出厂默认值。

  • 发送一个只有全部清除的单位电话号码的短信。
  • 如果收到,绿色和红色发光二极管在PC板上交替闪烁一次。单位已与出厂默认设置恢复。
  • 所有的设置都恢复到出厂默认值。
  • 按下复位按钮重新启动装置。

格式化的SIM卡

最后一步是删除存储在SIM卡上的所有信息,并将其配置为使用本机。

  • 按下复位按钮,等待红灯的PC板关闭。
  • 网络上的LED会快速闪烁的GSM模块。
  • 单位现在可以接受的初始设置命令。这必须在10分钟内进行。
  • 送一只erasesim到单位电话号码的短信。
  • 如果收到,绿色LED在PC板上会闪光的树倍。

单位现在已经被配置,并准备使用。

步骤16:短信指令

短信指令

有三种不同的单位使用的命令类型。所有的命令声通过短信发送,都在下面的格式:

<strong>命令,</strong><strong>,</strong><strong>,</strong><strong>,</strong><strong>,</strong>

  • 所有的命令,除正常的用户命令是区分大小写的。
  • 参数不区分大小写。

 

初始设置命令

主人,名字

手机短信的发送者的电话号码作为主用户的电话号码。为单位的描述可以添加到这里。

全部清除

重置到出厂默认值的单位

clearsim

从SIM卡中删除所有数据

重置

启动装置

配置单元的主用户命令

样,C,M,T<em>注意!!!还没有实现</em>

设置特定的渠道有脉冲,定时或锁存输出。T是定时输出分钟时间

#p#分页标题#e#脉冲,CCCC

设置特定的信道脉冲输出。如果没有设置,将被设置为锁存输出通道。

PulseTime,T
秒脉冲输出时间设置(0 ..10s)

inputon,CCCC

设置通道,必须触发,发送短信时的状态变化从去上

inputoff,CCCC

设置通道,必须触发,发送短信时的状态变化,从上到下

银泰,C,T

集检测秒状态变化的输入延迟时间

INTEXT,CH,名称,关闭

设置每个输入频道的名称、文本和文本

outtext,CH,名称,关闭

设定每个输出通道的名称,在文本和非文本

添加,位置,数量,Calloutputs,smsoutputs,输入

在内存位置的SIM卡添加用户,输出和输入通道分配给用户

德尔,位置

删除SIM卡存储器位置的用户

channelname

将名字与channelname脉冲输出

channelname,文本,或channelname,offtext

将输出开/关与channelname名称和文本/ offtext

控制单元正常用户命令

??
请求I/O状态更新。状态的短信将发送给发起人。

channelname

将名字与channelname脉冲输出

channelname,语境

将输出与channelname名称和状态文本语境

channelname,offtext
将关闭输出与channelname名称和状态文本offtext

为了更详细描述的命令,请参考附件的PDF文档。


(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
相关文章
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片