如何利用树莓派Pico做一个钢铁侠反应炉?

在本教程中,我们将使用树莓派 pico 来控制 31 个单独可寻址的 led 灯,它们安装在两片亚克力塑料圆盘之间。其中一片圆盘上涂有胶粘镜片,另一片圆盘上贴有单向镜膜;这样可以给 led 灯带制造出 3d 无限效果。
不过,树莓派目前还没有自己的”等离子聚变能源”,所以我们还得用充电电池,然后把所有东西封装在一个 3d 打印的外壳中。
组件清单
树莓派 pico
柔性条形彩色像素 led 灯带(通常以 1 米长度出售;我们使用了144 个 ws2812b 的灯带,并将其切割为 31 个 led 的长度,剩余的部分可以用于其他项目)
3mm 厚的亚克力板材,足够切割两块直径为 70mm 的圆盘
自粘式柔性镜片瓦(不是玻璃)
单向镜自粘膜(用于阻挡太阳的窗贴式膜片)
usb-c 5v 1a tp4506 充电板(或者使用 micro usb 接口的等效充电板)
可充电的 3.7v 1100mah 603449 锂离子电池
2 位 3p spdt 面板安装微型滑动开关,锁定开关
约 100cm 的 26awg 硅胶绝缘铜线(或类似线材)
强力胶水
3d 打印的外壳零件(stl 设计文件可以文末免费获取)
在初始设置过程中,你还需要:一台电脑,一根 micro usb 线和焊接设备和材料(本项目中的焊接量很少,所以如果你不擅长或者不会焊接,也不用担心)。
安装固件
树莓派为树莓派 pico 提供了详细的文档,不过在这一步,非常简单,我们只需要拖动固件到pico上就行(就像把文件拷贝到 u 盘上一样)。
在你的计算机上
下载适用于最新版本 pico micropython 固件的 uf2 文件。micropython 是一种针对微控制器优化的 python 实现,适合各种水平的程序员。
如果你的 pico 还没有显示为 rpi-rp2 驱动器,你需要检查一下你的电脑是否已正确安装了 pico 的驱动程序。
你可以按住 pico 上的 bootsel 按钮(位于 usb 插口旁边的小按钮),同时将连接了 pico 的 micro usb 插入到电脑上来将 pico 设置为启动器模式。
然后,pico 将会显示为一个名为 rpi-rp2 的驱动器,如下所示(以 macos 为例):
给 pico 编程
下载、安装并打开一个名为 thonny 的 python 集成开发环境(ide)。后面我们会用这个给pico编程。确认 pico 仍然连接着,并且 thonny 的界面应该是这样的:
如果你在 shell 窗口中看到 >>>,那么你已经成功连接到 pico 并启用了交互式会话,准备开始编程。如果你没有看到这个提示,那么你需要检查 thonny 的设置是否正确。
点击 thonny 窗口的右下角,确保选择了 micropython(raspberry pi pico)解释器;如果没有选择,请选择它。
如果由于某种原因没有成功地刷写固件,thonny 可能会提示你在这个阶段安装它;在这种情况下,尝试重新刷写固件。如果pico 仍然没有显示为连接状态,那需要断开连接并重新连接,然后按下 thonny 顶部菜单栏的红色停止标志来重置一下。
然后,你应该就可以在 shell 窗口中看到 >>> 提示了,说明我们已经连接成功。
将以下代码复制粘贴到空白且尚未保存的 thonny 程序窗口中:
import array, timefrom machine import pinimport rp2# configure the number of ws2812 leds.num_leds = 31pin_num = 28brightness = 1@rp2.asm_pio(sideset_init=rp2.pio.out_low, out_shiftdir=rp2.pio.shift_left, autopull=true, pull_thresh=24)def ws2812(): t1 = 2 t2 = 5 t3 = 3 wrap_target() label(bitloop) out(x, 1) .side(0) [t3 - 1] jmp(not_x, do_zero) .side(1) [t1 - 1] jmp(bitloop) .side(1) [t2 - 1] label(do_zero) nop() .side(0) [t2 - 1] wrap()# create the statemachine with the ws2812 program, outputting on pinsm = rp2.statemachine(0, ws2812, freq=8_000_000, sideset_base=pin(pin_num))# start the statemachine, it will wait for data on its fifo.sm.active(1)# display a pattern on the leds via an array of led rgb values.ar = array.array(i, [0 for _ in range(num_leds)])##########################################################################def pixels_show(): dimmer_ar = array.array(i, [0 for _ in range(num_leds)]) for i,c in enumerate(ar): r = int(((c >> 8) & 0xff) * brightness) g = int(((c >> 16) & 0xff) * brightness) b = int((c & 0xff) * brightness) dimmer_ar[i] = (g<<16) + (r<<8) + b sm.put(dimmer_ar, 8) time.sleep_ms(10)def pixels_set(i, color): ar[i] = (color[1]<<16) + (color[0]<<8) + color[2]def pixels_fill(color): for i in range(len(ar)): pixels_set(i, color)def color_chase(color, wait): for i in range(num_leds): pixels_set(i, color) time.sleep(wait) pixels_show() time.sleep(0.2)def wheel(pos): # input a value 0 to 255 to get a color value. # the colours are a transition r - g - b - back to r. if pos 255: return (0, 0, 0) if pos < 85: return (255 - pos * 3, pos * 3, 0) if pos < 170: pos -= 85 return (0, 255 - pos * 3, pos * 3) pos -= 170 return (pos * 3, 0, 255 - pos * 3)def rainbow_cycle(wait): for j in range(255): for i in range(num_leds): rc_index = (i * 256 // num_leds) + j pixels_set(i, wheel(rc_index & 255)) pixels_show() time.sleep(wait)black = (0, 0, 0)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)colors = (black, red, yellow, green, cyan, blue, purple, white)while true: print(fills) for color in colors: pixels_fill(color) pixels_show() time.sleep(0.2) print(chases) for color in colors: color_chase(color, 0.01) print(rainbow) rainbow_cycle(0)  
thonny 的界面现在看起来是这样的:
使用 micropython 的一个优点是它的很多代码都是用可读性强的英语编写的。比如,在这个程序的开头,我们可以看到 pico 将通过引脚 28 控制 31 个 led,以最大亮度显示(亮度为 0-1 的比例,其中 0.5 表示 50% 的亮度)。
这个程序的剩余部分会指示 pico 重复显示图案和颜色。
点击 file 然后选择 save as…
组装硬件
3d 打印的部件
需要四个 3d 打印的零件来容纳所有的组件:背板、主体、pico 支架和前盖。我们只需要将它们粘在一起组装成完整的装置就行。
你可以在文末免费下载这些 3d 打印文件。建议使用易于打印的材料,比如 pla 或 petg 塑料丝材料来打印。
切割和准备亚克力圆盘
对于这个项目,我们需要两块厚度为 3mm,直径为 70mm 的亚克力圆盘,其中一块圆盘需要在中央钻一个直径约为 5mm 的孔,用于通过导线。
如果你可以使用激光切割机,制作这些部件很简单。或者你可以找出你的旧文具盒,找到圆规。使用木工锯切割出一个直径为 70mm 的圆形,然后用砂纸或锉刀修整边缘。最终的圆盘不需要完全无瑕疵,因为后续的步骤会遮盖这些小瑕疵。
其中一块圆盘在中心钻一个直径为 5mm 的孔,用于以后通过导线。
在柔性粘性镜片上标记一个70mm的圆,在单向镜自粘膜上标记另一个同样大的圆。使用剪刀剪裁出圆形,而且可以剪得非常圆。
确保从亚克力圆片上撕掉了所有的保护层,然后依次撕掉镜片背面的粘性支撑层。
把镜片贴到带有孔的圆片上,这个圆片会被用于安装我们的pico,然后将一片单向镜膜贴到另一个圆片上。
布线和焊接电子器件
反应炉底部将会包含可充电电池、开关和 usb-c 充电板,这些我们需要将它们粘合到 3d 打印切割件内部的适配插槽中。
在这个阶段,我们需要进行一些电线的剪切、剥离和焊接工作。
根据下面的照片,确保将电池的正负极线连接到正确的 usb-c 充电板正负极输入上,并将板的正输出线焊接到滑动开关的中间引脚上。
开关的正极线可以焊接到两个外侧开关引脚的任意一个上:
接下来,将另外三根导线直接焊接到 pico 的背面。这些导线的长度应该足够完成后面组装过程中的连线电路:大约 20cm 的长度应该足够了。
为了给 pico 提供电源,还需要将红色和黑色导线分别连接到标有 vbus 和 gnd 的引脚上。
我们需要第三根导线(蓝色),在上面的照片中显示,在蓝色导线上将它焊接到标有 gp28 的引脚上。我们的 micropython 脚本中指定的是 pico 用来与 led 进行通信的引脚
led 灯带通常已经预先布线,但它们的连接点通常较大,我们需要自制一个布线束。使用剪刀,将任何现有的布线都剪掉,然后切割出一条 31 个 led 的灯带,确保剪切沿每个 led 之间的缝隙进行:
灯带上也标有箭头,用于显示正确的电流方向,”+”符号代表正线,”0″代表数据线,”g”代表负线或接地线。在切割时,确保沿着每个焊盘中间切开;如果不小心的话,很容易导致焊接线接触不良。
在上面的照片中,像这样焊接另外三根导线,长度也约为 20cm:红色正线、蓝色数据线和黑色地线。在焊接到焊盘时,你可能会发现从灯带后面进行焊接会更方便一些。
组装
将连接到你的树莓派pico的三根线穿过小型3d打印的pico底座。然后将线通过镜子圆板的孔,将底座粘在你的pico底部和圆板的反光面。确保pico在底座上坐立于镜子表面之上。
这样,我们就可以实现我们的目标,获得一个 3d 无限效果
现在将带单向膜的圆盘放入 3d 打印的主体中,并将前环粘合到主体上。由于圆盘是由前环固定的,所以可以隐藏一些形状方面的细微缺陷。
将 31 个 led 的灯带粘贴在 3d 打印的主体的内部,确保布线和连接与主体的间隙对齐,这样你可以轻松地将导线穿过安装 pico 的圆盘的一侧。
大多数 led 灯带都有自粘背面,这有助于使这个过程变得简单。
将已经粘合到镜面圆盘上的 pico 与装有 led 的主体和单向镜组成一个完整的装置,并与包含电池、充电板和开关的底座配对。
确保你的所有导线尾部都穿过到了反应炉底座上。将两根蓝色数据线焊接在一起,将三根红色正线焊接在一起,将三根黑色负线焊接在一起,根据需要修剪任何多余长度的线材。可以使用热缩套管或胶带绝缘我们的连接点。
最后检查
在将所有部件粘合在一起之前,检查一切是否按预想的工作。通过滑动开关检查 led 是否点亮;使用 usb-c 手机充电器或 usb 充电宝测试充电板的功能;充电时,led指示灯将亮起。
现在,我们只需要将部件粘合在一起就ok了。
升级
升级!每个人都喜欢升级,尤其是钢铁侠。其实我们还可以使用树莓派 pico w 运行一个 web 服务器,从手机浏览器上无线控制 led。
或者也可以加一些涂料,在反应炉背面粘贴一些魔术贴,这样我们就可以将它像托尼·斯塔克那样佩戴在胸前了。


小型自动气象站使用时,应该注意哪些问题?
ADB wifi连接多台鸿蒙设备的准备工作
CIBF 2018展会3大亮点洞悉 动力电池、储能电池成重点布局
RabbitMQ的多种交换机类型
中国网络安全产业将达到631.29亿元,网络安全意识迫切需要提高
如何利用树莓派Pico做一个钢铁侠反应炉?
华为荣耀V9怎么样?荣耀V9体验评测,性能怪兽表现不俗!
2018-2019汽车HUD行业研究与2019Q1 HUD供应商竞争力分析报告
ARM智能手机将埋葬x86 PC
如何去构建一个软件、硬件、车型平台相互解耦的系统
三星s8或将跳票,明年4月份上市
LED晶膜屏全方位讲解
CAN转EtherNet/IP网关can协议和485协议区别
京东618最新发布的小米8无疑获得了消费者的众多关注
电子控制ABS系统的非线性理论分析
cbb电容有正负极吗
原理图如何快速读懂?
浅谈频谱仪上的DANL指标
山区平房手机信号放大器安装案例
LED路灯取代传统照明的可行性评估与测量结果