基于SD卡的基因(DNA)炫酷LED桌面灯

news2024/11/18 10:58:16

基于SD卡的基因(DNA)炫酷LED桌面灯

  • 一、介绍
    • 一个已知的问题
    • 解决办法
  • 二、支持目录
    • 材料准备
    • LED灯光文件(我使用的PLA颜色)
  • 三、 打印部件和焊接
  • 四、拼装打印的DNA散件
  • 五、组合DNA螺旋结构
  • 六、执行DNA文件
  • 七、程序烧录
  • 八、总结及成品展示

一、介绍

这款LED灯通过人类的完整基因组点亮房间。它从SD卡中缓慢读取DNA代码,并将基因碱基对显示为颜色,这些颜色沿着螺旋结构向上移动。四个碱基—A、T、G和C—分别以红色、紫色、绿色和蓝色表示。它有一个电源按钮,以及底座上的速度和亮度调节旋钮。对于螺旋结构,我尽力使比例尽可能接近实际的DNA。这是一个让人陷入沉思的有趣灯具。因为大约有三十亿个碱基对,所以需要很长时间才能完整地展示一遍。
实物图如下:
在这里插入图片描述
视频如下:

DNA LAMP

一个已知的问题

这款LED灯在最快速度下应该每2毫秒显示一个新的碱基对。但实际上,它的移动速度比这慢得多。最初,我将整个染色体存储在一个文本文件中。Arduino会读取该文件,然后移动到下一个染色体/文件。我注意到,随着时间的推移,它似乎变得越来越慢,确实如此。我怀疑这种减速的原因是,寻找下一个字母的代码不得不遍历所有之前的字母。当它在文件的开头时,这不会花费很长时间,但当下一个字母是几百万个字母之后时,找到它需要一秒钟。

解决办法

为了解决这个问题,我改变了方式,不再是将整个染色体存储在一个文本文件中,而是将染色体分割成许多文件(每个文件100万个字母)。不幸的是,这并没有真正解决慢速问题。接下来,我尝试重新配置,以便SD卡上一次只保存一个染色体。这样的想法是,Arduino会读取该染色体的文件,完成后,用户将SD卡上的染色体文件替换为下一个染色体的文件。这确实提高了速度。

最后,我意识到在读取完文件后让代码删除文件也是一种帮助。仍然有改进的空间。我相信我的代码可以改进,但SD卡的读取速度以及Arduino的速度也可能限制了性能。

我认为这个项目处于一个即将成为中级开发者的初学者水平。这里是指南…

二、支持目录

材料准备

  • LED灯(需要2串,每串11个LED灯(总共22个))
  • PLA材料 - 绿色、灰色和透明色
  • 2个电位计
  • 1个按钮
  • 可焊接的面包板
  • 导线
  • 5V电源线(我使用了一根USB电缆并将其切成两半,以便我可以焊接导线到面包板上)
  • Micro SD卡
  • Micro SD卡读取器
  • Adafruit ItsyBitsy 32u4 3V
  • 3-5个M3x6mm螺栓
  • 电源锁存材料
  • 1个2N3904晶体管
  • 1个FQP27P06 MOSFET
  • 2个二极管(我相当确定这是我使用的)
  • 2个100千欧姆电阻
  • 1个270欧姆电阻
  • 1个10千欧姆电阻
  • 1个13千欧姆电阻
  • 1个12千欧姆电阻

LED灯光文件(我使用的PLA颜色)

  • 1个DNA Lamp Bottom.stl(绿色)
  • 1个DNA Lamp Base.stl(绿色)
  • 22个DNA Lamp_crossbeam short.stl(透明色)
  • 2个DNA Lamp_pillar base.stl(灰色)
  • 2个DNA Lamp_pillar cap2.stl(灰色)
  • 20个DNA Lamp_pillar.stl(灰色)

以上.stl模型下载的文件可以私信我获取

当然除了以上材料以外你还需要准备胶水等一些常用的工具。

三、 打印部件和焊接

在这里插入图片描述
在这里插入图片描述

  1. 打印部件。如果我没记错的话,柱子需要支撑,接触构建板的地方需要一个边缘。
  2. 将Arduino、SD卡读取器、电源锁存器以及连接到面包板的导线焊接起来。照片显示了最终的样子。不要焊接输入电源线。我是基于这个制作的电源锁存器。电源锁存器是必需的,这样Arduino在关闭之前就可以将其在DNA中的位置保存到EEPROM中。
  3. 清理打印部件。

