本项目的主要目标是使用手机和继电器开关远程控制家中或公司电器的ON/OFF状态。电器可能包括灯、风扇、水泵和空调等。虽然所有的家用物品都可以自动改变其开/关状态,但我们的原型GSM远程控制电路使用了8个电器。

该项目包括多个用户来控制电器,并为每个应用使用独特的SMS格式。开关板可通过手机的SMS功能操作,仅由注册用户打开/关闭家庭或办公室等电器。系统验证用户以及用户发送的消息。lis下面给出了系统提供的t个选项。

  • 获取负载的开/关状态
  • 获取用户列表
  • 添加用户
  • 删除用户
  • 获取SIM卡的帐户余额
  • 重置消息计数器

GSM继电器控制板-电路图

GSM继电器控制板-电路图
GSM继电器控制板-电路图

智能交换板的特点

如果一个未注册的用户操作会发生什么?

如果未注册的用户尝试操作,系统将回复模板“未注册用户。请与管理员联系。“系统还向用户列表中的第一个用户或已编程用户(如果未添加用户)发送SMS模板”试着操作交换台。以及该用户的联系电话。下面是实时仿真输出。

程序/代码

下载程序

如何将用户添加到系统中?

若要将新用户添加或注册至系统,任何先前注册的用户或程序用户应发送号码“3.'作为发送给系统的消息。然后,用户将收到一个包含用户名和联系人号码的消息模板。通过编辑并发送接收到的模板以及要添加的用户的详细信息,系统将添加该用户。下面是用于添加用户的代码段。

GSM中继控制-用于添加用户的代码
GSM中继控制–用于添加用户的代码

上述代码将用户详细信息添加到EEPROM以及用户列表中。在收到的消息的同一行中编辑用户名(最多10个字符)和10位联系人号码,并将其发送到系统。用户将被添加到系统中。下面是添加用户的模拟输出。现在,让我们添加前面显示的未注册用户。

如何知道负载的开/关状态?

用户可以通过选项1请求发送负载的开/关状态。继电器状态从专用于操作继电器的输出端口读取。此数据用于构建模板,并向请求的用户发送SMS。构建消息的逻辑是对每个负载使用“for循环”,然后如果数组索引达到开/关状态,则放置该负载的状态。

GSM继电器控制-负载接通断开状态模板
加载开关状态模板

包含负载开/关状态的消息被框定,符号“=”用作标识符,该“=”符号后的字符作为负载状态被读/写。打开状态由数字“1”表示,关闭状态由数字“0”表示。为了打开或关闭负载,需要编辑此数字字符,并将编辑后的消息发送到系统。每当系统收到此模板时,都会验证“=”符号的数量和此符号后的字符。如果“=”符号的数量和加载的数量不相等,或者如果在任何“=”符号之后存在除0或1以外的字符,则该消息被视为无效模板,并将模板“无效消息模板”以及选项列表发送给用户。此功能对于新用户非常有用,直到用户习惯了系统。

GSM中继控制-无效消息模板通知
无效的消息模板通知

负载的名称在程序中定义,验证逻辑不考虑名称,但消息框架考虑负载的字符数。每当接收到加载打开/关闭请求并将其作为有效模板时,程序逻辑将搜索“=”符号,下一个字符将被读取为相应的加载状态,并存储在加载状态数组中。直到读取8个负载并根据请求修改继电器状态为止。下面是用于处理来自有效用户的消息的代码段。

GSM中继控制-读取负载控制请求和消息验证
读取负载控制请求和消息验证

如何打开/关闭负载?

响应负载状态请求收到的同一模板用于打开/关闭负载。用户必须编辑此模板中的1和0并发送到系统。打开状态由数字“1”表示,关闭状态由数字“0”表示。下面是用于请求负载状态的实时模拟输出e负载状态和开关负载开/关。

如何获取用户列表?

由于系统仅由注册用户操作,因此需要创建用户列表。这个列表存储在EEPROM中,并在每次重启后读取。从EEPROM中读取的数据存储在微控制器的RAM中,用于用户有效性验证。移动电话号码的大小为10位,并与联系人姓名一起存储在二维数组中。每当用户请求此选项时,就会向用户发送包含联系人姓名和10位移动电话号码的用户列表。该系统被编程存储5个用户,这可以很容易地修改。除了存储在EEPROM中的这5个用户外,在实时添加用户之前,最好在程序代码中输入一个联系人来操作系统。在对微控制器编程后,这个触点不能被移除。在这里,用户列表的零索引被编程为一个永久的联系号码,当用户请求时,这不会显示在用户列表中。可以将相同的联系人再次添加到用户列表中。

