本帖最后由 GFeonix 于 2024-8-26 19:13 编辑
大家好啊我是来自深圳的circuit python初学者。本次是第一次参加follow me的活动,本意是想学习一下不同于传统的前沿开发方法。但没想到整个活动期间经历了搬家等一系列事情,终于赶在活动的末尾才有时间静下心来好好学习,差点就赶不上活动了。但好在circuit python真的非常容易上手,即使对于我这个没有一丝python基础的也没有任何的上手难度。其语法跟各大编程语言都很相似,我做任务的期间就是直接按照c语言的习惯来编写,然后碰到报错了再去百度相应的python语法,改动也不会太多。其次是感觉板子的库已经把板载的所有传感器和功能都给你封装好了,直接调用就行,极大降低了与硬件交互方面的上手难度。
汇总视频
汇报视频
所用器件
本次使用的器件我选择了推荐的开发板+舵机的搭配,因为我下单的时候已经是最后一天的最后几个小时了,怪我自己没有留意入围名单以为没有入围,实在没有时间精挑细选。。。
设计思路
软件方面,本次活动采用了Adafruit推荐的circuit python进行开发,正好我也想学习一下circuit python。按照其官方文档进行环境的搭建并采用mu编辑器进行编码和下载调试。
硬件方面,除了最后一个创意任务,都可以仅仅使用板载的传感器实现功能。
任务实现
入门任务(必做):开发环境搭建,板载LED点亮
本任务较为简单,只是帮助我们上手板子,调一下on/off就好。
import time
from adafruit_circuitplayground import cp
while True:
cp.red_led = True
time.sleep(1)
cp.red_led = False
time.sleep(1)
基础任务一(必做):控制板载炫彩LED,跑马灯点亮和颜色变换
本任务帮助我们熟悉版上的pixels这个组件,我们可以对这个数组赋值按照rgb的元组格式,来点亮不同颜色的rgb灯。
import time
from adafruit_circuitplayground import cp
def brightness_refresh():
cp.pixels.brightness = 0.1
return
cp.pixels.brightness = 0.1
waitTime = 0.5
step = 0
color=[(255,0,0),
(0,0,255),
(255,255,0),
(255,0,255),
(0,255,255),
(0,255,255),
(255,0,255),
(255,255,0),
(0,0,255),
(255,0,0)]
while True:
if step >= 10:
step = 0
cp.pixels.fill((0,0,0))
time.sleep(waitTime)
cp.pixels[step] = color[step]
step = step + 1
time.sleep(waitTime)
基础任务二(必做):监测环境温度和光线,通过板载LED展示舒适程度
本任务让我们使用板载的光感传感器和温度传感器,我们可以读取这两个传感器的数值后,按照百分比的方式选择亮起的led数量,来展示。
import time
from adafruit_circuitplayground import cp
# cp.pixels.fill((255,255,255))
while True:
print(cp.light)
num = cp.light / 320 * 10
print(num)
for i in range(10):
if i< num:
cp.pixels[i]=(255,255,255)
else:
cp.pixels[i]=(0,0,0)
基础任务三(必做):接近检测——设定安全距离并通过板载LED展示,检测到入侵时,发起声音报警
这个任务我寻思了很久,板子上没有距离传感器啊怎么实现呢?最终还是收到论坛大佬的启发,利用光感传感器来读取反光的强度来判断距离,超过阈值的时候利用蜂鸣器发出声音警告。但这样子距离肯定不是很准确,而且板子发热也十分严重无法长期使用,希望有更好方案大家一起讨论。
import time
from adafruit_circuitplayground import cp
cp.pixels.fill((255,255,255))
while True:
print(cp.light)
if cp.light > 100:
print("True")
cp.start_tone(300)
else:
cp.stop_tone()
进阶任务(必做):制作不倒翁——展示不倒翁运动过程中的不同灯光效果
这个任务使用的是加速度传感器,利用它读取姿态值,并映射到rgb值上,从而改变led的颜色。
import time
from adafruit_circuitplayground import cp
cp.pixels.fill((255,255,255))
while True:
if not cp.shake():
(x,y,z)=cp.acceleration
r=int(abs(x)/10*255)
g=int(abs(y)/10*255)
b=int(abs(z)/10*255)
cp.pixels.fill((r,g,b))
创意任务二:章鱼哥——章鱼哥的触角根据环境声音的大小,章鱼哥的触角可舒展或者收缩
这个任务要利用到另外购买的舵机,利用它来进行章鱼哥触角的伸缩。同时结合之前的任务,判断收缩和舒张的时机。可以用一个简单的状态机管理章鱼哥的状态。(图片不太看得出动效,最好还是看下视频)
import time
import pwmio
import board
from adafruit_motor import servo
from adafruit_circuitplayground import cp
cp.pixels.fill((255,255,255))
pwm = pwmio.PWMOut(board.A1, frequency=50)
my_servo = servo.ContinuousServo(pwm)
shy = False
while True:
if cp.light > 100:
shy = True
cp.start_tone(300)
my_servo.throttle = -1
time.sleep(3)
my_servo.throttle = 0
time.sleep(5)
else:
cp.stop_tone()
my_servo.throttle = 0.1
time.sleep(0.5)
my_servo.throttle = 0
if shy:
shy = False
time.sleep(2)
源码
下载链接
心得体会
这次活动下来,我真的感受到了用circuit python开发的便捷,几乎没有上手的门槛。而且板子的技术支持也很够,基本碰到的问题都能很快速地搜索到答案。缺点也有,库封装得太好了虽然方便上手,但长期下去可能会养成忽视底层的坏习惯。我目前还没有时间去深入探究板子的库与硬件底层是怎么交互,感觉这又是个大工程啊!但我觉得我们想真正做出一个属于自己的项目,最好还是能够自主设计硬件。毕竟这么一块开发板,成本还是有点高的,其中也不是每一个传感器我们都用得上。希望下次仍有这样可以让我们接触的新东西的活动,最好是ai这种前沿方向的(笑。
|