_深蓝_ 发表于 2024-9-26 21:27:01

行空板扩展板电子保安保卫小区安全 提升业主生活体验

本帖最后由 _深蓝_ 于 2024-9-26 21:32 编辑

行空板扩展板制作电子保安保卫小区安全 提升业主生活体验







https://www.bilibili.com/video/BV1e7xEeeEWi/?spm_id_from=333.999.0.0

一、项目背景

满怀报负的我们从小离开家门,背着沉重的行囊走上求学的道路,还有的小伙伴走向了复杂的社会,在平淡的生活中拼搏、挥洒汗水,到了晚年落叶归根,回到儿时的那个家,享受天伦之乐。而包容的城市里,小区便是我们老年的归宿,不希望多么奢华,只想平平淡淡,安安全全,有求必应、事事顺心的小区环境。随着城市化进程的加快,小区规模不断扩大,传统的人工巡逻与监控方式已难以满足现代小区对安全、便捷及高效管理的需求。因此,开发一套集自动化、智能化于一体的电子保安系统显得尤为重要。该系统不仅能够减轻物业管理人员的工作负担,还能有效提升小区的安全防范能力,为我们业主创造一个更加安全、舒适的生活环境。


二、项目设计

1.使用硬件
行空板购买链接
扩展板购买链接
小车(包括电机和车轮,车身使用盒子暂代)
语音合成模块购买链接
温湿度模块购买链接
超声波传感器wiki百科
模拟火焰传感器wiki百科

2.使用思维导图展示项目设计



3.项目硬件设计


[*]电机:搭配定制巡逻小车,实现小区内的自动化巡逻。
[*]温湿度传感器:选用高精度温湿度传感器,实时监测小区内环境变化。
[*]超声波传感器:安装于巡逻小车前端,用于避障检测,防止碰撞。
[*]模拟火焰传感器:部署于小区关键区域,如儿童游乐区,检测明火。
[*]语音合成设备:集成于巡逻小车或中控系统,用于发出安全警告与求助回应。
[*]喷灌系统:根据温湿度传感器数据,自动启动灌溉与降温增湿功能。
[*]物联网通信模块:支持Wi-Fi的物联网通信,确保数据实时上传至门卫中控大屏。

三、电路连接

电路图如下图所示



1.超声波传感器echo接收管脚接P12,trig发送管脚接P11。
2.DHT11温湿度传感器接管脚P7 。
3.模拟火焰传感器接管脚P3。
4.语音合成模块解行空板I2C接口。

四、编程实现

1.自动化巡逻系统


以上程序实现“电子保安”按照规划的路线巡逻。

2.环境监测与灌溉降温系统


使用siot物联网系统,将采集的环境温湿度上传到大屏系统,后台操作人员或者门卫根据采集的温湿度指导园艺工人进行灌溉,降温和增湿。

3.安全预警系统



如果电子保安即将撞人,语音合成提醒,你快撞到我了,请慢走。
如果模拟火焰检测有明火,合成语音提醒3遍警告、警告、禁止玩火。

4.紧急求助响应系统





本系统使用行空板的按钮,给小区用户交互提供可能,大屏系统会显示用户的求助位置并安排服务解决,用于有紧急求助的住户。

5.物联网通讯与数据展示系统





以上内容用于后台技术人员或者门卫看到的大屏,用于监控小区内部的温湿度,是否有夜间施工噪声,以及紧急求助的接口与内容。

6.人工遥控操作电子保安巡逻



可以使用扩展板带的红外接收器,使用遥控器人工手动操作电子保安的巡逻或者调试。


完整的主程序截图如下


函数与主程序折叠后得结构如下


载入模块如下图所示




五、小车制作

由于材料的限制,本人使用药盒作为小车的车身,各种传感器用m3的螺丝直接固定到药盒上了。




六、siot效果与大屏展示







七、不足和改进

1.由于激光切割和3D打印的限制,制作的小车不太美观。
2.没有加入摄像头,简化了本项目的编程,未使用多线程让摄像头的数据上传到大屏上。
3.在测试电机时,使用9v的电池,却带动不了药盒的小车。电机不动,后期解决一下,或者换其他体积小一点的电机。
4.对于多样的传感器,仅仅加入了温湿度、超声波和模拟火焰传感器,复现的同学可以加入空气质量传感器,烟雾传感器,pm2.5传感器等等。


八、附件

代码:

#-*- coding: UTF-8 -*-

