298|1

4

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【Follow me第二季第1期】 进阶任务:不倒翁和创意可穿戴装饰 [复制链接]

 

        继续来挑战一下进阶任务和创意任务。

1. 进阶任务(必做):制作不倒翁——展示不倒翁运动过程中的不同灯光效果

        在本次进阶任务中,我们将探索Adafruit开发板的六轴加速度传感器,以实现一个动态的灯光效果,随着不倒翁的摇摆而变化。这一任务的核心在于理解并应用加速度传感器的读数,以控制LED灯的颜色变化。

        该任务主要需要使用的传感器可以参考教程中的Acceleration部分【Acceleration | CircuitPython Made Easy on Circuit Playground Express and Bluefruit | Adafruit Learning System】,通过cp.acceleration就可以获取传感器的x,y,z三轴的读数。虽然这些读数可能初看起来有些抽象,但它们实际上代表了开发板在空间中的位置和倾斜角度。这些读数会随着开发板的空间位置和倾斜情况而变化,为我们提供了丰富的数据来驱动灯光效果的变化。

        利用这些参数,我们可以对LED灯的(R,G,B)三元组进行动态调整,以实现不倒翁在晃动过程中呈现出独特的灯光效果。具体的实现代码已经在教程中提供,我们可以直接采用并进行适当的修改,如下所示:

from adafruit_circuitplayground import cp

while True:
    R = 0
    G = 0
    B = 0
    x, y, z = cp.acceleration
    print((x, y, z))
    cp.pixels.fill(((R + abs(int(x))), (G + abs(int(y))), (B + abs(int(z)))))

        根据不同的倾斜情况的传感器示数,可以调整RGB三色的配比,我们可以根据不同的倾斜情况实现不同的颜色变化。例如,当开发板平放时,灯光可以呈现蓝色;当板子垂直放置时,灯光可以呈现绿色;而当板子垂直后旋转,灯光则可以转变为红色。在视频演示中,我们可以观察到随着开发板的晃动,灯光效果随之不断变化,为不倒翁增添了一份动态的美感。

        视频演示见视频的前半部分。


2. 创意任务一:有创意的可穿戴装饰——可结合多种传感器和灯光效果展示

        我们设计了一款独特的可穿戴装饰,它不仅拥有绚丽的灯光效果,还具备音乐播放功能,让你在黑夜中也能享受快乐时光。这款装饰巧妙地结合了开发板的LED灯、蜂鸣器以及开关,为用户提供了丰富的互动体验。

        在这款装饰中,我们使用了板载的LED灯和蜂鸣器,以及一个拨动开关和两个按键开关B。拨动开关用于在两种模式之间切换,而按键开关B则用于改变蜂鸣器的音调,使其能够演奏旋律。LED和蜂鸣器的使用在之前的普通任务中都已经介绍过,这里就不再赘述。

        简单介绍一下开发板上的两种开关,在教程中分别是Slide Switch【Slide Switch | CircuitPython Made Easy on Circuit Playground Express and Bluefruit | Adafruit Learning System】和Buttons【Buttons | CircuitPython Made Easy on Circuit Playground Express and Bluefruit | Adafruit Learning System】。

        开关的调用非常简单,用cp.switchcp.button_a(/b)就可以分别访问拨动开关和两个按键开关的状态了。当拨动开关置右时,输出为True;当按键开关按下时,输出同样为True。

        接下来分别介绍我们设计的创意装饰的两种不同模式:

  • 当拨动开关置右时,LED灯进入自动变色模式。我们设计了一个颜色变换函数,确保在变色过程中颜色之间的过渡更加平滑,避免了突兀的颜色变化。同时,该模式确保LED灯始终处于点亮状态,不会出现黑色灭灯的情况。
  • 当拨动开关置左时,LED灯进入手动变色模式。此时,用户可以通过按下按键B来改变LED灯的颜色,同时蜂鸣器会播放预设的音调。通过连续长按按键B,可以实现蜂鸣器播放旋律,并且LED灯随着旋律顺滑地变换颜色。

        以下是具体的代码实现,首先介绍如何实现LED灯的顺滑切换。

        我们预设了一个RGB颜色的允许取值范围,指定为[0, 63, 127, 191, 255],以确保选取的颜色都是相对正色。然后,我们编写了一个颜色更新函数,每次只从R,G,B三个通道中随机选择一个进行参数在允许的取值内随机改变,这样就保证了连续两个颜色之间不会产生特别大的差异。同时,在每一次颜色改变后,我们都会检查RGB三者是否同时取到了0,如果是,则会将这一次改变的通道在除了0以外的值内重新随机选择。具体的代码如下:

