【Follow me第二季第1期】任务汇总,代码下载
[复制链接]
本帖最后由 crimsonsnow 于 2024-10-21 05:18 编辑
本次使用的产品是Circuit Playground Express,它是由 Adafruit Industries LLC 设计并生产的一款多功能入门级开发板。Adafruit 提供了很丰富的教育支持来帮助入门编程它们的开发板。
这块开发板是express版本。支持运行 MakeCode、CircuitPython、Arduino 和 Code.org CS Discoveries。
我使用了thonny和MU两个针对初学者级别的python IDE开发。
express开发板使用的连接端口是micro端口,因此要准备良好的micro数据线。
这款开发板有很多的传感器外设,在任务中,体验了光线传感器,温度传感器,运动传感器。它还有一个小麦克风和一个迷你扬声器,扬声器通过引脚#11上的关机控制能够将其关闭。
它还有一个红外接收器和传输器,在“距离检测”任务中,很多人尝试使用红外来进行处理,但是效果不太好。
跟随开始教程,官方提供了固件,直接通过USB下载,就可以进行烧录。
教程特别提示了如果你是MAC系统,最好跟随教程更新bootloader。而如果你是windows系统,你应该先下载驱动。如果你是win10,可能内置驱动已经包含了,所以如果没有安装驱动的步骤但是能成功烧录,也是有可能的。在设备管理器能成功看到COM口信息即可。
有一些开发板进入boot模式需求上电的同时按下reset软件。至于express,我没有搞清楚。按照官网的说明,新板子连接USB线之后,再按一到两下reset就能进入boot模式,我尝试的结果似乎是连续按两下,虽然这么小的按键按动起来需要一点运气。。总而言之,最后是能够成功的,看到所有灯同时闪烁绿色就是进入了boot模式。
这个板子还有个很优秀的故障提示,如果彩色 LED 指示灯变为红色,请检查 USB 电缆,尝试使用其他电缆或其他 USB 端口。可以提醒你是否是线缆和电脑的问题。
接下来就是各个任务部分
入门任务:配置开发环境,点灯
物料:circuit playground express开发板的D13 LED灯
流程:下载官方固件,进入boot模式,自动烧录
烧录成功之后会齐闪黄灯。
点灯程序
import board
import digitalio
import time
led = digitalio.DigitalInOut(board.LED)
led.direction = digitalio.Direction.OUTPUT
while True:
led.value = not led.value
time.sleep(0.1)
基础任务一,炫彩LED跑马灯
https://bbs.eeworld.com.cn/thread-1292210-1-1.html
物料:circuit playground express开发板的neopixel灯带
流程:
import time
import board
import neopixel
from rainbowio import colorwheel
import digitalio
# 自定义常量
BOARD_NEO_QTY = 10
BOARD_NEQ_BRI = 0.2
RED = (255, 0, 0)
YELLOW = (255, 150, 0)
GREEN = (0, 255, 0)
CYAN = (0, 255, 255)
BLUE = (0, 0, 255)
PURPLE = (180, 0, 255)
WHITE = (255, 255, 255)
OFF = (0, 0, 0)
# 初始化 NeoPixel
pixels = neopixel.NeoPixel(board.NEOPIXEL, BOARD_NEO_QTY, brightness=BOARD_NEQ_BRI,auto_write=False)
# 每0.5秒,按顺序改变一个灯珠的颜色
def color_chase(color, wait):
for i in range(10):
pixels[i] = color
time.sleep(0.1)
pixels.show()
time.sleep(0.4)
def rainbow_cycle(wait):
for j in range(255):
for i in range(10):
rc_index = (i * 256 // 10) + j * 5
pixels[i] = colorwheel(rc_index & 255)
time.sleep(0.1)
pixels.show()
while True:
rainbow_cycle(0.1)
'''color_chase(RED, 0.1)
color_chase(YELLOW, 0.1)
color_chase(GREEN, 0.1)
color_chase(CYAN, 0.1)
color_chase(BLUE, 0.1)
color_chase(PURPLE, 0.1)
color_chase(OFF, 0.1)'''
基础任务二,检测环境温度和光线
https://bbs.eeworld.com.cn/thread-1292215-1-1.html
物料:circuit playground express开发板的温度传感器与光线传感器,灯带
流程:
# 在这里写上你的代码 :-)
import time
import board
import neopixel
import analogio
import simpleio
import adafruit_thermistor
# 自定义常量
BOARD_NEO_QTY = 10
BOARD_NEQ_BRI = 0.008
RED = (255, 0, 0)
YELLOW = (255, 150, 0)
GREEN = (0, 255, 0)
CYAN = (0, 255, 255)
BLUE = (0, 0, 255)
PURPLE = (180, 0, 255)
WHITE = (255, 255, 255)
OFF = (0, 0, 0)
# 灯带初始化
pixels = neopixel.NeoPixel(board.NEOPIXEL, BOARD_NEO_QTY,brightness=BOARD_NEQ_BRI,auto_write=False)
pixels.fill((0, 0, 0))
pixels.show()
# 传感器
sensor_light = analogio.AnalogIn(board.LIGHT)
sensor_temp = adafruit_thermistor.Thermistor(board.TEMPERATURE, 10000, 10000, 25, 3950)
# 定义颜色序列
brightness_colors = [GREEN, YELLOW, RED]
temperature_colors = [BLUE, YELLOW, RED]
while True:
# 获取环境的亮度和温度
peak_light = simpleio.map_range(sensor_light.value, 2000, 62000, 0, 5)
peak_temp = simpleio.map_range(sensor_temp.temperature, 33, 33.5, 0, 5)
print("light.value:", sensor_light.value)
print("--peak_light ", int(peak_light))
print("temp.value:", sensor_temp.temperature)
print("**peak_temp ", int(peak_temp))
# 右侧灯珠表示 亮度
for i in range(0, 5, 1):
if i <= peak_light:
pixels[i] = GREEN
if peak_light > 2 and i >= 2:
pixels[i] = YELLOW
if peak_light > 3 and i >= 3:
pixels[i] = RED
else:
pixels[i] = OFF
# 左侧灯珠表示 温度
for j in range(9, 4, -1):
if j >= 9 - peak_temp:
pixels[j] = BLUE
if peak_temp > 2 and j <= 7:
pixels[j] = YELLOW
if peak_temp > 3 and j <= 6:
pixels[j] = RED
else:
pixels[j] = OFF
pixels.show()
time.sleep(0.1)
基础任务三,入侵检测报警
https://bbs.eeworld.com.cn/thread-1292649-1-1.html
物料:circuit playground express开发板的光线传感器,灯带
使用光线检测的效果,比红外检测的效果明显
流程:
import time
from adafruit_circuitplayground import cp
# 设定一个阈值来表示光线强度低时的值
LIGHT_THRESHOLD = 100
while True:
# 读取板载光线传感器数据
light_value = cp.light
# 检查光线强度是否低于阈值
if light_value < LIGHT_THRESHOLD:
# 点亮所有LED灯
cp.pixels.brightness = 0.5 # 设置LED亮度
for i in range(10):
cp.pixels[i] = (255, 0, 0) # 红色表示警告
# 发出声音报警
# 播放一个简单的警报音
for _ in range(3):
cp.start_tone(2000) # 发出2000Hz的音调
time.sleep(0.1)
cp.stop_tone()
time.sleep(0.1)
else:
# 关闭LED灯
cp.pixels.brightness = 0.0 # 关闭LED灯
cp.stop_tone() # 停止声音
# 稍微延迟后再次检测
time.sleep(0.1)
WeChat_20241021050359
进阶任务一,不倒翁
https://bbs.eeworld.com.cn/thread-1294921-1-1.html
物料:circuit playground express开发板的运动传感器,neopixel灯带
流程:
import math
import time
from adafruit_circuitplayground import cp
# 定义颜色轮函数
def color_wheel(position):
if position < 0 or position > 255:
return (0, 0, 0)
if position < 85:
return (int(position * 3), int(255 - position * 3), 0)
if position < 170:
position -= 85
return (int(255 - position * 3), 0, int(position * 3))
position -= 170
return (0, int(position * 3), int(255 - position * 3))
while True:
accel_x, accel_y, accel_z = cp.acceleration
inclination = math.atan2(accel_x, accel_y) # 获取倾角
inclination_deg = inclination * (180 / math.pi) # 将倾角转换为度
# 限制倾角在-90到90度之间
inclination_deg = max(min(inclination_deg, 90), -90)
# 映射倾角到LED索引
led_index = int((inclination_deg + 90) / 18)
# 确保led_index在0到9之间
led_index = max(min(led_index, 9), 0)
# 更新LED灯颜色
for i in range(10):
if i == led_index:
# 当前倾角对应的LED显示绿色
cp.pixels[i] = (0, 255, 0)
else:
# 根据LED位置计算颜色
color = color_wheel(255 * i // 10)
cp.pixels[i] = color
# 稍微延迟后再次检测
time.sleep(0.1)
Circuit Playground Express是一款设计精良的电子编程学习工具,它以其紧凑的设计和丰富的功能赢得了用户的喜爱。这款设备集合了多种传感器和LED灯,为学习编程和电子制作提供了便利。它的用户界面友好,使得即使是初学者也能轻松上手。Circuit Playground Express在教育和娱乐之间取得了良好的平衡,让学习过程变得更加有趣和互动。此外,它的稳定性和兼容性也赢得了用户的信赖,是一款值得推荐的电子学习工具。
|