四、拼装打印的DNA散件

在这里插入图片描述
在这里插入图片描述

  1. 剪下一段包含11个LED的灯带(确保在第11和第12个LED之间的中间剪断电线,这样第11个LED上就有一段电线可以用来焊接)。
  2. 按照图片所示,将这些LED穿过10个柱子。每两个LED之间应该有一个柱子。
  3. 这串LED中的最后一个(在第一个螺旋柱的顶部)将连接到第二串的第一个LED(在那个柱子的底部),因此需要在第11个LED上焊接一条电线到数据线(白色线)。然后,这条线需要穿过所有的柱子,以便所有四根线(三个LED输入线+这个输出数据线)都从柱子底部伸出。这个输出数据线最终将被拉伸到基座的底部以连接到另一串LED,所以确保它足够长(见图片)。
  4. 为下一步做准备,剪下大约两打胶带来包裹柱子,以便在胶水干燥时将其固定在一起。
  5. 使用泡沫/膨胀大猩猩胶将所有十个柱子部件粘合在一起,确保LED从柱子之间的孔中突出,如图片所示。LED应该相对松散且自由。用胶带包裹接合处。尽量减少胶水粘在柱子外部的数量。
  6. 剪下另一段包含11个LED的灯带,并将它们穿过另外10个柱子。
  7. 用另一串柱子重复粘合过程。

五、组合DNA螺旋结构

在这里插入图片描述
在这里插入图片描述

  1. 将柱头帽和柱基座粘合到柱子上,确保将所有导线穿过基座部分的底部孔。对于每个“横档”,使用两个交叉梁部件,并将它们夹在一起,使得一个交叉梁部件在顶部,另一个在底部。这可能是一个紧密的配合,所以要做好心理准备。我使用透明大猩猩胶来粘合交叉梁。将一个交叉梁部件插入灯座部分的足迹中并粘合在那里。然后粘合两个柱子到基座上,确保将所有导线穿过基座的孔(如图)。然后在上面粘合另一个交叉梁,使其全部闭合在一起,第一个横档就完成了。
  2. 将两个交叉梁粘合到所有其他“横档”上。
  3. 对于接下来的步骤,面包板最终将安装在灯座部分,确保从螺旋顶部部分到面包板的导线足够长,以便顶部部分可以被移除并侧放以访问面包板(如图)。
  4. 将通往第一柱子起始端的LED数据线焊接到面包板上的Arduino的第5脚。
    将之前从第一柱子最后一个LED末端伸出的LED数据线焊接到第二柱子的第一个LED上。
  5. 将电源和地线焊接到两个LED柱子上。
  6. 在灯座部分安装电位计和按钮,并焊接它们与面包板之间的所有连接。我使用了一些热熔胶来帮助固定电位计,以便在旋转时不会转动。我还在基座上用记号笔标记了电位计。
  7. 使用M3x5螺栓将面包板安装到灯座底部。确保螺栓没有短路/连接面包板上的任何线路。我使用了一小块电工胶带作为临时的“垫圈”,将螺栓头与板子隔开。
  8. 将电源线穿过灯座底部侧面的孔,然后将其焊接到面包板上的正确位置。

六、执行DNA文件

在这里插入图片描述
由于DNA文件大小为3GB,我无法将它们附加到本指南中。以下是获取它们的步骤:

  1. 访问网站
  2. 滚动到页面底部,打开染色体1的RefSeq链接。
  3. 按照图片指示下载为FASTA文件。
  4. 对其他染色体重复上述步骤。
  5. FASTA文件包含了标题和N等不需要的内容。dna_processing.py 脚本可以去除所有这些内容,并创建只包含ATGC的文本文件。将所有文件和dna_processing.py文件移动到一个文件夹中。
  6. dna_processing.py中,将chromosome_number设置为1来处理第一个染色体并运行代码。
  7. 为每个染色体更改chromosome_number并重新运行代码。

我一开始没有理解的一件事是:'A’总是与’T’配对,'G’总是与’C’配对。因此,FASTA/文本文件中的所有字母只是每对的一半。例如,文件中的一个’A’意味着一个AT配对,这就是在螺旋的“横档”上显示的内容。

DNA执行文件可以私信我进行获取

七、程序烧录

