基于STEP Pico制作交通灯控制器
仿真马路上的交通灯的工作状态切换,利用板上的红、黄、绿三种颜色的LED显示道路状态的切换,行人按键时,具有优先功能设计思路。
标签
嵌入式系统
PICO
2023寒假在家练
交通灯
ximier
更新2023-03-29
414

基于STEP Pico制作交通灯控制器

一 项目介绍:制作一个交通灯控制器

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

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

我在本项目中,还增加了蜂鸣器,当绿灯亮时,蜂鸣器会发出声音。在现实生活中,我们会现代一些交通灯,灯绿灯亮时会发出滴滴滴滴让行人通过的声音。

硬件框图:

FnS7XUNbg2wVwBpLsUifMCWbDecK

硬件设计思路上,通过核心芯片,控制红黄绿三灯的状态,并且设置了按键程序,本硬件有两个按键可供选择,我选择其中一个进行控制,对交通灯进行状态的切换和查询。同时还用到了硬件的蜂鸣器模块。

软件框图:

FsOuo4-GjaW9OaQqk8-okCeC7Bl_

软件编程上主要分两部分,一部分为控制红绿黄三灯亮,以及另一部分为按键程序,在按键程序中,我增加了蜂鸣器的设置。

二、环境配置

1、thonny:

作为官方推荐的开发软件,thonny页面简洁,基础功能齐全,简单易上手,非常适合初学者(比如我)。安装的教程网上比较多,这里推荐一个硬禾的教学视频

#小程序://硬禾学堂/YT31p6qRuM0bNpE

thonny安装可以参考直播课程的学习(本次寒假有两次直播,直播1和直播2,直播1主要介绍了树莓派PICO,thonny如何安装,同时列举了例子,运用程序驱动12个WS2812B RGB三色灯以及播放音乐,直播2结合开发环境和实际要做得项目进行讲解)

thonny软件为硬件上的编程环境界面,在安装中,可以选择安装语言,tonny软件配备了多种语言。

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

硬件为硬核学堂提供,在使用时,需要注意连接线(Type-C数据线)的使用,连接方法和移动U盘类似,连接上后,板子上的指示灯会亮,并且电脑会显示插入新硬件。

三、涉及硬件简单介绍

平台包含:树莓派Pico扩展板,硬禾版本树莓派Pico核心模块 - STEP Pico,Type-C 数据线,1个按键输入、3个单色LED 、1个蜂鸣器。图片为芯片管脚的介绍。芯片管脚在编程应用中至关重要。一开始要对电路模块进行识别,在本项目中,需要用到按键模块,可以选择Key1或者Key2,对应管脚要么分配为12或者13。因为交通灯涉及了红黄绿三个灯,所以我这里用到了管脚20,26,22.LED_B代表蓝灯,并没有用到。注意4个单色LED和12个RGB三色灯的区别,我一开始想用R-2R大灯来实现交通灯,后来我发现思路是错的。同时我还在绿灯亮时用了蜂鸣器,对应BUZZER模块,管脚18。

FiTNF4z21W49w7NpYNtJPalM2Kug

四、实现的功能及图片展示

实现的功能:

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

图片展示:

FgvDMMA36dTUHe6-l-7zMjUA-Bjx

五、主要代码片段及说明

为了添加灯之间的延迟,并能够控制灯的关闭时间,还需要导入utime库:

import utime

与使用Pico的GPIO引脚的任何程序一样,需要先配置每个管脚的属性:

这些代码设置引脚GP26、GP20、GP22作为输出,每个管脚都给了一个描述性的名称,以'led'开始,这样可读性更好,实际的交通灯不会一闪而过就停下来,即便没有交通堵塞,没有人通行,它们也会一直运行着。为了程序做同样的事情,需要建立一个无限循环:

while True:

led_red.value(1)

utime.sleep(5)

这三段话的意思是红色灯亮5s,并且一直循环着。

