孩子看电视距离太近了?用Rd-03E做个距离提醒!

描述

本作品由安信可社区用户

wukong50制作

MQTT

作者说:

我有一个儿子

他经常用电脑看动画片

稍不注意他就趴电脑屏幕上了

所以我就用安信可的雷达模组做了距离提醒工具

模组通过TTL直接与电脑通信

上位机通过Python开发实现

当检测到孩子趴在电脑前距离太近,则会播放语音(“距离太近了”)

以便提醒孩子自己往后挪

如果超过 3 次

孩子还不动,则直接锁定屏幕

另外还添加了MQTT服务器连接

将每次检测到的距离信息传到MQT服务器上,方便和其他设备联动

来看看是怎么实现的?

1、接线

直接使用 USB 转 TTL 连接即可

MQTT

2、UART.py

# pip install pyserial

import os

import time

import serial

from playsound import playsound

import mmqtt

num = 0 # 用于判断第几次触发

zhen_len = 7

# 打开串行端口

ser = serial.Serial('COM7', 256000, timeout=1)

if ser.isOpen():

print("串行端口已打开")

else:

print("无法打开串行端口")

exit()

# MQTT配置

client = mmqtt.mqtt_init()

while True:

try:

data = ser.read(7 * 11)

print(type(data))

print(data.hex())

except:

data = []

# 解析数据并存储

juli_list = [] # 索引0 运动1还是微动2 ,索引1,距离

for i in range(len(data)):

if data[i] == 0xAA and data[i+1] == 0xAA: # 第1,2位是AA

if data[i+5] == 0x55 and data[i+6] == 0x55: # 第6,7位是55

# 数据验证成功 加入列表

juli = data[i+4]*256+data[i+3] # 小端

print(juli)

juli_list.append(juli)

# 过滤数据

# print(juli_list)

juli_list = sorted(juli_list) # 排序

# print(juli_list)

# 计算需要去除的元素数量

remove_count = 3

juli_list = juli_list[remove_count:-remove_count]

print(juli_list)

juli = sum(juli_list) / len(juli_list)

mmqtt.publish_msg(client, str(juli))

if juli < 40 and juli > 0:

num += 1

if num < 4:

# 播放音频

playsound(r'D:.wav')

else:

num = 0

# 锁定计算机

# os.system('rundll32.exe user32.dll,LockWorkStation')

elif juli > 100 or juli == 0:

num = 0

# 锁定计算机

# os.system('rundll32.exe user32.dll,LockWorkStation')

time.sleep(10)

ser.close()

3、mmqtt.py

import paho.mqtt.client as mqtt

# 配置MQTT连接参数

MQTT_BROKER = "" # 替换为你的EMQX服务器地址

MQTT_PORT = 8883 # MQTT默认端口,如果EMQX配置了其他端口,请相应修改

MQTT_TOPIC = "RD03E" # 要发布的MQTT主题

MQTT_CLIENT_ID = "" # MQTT客户端ID

username = ''

password = ''

# MQTT回调函数

def on_connect(client, userdata, flags, rc):

print(f"Connected with result code {rc}")

# 订阅主题

client.subscribe(MQTT_TOPIC)

def on_message(client, userdata, msg):

print(f"Received message '{msg.payload}' on topic '{msg.topic}' with QoS {msg.qos}")

def mqtt_init():

# 创建MQTT客户端实例

client = mqtt.Client(MQTT_CLIENT_ID)

# 绑定连接回调函数

client.on_connect = on_connect

# 绑定消息回调函数

client.on_message = on_message

client.tls_set(ca_certs='./emqxsl-ca.crt')

client.username_pw_set(username, password)

# 连接到MQTT代理

client.connect(MQTT_BROKER, MQTT_PORT)

# 开始MQTT客户端循环

client.loop_start()

return client

# # 发布消息

def publish_msg(client, msg):

client.publish(MQTT_TOPIC, msg)

def mqtt_end(client):

client.disconnect()

client.loop_stop(

4、代码输出

MQTT

5、MQTT 消息

MQTT

6

数据过滤

在数据采集方面,每次采集 10 次数据,并把距离信息从小到大排序,剔除三个最高分,剔除三个最低分,最后才把剩下的数据进行平均,这样可以稍微确保得到的数据更准确些。

安信可目前已发布Rd-01、Rd-03、Rd-03D、Rd-03E、Rd-03L和Rd-04这6款雷达模组,抗干扰性好,不受温度、湿度、水雾、尘埃等环境因素影响。

安信可雷达模组可实现对于人体状态目标的感应、测量等,可广泛应用于智能家居、智慧安防、智慧照明、智能商业和新能源充电/停车监测设施等场景中。

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分