回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页
best-icon

智能安全岛 守护学生安全 简单

头像 孙洪尧1985 2024.01.14 89 0

一、创作背景

很多学校往往位于主路旁,方便学生出入,但是也随之带来了安全隐患。经常有部分学生需要穿越马路到达学校。大部分学生会遵守交通规则,行走在斑马线上,红灯停,绿灯行;但是少数调皮学生急于过马路,闯红灯穿越马路,造成了安全隐患。

二、作品描述

    为了让学生安全穿越马路,我设计了这款智能安全岛的作品。首先公路的交通灯和人行横道的交通灯保持一致,方便管理;其次,到人行横道绿灯亮起的时候,安全岛的闸门打开,行人通过斑马线穿越马路;第三,到安全岛等待的行人大于10人,交通灯智能调配,控制人行横道的绿灯亮起,闸门打开,方便行人通过;第四,到安全岛附近有紧急情况发生的时候,可以通过大屏的一键报警按键及时通知学校;最后,设置光控灯和温控风扇,尽可能的服务好行人。

三、功能介绍

1、交通灯同步显示:公路的交通灯和安全岛的交通灯能够达到同步协调的显示,指挥交通;

2、闸门控制:通过安全岛绿灯亮起和公路红灯亮起,舵机控制的闸门打开,方便行人通过马路;红灯时则关闭;

3、特殊情况闸门控制:当安全岛人员众多,避障模块检测超过十人后,行空板调控安全岛绿灯亮起,公路红灯亮起,闸门开启,方便行人通过;

4、一键报警:在安全岛上的行空板设置一键报警按钮,通过MQTT方式,与另一块作为学校终端的行空板连接;当安全岛附近发生紧急情况,可以按下一键报警按钮,终端会第一时间收到消息,进行处置;

5、智能化服务:当行人在炎热天气等红灯时,气温超过30度,温控风扇自动打开;当晚间行人灯红灯时,光控灯自动打开,方便行人。

微信图片_20240114215919.jpg
微信图片_20240114215937.jpg
微信图片_20240114215942.jpg
微信图片_20240114215958.jpg
微信图片_20240114220003.jpg

步骤1 安装六个LED灯,并编程调节两组交通灯效果;

步骤2 安装舵机编程,调整到人行横道绿灯时,闸门打开;

步骤3 安装避障模块,通过编程达到清点人数的效果,并当大于等于十人时,人行横道亮绿灯,闸门打开;

步骤4 安装全彩RGB模块、风扇模块和温湿度模块,编程实现人性化服务;并将程序并入到主程序中

步骤5 设置两台行空板MQTT,实现通信,开启一键报警功能

代码
#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
from pinpong.board import NeoPixel
from pinpong.board import Servo
from pinpong.board import DHT11
from pinpong.board import Board
from unihiker import GUI
import time
import siot

# 自定义函数
def MaLuLvDeng():
    p_p21_out=Pin(Pin.P21, Pin.OUT)
    p_p21_out.write_digital(0)
    p_p22_out=Pin(Pin.P22, Pin.OUT)
    p_p22_out.write_digital(0)
    p_p23_out=Pin(Pin.P23, Pin.OUT)
    p_p23_out.write_digital(1)
def MaLuHongDeng():
    p_p21_out=Pin(Pin.P21, Pin.OUT)
    p_p21_out.write_digital(1)
    p_p22_out=Pin(Pin.P22, Pin.OUT)
    p_p22_out.write_digital(0)
    p_p23_out=Pin(Pin.P23, Pin.OUT)
    p_p23_out.write_digital(0)
def MaLuHuangDeng():
    p_p21_out=Pin(Pin.P21, Pin.OUT)
    p_p21_out.write_digital(0)
    p_p22_out=Pin(Pin.P22, Pin.OUT)
    p_p22_out.write_digital(1)
    p_p23_out=Pin(Pin.P23, Pin.OUT)
    p_p23_out.write_digital(0)
def BanMaXianHuangDeng():
    p_p0_out=Pin(Pin.P0, Pin.OUT)
    p_p0_out.write_digital(0)
    p_p1_out=Pin(Pin.P1, Pin.OUT)
    p_p1_out.write_digital(1)
    p_p2_out=Pin(Pin.P2, Pin.OUT)
    p_p2_out.write_digital(0)
    huang.config(color="#FFFF00")
    lv.config(color="#000000")
    hong.config(color="#000000")