GSM中继控制-用户列表
GSM中继控制–用户列表

短信是如何处理的?

此类系统设计为基于一些预定义模板运行。因此,需要按照设计读取消息。当收到来自用户的SMS时,会对SMS进行处理,以获取有用的详细信息,如联系人号码、联系人姓名,最后是消息。下面是SMS处理的代码片段。有关详细说明,请阅读我们关于GSM模块接口的文章-使用Proteus接口GSM模块.

GSM中继控制-编程-从SMS读取数据
程序–从SMS读取数据

从接收到的SMS中提取数据后,验证用户是否有效。如果有效,则处理消息并执行相应的操作。如果用户未注册,则会发送通知。

如何验证用户?

对于每一条收到的短信,用户的联系号码都会得到验证,无论它是否在用户列表中。如果联系人号码存在于列表中,则该用户将被视为有效用户并处理该消息。在另一种情况下,如果联系人号码在列表中不存在,则会向用户发送一条短信,说明无效。下面给出了用户有效性验证的代码段。

GSM中继控制-程序-用户有效性验证
程序-用户有效性验证

如何删除注册用户?

系统可以在内存中容纳5个用户,这可以通过修改程序来增加。任何注册用户都可以从内存中删除该用户。选项4是专门用于此目的的。通过将4作为消息发送给系统,系统会回复用户的列表以及他们的索引。然后,用户必须记住应该删除的用户联系号码的索引,并将该索引作为模板发送。

例如,发送“RU1”以删除用户1。系统在收到带有此RU模板的消息时,将读取要删除的用户的索引,并从包括EEPROM的存储器中永久删除相应的用户。然后,调整用户的列表,使得该列表没有空索引,即,如果从包含4个用户的列表中移除具有索引2的用户,则第四个用户被移到第二位。第四个用户的地址位置用255填充。因此,可以删除注册用户。

如果列表中只有一个注册用户,则会提醒该用户,因为如果该用户被删除,则系统只能由编程用户操作。在删除用户之后,用户的数量将减少,结果将存储在EEPROM的零位置以备将来使用。下面提供了用于删除用户的代码片段。

GSM中继控制-程序-删除注册用户
程序–删除注册用户

如何获取SIM账户余额?

使用GSM模块的拨号功能。通过发送的5.,系统就会知道你需要账户余额,于是就拨了号*123#和存储收到的对账单。然后,系统将向请求的用户转发相同的对账单。系统统计其发送的邮件数。发送SMS后,名为“邮件计数”的变量将递增。此邮件计数将与帐户余额一起发送,以便用户可以为S充值MS计划(如有必要)提前启动。

GSM中继控制-SIM卡帐户对账单
GSM中继控制- SIM帐户声明

如何重置消息计数?

发送SMS后,message count变量将递增。这是一个两位数的数字,在99之后重置为零。可以通过发送6.’作为一个信息。当使用短信套餐时,此功能非常有用。每次充值后,可以重新设置,以知道系统发送的消息的数量之后。在每个发送的消息之后以及消息计数重置操作之后,在EEPROM中更新消息计数。

EEPROM是如何更新的?

在大多数情况下,所用位置的EEPROM数据将为十进制值255,但也可能是未知值。最好在将程序加载到微控制器时加载一个用户的详细信息,或在存储用户列表的位置写入十进制值255。每次微控制器通电或复位时,都会读取EEPROM数据。用户名和联系人号码的大小为10个地址位置,联系人列表中未使用的位置用十进制值255填充。地址位置是用户定义的。用于读取和写入EEPROM数据的代码段如下所示。

GSM中继控制- EEPROM数据读写代码
EEPROM数据的读写代码

下面的模拟显示了EEPROM是如何更新的。

作者

5.评论

  1. 弗兰西斯

    我非常感谢使用智能板的继电器控制,我一直在寻找这样一个项目很长时间,非常高兴你提供了一个!!我试图下载代码,但当我试图在我的平板电脑上打开它时,它给出了一个信息“无法打开文件”,请告诉我如何操作。
    先谢谢你。
    弗兰西斯

  2. 巴列特·辛格

    在atmega328p或mega2560上工作?

Baidu