基于STEP Pico制作一个交通灯控制器
仿真马路上的交通灯的工作状态切换,利用板上的红、黄、绿三种颜色的LED显示道路状态的切换,行人按键时,具有优先功能 利用板上的3个不同颜色的LED模拟交通灯,程序会轮流切换三个灯的状态,并根据按键的输入(中断或查询机制)调整交通灯的切换
标签
嵌入式系统
显示
2022寒假在家练
STEP Pico
ygxdxlp
更新2023-03-30
北京理工大学
321

项目描述:

制作一个交通灯控制器。

具体要求:

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

实现方式:

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

设计思路:

正常情况下主程序执行红、黄、绿三色交通信号灯之间的转换工作,当有行人需要通行,或者需要停机检修时,利用树莓派Pico扩展板上的k1、k2按键进行模拟,根据按键的输入(中断或查询机制)调整交通灯的切换。

简单的硬件介绍:

STEP Pico是一款低成本,高性能的微控制器开发板,具有灵活数字接口(完全兼容Raspberry Pi Pico)。硬件上,采用Raspberry Pi官方自主研发的RP2040微控制器芯片,搭载了ARM Cortex MO+双核处理器,高达133MHz的运行频率,内置了264KB SRAM和2MB闪存,还板载有多达26个多功能的GPIO引脚。Raspberry Pi Pico是具有灵活数字接口的低成本,高性能微控制器板。它集成了Raspberry Pi自己的RP2040微控制器芯片,运行速度高达133 MHz的双核Arm Cortex M0 +处理器,嵌入式264KB SRAM和2MB板载闪存以及26个多功能GPIO引脚。树莓派Pico/RP2040的基本特性板上通过MicroUSB供电,能过够给扩展板提供3.3V的直流电压26根IO用于扩展,支持SPI、I2C、PWM、PIO板上一颗单色LED可用于基本的测试40Pin 邮票孔、双列直插孔的方式连接扩展板、面包板

对于软件开发上,可选择树莓派提供的C/C++SDK,或者使用MicroPython进行开发,且配套有完善的开发资料教程,可方便快速入门开发并嵌入到产品中。在 RASPBERRY PI PICO 开发板 基础测试[1] 给出了对PI Pico开发板的基本设置,通过 安装Thonny开发环境[2] 可以方便对Pi Pico进行初步的开发。

树莓派Pico扩展板板卡包含的硬件有:2个按键输入、4个单色LED、12个WS2812B RGB三色灯、1个姿态传感器、1个128*64 OLED显示屏、1个蜂鸣器、1个可调电位计(用于电压表)、1路音频信号输入(用于示波器)、8位R-2R电阻网络构成的DAC(用于DDS信号发生器)。双核 Arm Cortex-M0 + @ 133MHz、2 个 UART、2 个 SPI 控制器和 2 个 I2C 控制器、芯片内置 264KB SRAM 和 2MB 的板载闪存、16 个 PWM 通道、通过专用、QSPI 总线支持最高 16MB 的片外闪存、USB 1.1 主机和设备支持、DMA 控制器、8 个树莓派可编程 I/O(PIO)状态机,用于自定义外围设备支持、30 个 GPIO 引脚,其中 4 个可用作模拟输入、支持 UF2 的 USB 大容量存储启动模式,用于拖放式编程

实现的功能:

正常情况下主程序执行红、黄、绿三色交通信号灯之间的转换工作,当有行人需要通行,或者需要停机检修时,可以延长红灯时间或关灯显示正在检修。

设计思路框图以及流程图:

Fksj08c_R4iomt3_HzW3iuM4M66c

程序开始—判断是否有按键输入—否—红灯亮起—绿灯亮起—黄灯闪烁—红灯亮起

                                                   —是—显示行人通过—红灯亮起—回到判断1

                                                   —是—显示等待检修—所有灯全灭

效果图片展示:

C:\Users\LONOR\AppData\Local\Temp\WeChat Files\930e174fe57b1d110e200ed24c6f588.jpg

亮红灯

C:\Users\LONOR\AppData\Local\Temp\WeChat Files\ea716b1ca90e2e101d7d8f6b0411658.jpg

亮绿灯

C:\Users\LONOR\AppData\Local\Temp\WeChat Files\5bacbe43c99ebf5d41e30d9188c5929.jpg

亮黄灯