# MindPlus
# Python
import siot
import time
from unihiker import GUI
from unihiker import Audio
from pinpong.board import Board
from pinpong.board import DHT11
from pinpong.board import IRRecv
from pinpong.board import Board,Pin
from pinpong.board import SR04_URM10
from pinpong.extension.unihiker import *
from pinpong.libs.dfrobot_speech_synthesis import DFRobot_SpeechSynthesis_I2C

# 自定义函数
def ZuoZhuan_ShiJian(time):
    p_p5_out.write_digital(0)
    p_p8_pwm.write_analog(512)
    p_p6_out.write_digital(1)
    p_p16_pwm.write_analog(512)
    time.sleep(time)
def YouZhuan_ShiJian(time):
    p_p5_out.write_digital(1)
    p_p8_pwm.write_analog(512)
    p_p6_out.write_digital(0)
    p_p16_pwm.write_analog(512)
    time.sleep(time)
def XunLuoFangAn2():
    ZhiXianXingShi_SuDu(0.5)
    time.sleep(10)
    ZuoZhuan_ShiJian(3)
    ZhiXianXingShi_SuDu(0.5)
    time.sleep(10)
    ZuoZhuan_ShiJian(3)
    ZhiXianXingShi_SuDu(0.5)
    time.sleep(10)
    ZuoZhuan_ShiJian(3)
    ZhiXianXingShi_SuDu(0.5)
    time.sleep(10)
def XunLuoFangAn1():
    ZhiXianXingShi_SuDu(0.5)
    time.sleep(10)
    ZuoZhuan_ShiJian(3)
    ZhiXianXingShi_SuDu(0.5)
    time.sleep(10)
    ZuoZhuan_ShiJian(3)
    ZhiXianXingShi_SuDu(0.5)
    time.sleep(15)
    ZuoZhuan_ShiJian(3)
    ZhiXianXingShi_SuDu(0.5)
    time.sleep(10)
def ZhiXianXingShi_SuDu(velocity):
    p_p5_out.write_digital(0)
    p_p8_pwm.write_analog((1023 * velocity))
    p_p6_out.write_digital(0)
    p_p16_pwm.write_analog((1023 * velocity))

# 事件回调函数
def button_click1():
    print("button_click1")
    siot.publish_save(topic="siot/求助报警", data="1号楼附近请求支援。")
def button_click2():
    print("button_click2")
    siot.publish_save(topic="siot/求助报警", data="2号楼附近请求支援。")
def button_click3():
    print("button_click3")
    siot.publish_save(topic="siot/求助报警", data="3号楼附近请求支援。")
def button_click5():
    print("button_click5")
    siot.publish_save(topic="siot/求助报警", data="5号楼附近请求支援。")
def button_click6():
    print("button_click6")
    siot.publish_save(topic="siot/求助报警", data="6号楼附近请求支援。")
def button_click7():
    print("button_click7")
    siot.publish_save(topic="siot/求助报警", data="7号楼附近请求支援。")
def button_click8():
    print("button_click8")
    siot.publish_save(topic="siot/求助报警", data="8号楼附近请求支援。")
def on_message_callback(client, userdata, msg):
    print(msg.topic)
    print(msg.payload.decode())
    if (msg.topic == "siot/回复"):
      message.config(text=msg.payload.decode())
def event(data):
    my_variable = hex(data)
    my_variable = 0.8
    if (my_variable == "0xfd807f"):
      p_p5_out.write_digital(0)
      p_p8_pwm.write_analog((1023 * velocity))
      p_p6_out.write_digital(0)
      p_p16_pwm.write_analog((1023 * velocity))
    elif (my_variable == "0xfd906f"):
      p_p5_out.write_digital(0)
      p_p8_pwm.write_analog((1023 * velocity))
      p_p6_out.write_digital(0)
      p_p16_pwm.write_analog((1023 * velocity))
    elif (my_variable == "0xfd20df"):
      p_p5_out.write_digital(1)
      p_p8_pwm.write_analog((1023 * velocity))
      p_p6_out.write_digital(0)
      p_p16_pwm.write_analog((1023 * velocity))
    elif (my_variable == "0xfd609f"):
      p_p5_out.write_digital(0)
      p_p8_pwm.write_analog((1023 * velocity))
      p_p6_out.write_digital(1)
      p_p16_pwm.write_analog((1023 * velocity))
    else:
      p_p5_out.write_digital(0)
      p_p8_pwm.write_analog(0)
      p_p6_out.write_digital(1)
      p_p16_pwm.write_analog(0)