DNA_Lamp_Clean.inofunctions.ino 构成了螺旋灯的主要程序。正如我之前所说,一个已知的问题是碱基对在螺旋中的移动速度没有我想象的那么快。理想情况下(在最快速度下),它们应该每2毫秒更新一次,但实际上(在SD卡上存放所有染色体文件的情况下),我测量的速度在80-500毫秒之间(有时候可能会更慢;我的测试并不全面)。让事情变快的一个方法是一次只在SD卡上放置单个染色体的文件,但这意味着当Arduino处理完这些文件后,你将不得不将下一个染色体的文件放到SD卡上。你可以通过在代码中更改 ONE_CHROM_AT_TIME 来配置(所有文件或仅单个染色体)。

在主程序中,每个文件播放完毕后都会有庆祝模式,因此我也附加了一个仅包含庆祝模式的程序。我是用ChatGPT生成这些模式的,这相当容易也很有趣。我只需坐下来,请求模式,然后看看它们看起来有多酷。如果你想修改主程序中的模式,这段代码很有帮助。或者你可能只想全程运行模式代码。

在所有内容都上传并工作后(确保也将上一步骤中生成的DNA文件放到micro SD卡上),使用2-4个M3螺栓将灯座和底部连接在一起。你可能需要用刀子将底部的孔稍微扩大一些。确保在两部分组合在一起时,没有任何导线被夹住,以及按钮和电位计上裸露的电气连接没有触碰/短路到面包板上的任何东西。

以上所涉及到的程序可以私信我进行获取

八、总结及成品展示

在这里插入图片描述
按下电源按钮可以打开灯具。要关闭它,按住电源按钮直到灯光停止移动。

最后,为灯具找个地方,坐下来,享受这场灯光秀。整个人类的基因组代码正在照亮你的房间。

希望你喜欢这个项目,并在构建过程中找到乐趣!如果你有任何问题或需要帮助,欢迎在评论区交流。

作者:Svan.


注意:本博文为不得在未经本人同意进行转载或者二次创作,违者必究!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2184245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

六、Drf限流组件

六、限流组件 限制某个视图在某个时间段内被同一个用户访问的次数 6.1限流组件的简单应用 1)安装django-redis pip3 install django-redis2)在settings.py中注册cache #缓存数据库redis配置 CACHES{"default":{"BACKEND":"django_red…

AI 对话工具汇总

🐣个人主页 可惜已不在 🐤这篇在这个专栏AI_可惜已不在的博客-CSDN博客 🐥有用的话就留下一个三连吧😼 目录 前言: 正文: 前言: 在科技飞速发展的时代,AI 对话正逐渐成为我们获取信息、交流思想的新方式。它以强…

Mysql(索引与事务)

索引查询与普通查询的区别 普通查询 :执行步骤为先对表进行遍历,然后把当前的行带入条件中进行判断,符合条件执行,不符合跳出。这种情况在遇见数据较多的情况下就会出现问题,效率太低。 索引查询:是对查询…

深入解析 https

我的主页:2的n次方_ 1. 背景介绍 在使用 http 协议的时候是不安全的,可能会出现运营商劫持等安全问题,运营商通过劫持 http 流量,篡改返回的网页内容,例如广告业务,可能会通过 Referer 字段 来统计是…

k8s的控制节点不能访问node节点容器的ip地址

master控制node服务器添加容器后,访问不了该node服务器容器的ip,只能在node服务器访问 排查后发现是k8s的master服务器和node节点的网址网段和k8s初始化时提示的ip网段不一致 我之前是192.168.137.50, 实际上master主机期望的是192.168.1.50 解决方案: 1.删除服务器后重建ma…

网络原理-TCP协议

回顾上文 上一篇博客中详细描述了UDP的报文格式及特点 UDP报头 UDP载荷(应用层数据报),源端口,目的端口,报文长度,校验和无连接,不可靠传输,面向数据报,全双工 这一篇…

新160个crackme - 071-Rith.1

运行分析 需要破解Name和Serial点击Check It!按钮没反应 PE分析 C程序,32位,无壳 静态分析&动态调试 ida搜索字符串,双击进入关键函数 进行动态调试,逻辑如下:1、Name长度为5~20,Serial长度…

算法笔记(三)——前缀和算法

