编写程序让智能公交车人流量检测,超载时提示“请勿上车”,保障安全。
一旦系统检测到第 81 位乘客试图上车(即总人数 > 80),车载显示屏立刻变红,语音播报 “车辆已满,请勿上车”,同时车门保持关闭,直至有乘客下车腾出空位。print(f" -> 累计下车: {self.out_count}, 当前载客: {self.current_passengers}")print(f" -> 累计上车: {self.in_count}, 当前载客: {self.curre
🚌 智能公交车人流量检测与超载预警系统
一、 实际应用场景描述 (Scenario)
场景设定在早高峰的公交站台。
一辆核定载客量为 80 人的公交车驶入站台。此时车内已有 75 人,处于满载状态。随着乘客继续拥挤上车,车门处的人体红外传感器(PIR)或光电计数器开始工作。
一旦系统检测到第 81 位乘客试图上车(即总人数 > 80),车载显示屏立刻变红,语音播报 “车辆已满,请勿上车”,同时车门保持关闭,直至有乘客下车腾出空位。
二、 引入痛点 (Pain Points)
传统人工监管存在以下安全隐患:
1. 主观盲区:司机视线受阻或疲劳时,无法精确统计人数。
2. 安全法规:交通法规明确规定客车严禁超载,一旦发生事故,超载车辆需承担更大责任。
3. 效率低下:高峰期靠售票员喊话或人工拦阻,容易造成纠纷和拥堵。
我们的方案通过非接触式自动计数和硬阈值拦截,实现无人化、标准化的安全管理。
三、 核心逻辑讲解 (Core Logic)
本系统采用“双向计数器 + 阈值锁存”逻辑:
1. 信号采集:利用安装在车门上方的对射式光电传感器或ToF(飞行时间)传感器。当光束被遮挡,产生一个脉冲信号。
2. 计数逻辑:
-
"IN" 计数:乘客上车 (+1)
-
"OUT" 计数:乘客下车 (-1)
-
"Current_Count = IN - OUT"
3. 安全判定:
- 若
"Current_Count >= MAX_CAPACITY (80)" → 触发
"OVERLOAD" 状态,禁止开门或禁止上车。
四、 代码模块化实现 (Code Implementation)
我们将系统解耦为三个模块,模拟车载嵌入式系统:
-
"sensor.py": 车门传感器模拟
-
"counter.py": 客流统计算法
-
"safety_controller.py": 安全拦截逻辑
-
"main.py": 主运行循环
1. 传感器模块 (
"sensor.py")
模拟光电传感器的脉冲信号。
# sensor.py
import random
class DoorSensorArray:
"""
模拟车门处的传感器阵列
可以是红外对射或深度摄像头简化模型
"""
def __init__(self, detection_probability=0.95):
self.detection_probability = detection_probability
def detect_passenger(self, direction):
"""
模拟检测到一个乘客通过
direction: 'in' 或 'out'
"""
# 模拟传感器偶尔漏检的情况
if random.random() < self.detection_probability:
print(f"[传感器] 检测到一名乘客 {direction.upper()} 站")
return True
else:
print(f"[传感器] 警告:一名乘客 {direction.upper()} 站 漏检")
return False
2. 客流计数模块 (
"counter.py")
实现核心的计数逻辑。
# counter.py
class PassengerCounter:
"""
乘客流量计数器
维护上车和下车的净差值
"""
def __init__(self, initial_count=0):
self.in_count = 0
self.out_count = 0
self.current_passengers = initial_count
def passenger_entered(self):
self.in_count += 1
self.current_passengers += 1
print(f" -> 累计上车: {self.in_count}, 当前载客: {self.current_passengers}")
def passenger_exited(self):
self.out_count += 1
self.current_passengers -= 1
# 防止出现负数(传感器误判)
self.current_passengers = max(0, self.current_passengers)
print(f" -> 累计下车: {self.out_count}, 当前载客: {self.current_passengers}")
@property
def total_on_board(self):
return self.current_passengers
3. 安全控制器 (
"safety_controller.py")
实现核心的安全拦截状态机。
# safety_controller.py
from enum import Enum, auto
class BusState(Enum):
NORMAL = auto() # 正常运营
OVERLOADED = auto() # 超载锁定
class SafetyController:
"""
公交安全控制器
负责执行“超载禁止上车”的硬性规则
"""
def __init__(self, max_capacity=80):
self.max_capacity = max_capacity
self.state = BusState.NORMAL
def check_capacity(self, current_count):
"""
核心安全逻辑:硬阈值判断
"""
if current_count > self.max_capacity and self.state == BusState.NORMAL:
self.trigger_overload_lockdown()
elif current_count <= self.max_capacity and self.state == BusState.OVERLOADED:
self.release_lockdown()
return self.state
def trigger_overload_lockdown(self):
"""触发超载锁定"""
self.state = BusState.OVERLOADED
print("\n" + "🚨" * 20)
print("🚨🚨🚨 [安全警报] 车辆已满载!请勿上车!🚨🚨🚨")
print("🔒 车门已锁定,拒绝上车...")
print("📢 语音提示:车辆已满,请等候下一辆车。")
print("🚨" * 20 + "\n")
def release_lockdown(self):
"""解除超载锁定"""
self.state = BusState.NORMAL
print("\n✅ [系统恢复] 载客量已降至安全线以下,恢复正常运营。\n")
4. 主程序 (
"main.py")
模拟早高峰的上下车动态。
# main.py
import time
from sensor import DoorSensorArray
from counter import PassengerCounter
from safety_controller import SafetyController
def main():
print("🚌 智能公交安全监控系统启动...")
print("=" * 40)
# 初始化系统
sensor = DoorSensorArray()
counter = PassengerCounter(initial_count=75) # 假设车上已有75人
controller = SafetyController(max_capacity=80)
print(f"当前初始载客: {counter.total_on_board} 人\n")
# 模拟早高峰上车过程
for i in range(10):
print(f"\n--- 上车周期 {i+1} ---")
# 模拟一名乘客上车
if sensor.detect_passenger('in'):
counter.passenger_entered()
# 检查安全状态
state = controller.check_capacity(counter.total_on_board)
# 如果是超载状态,停止上车模拟
if state == controller.OVERLOADED:
print("\n系统已锁定,等待乘客下车...")
break
time.sleep(1)
# 模拟几名乘客下车
print("\n--- 模拟到站,乘客下车 ---")
for _ in range(6):
if sensor.detect_passenger('out'):
counter.passenger_exited()
time.sleep(0.5)
# 再次检查状态,应该恢复正常
controller.check_capacity(counter.total_on_board)
print("\n系统监测结束。")
if __name__ == "__main__":
main()
五、 README 文件与使用说明
📂 Project Structure
smart_bus_monitor/
├── main.py # 主控制循环
├── sensor.py # 光电传感器模拟
├── counter.py # 客流计数逻辑
├── safety_controller.py# 安全控制器
└── README.md
🚀 Getting Started
1. 环境要求:
- Python 3.8+
2. 运行方式:
cd smart_bus_monitor
python main.py
3. 运行现象:程序开始时车上有 75 人。随着新乘客“上车”,计数增加。当人数达到 81人 时,系统触发红色警报,提示“请勿上车”,模拟车门锁定。
六、 核心知识点卡片 (Knowledge Cards)
知识点 说明 在本项目中的应用
光电/PIR传感 利用光束遮挡或人体红外辐射检测物体存在。
"sensor.py" 模拟检测乘客通过的事件。
事件计数算法 将物理事件(有人通过)转化为数字累加。
"counter.py" 维护
"IN - OUT" 的净计数。
硬阈值安全锁 一旦超过安全红线,系统进入不可逆的锁定状态。
"safety_controller.py" 中的
"OVERLOADED" 状态。
状态机 (FSM) 管理车辆的运营与锁定状态切换。
"BusState" (NORMAL/OVERLOADED)。
七、 总结 (Summary)
作为全栈工程师,我们在设计涉及公共安全的系统时,必须遵循“Fail-Safe”(失效安全)原则。
在这个公交超载案例中,核心不在于 UI 有多漂亮,而在于逻辑的绝对可靠。即使传感器偶尔漏检(如
"sensor.py" 中的模拟),只要最终人数超限,系统必须能阻断危险。
在实际的车载 ECU(电子控制单元)中,这段代码会运行在实时操作系统(RTOS)上,直接与车门继电器和车载显示屏通信。这就是智能仪器技术在智慧城市交通中的最直接体现:用确定的程序,对抗不确定的人流。
利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!
更多推荐
所有评论(0)