Board().begin()
siot.init(client_id="7513374100360746",server="192.168.99.45",port=1883,user="siot",password="dfrobot")
u_gui=GUI()
u_audio = Audio()
siot.connect()
p_p3_analog=Pin(Pin.P3, Pin.ANALOG)
siot.set_callback(on_message_callback)
p_p5_out=Pin(Pin.P5, Pin.OUT)
p_p8_pwm=Pin(Pin.P8, Pin.PWM)
p_p6_out=Pin(Pin.P6, Pin.OUT)
p_p16_pwm=Pin(Pin.P16, Pin.PWM)
sonar1 = SR04_URM10(Pin((Pin.P11)),Pin((Pin.P12)))
dht1 = DHT11(Pin((Pin.P7)))
p_gravitysynthesis = DFRobot_SpeechSynthesis_I2C()
p_gravitysynthesis.begin(p_gravitysynthesis.V2)
p_gravitysynthesis.set_voice(1)
p_gravitysynthesis.set_speed(5)
p_gravitysynthesis.set_tone(5)
p_gravitysynthesis.set_sound_type(p_gravitysynthesis.FEMALE3)
p_gravitysynthesis.set_digital_pron(p_gravitysynthesis.AUTOJUDGED)
siot.getsubscribe(topic="siot/回复")
# 设置行空板显示的内容,如温湿度、火情等,求助等。
a1=u_gui.draw_text(text="电子保安小区情况一览",x=10,y=0,font_size=15, color="#0000FF")
temp=u_gui.draw_text(text="当前温度:",x=0,y=30,font_size=15, color="#0000FF")
humi=u_gui.draw_text(text="当前湿度:",x=0,y=60,font_size=15, color="#0000FF")
fire=u_gui.draw_text(text="火情:",x=0,y=90,font_size=15, color="#0000FF")
message=u_gui.draw_text(text="信息:",x=0,y=120,font_size=15, color="#0000FF")
safe=u_gui.draw_text(text="有事按所在楼按钮",x=10,y=160,font_size=15, color="#0000FF")
rect=u_gui.draw_rect(x=5,y=150,w=300,h=250,width=1,color="#0000FF")
number=u_gui.add_button(text="1号楼",x=5,y=200,w=40,h=30,onclick=button_click1)
number=u_gui.add_button(text="2号楼",x=50,y=200,w=40,h=30,onclick=button_click2)
number=u_gui.add_button(text="3号楼",x=100,y=200,w=40,h=30,onclick=button_click3)
number=u_gui.add_button(text="5号楼",x=150,y=200,w=40,h=30,onclick=button_click5)
number=u_gui.add_button(text="6号楼",x=5,y=240,w=40,h=30,onclick=button_click6)
number=u_gui.add_button(text="7号楼",x=50,y=240,w=40,h=30,onclick=button_click7)
number=u_gui.add_button(text="8号楼",x=100,y=240,w=40,h=30,onclick=button_click8)

while True:
    # 使用无线遥控器可以手动控制电子保安行动。
    ir1 = IRRecv(Pin((Pin.P14)),event)
    # 监测环境温度和湿度,指导园艺工人灌溉。
    temp.config(text="当前温度: {:.4}℃".format(dht1.temp_c()))
    humi.config(text=(str("当前湿度: %3.1f"%(dht1.humidity())) + str("%")))
    # 显示火情
    fire.config(text=(str("火情: ") + str((400 <= p_p3_analog.read_analog()))))
    siot.publish_save(topic="siot/湿度", data=dht1.humidity())
    siot.publish_save(topic="siot/温度", data=dht1.temp_c())
    siot.publish_save(topic="siot/噪声", data=u_audio.sound_level())
    print((str("距离:") + str(sonar1.distance_cm())))
    print((str("模拟火焰:") + str(p_p3_analog.read_analog())))
    # 发现火情,语音合成设备发出警告,禁止明火。
    if (100 <= p_p3_analog.read_analog()):
      for index in range(3):
            siot.publish_save(topic="siot/求助报警", data="存在火情、警告中...")
            p_gravitysynthesis.speak("警告、警告,禁止玩火。")
    if (sonar1.distance_cm() <= 20):
      for index in range(3):
            p_gravitysynthesis.speak("你快撞到我了,请慢走。")
    time.sleep(1)


_深蓝_ 发表于 2024-9-26 21:34:21

一周多时间的辛勤劳动了,终于完成了,如果有什么不合适的地方,请回复呀。各位国庆节快乐了。

水族馆买鲸鱼 发表于 2024-10-1 12:19:34

复现失败了,求指导,可有偿

DeadWalking 发表于 2024-10-14 13:02:02

学习,正好筹建小区业委会,很不错的案例啊
页: [1]
查看完整版本: 行空板扩展板电子保安保卫小区安全 提升业主生活体验