本作品由安信可社區(qū)用戶
wukong50制作
作者說:
以下是我用雷達模組做的電腦提醒小工具
因為我有一個兒子
他經(jīng)常用電腦看動畫片
稍不注意他就趴電腦屏幕上了
所以我就借雷達模組做了距離提醒工具
模組通過 TTL 直接與電腦通信
當檢測到孩子趴在電腦前看
就播放語音(“距離太近了”)
讓孩子自己往后挪
如果超過 3 次
孩子還不動,則直接鎖定屏幕
這下孩子想靠近看都不行了
另外還添加了 MQTT 服務器連接
將每次檢測到的距離信息傳到MQT服務器上,方便和其他設備聯(lián)動
1
接線
直接使用 USB 轉 TTL 連接即可
2
UART.py
# pip install pyserialimport osimport timeimport serialfrom playsound import playsound import mmqttnum = 0 # 用于判斷第幾次觸發(fā)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 = [] # 解析數(shù)據(jù)并存儲 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 # 數(shù)據(jù)驗證成功 加入列表 juli = data[i+4]*256+data[i+3] # 小端 print(juli) juli_list.append(juli) # 過濾數(shù)據(jù) # print(juli_list) juli_list = sorted(juli_list) # 排序 # print(juli_list) # 計算需要去除的元素數(shù)量 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:\0.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連接參數(shù) MQTT_BROKER = "" # 替換為你的EMQX服務器地址 MQTT_PORT = 8883 # MQTT默認端口,如果EMQX配置了其他端口,請相應修改 MQTT_TOPIC = "RD03E" # 要發(fā)布的MQTT主題 MQTT_CLIENT_ID = "" # MQTT客戶端ID username = ''password = ''# MQTT回調函數(shù) 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(): # 創(chuàng)建MQTT客戶端實例 client = mqtt.Client(MQTT_CLIENT_ID) # 綁定連接回調函數(shù) client.on_connect = on_connect # 綁定消息回調函數(shù) 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客戶端循環(huán) client.loop_start() return client # # 發(fā)布消息 def publish_msg(client, msg): client.publish(MQTT_TOPIC, msg) def mqtt_end(client): client.disconnect() client.loop_stop(
4
代碼輸出
5
MQTT 消息
6
數(shù)據(jù)過濾
在數(shù)據(jù)采集方面,每次采集 10 次數(shù)據(jù),并把距離信息從小到大排序,剔除三個最高分,剔除三個最低分,最后才把剩下的數(shù)據(jù)進行平均,這樣可以稍微確保得到的數(shù)據(jù)更準確些。
-
物聯(lián)網(wǎng)
+關注
關注
2909文章
44635瀏覽量
373363 -
服務器
+關注
關注
12文章
9160瀏覽量
85421
發(fā)布評論請先 登錄
相關推薦
評論