18946浏览
查看: 18946|回复: 0

【自发电无线开关】不用插电的家用无线报警器

[复制链接]
本帖最后由 dbc0301 于 2022-11-9 22:25 编辑

前言

现在的智能手表功能日益强大,如Apple Watch的摔倒检测功能和报警SOS功能,但是这些手环对于许多老人来说可能太智能了,用起来可能会遇到困难,而且一旦忘记充电,这些功能都将会失效。
在这篇文章里,我将使用自发电无线开关制作一个无需电池的报警手环。  

手环篇

这是DFRobot出品的自发电无线开关,按动开关会带动发电线圈,发出足够的电驱动电路发射出一次信号。
自发电无线开关(433Mhz) 无需电池、免布线的无线开关
但既然是手环,那就要戴在手上,我在网上找到了这一款用于华为手表的表带。

接下来是建模手环主体,用抽壳命令做出一个1mm厚的小盒子,两边做上表带的连接器,连接器上边预留一个伸出天线的小孔。

最后3D打印出成品。
剪一截漆包线,要和自发电无线开关的天线一样长,一端用小刀把漆刮干净方便焊接。把原来的天线用电烙铁拆下来,换上漆包线做的天线,最好还要测试一下这个天线能不能用。
把自发电开关装进手环外壳,天线从小孔伸出来,天线比较长,我决定把天线藏进表带里。我选用的表带是编织弹性材质,如果你用的漆包线足够细,可以用针来穿进表带里,然而我选的漆包线太粗,没办法穿过针眼,只好手工一点一点地穿。

将天线按照Z字形穿进表带中,穿好后就是这样,如果不细看很难看到天线的存在。
接着是手环的盖子,在上面留了一个按开关的凹槽,3D打印后可以用胶水粘上去,也可以用电烙铁将焊缝抹平。

手环部分就做好了。

树莓派篇

首先要实现树莓派打电话的功能。移远EC200U是一款价格实惠、功能丰富的4G通信模块,插入一张sim卡后,可以打电话、发短信、4G上网。购买时一定要注意买带音频接口的语音款,不然无法实现语音报警功能。
购买链接:
移远通信树莓派4B开发板4g模块扩展板EC200U全网通cat1核心板
我买的这款是可以直插树莓派,带一个耳机接口(TRRS,四线),所以我考虑把它和树莓派自带的3.5mm音频接口相连,在网上是可以找到相关的连接线的,一些淘宝上的店铺还可以支持定制。

这里我直接找了一根四线音频线和一根三线音频线,树莓派输出的左右声道任选一路,接到4G模块的麦克风通道,具体连线应该类似这样。

我测试过如果两根线连接反了,可能会出现没有声音的现象,只要把两根线调回来就行了,或者也可以选择像我一样买一个音频变压器(同样只需要其中一路),改善阻抗,还可以让音质好一点(树莓派原生的音频口音质比较糟糕,如果追求更好的音质可以选用独立的USB声卡)。

控制程序

4G模块通过串口和树莓派通信,在树莓派里用ttyS0表示,波特率115200。
433MHz无线开关接收端接到树莓派的GPIO28,下面的程序之所以是20,是因为用的是BCM表示的方法。

#!/usr/bin/python3
#-*- coding:utf-8 -*-
import RPi.GPIO as GPIO                #导入RPi.GPIO库
import time                            #导入time库
import serial
from threading import Timer
from EC200U import*
import os

rec_buff = ''
APN = 'CMNET'
iphone = '10086' #改为要拨打的电话号码

class EC200UCtr:#发AT指令控制模块
    def EC200U_AT(self):
        while(ec200u.ATinit('ATE0\r\n','OK')==0):#判断模块是否存在
            pass
        while(ec200u.ATinit('AT+CIMI\r\n','460')==0):#判断卡是否存在
            pass
        while(ec200u.ATinit('AT+CGATT?\r\n','+CGATT: 1')==0):#判断是否注册网络成功
            pass

ec200u=EC200U('/dev/ttyS0',115200)
ec200uctr=EC200UCtr()
ec200uctr.EC200U_AT()

LED = 21                               #LED引脚号
KEY = 20                               #按键引脚号

GPIO.setwarnings(False)                #不加这句会有警告,因为该引脚已经被设置成了非默认值(也可以不加,不影响正常使用)
GPIO.setmode(GPIO.BCM)                 #使用BCM编码的引脚号
GPIO.setup(LED,GPIO.OUT)               #配置LED引脚模式
GPIO.setup(KEY,GPIO.IN,GPIO.PUD_DOWN)    #设置KEY引脚模式

def KEYInterrupt(KEY):                 #外部中断服务
    GPIO.output(LED,GPIO.HIGH)
    print("设置电话通道")
    ec200u.ATSignle('AT+QAUDMOD=2\r\n','OK')#设置电话通道
    print("拨号...")
    ec200u.ATSignle('ATD'+iphone+';\r\n','OK')#拨打电话
    while ec200u.ATresult('AT+CLCC\r\n').split(',')[2] != "0":#这个是等待电话接通
        time.sleep(1)
    os.system('aplay -D plughw:0,0 ../Music/alert.wav') #改为预制的报警录音
    GPIO.output(LED,GPIO.LOW)
    ec200u.ATSignle('AT+CHUP\r\n','OK') #挂断电话

GPIO.add_event_detect(KEY,GPIO.FALLING,KEYInterrupt,200)
#KEY:按键引脚号,GPIO.FALLING:下降沿模式,KEYInterrupt:中断服务函数,200:消抖时间(ms)

while True:
    time.sleep(1)

程序不长,我们关注一下这门几个指令。

这个是用来拨打电话的指令,比如ATD10086就意味着打电话到10086。

这个指令是用来主动获取电话状态的,0代表激活状态,就是电话被接通了。
os.system('aplay -D plughw:0,0 ../Music/alert.wav') #改为预制的报警录音
linux中用于播放音频的指令,我们可以利用手机或录音笔先把报警信息录制下来,也可以通过语音生成网站生成音频文件,然后保存到树莓派中,就可以用这条指令控制播放了。
alsamixer
如果发现音量太小,也可以通过在Shell中输入这个指令打开图形化界面,来调节系统音量。

了解了以上这几个指令,就不难理解这段程序。
每当收到无线手环的信号时,程序开始拨号,等待接通后,播放预留的报警录音,播放完毕后
1.等待433无线接收端接收信号,触发外部中断
2.拨号指定的电话号码
3.等待对方接听
4.播放预留的报警录音
5.挂断电话




下载附件树莓派4G扩展板开发资料V12.rar
下载附件程序.rar
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail