用micopython制作交通灯控制器
使用micopython编写代码实现一个交通灯控制器,仿真马路上的交通灯的工作状态切换,利用板上的红、黄、绿三种颜色的LED显示道路状态的切换,行人按键时,具有优先功能。
标签
嵌入式系统
Micopython
thonny
2023寒假在家练
egg
更新2023-03-29
北京理工大学
422

一、项目介绍

具体要求:仿真马路上的交通灯的工作状态切换,利用板上的红、黄、绿三种颜色的LED显示道路状态的切换,行人按键时,具有优先功能

实现方式:利用板上的3个不同颜色的LED模拟交通灯,程序会轮流切换三个灯的状态,并根据按键的输入(中断或查询机制)调整交通灯的切换

二、环境配置

1、thonny

作为官方推荐的开发软件,thonny页面简洁,基础功能齐全,简单易上手,非常适合初学者。

Thonny 内置了 Python 3.10,安装过程简单;

没有麻烦的变量;

只需按 Ctrl+F5 而不是 F5,就可以逐步运行程序,无需断点。 按 F6 执行大步骤,按 F7 执行小步骤。步骤遵循程序结构,而不仅仅是代码行;

其可以逐步完成表达式的计算,如果使用小步骤,甚至可以看到Python如何计算表达式;

单步执行函数调用将打开一个新窗口,其中包含单独的局部变量表和代码 指针。充分了解函数调用的工作原理对于理解递归尤为重要;

突出显示语法错误,未闭合的引号和括号是初学者最常见的语法错误。Thonny的编辑器使这些很容易被发现;

解释作用域,突出显示出现的变量可以提醒,相同的名称并不总是意味着相同的变量,并有助于发现拼写错误。局部变量在视觉上与全局变量区分开来;

代码完成,可以在代码完成的帮助下探索 API;

2、STEP Pico

STEP Pico是一款低成本,高性能的微控制器开发板,具有灵活数字接口(完全兼容Raspberry Pi Pico)。

硬件上,采用Raspberry Pi官方自主研发的RP2040微控制器芯片,搭载了ARM Cortex MO+双核处理器,高达133MHz的运行频率,内置了264KB SRAM和2MB闪存,还板载有多达26个多功能的GPIO引脚。

软件上,可选择树莓派提供的C/C++SDK,或者使用MicroPython进行开发,且配套有完善的开发资料教程,可方便快速入门开发并嵌入到产品中。

树莓派Pico拓展板板卡硬件包括:

  • 2个按键输入

  • 4个单色LED

  • 12个WS2812B RGB三色灯

  • 1个姿态传感器

  • 1个128*64 OLED显示屏

  • 1个蜂鸣器

  • 1个可调电位计(用于电压表)

  • 1路音频信号输入(用于示波器)

  • 8位R-2R电阻网络构成的DAC(用于DDS信号发生器)

三、设计思路

3.1 实现框图

FhdUEhwh1uNASnuVLfBIBAW46VPo

3.2 实现思路

首先调用ws2812b彩色灯带库,分别编写函数实现绿灯、红灯与黄灯亮起的功能。

 

编写主循环是红绿黄灯交替亮起;

编写中断使k1按键输入时,循环中断转为黄灯亮起。

import time
import ws2812b
from button import button
from board import pin_cfg
from machine import Pin#调用库文件

green = "#00ff00"
red = "#ff0000"
yellow = "#fff00"#红黄绿颜色

def redlight():
    ws2812b.on_all(red)
    time.sleep(5)#红灯亮起五秒
def greenlight():
    ws2812b.on_all(green)
    time.sleep(5)#绿灯亮起5秒
def yellowlight():
    ws2812b.on_all(yellow)
    time.sleep(2)#黄灯亮起2秒

def k1_callback(pin):
    yellowlight()
k1 = button(pin_cfg.k1, k1_callback, trigger=Pin.IRQ_FALLING)#k1按下实现中断,回调函数黄灯亮起

while True:
    redlight()
    greenlight()
    yellowlight()#主循环红绿黄灯循环亮起

由上程序可知首先红灯亮起5秒,接着绿灯亮起5秒,然后黄灯亮起2秒后转为红灯循环。当按下k1按键时,相当于行人等红灯按下按钮,红灯中断转为黄灯延迟后变为绿灯,实现行人优先通行功能。

3.3 结果展示

FjpF_25hLLwalIpcfiCPedh1c0z2

四、遇到的主要难题与解决办法

该项目需求中,实现红绿灯的循环轮转比较简单,主要难题为实现行人按下按钮的优先控制。我这里根据老师课程的学习后选择采用了中断的方式。

队列的输入方式中,所有输入都放到队列中,在我们需要取出时一个个取出,不会实时的处理数据。嵌入式系统中栈比较小,中断可以直接触达反应硬件。

中断服务程序,需要提供callback函数,中断触犯callback函数直接响应。

本项目中设置的callback函数即为黄灯亮起2秒。

五、未来的计划建议

该项目已成功的实现了红绿灯的运转与行人按键控制绿灯优先的功能,达到了预期目标。然后后续还有许多可以拓展和提升的方向:

增加OLED屏幕显示,使红绿灯实时倒计时具象在屏幕上;

增加蜂鸣器控制,使行人按键按下时,红绿灯发出警报示意即将变为绿灯;

增加按键按下后查询功能,使行人按下按键后,如果已经处于绿灯阶段,绿灯时间延长并显示在OLED屏幕上;

增加按键控制,可增减红绿灯轮转时预设的亮起时间,实时控制红绿灯间隔,符合不同时机车流量不同红绿灯时间不同的需求。

六、总结与感想

这是我第一次使用thonny编写程序,体验极好。项目设置难度刚好适合我这种初学者上手,有着完整的学习系统与课程资料。视屏课程老师极其耐性且有趣,60分钟左右的课程内容充实不注水,可以学到许多东西。实操阶段老师手把手从零教学,让我每一步都跟得上,并且有着很好的复习巩固效果。理论阶段老师解释的十分通俗易懂。最后完成整个程序时我具有极大的成就感。在寒假期间我通过平台有了一段难忘的学习经历。

附件下载
traffic_lights.py
团队介绍
北京理工大学-薛博威
团队成员
egg
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号