基于STEP Pico的嵌入式系统学习平台制作制作一个交通灯控制器
仿真马路上的交通灯的工作状态切换,利用板上的红、黄、绿三种颜色的LED显示道路状态的切换,行人按键时,具有优先功能。
标签
嵌入式系统
2023寒假在家练
wang
更新2023-03-29
北京理工大学
397

项目2-制作一个交通灯控制器总结报告

1. 项目描述

1.1 项目介绍

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

1.2 设计思路

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

首先,需要另板卡上的12个WS2812B RGB三色灯依次呈现红、黄、绿、黄的颜色,来模拟实际生活中的交通灯。这里有两个注意点:

  1. 由于这是实验制作,对于红灯、黄灯、绿灯的时间要求并不完全与实际情况匹配。在本项目中,红灯亮起时间为5s,黄灯亮起时间为2s,绿灯亮起时间为5s。
  2. 需要做到12个三色灯同时亮起同其某种颜色

然后,在完成基本的红黄绿灯的状态循环切换的基础上,加入查询机制。当按下按键K1时,会在下一次红黄绿灯的循环时,延长红灯的亮起时间,并且发出蜂鸣器的警报声。

1.3 交通灯流程框图

8AAAAASUVORK5CYII=

图1 交通灯流程框图

2. 硬件介绍

2.1 基本介绍

使用的板卡为为【基于树莓派Pico的嵌入式系统学习平台】,专门为嵌入式系统学习而设计,其可以通过C/C++以及MicroPython编程来学习嵌入式系统的工作原理和应用,无需任何编程基础,也能成为点灯大师。通过树莓派Pico的嵌入式系统学习平台可以了解电子系统构成、学会一门与硬件直接相关的编程语言,自己动手完成有趣的项目,激发对电子的兴趣,培养自信心和开源资源的利用和分享意识,培养项目总结和展示的能力。

核心板为STEP PICO,它是具有灵活数字接口的低成本,高性能的微控制器开发板,完全兼容Raspberry Pi Pico,增设了4个WS2812彩色灯,增设了一个复位按键,将Micro USB接口修改成了Type-C接口。硬件上,采用树莓派官方自主研发的RP2040微控制器芯片,搭载了双核Arm Cortex M0+处理器,运行速度高达133MHz,内置了264KB SRAM和2MB板载闪存,还板载有多达26个多功能的GPIO引脚。对于软件开发,可以使用树莓派提供的C/C++SDk,或者使用MicroPython进行开发,并配套有完善的开发资料教程。可方便快速入门开发并嵌入产品中。

2.2 树莓派Pico扩展板

树莓派Pico扩展板具有以下模块:

2个按键输入;

4个单色LED;

12个WS2812B RGB三色灯;

1个姿态传感器;

1个128*64 OLED显示屏;

1个蜂鸣器;

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

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

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

板卡图如下所示:

9k=

图2 板卡图

功能及管脚映射如下图所示:

A7wokWEYhmEYhmEYhmF6CItrhmEYhmEYhmEYhukhLK4ZhmEYhmEYhmEYpoewuGYYhmEYhmEYhmGYHsLimmEYhmEYhmEYhmF6CItrhmEYhmEYhmEYhukhLK4ZhmEYhmEYhmEYpoewuGYYhmEYhmEYhmGYHsLimmEYhmEYhmEYhmF6CItrhmEYhmEYhmEYhukhLK4ZhmEYhmEYhmEYpoewuGYYhmEYhmEYhmGYHsLimmEYhmEYhmEYhmF6CItrhmEYhmEYhmEYhukhLK4ZhmEYhmEYhmEYpoewuGYYhmEYhmEYhmGYHsLimmEYhmEYhmEYhmF6CItrhmEYhmEYhmEYhukhLK4ZhmEYhmEYhmEYpoewuGYYhmEYhmEYhmGYHsLimmEYhmEYhmEYhmF6CItrhmEYhmEYhmEYhukhLK4ZhmEYhmEYhmEYpoewuGYYhmEYhmEYhmGYHsLimmEYhmEYhmEYhmF6CItrhmEYhmEYhmEYhukhLK4ZhmEYhmEYhmEYpoewuGYYhmEYhmEYhmGYHsLimmEYhmEYhmEYhmF6CItrhmEYhmEYhmEYhukhLK4ZhmEYhmEYhmEYpoewuGYYhmEYhmEYhmGYHsLimmEYhmEYhmEYhmF6CItrhmEYhmEYhmEYhukhLK4ZhmEYhmEYhmEYpoewuGYYhmEYhmEYhmGYHsLimmEYhmEYhmEYhmF6CItrhmEYhmEYhmEYhukRwP8D6eqINHDNuF8AAAAASUVORK5CYII=

图3 功能及管脚映射

3. 实现功能展示

下面展示交通灯控制器的功能,具体展示可见视频,这里仅展示图片效果

2Q==9k=

9k=9k=

图4 功能展示

如上图所示,12个RGB_LED灯在红→黄→绿→黄→红→黄→绿→黄→…的循环中交替出现,其中红灯亮五秒,黄灯亮2s,绿灯亮5s。当按下按键时,将在下个循环开始时亮起红灯,并发出蜂鸣声(具体效果见展示的视频)。

2Q==

图5 红灯亮起并发出蜂鸣

4. 主要代码片段说明

主要的代码有两部分功能。

4.1 红黄绿灯交替:

    red_light()
    time.sleep(5)
    yellow_light()
    time.sleep(2)
    green_light()
    time.sleep(5)
    yellow_light()
    time.sleep(2)

这部分代码的效果是实现红、黄、绿灯的交替出现,红灯亮5s,黄灯亮2s,绿灯亮5s,黄灯亮2s,然后下一个循环重复这个过程。

4.2 按键查询:

if k1.value()==True:
        red_light()
        print('+5 start')
        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)
        print('+5 end')
        pwm.deinit()

这部分代码的功能是加入查询机制。当按下按键K1时,会在下一次红黄绿灯的循环时,延长红灯的亮起时间,并且发出蜂鸣器的警报声。

5. 遇到的主要难题及解决方法

问题:

在项目制作过程中发现12个RGB_LED灯依次亮起,没有做到同时点亮。

解决办法:

改进代码,实现异步处理。

原先的代码为:

#红灯亮

def red_light():
      for i in range(1, 13):
           ws2812b.on(i, "#ff0000")

在这个循环中,红灯是依次亮的。

为了实现12个LED灯同时亮红灯,将上述代码做如下改进:

def red_light():
    ws2812b.on_all('#ff0000')

改进后实现了红灯的同时亮起,黄灯和绿灯的处理也相同:

def yellow_light():
    ws2812b.on_all('#ffff00')
def green_light():
    ws2812b.on_all('#00ff00')

6. 未来的计划

这是第一次参与硬禾学堂的【基于树莓派Pico的嵌入式系统学习平台】进行项目制作,难度合适,很适合我。而且学习的过程很有趣,一点也不枯燥乏味,激发了我对电子的兴趣,对嵌入式设计开发的兴趣。由于时间关系,这次只完成了 制作一个交通灯控制器的项目,别的更多的有趣的项目我还没有体验。以后有时间我将会继续学习基于树莓派Pico的嵌入式系统学习平台的相关内容,进行更加复杂而有趣的项目设计。

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