文章目录 一维前缀和二维前缀和寻找数组的中心下标除自身以外数组的乘积和为 K 的子数组和可被 K 整除的子数组连续数组矩阵区域和 前缀和算法是一种用空间换时间的算法,他常常用于解决某些题目或者作为某些高级算法的组成部分 一维前缀和 题目链接:DP3…

【最新】微信小程序连接onenet——stm32+esp8266+onenet实现查看温湿度,控制单片机

微信小程序——stm32esp8266onenet实现查看温湿度,控制单片机 (最新已验证)stm32 新版 onenet dht11esp8266/01s mqtt物联网上报温湿度和控制单片机(保姆级教程) :↓↓👇 👇 👇 &#x1f447…

【Linux】进程优先级、调度、命令行参数:从理论到实践(二)

🌈 个人主页:Zfox_ 🔥 系列专栏:Linux 目录 🚀 前言一: 🔥 进程优先级 🍵 基本概念🍵 查看系统进程🍵 PRI and NI🍵 PRI vs NI🍵 用to…

【Java SE 题库】移除元素(暴力解法)--力扣

🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 目录 1. 题目 2. 解法(快慢“指针”) 3. 源码 4. 小结 1. 题目 给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素。元素的顺…

Pre-trained Models for Natural Language Processing: A Survey

前言 预训练模型给下游任务带来的效果不言而喻,有了预训练模型,我们可以使用它来加速解决问题的过程。正如论文中所说的那样,预训练模型(PTMs)的出现将自然语言处理(NLP)带入了一个新时代。本篇…

各种饺子的做法

【羊肉馅水饺】 材料:羊肉1000克、洋葱2个、香油3汤匙、盐适量、姜2片、料酒1汤匙、白胡椒粉、十三香1茶匙、 做法: 1.把羊肉剁成肉馅,羊肉选用带一些肥肉的,味道比较香,如果羊肉比较瘦,可以放一些猪的肥肉一起剁成馅…

【Python】探索自然语言处理的利器:THULAC 中文词法分析库详解

THULAC(THU Lexical Analyzer for Chinese)是清华大学开发的一款中文词法分析工具,集成了分词和词性标注两大功能。THULAC 拥有强大的分词能力和高效的词性标注,适用于多种中文文本处理场景。该工具能够在保证高准确率的同时保持较…

修复OpenSSH远程代码执行漏洞:版本升级到9.9p1

目录 前言1. 备份配置文件2. 下载 OpenSSH 最新版本3. 编译安装 OpenSSH4. 替换旧版 OpenSSH 并创建符号链接5. 重启 SSH 服务6. 验证安装结果结语参考文章 前言 OpenSSH 是一种广泛使用的远程登录协议,它确保了服务器和客户端之间的安全通信。然而,随着…

Linux驱动开发(速记版)--设备树

第五十二章 初识设备树 52.1 设备树介绍 设备树(Device Tree)是嵌入式系统和Linux内核中用于描述硬件的一种机制。 设备树概述 目的:描述硬件设备的特性、连接关系和配置信息。 优势:与平台无关,提高系统可移植性和可…

【linux进程】进程优先级命令行参数环境变量

目录 一,进程切换二,进程优先级1. 什么是优先级2. 权限 vs 优先级3. 为什么要有优先级4. 优先级的查看方式 三,命令行参数1. 什么是命令行参数2. 为什么要有命令行参数3. 是谁做的 四,环境变量1. 基本概念2. 常见环境变量3. 查看环…

电商店铺多开自动回复软件

在电商平台上开设多个店铺,即店铺多开,是一种扩展业务和增加销售额的策略。然而,店铺多开需要谨慎规划和执行,以避免违反平台规定和管理上的混乱。以下是如何实现店铺多开的详细步骤和注意事项。 1. 确定多开目标 在决定多开店铺…

[云] Getting Started with Kubernetes - Environment setup 环境配置

启动一个 EC2 实例, 请按照以下步骤操作: 登录 AWS 控制台: 打开浏览器,访问 AWS Management Console 并登录到您的账户。 选择 EC2 服务: 在 AWS 控制台的“服务”菜单中找到并点击“EC2”进入 EC2 Dashboard。 启…

Spark SQL分析层优化

导读:本期是《深入浅出Apache Spark》系列分享的第四期分享,第一期分享了Spark core的概念、原理和架构,第二期分享了Spark SQL的概念和原理,第三期则为Spark SQL解析层的原理和优化案例。本次分享内容主要是Spark SQL分析层的原理…