def BanMaXianHongDeng():
    p_p0_out=Pin(Pin.P0, Pin.OUT)
    p_p0_out.write_digital(1)
    p_p1_out=Pin(Pin.P1, Pin.OUT)
    p_p1_out.write_digital(0)
    p_p2_out=Pin(Pin.P2, Pin.OUT)
    p_p2_out.write_digital(0)
    huang.config(color="#000000")
    lv.config(color="#000000")
    hong.config(color="#FF0000")
def BanMaXianLvDeng():
    p_p0_out=Pin(Pin.P0, Pin.OUT)
    p_p0_out.write_digital(0)
    p_p1_out=Pin(Pin.P1, Pin.OUT)
    p_p1_out.write_digital(0)
    p_p2_out=Pin(Pin.P2, Pin.OUT)
    p_p2_out.write_digital(1)
    huang.config(color="#000000")
    lv.config(color="#00FF00")
    hong.config(color="#000000")

# 事件回调函数
def u_thread3_function():
    while True:
        if (dht1.temp_c() >= 30):
            p_p14_out=Pin(Pin.P14, Pin.OUT)
            p_p14_out.write_digital(1)
        else:
            p_p14_out=Pin(Pin.P14, Pin.OUT)
            p_p14_out.write_digital(0)
        if (10 > light.read()):
            np1.range_color(0,3,0xFFFFFF)
        else:
            np1.clear()
def button_click1():
    siot.publish_save(topic="siot/一键报警", data="安全岛发生紧急情况")
    siot.publish_save(topic="siot/紧急处置", data="安全岛发生紧急情况")
def u_thread1_function():
    while True:
        BanMaXianLvDeng()
        servo1.write_angle(90)
        time.sleep(8)
        servo1.write_angle(15)
        time.sleep(2)
        BanMaXianHuangDeng()
        time.sleep(2)
        BanMaXianHongDeng()
        time.sleep(10)
def u_thread2_function():
    while True:
        MaLuHongDeng()
        time.sleep(10)
        MaLuHuangDeng()
        time.sleep(2)
        MaLuLvDeng()
        time.sleep(10)


siot.init(client_id="426605611292032",server="192.168.10.60",port=1883,user="siot",password="dfrobot")
Board().begin()
u_gui=GUI()
siot.connect()
siot.loop()
p_p24_in=Pin(Pin.P24, Pin.IN)
siot.getsubscribe(topic="siot/一键报警")
siot.getsubscribe(topic="siot/紧急处置")
RenShu = 0
np1 = NeoPixel(Pin((Pin.P13)),4)
dht1 = DHT11(Pin((Pin.P15)))
servo1 = Servo(Pin((Pin.P16)))
servo1.write_angle(15)
text1=u_gui.draw_text(text="智能安全岛竭诚为您服务,宁等三分,不抢一秒,安全第一!",x=20,y=0,font_size=20, color="#000000")
text1.config(w=200)
text=u_gui.draw_text(text="当前人数:",x=20,y=150,font_size=20, color="#FF0000")
number=u_gui.draw_digit(text=RenShu,x=150,y=160,font_size=20, color="#FF0000")
kuang=u_gui.fill_round_rect(x=20,y=190,w=180,h=50,r=5,color="#000000")
lv=u_gui.fill_circle(x=45,y=215,r=20,color="#000000")
huang=u_gui.fill_circle(x=92,y=215,r=20,color="#000000")
hong=u_gui.fill_circle(x=139,y=215,r=20,color="#000000")
button=u_gui.add_button(text="一键报警",x=80,y=250,w=80,h=30,onclick=button_click1)
thread1=u_gui.start_thread(u_thread1_function)
thread2=u_gui.start_thread(u_thread2_function)
thread3=u_gui.start_thread(u_thread3_function)

while True:
    while not ((10 <= RenShu)):
        if ((p_p24_in.read_digital()==True) == 0):
            RenShu = (RenShu + 1)
            time.sleep(1)
            number.config(text=RenShu)
    u_gui.stop_thread(thread1)
    u_gui.stop_thread(thread2)
    MaLuHongDeng()
    BanMaXianLvDeng()
    servo1.write_angle(90)
    time.sleep(10)
    RenShu = 0
    number.config(text=RenShu)
    servo1.write_angle(15)
    thread1=u_gui.start_thread(u_thread1_function)
    thread2=u_gui.start_thread(u_thread2_function)

材料清单

评论

user-avatar