一、创作背景
很多学校往往位于主路旁,方便学生出入,但是也随之带来了安全隐患。经常有部分学生需要穿越马路到达学校。大部分学生会遵守交通规则,行走在斑马线上,红灯停,绿灯行;但是少数调皮学生急于过马路,闯红灯穿越马路,造成了安全隐患。
二、作品描述
为了让学生安全穿越马路,我设计了这款智能安全岛的作品。首先公路的交通灯和人行横道的交通灯保持一致,方便管理;其次,到人行横道绿灯亮起的时候,安全岛的闸门打开,行人通过斑马线穿越马路;第三,到安全岛等待的行人大于10人,交通灯智能调配,控制人行横道的绿灯亮起,闸门打开,方便行人通过;第四,到安全岛附近有紧急情况发生的时候,可以通过大屏的一键报警按键及时通知学校;最后,设置光控灯和温控风扇,尽可能的服务好行人。
三、功能介绍
1、交通灯同步显示:公路的交通灯和安全岛的交通灯能够达到同步协调的显示,指挥交通;
2、闸门控制:通过安全岛绿灯亮起和公路红灯亮起,舵机控制的闸门打开,方便行人通过马路;红灯时则关闭;
3、特殊情况闸门控制:当安全岛人员众多,避障模块检测超过十人后,行空板调控安全岛绿灯亮起,公路红灯亮起,闸门开启,方便行人通过;
4、一键报警:在安全岛上的行空板设置一键报警按钮,通过MQTT方式,与另一块作为学校终端的行空板连接;当安全岛附近发生紧急情况,可以按下一键报警按钮,终端会第一时间收到消息,进行处置;
5、智能化服务:当行人在炎热天气等红灯时,气温超过30度,温控风扇自动打开;当晚间行人灯红灯时,光控灯自动打开,方便行人。
步骤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)
评论