基于STEP Pico开发板实现的节日彩灯
本项目主要验证了STEP Pico 核心板+外设板的功能,完成了节日彩灯项目.
标签
嵌入式系统
接口
2023寒假在家练
George
更新2023-03-29
562

基于Step PICO 的节日彩灯项目介绍

1 项目介绍

我选择的这个项目是使用Step Pico 开发版和底板来完成的,主要完成了一个基于microPython程序的节日彩灯。视频中可以看到实际的彩灯+蜂鸣器的演示效果。这里放一副最终成品图片吧!

Fk4446EjC5xIwe6jAbNA6Iv8c0AK

图1 项目演示图

2 项目实现的思路

之前我用过一些别的开发版,也用过microPython编过一些别的项目,觉得microPython对于我们年龄小一些的爱好者是比较容易上手的。那么首先说一下我的这个项目的思路吧:

2.1 我看到开发板上面有十二个WS2812彩灯, 这个彩灯我在之前的项目中用过的。它使用一根信号线就可以驱动。而且在microPython中可以很方便的使用neopixel库来操作。所以我先选定这个作为彩灯的显示。

2.2 题目要求使用蜂鸣器发出一定的音乐。这里我想到了使用PWM,产生不同频率的波形去驱动蜂鸣器。

2.3 接下来就是从网站上的图纸资料内,找到需要驱动的彩灯GPIO管脚,和蜂鸣器的GPIO管脚,找到对应关系。 以方便在程序内使用对应的驱动去操作他们

2.4 然后就是编制程序,完成彩灯的显示,和蜂鸣器的演奏。编制程序的时候,我使用了模块的思路,先逐步验证每个模块的单独的功能。再将他们合并为一个整合的程序。

3,硬件平台介绍

有了上面的思路,我们首先介绍下本次使用到的硬件吧!

核心板部分,是Step Pico 核心板,他使用了 RP2040芯片,具备133Mhz的运算速度,26个GPIO。也支持使用microPython 进行编程。功能很多,性能很强!

扩展板部分,硬禾团队也设计了很强大的外设

按键、单色LED、12个WS2812彩灯、蜂鸣器、姿态传感器,OLED等等很多可以方便使用的外设。

3.1 项目中用到的GPIO

这里我着重介绍一下我本次用到的 彩灯和蜂鸣器对应的GPIO

FtNFCG4FtAc_ZGxU_xeMQm-V69Xl

图2,使用到的GPIO

这里我们可以看到WS2812彩灯使用的GPIO 18,蜂鸣器使用的GPIO 19,按键使用GPIO12。这里我们记录下来这几个GPIO编号,以方便后面使用。

4,软件程序设计

程序方面,我先编制了WS2812和蜂鸣器单独的测试程序,验证了两个外设是否可以正常工作。

4.1 程序模块-彩色LED测试

首先介绍下WS2812 彩色LED的测试程序吧。

import neopixel
import time
from machine import Pin


P18 = Pin(18, Pin.OUT)
rgbled = neopixel.NeoPixel(P18, 12)

def LED(num,color):
    rgbled[num] = color
    rgbled.write()
    time.sleep_ms(100)
    rgbled[num] = (0, 0, 0)
    return

while 1:
    LED(0,(5,0,0))
    LED(1,(5,3,0))
    LED(2,(5,2,0))
    LED(3,(0,5,0))
    LED(4,(0,0,5))
    LED(5,(5,0,5))
    LED(6,(5,0,0))
    LED(7,(5,3,0))
    LED(8,(5,2,0))
    LED(9,(0,5,0))
    LED(10,(0,0,5))
    LED(11,(5,0,5))

首先导入了neopixel库,使用它可以很方便的去操作WS2812彩色LED.

然后导入time库,他可以完成延时等基本的动作。

然后导入PIN功能,这样就可以操作外设了。

下面几句是将GPIO 18声明为neopixel的功能管脚,并且声明12个彩灯。

下面是定义了一个函数 LED, 它包含两个参数 num,color.   num用来指示需要显示的彩灯的位置。color用来指示彩灯的颜色。函数体包含点亮彩灯,延时100毫秒,在熄灭,这一系列的操作。使用函数的优点是可以简化调用的操作。

最下面是一个while循环,在循环体内简单的调用了12次,分别点亮12个彩灯。

运行此程序后,就可以测试ws2812 彩灯了。

4.2 程序模块-花样的彩灯

第二个测试程序是为了生成一个样式比较花哨的彩灯。但是长度比第一个简洁。

import neopixel
import time
from machine import Pin
import random

P18 = Pin(18, Pin.OUT)
rgbled = neopixel.NeoPixel(P18, 12)

def LED(num,color):
    rgbled[num] = color
    rgbled.write()
    time.sleep_ms(100)
    #rgbled[num] = (0, 0, 0)
    return

while 1:
    for i in range(12):
        LED(i,(random.randint(0,10),random.randint(0,10),random.randint(0,10)))
        
    
  

这个测试程序,在第一个程序基础上增加了引入了随机数random,  并且进行了精简,修改了彩灯测试那部分的代码,使用一个循环12次的循环,每次把彩灯更新为一个随机的颜色,这样看起来更像随机性的节日彩灯。

4.3 程序模块-彩灯结合蜂鸣器

这里结合最终程序,绘制了一份程序流程图,在流程图内可以详细看到程序程序设计的整个思路和执行情况。

FrjD1KpEeh3x75gisTx9S1dP7mLC

图3,程序流程图

根据流程图,编制出来了第三个程序,也是本项目的最终的程序了。本程序中引入了蜂鸣器,最终实现了一个具有声光特效的节日彩灯。

 

import neopixel
import time
from machine import Pin,PWM
import random

P18 = Pin(18, Pin.OUT)
rgbled = neopixel.NeoPixel(P18, 12)
P19 = Pin(19, Pin.OUT)
buzzer = PWM(P19)
buzzer.duty_u16(100)

def LED(num,color):
    rgbled[num] = color
    rgbled.write()
    time.sleep_ms(100)
    #rgbled[num] = (0, 0, 0)
    return

def BUZZ(freq):
    buzzer.freq(freq)

while 1:
    for i in range(12):
        LED(i,(random.randint(0,8),random.randint(0,8),random.randint(0,8)))
        BUZZ(random.randint(300,1500))

程序各部分是这样的

首先引入各个需要的库,其中增加引入了PWM库,用来驱动蜂鸣器。将其设定到GPIO19上面之后,需要设定PWM波形的占空比为100。需要注意的是,此处数值写100并不是占空比是100%。 这里的取值范围应该是0-1023. 设置100能获得比较合适的音量。

19行增加了一个BUZZ函数用来更新PWM蜂鸣器的频率。

并且在主循环内,更新LED显示颜色后,对PWM频率进行更新,因为每次更新颜色和频率都是用随机数,所以得到的显示效果是很具有科技感的!详细可以从视频内看到。

那么以上就是我使用Step Pico开发板来完成的节日彩灯项目啦!

5,项目问题与总结

因为我学习MicroPython只有半年多的时间,很多函数的使用,还有各个模块的使用还不是很熟悉。程序写的也比较简略,没有那么高的深度。可能和很多高级的项目没办法比较。但是我觉得,兴趣就是最好的老师,在以后的道路上我会继续学习嵌入式,学习更多的知识。以后会做更多的好玩的项目!也希望下次还可以继续参与暑假一起练项目!

 

附件下载
20230218.py
节日彩灯项目 microPython 源代码
团队介绍
山西省太原市太白街小学-George-梓乔
团队成员
George
野生技术学会会员
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号