基于STEP Pico的嵌入式系统制作交通灯控制器
基于树莓派STEP Pico的嵌入式系统通过micropython编译实现交通信号灯控制器
标签
嵌入式系统
显示
2023寒假在家练
Kratos
更新2023-03-29
北京理工大学
368

一:环境配置

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

2.硬禾学堂树莓派pico平台:

硬禾学堂为“寒假在家练”活动制作了一个平台,上面提供了关于板卡的硬件信息,具体可参考https://www.eetree.cn/project/detail/584.

3.MicroPython:

MicroPython 是 Python 3 语言的精简实现 ,包括Python标准库的一小部分,经过优化可在微控制器和受限环境中运行。pyboard是官方提供的运行MicroPython的电子电路板,它可以运行MicroPython。我们使用的板卡也是可以运行MicroPython的。

 

二:项目需求

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

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

 

三:板卡介绍

FrG87u5HYkCkFFuuGDeuyTb9JCCt

【基于树莓派Pico的嵌入式系统学习平台】专为嵌入式系统学习而设计,其可以通过C/C++以及MicroPython编程来学习嵌入式系统的工作原理和应用。平台包含了一块树莓派Pico扩展板、一块硬禾版本树莓派Pico核心模块以及一根STEP Pico x1Type-C数据线。

扩展版上有按时钟排列的12个LED灯,两边各有一个通用按钮可以通过软件编译功能。核心模块上有type-C接口可以和电脑连接进行编译和存储功能。以上是该项目中所需要用到的,除此之外还有中间的一块128*64OLED显示屏,其下方还有4个LED灯以及一个蜂鸣器。

 

四:实现思路

通过12个时钟排列LED灯来实现交通灯红黄绿三种颜色的有序转换,并通过时延来设定灯常亮的时间长短,最后通过给左右两个通用按键K1和K2编写代码,延长红灯时间或其他颜色灯到红灯的转换来实现行人按键的优先功能以及结束功能。

Flp-G0RxomBXRRsr-Rpw6BGyjkRN

五:具体实现

from button import k1,k2
import time
import ws2812b
#调用库

red = "#ff0000"
yellow = "#ffff00"
green = "#00ff00"
#查询库ws2812b找到的关于红黄绿三种颜色的代码并赋值到三个变量中

def shutdown():
    ws2812b.off_all()
    time.sleep(120)
#关灯2分钟
        
def light():
    if k2.value() == True:
        shutdown()
    ws2812b.on_all(a)
    delay()
#定义函数light,用以开灯并施加时延

def delay():
    if a == yellow:
        time.sleep(2)
    else:
        time.sleep(5)
#定义函数delay,控制不同时延时间来控制灯常亮时间

while True:
    if k1.value() == True:
        a = red
        light()
#给通用按钮K1赋予按下延长红灯的功能
    a = red
    light()
    if k1.value() == True:
        a = red
        light()
    a = yellow
    light()
    if k1.value() == True:
        a = red
        light()
    a = green
    light()
    a = yellow
    light()
    #依照红黄绿黄的顺序进行循环,并在除了绿灯之外的每次灯颜色切换前设置判断语句来实现是否有行人按灯延长红灯的效果

 

通过thonny平台来编写micropython代码,之前下载了板卡官方平台的库文件并导入到板卡中。首先调用button并输入K1和K2,另外调用time中的time.sleep语句来实现时延功能,从而使我们能够控制LED灯在不同颜色灯光下的常亮时间,最后调用ws2812b库使我们能够实现对LED灯及其颜色、数量、灯光方式的控制。

通过给参数赋值三种颜色LED灯的代码来控制灯的颜色,然后通过循环语句来实现红绿灯的协调转换。之后给K1加入判断语句来实现红灯的延长以及黄绿灯到红灯的转换,这样就实现了行人按键后交通灯变红来优先通行的功能。最后给K2加入判断语句来实现整个信号灯的暂时关闭。

FgEObLj7qOP7O2Zx28-MsRlmRuUXFjbl9_bAtkp51qP-Pw3c-yO8ltZBFvQvtZwSdlpM-e3bW3KmFaCecqdI

六:遇到的主要难题和解决方法

1.主要难题:

对micropython语言的不熟悉使得整个编程过程变得尤为困难,想实现一些东西的时候往往不知道从何下手,在程序编写完成后运行时总是出错,缺少一些库和类的调用使得整个代码语句不合法。

2.解决办法:

通过平台配套的老师的直播课程有效地学习了很多解决的方法,也成功的按照指导下载了库函数并导入到板卡上使得代码运行成功。也在直播课当中学到了很多关于micropython的编程知识、语句和方法,也更多的在老师的介绍下了解了板卡的硬件功能,观看了很多演示,更重要的是学到了一些关于软件工程师处理问题的思路。

 

七:未来的计划和建议

不过是软件还是硬件,都是一门需要庞大知识量的工程,需要长期的使用练习来熟悉操作和扩展知识。这次的寒假在家练活动非常的具有创造性、前瞻性也非常的新手友好、非常的良心,带着我一个本对此一窍不通的学生从零开始,用了比较短的时间完成了对MicroPython的入门和对Pico板卡的初步理解。但是归根到底也只是入门,我们也都是站在各位软件工程师、老师以及便捷的平台等这些巨人的肩上才能完成选择的项目,要想扩展知识面,只有这些课是完全不够用的,更重要的是通过自己规划更多的时间去学习、理解并加以实践,才能够应用得得心应手,把这个工具真正变成属于自己的技能。

 

附件下载
traffic-lights.py
主程序
button.py
按钮库
ws2812b.py
LED灯库
团队介绍
冯健豪/北京理工大学
团队成员
冯健豪
北京理工大学信息电子学院
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号