color_values = [0, 63, 127, 191, 255]
current_color = [255, 255, 255]

cp.pixels.brightness = 0.1

def change_color(current_color):
    channels = ['R', 'G', 'B']
    channel = random.choice(channels)
    new_value = random.choice(color_values)

    if channel == 'R':
        current_color[0] = new_value
    elif channel == 'G':
        current_color[1] = new_value
    else:
        current_color[2] = new_value

    if current_color == [0, 0, 0]:
        new_value = random.choice(color_values[1:])
        if channel == 'R':
            current_color[0] = new_value
        elif channel == 'G':
            current_color[1] = new_value
        else:
            current_color[2] = new_value

	return current_color

while True:
    for i in range(10):
        cp.pixels[i] = current_color

    current_color = change_color(current_color)
    cp.pixels.show()

    time.sleep(0.1)

        其次我们介绍如何实现蜂鸣器的旋律播放,根据教程中的Play Tone模块,我们可以通过cp.play_tone(262, 0.1)来播放音调,前者表示声音的频率(音高),后者表示持续的时间(应该存在最短的蜂鸣器持续时间,肯定不只0.1秒)。我们根据乐谱C调中低音do到高音do的频率,分别为[262,294,326,358,390,422,454,486],将一首乐曲Funky Town(鸡块旋转小曲)的旋律转换成频率的列表(列表中-1表示空拍,但是不知道什么原因依旧还有一声杂音)。每次检测到按键B被按下,蜂鸣器自动播放下一个音调。当按键B被长按时,就实现了旋律的连续播放。最终代码如下:

tone_list = [454,454,422,454,-1,358,-1,358,454,550,518,454,
             358,358,326,358,-1,262,-1,262,358,454,422,358]

while True:
	if cp.switch:
    	if cp.button_b:
        	cp.play_tone(tone_list[flag], 0.1)
            flag = (flag + 1)%24

        最终把两者结合起来,得到的主函数如下:

import time
import random
from adafruit_circuitplayground import cp

color_values = [0, 63, 127, 191, 255]
current_color = [255, 255, 255]
cp.pixels.brightness = 0.1

tone_list = [454,454,422,454,-1,358,-1,358,454,550,518,454,
             358,358,326,358,-1,262,-1,262,358,454,422,358]

flag = 0    
while True:
    for i in range(10):
        cp.pixels[i] = current_color

    if cp.switch:
        current_color  = current_color
        if cp.button_b:
            cp.play_tone(tone_list[flag], 0.1)
            current_color = change_color(current_color)
            flag = (flag + 1)%24
    else:
        flag = 0
        current_color = change_color(current_color)
        cp.pixels.show()

    time.sleep(0.1)

        在视频演示中,我们可以看到,当拨动开关置右时,LED灯自动切换颜色;当拨动开关置左且按键B被按下时,LED灯手动切换颜色,同时蜂鸣器播放旋律。这一互动体验不仅增加了装饰的趣味性,也提升了用户的参与感。

        视频演示见视频的后半部分。

        

不倒翁+创意可穿戴装饰

最新回复

本帖最后由 wangerxian 于 2024-8-31 15:38 编辑 不倒翁我以为是小时候玩的那个不倒翁呢,原来是电子不倒翁。   详情 回复 发表于 2024-8-31 15:37
点赞 关注
 
 

回复
举报

7244

帖子

2

TA的资源

版主

沙发
 
本帖最后由 wangerxian 于 2024-8-31 15:38 编辑

不倒翁我以为是小时候玩的那个不倒翁呢,原来是电子不倒翁。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表