基于STEP Pico的嵌入式系统制作一个交通信号灯
本次项目利用STEP Pico及micropython完成了一个功能简单的交通灯
标签
嵌入式系统
显示
MicroPython
2023寒假在家练
电子森林_111
更新2023-03-29
北京理工大学
424

一、项目需求

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

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

二、设计思路

·利用简单的控制首先进行对灯的颜色控制.

·利用持续时间函数让红绿黄进行交替以模拟现实交通灯的交替.

·用之前设置好的交通灯合理设置时间,模拟没有行人情形下交通灯的亮起状况.

·在程序中添加中断,使得交通灯能够进行对有行人想要通过时情形的模拟.

·设置中断,让行人按下按键时交通灯发生变化,提醒过往车辆减速至停止,以达到完整的到交通灯模拟.

三、实现过程

FvJbKnn2rWWJkT8qHXQfqbq72w8M

1.将程序主要部分设置成没有行人通过情况下,交通灯的工作状态。此时让交通灯以红、绿、黄的顺序按照规定持续时间进行工作。只要保证时间比例合理即可。此时交通灯持续亮起,状态如下:

FnZSLpBuApVqgwX5EkjS_-LX2B0V

红灯持续亮起,持续6秒;随后将会亮起绿灯:

FsLU570lCsEdgU3A782WHeW0udET

绿灯过后亮起黄灯,黄灯持续时间一般较短,仅仅提示车辆马上进入红灯请减速:

Fqfclw1D4G1kWyCMfDMkIIfv7hjI

以上为程序主要功能部分,能够大致模拟没有行人按下按键的情况下交通灯的状态。

随后设置一个中断,模拟有行人想要通过时的工作状态,这里对k1进行设置。在按下按键时将执行中断,上升沿改变,此时交通灯会变为黄灯,以达到提醒车辆减速的作用。

以上完成了两种情况下交通灯的工作状况,与现在大多数交通灯功能基本一致。

四、实现功能

在无行人按下按钮时,LED灯全部保持亮起,并且按照红灯6秒、绿灯6秒然后黄灯2秒的规律往复亮起,模拟路上车所看到的交通灯。

当行人在交通灯为绿色想要通过时按下按钮,交通灯将会变成黄色,提醒过往车辆减速,之后继续进行然后变红,进入下一个红绿黄的循环。

五、主要代码

import ws2812b
import time
from button import button
from board import pin_cfg

from machine import Pin

def red_light():
    ws2812b.on_all("#ff0000")
    
def green_light():
    ws2812b.on_all("#00ff00")
    
def yellow_light():
    ws2812b.on_all("#ffff00")

def k1_callback(pin):
    yellow_light()
    
k1=button(pin_cfg.k1,k1_callback,trigger=Pin.IRQ_FALLING)

while True:
    red_light()
    time.sleep(6)
    green_light()
    time.sleep(6)
    yellow_light()
    time.sleep(2)

程序首先要进行对接下来要使用函数的引用,其次进行没有行人情况下的主程序编写。

对红绿黄灯的亮起进行函数定义,即上述代码的前三个def函数,然后再while True部分依次按照顺序使灯亮起。并设置好持续时间。该部分完成没有行人按下按键时交通灯大部工作状态的模拟。

代码主要部分为对k1进行的中断设置。此处依照中断的格式,在k1被按下时,此时中断主程序部分,执行亮起黄灯的函数,目的为了提醒车辆减速行驶,执行之后继续执行主程序后续部分,即恢复主程序的循环执行。该段代码添加了一个模拟行人按下按键时的情况,使得交通灯功能更加丰富。

六、遇到的主要难题及解决办法

在开始设计时仅仅能够对单个led灯进行控制,或者使用循环使灯依次亮起,无法达到同时全部亮起的效果,后面调整了语句达到了目的。

由于对python及嵌入式语句的不熟悉,使得有些功能实现起来不方便。一开始将红绿黄灯持续时间设置成变量r、g、y,在k1按下时调整三者,不过这样会产生一些问题,变量改变之后如何在下一个循环回调,其次没有利用中断以达到控制交通灯的效果。即最大的困难是模拟行人按下按键后的灯颜色变化。后面舍弃了if语句,在中断中使用if语句不够熟练无法加判断,于是在按下k1时就让灯变成黄色告知车辆减速。开始时发现可以利用时间函数以达到模拟交通灯的简单闪烁,不过同样因为添加中断会使得闪烁调制比较困难便没加闪烁。

对于嵌入式接触较浅,开始学习时比较难搞懂原理,只能跟着视频打代码并且模仿。不过随着后面的学习渐渐能够搞懂一些原理,也学会了一些方式方法。在学习过程中有些方向不是很快能理解,需要不断去揣摩才能搞懂。

在复杂情况下的交通灯比较难以实现,在行人按下按键时如何合理规划各种颜色灯的时间以及如何实现出来比较困难,后续实现简单功能模拟一般情况下的交通灯也能达到实验目的。

七、未来的计划或建议

本次学习了解了对于嵌入式学习或者说对于学习知识可以先规划一个流程图,大致制定好学习路线能够使得后续学习更有目的性,快速掌握想要学习的内容。同时对于学习编程时,可以按照老师所说的先实现、再优化的路线进行,开始时因为想要实现功能较为复杂的程序,所需的知识比较多,导致学起来很难顾上两头,因此开始时先进行简单功能实现,随着学习深入在优化是一种很好的方案。

随着学习推进,可以尝试优化要求简单的功能加深学习,也可以去尝试实现一些要求比较复杂的任务。

嵌入式总体来说是一门需要基础学习的科目,因此对于模电、数电以及对信号处理相关知识需要加强学习,同时学习嵌入式也让我锻炼了很不错的思维能力以及动手能力,在今后的学习中两者的相辅相成能够让我更快地上手相关知识。

本项目对于可以优化的地方比较多,实现起来需要更深一步的学习。同时对于硬件来说也可以实现很多功能,本次用其实现了交通灯控制,可以看出使用了其功能的一部分。同时在学习课程中也学习了其他项目的一些内容,选择了贴近生活的交通灯实现,体现了嵌入式的强大。在一开始的学习过程中,比较心急,想要快速掌握内容,不过随着学习的进行,发现了有关知识的有趣之处,开始想要理解其中的原理,想要学习更多的相关知识达到更复杂的功能。不过还是得扎扎实实从基础学起,开始时不按照顺序进行学习导致浪费了比较多的时间,提前学习了后面的知识到头来还是得补上基础知识才能继续进行学习。

总的来说本次项目的学习不仅仅体现在专业知识上的长进,更重要的是我了解了学习嵌入式的一个基本模式,也了解了其中的乐趣,相信在未来的有关学习中我能掌握更多的知识完成更多的项目。

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