C:\Users\LONOR\AppData\Local\Temp\WeChat Files\9606d79c1c9aaa30eab7e9dcfc0185f.jpg

行人通过

C:\Users\LONOR\AppData\Local\Temp\WeChat Files\ec591c357edc224bc584da4088f6076.jpg

等待检修

主要代码片段及说明:

from board import pin_cfg
from button import button
from led import r, g, b, y
from machine import PWM, Pin
from oled import oled
import time
import ws2812b
//导入所需函数和文件

i=0

//定义一个全局变量,之后用来判断工作状态

def red_light( ):
      ws2812b.on_all("#FF0000")
//亮红灯
def yellow_light():
      ws2812b.on_all("#FFFF00")
//亮黄灯
def green_light():
      ws2812b.on_all("#00FF00")
//亮绿灯
pwm = PWM(Pin(pin_cfg.buzzer))

def pitch(frequency, duration=0):
      pwm.freq(frequency)
      pwm.duty_u16(3000)
      time.sleep_ms(duration)
//脉冲调制

def k1_on(pin):
    global i
    i = 1
    oled.text ("passers-by", 0, 10)
    oled.show( )
    //按键1,行人通过
def k2_on(pin):
    global i
    i = 2
    oled.text ("stop for check", 0, 10)
    oled.show( )
    //按键2等待检修
k2 = button(pin_cfg.k2, k2_on, trigger=Pin.IRQ_FALLING)

k1 = button(pin_cfg.k1, k1_on, trigger=Pin.IRQ_FALLING)

while True:
//主程序,按照现实中交通信号灯的工作规律,设计的无限循环函数
    if i==0:
        red_light( )
        time.sleep(5)
        green_light()
        time.sleep(5)
        for j in range(2.5) :
           ws2812b.on_all("#FFFF00")
           time.sleep(0.5)
           ws2812b.off_all()
           time.sleep(0.5)
        //红绿灯正常工作
    else:
        if i==1:
          red_light()
          oled.text("passing time", 0, 20)
          oled.show( )
          for i in range(10):
             for freq in range(880, 1760, 16):
               pitch(freq, 6)
             for freq in range(1760, 880, -16):
               pitch(freq, 6)
          oled.text("time up", 0, 30)
          time.sleep(1)
          oled.fill(0)
          oled.show( )
          pwm.deinit( )
          i=0
//有行人通过,延长红灯时间并发出蜂鸣提醒
        else:
          ws2812b.off_all()
//关闭所有信号灯,等待检修

 

遇到的主要难题:

1.在本次实验之前从来没有使用过树莓派pico等相关的芯片板子,也没有接触使用过micro python等相关语言,不知道如何上手。

2.部分可借鉴的开源程序代码语句不理解,不会熟练使用或使用有错误。

解决的方法:

1.认真观看学习课程视频的内容讲解,跟着老师细致的教学一步步地做,有不懂的地方主动请教老师同学。

2.上csdn等可学习平台寻找相关讲解教学,自己编写小型的测试性程序命令,多次尝试修改测试自己的理解猜测。

心得体会:

本次电子森林的嵌入式平台编程实验,我选择的实验内容是制作一个交通灯控制器,是基于树莓派Pico的嵌入式系统学习平台实现的,使用的是Micro Python语言来编程。通过这次实验,我对于嵌入式系统的内容有了更加深刻的理解与掌握,并成功地使用micro python语言编译thonny,操作树莓派Pico平台产生相应的效果,从而对嵌入式系统的相关知识有了更加直观的了解,对于micro python语言也有了更加深刻的体会。本次实验的要求是制作一个交通灯控制器,虽然经历了不少的困难与挫折,但在经过老师视频课程深刻细致的讲解,同学们热心主动的帮助和自己的思考与尝试后,终于成功地完成了实验,实现了对马路上的交通灯的工作状态切换,利用板上的红、黄、绿三种颜色的LED显示道路状态的切换,行人按键时,具有优先级别等功能的仿真,成功制作了一个交通灯控制器。

未来的计划或建议:

在设计上稍微调整一下,红灯亮后是先黄灯闪1秒,再绿灯亮,再黄灯闪1秒,这个循环逻辑,从而与现实生活中的实际情况一致,其他都还可以,加一次黄灯,且把黄灯的时长减少,突出红灯、绿灯。优化执行逻辑,使得对特殊情况的模拟反应更为迅速。连接接入扩展板,增添额外的功能。

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