led_red.value(1)
utime.sleep(30)
led_yellow.value(1)
utime.sleep(5)
led_red.value(0)
led_yellow.value(0)
led_green.value(1)
utime.sleep(15)
led_green.value(0)
led_yellow.value(1)
utime.sleep(5)
led_yellow.value(0)

图片所示为红灯先亮30s,然后黄灯亮5s,之后绿灯亮15s,而后黄灯亮5s

2. 加入行人对灯的控制

真正的红绿灯并不仅仅是用于道路车辆的,也要考虑到行人的通行,让他们也有机会安全地通过繁忙的道路,交通灯控制系统可以根据行人的按键来决定交通灯的状态变化。

button=machine.Pin(12,machine.Pin.IN,machine.Pin.PULL_UP)

buzzer = machine.Pin(19, machine.Pin.OUT)

程序需要能够记录按钮是否按下时不会干扰交通灯。要实现此功能,需要一个新的库: thread。回到程序中导入machine和utime库的部分,并导入thread库

import _thread

虽然可以在红绿灯周期的任何时候按路口的按键,但它只在绿灯亮起、我们可以安全过马路时才生效。新线程需要做的就是在按键被按下时更改变量,当行人安全地过马路时,主线程会将其重置为False。

thread库启动前面定义的线程语句为:

_thread.start_new_thread(button_reader_thread, ())

线程将开始运行并快速进入它的循环, 每秒检查按键数千次,看看它是否被按下。与此同时,主线程将继续执行程序的主要部分。

主要两段程序:

global button_pressed
button_pressed=False

def button_reader_thread(): 
     global button_pressed 
     while True:
        if button.value() == 0: 
            button_pressed = True
        utime.sleep(0.01)       

_thread.start_new_thread(button_reader_thread, ())
while True:
    if button_pressed == True: 
        led_green.value(1)
        for i in range(10):
            buzzer.value(1) 
            utime.sleep(0.2) 
            buzzer.value(0) 
            utime.sleep(0.2)
        global button_pressed 
        button_pressed = False
    led_red.value(1) 
    utime.sleep(30) 
    led_yellow.value(1) 
    utime.sleep(5) 
    led_red.value(0) 
    led_yellow.value(0) 
    led_green.value(1)
    utime.sleep(15) 
    led_green.value(0) 
    led_yellow.value(1) 
    utime.sleep(5) 
    led_yellow.value(0)

完整的程序详见软件中的traffic.py

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

1.我在tonny软件版本下载得比较慢。

2.在直播学习过程中,理论和实际还有些差异。 比如我发现自己开始的时候,电路板并没有链接上tonny软件,然后请教了工作人员后边试了得到解决。

3.本次实验可以选择的项目众多,比如有反应测试器、音乐播放器、音乐播放器总共7个项目。

我本来想做反应测试器或者播放声音。但是交通灯的参考资料比较直接容易。我根据直播学习找了网上程序很多,本来想改写,但是并没有成功,一开始熟悉硬件电路还是非常重要。我误以为12个三色灯中的三个充当交通灯。

4.在编程过程中,我出现了报错问题。不断修改,最终调试成功。比如标点符号都需要注意,以及我在程序编译成功的情况下,灯仍然不能亮。经过群友(本次寒假硬件学习,硬禾学堂还配备了学习者的交流群),是引脚分配出了问题,并且我查找资料,最终调试得当(如果有学友遇到灯不亮,大部分是没有分配对,我开始以为是开发板坏了)。

七、未来的计划

开发版虽然小但是功能丰富。未来如果用得到,我还会继续学习这个板子的功能。传感器模块等等调用起来。我还可以用这个板子制作简单的电压表。当然,学习MicroPython语言才是操控的关键。接下来,我会多练习MicroPython的编程案例,课程有配套的15节MicroPython案例还需要自己多学习。通过课程学习,更熟悉语句语法规则,从而能够灵活地让板卡实现功能。

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