【Follow me第二季第1期】进阶任务:制作不倒翁
[复制链接]
本帖最后由 nemon 于 2024-8-31 19:08 编辑
进阶任务的要求是——制作不倒翁,展示不倒翁运动过程中的不同灯光效果
找了一个西点盒,用泡沫塑料剪了马头和马尾,插到盒子上,然后给盒子里装上重物,不倒翁“摇摇马”就做好了。
Adafruit Circuit Playground Express上有三轴加速度传感器,用acceleration就可以读出x、y、z的加速度。
我把3轴x、y、z的平方和加起来,估算当前的总体加速度。因为有重力加速度,所以会有个基准的值,我也不管基准是多少了,只要这个平方和大于110,就认为开始晃了。
这次推荐购买360度舵机,我拿来给“摇摇马”做背景了——当马被动的摇起来,舵机也会带动背景旋转,炫彩灯亮起,同时播放这个声音(强烈推荐非上班时间听):
控制舵机,用pwm就可以,要引入pwmio库。代码如下:
from adafruit_circuitplayground import cp
import board,pwmio,time
pwm = pwmio.PWMOut(board.A1, frequency=50, duty_cycle=0)
def servo360_go(diriction=0,speed=0):
if diriction == 0 :
pwm.duty_cycle=0
elif diriction>0:
pwm.duty_cycle = 5000 + min(diriction *speed , 4500)
else:
pwm.duty_cycle = 5000 + max(diriction *speed , -4500)
servo360_go(0)
while True:
x, y, z = cp.acceleration
v = x*x+y*y+z*z
print("x:%0.4f,y:%0.4f,z:%0.4f => %0.4f" % (x, y, z , v ))
servo360_go(0)
if v > 110:
servo360_go(-25,20)
for j in range(10):
cp.pixels[j]=( 0, 0+25*j , 255-25*j )
cp.play_file('grandpa.wav')
servo360_go(25,40)
time.sleep(0.5)
cp.pixels.fill( (0,0,0) )
time.sleep(0.2)
运行效果见视频:
|