跳至主要內容

车闸系统

大约 2 分钟约 719 字

车闸系统

适用教材浙教版《义务教育教科书 信息科技》
资源名称车闸系统
使用产品信息科技(浙教版教具资源包)
课程参考五年级下册 第37页
  搭建动画
  搭建动画

   本次实验采用信息科技实验板,配备了舵机和按键模块,实现车闸控制与扣费功能。当按下按键时,舵机会旋转90度,打开车闸。车闸打开后,系统会等待3秒,让车辆通过,然后自动关闭车闸。同时,液晶屏会更新车位的信息。当车辆进入时,液晶屏会显示车位状态和入场时间;当车辆离开时,液晶屏会显示停车时间和收费金额。

from npython import *  # 导入npython模块

# 定义车闸舵机的角度
CLOSED_ANGLE = 35   # 车闸关闭时的角度
OPEN_ANGLE = 120    # 车闸打开时的角度

# 车闸状态
is_brake_active = False

class Parking:
    def __init__(self):
        # 是否有车在停车
        self.status = False
        # 车进入时间
        self.enter_time = None
        # 车离开时间
        self.leave_time = None
        # 车位费用
        self.fee = 0.1

    # 有车进入
    def enter(self):
        self.status = True
        self.enter_time = time.ticks_ms()
 # 有车离开
    def leave(self):
        self.status = False
        self.leave_time = time.ticks_ms()
        
        # 计算停车时间变量
        parking_time = (self.leave_time - self.enter_time) / 1000.0
        # 计算费用
        fee = parking_time * self.fee

        oled.print(1, 3, "停车时间: {:.2f}s".format(parking_time), 1)
        oled.print(1, 4, "收费: {:.2f}元".format(fee), 1)

        self.enter_time = None
        self.leave_time = None

    # 显示停车信息
    def display_info(self):
        if self.status:
            oled.print(1, 3, "车位:有车", 1)
            oled.print(1, 4, "入场时间:{:.2f}s".format(self.enter_time / 1000), 1)
        else:
            oled.print(1, 3, "车位:空闲", 1)          
            oled.print(1, 4, "入场时间:", 1)
        oled.print(1, 5, "价格:0.1元/s", 1)
# 创建车位实例
park1 = Parking()
oled.print(3, 1, "车闸控制系统", 1)
oled.print(1, 2, "车闸关闭", 1)
while True:
    # 读取车闸状态
    if pin0.read_digital() == 1:
        time.sleep_ms(30)  # 延时以防止抖动
        
        if pin0.read_digital() == 1:
            # 等待按键释放
            while pin0.read_digital() == 1:
                pass
                
                if park1.status:  # 判断是车进入还是离开
                    park1.leave()
                else:
                    park1.enter()

                servos.write_angle(1, OPEN_ANGLE)  # 打开车闸
                is_brake_active = True
                oled.print(1, 2, "车闸打开", 1)
                
                time.sleep(5)  # 延时3秒,等待车辆离开
                # 关闭车闸
                servos.write_angle(1, CLOSED_ANGLE)
                is_brake_active = False
                oled.print(1, 2, "车闸关闭", 1)
    # 显示车位信息
    park1.display_info()

上次编辑于: