当前位置: 首页 > news >正文

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

基于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.


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

相关文章:

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

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

【算法系列-链表】设计链表

【算法系列-链表】设计链表 文章目录 【算法系列-链表】设计链表1. 算法分析🛸2. 解题过程🎬2.1 初始化2.1.1 思路分析🎯2.1.2 代码示例🌰 2.2 get(获取第n个节点的值)2.2.1 思路分析🎯2.2.2 代码示例🌰 2.…...

螺狮壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习03(网络及IP规划)

3 网络及IP规划 3.1 容器连接网络初步规划 规划所有容器与虚拟机的三张网卡以macvlan的方式进行连接(以后根据应用可以更改),在docker下创建nat、wifi、nei、wai四张网卡,他们和虚拟机及宿主机上NIC的相关连接参数如下表所示&am…...

Zookeeper下载、安装配置

一、基础配置 使用zookeeper 需要提前配置安装好zookeeper的环境 端口 默认的2888端 默认的 2888端口‌主要用于Leader和Follower之间的通信。在ZooKeeper集群中,这个端口用于数据同步、服务器初始化以及会话管理等方面的通信。默认的3888 3888端口‌则是在选举L…...

【代码记录】多线程示例代码

用多线程处理多gpu模型输入的时候写的,感觉复用性会很不错,用以记录和分享 import threading def multithreadhelper(workfn,alldata:list,number:int):# workfn takes only one argument: a example of alldata# data preparationdef chunk_data(data,…...

【数据结构】什么是平衡二叉搜索树(AVL Tree)?

🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 📌AVL树的概念 📌AVL树的操作 🎏AVL树的插入操作 ↩️右单旋 ↩️↪️右左双旋 ↪️↩️左右双旋 ↪️左单旋 🎏AVL树的删…...

ip的类型有多少种?我想做大数据需要使用哪一种

IP地址主要分为两种类型: IPv4(Internet Protocol version 4): 由32位二进制数组成,通常以四个十进制数表示(例如:192.168.1.1)。每个十进制数的范围是0到255。IPv4地址的总数量约为…...

位运算(6)_只出现一次的数字 II

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 位运算(6)_只出现一次的数字 II 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 …...

C#的Socket编程细节

目录 Socket中的Accept 步骤1:创建并绑定服务端套接字 步骤2:接受连接请求 步骤3:与客户端通信 步骤4:关闭套接字 注意事项 Socket中的Connected 使用Connected属性 客户端检查连接状态 服务端检查连接状态 注意事项 S…...

python三局两胜游戏

分为以下步骤实现这个功能 1、猜拳 2、机器产生数值 3、人去猜数字,定义剪刀石头布 4、控制机器产生,123程序运行的时候可能会出现一点玄学问题,就是,提示n1这一行不符合pep8然后报错,不用管,运行就可以&am…...

java:brew安装rabbitmq以及简单示例

什么是消息队列mq 可以看我之前写的这篇 消息队列MQ rabbitmq简介 RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在…...

基于单片机跑步机控制系统设计

** 文章目录 前言概要功能设计设计思路 软件设计效果图 程序文章目录 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对…...

【架构】efk日志监控

文章目录 一、EFK组件及其功能二、EFK日志监控的工作流程三、EFK日志监控的优势四、EFK日志监控的应用场景 推荐阅读 EFK日志监控是一种高效的日志管理解决方案,由Elasticsearch、Fluentd(或Logstash)和Kibana三个开源工具组成。以下是对EFK日…...

亚信安全发布第34期《勒索家族和勒索事件监控报告》

本周态势快速感知 本周全球共监测到勒索事件91起,近三周勒索事件数量较为稳定。从整体上看,Ransomhub是影响最严重的勒索家族;Play和ElDorado恶意家族也是两个活动频繁的恶意家族,需要注意防范。本周,土耳其公司巴克皮…...

如何在实际应用中使用回溯算法解决问题?

如何在实际应用中使用回溯算法解决问题? 回溯算法是一种强大的问题解决方法,它通过尝试不同的选择并在遇到不可行的情况时回退,以找到满足特定条件的解决方案。在实际应用中,回溯算法可以用于解决各种复杂的问题。本文将介绍如何在实际应用中使用回溯算法,并通过一些案例…...

9. 正则表达式

编程工具和技术是以一种混乱、进化的方式生存和传播的。获胜的并不总是最好或最杰出的工具,而是那些在合适的利基市场中发挥足够好的功能,或者恰好与另一项成功的技术相结合的工具。 在本章中,我将讨论这样一种工具--正则表达式。正则表达式是…...

初始C++模板

1.泛型编程 1.1什么事泛型编程 在学习C语言时,我们时常会有这样的烦恼: 在针对每一种不同的类型变量进行函数传参或者是运算处理时,我们总是编写不同的函数或者是进行不同的处理,才能达到目的,这时,我们…...

建投数据自主研发相关系统获得欧拉操作系统及华为鲲鹏技术认证书

近日,经欧拉生态创新中心和华为技术有限公司测评,建投数据自主研发的投资项目管理系统、全面风险管理信息系统、商业不动产业务系统,完成了基于欧拉操作系统openEuler 22.03、华为鲲鹏Kunpeng 920(Taisha 200)的兼容性…...

node启动websocket保持后台一直运行

在 Node.js 中启动一个 WebSocket 服务器并使其在后台持续运行,你可以使用几种方法。下面是一种常见的方法,通过创建一个简单的 WebSocket 服务器并使用 node 命令直接运行它,同时确保它在后台运行。 1. 创建 WebSocket 服务器 首先&#x…...

CSS画出三角形的做法

引言: 在网页中,会有三角形的出现,我们脑海里会有很多想法,如何去实现他们,我来提供一种比较好玩的做法。 方法: 我们实现一个三角形,当然可以使用精灵图、或者iconfont的做法,这…...

web开发(1)-基础

这是对b站课程的总结,后续可能会继续更 01 前后端分离介绍_哔哩哔哩_bilibili01 前后端分离介绍是Web应用开发-后端基础-基于Springboot框架的第1集视频,该合集共计29集,视频收藏或关注UP主,及时了解更多相关视频内容。https://w…...

python程序操作Windows系统中的软件如word等(是否可以成功操作待验证)

一、python打开word软件 在 Python 中可以使用python-docx库来操作 Word 文档,但如果你的需求是直接打开 Word 软件,你可以使用os模块和subprocess模块来实现。以下是示例代码: import os import subprocessdef open_word():word_path rC:…...

人工智能发展历程

发展历程 人工智能的发展可以追溯到20世纪30年代,当时数理逻辑的形式化和智能可计算思想开始构建计算与智能的关联概念。1943年,美国神经科学家麦卡洛克和逻辑学家皮茨共同研制成功了世界上首个人工神经网络模型——MP模型,这为现代人工智能…...

Flutter路由

路由作为一种页面切换的能力,非常重要。Flutter 中路由管理有几个重要的点。 Navigator 1.0:Flutter 早期路由系统,侧重于移动端 ,命令式编程风格,使用 Navigator.push() 和 Navigator.pop() 等方法来管理路由栈。 N…...

css预处理器less

CSS预处理器Less教程 CSS预处理器是一种扩展CSS功能的工具,它允许开发者使用变量、嵌套规则、混合(Mixins)、函数等高级特性,使CSS代码更加灵活、易于维护和扩展。Less是其中一种流行的CSS预处理器,它使用JavaScript编…...

WEB服务器——Tomcat

服务器是可以使用java完成编写,是可以接受页面发送的请求和响应数据给前端浏览器的,而在开发中真正用到的Web服务器,我们不会自己写的,都是使用目前比较流行的web服务器。 如:Tomcat 1. 简介 Tomcat 是一个开源的轻量…...

C++ STL(3)list

文章目录 一、list 详解1、内存管理2、常用操作3、迭代器erase()删除list中的元素 前言: C 标准模板库(STL)中的 list 容器是一种双向链表数据结构,它允许在常数时间内进行插入和删除操作,而无需重新分配整个容器或移动…...

Ubuntu下安装Zookeeper集群

Zookeeper集群是一个开源的分布式协调服务系统,它由Apache软件基金会维护,旨在为分布式应用提供一致性和可靠性的服务。 在Zookeeper集群中,服务器可以扮演三种角色——领导者(Leader)、跟随者(Follower&a…...

模版and初识vector

一、引言 在C语言中,不论是数组,还是结构体定义的数组,功能都比较欠缺,不是单纯的添加几个变量就能够解决的。缺少增删查改的功能,为了解决这个问题,C决定填上C语言这个坑,但是填过坑的人都知道…...

网站开发基础:HTML、CSS

前端开发主要使用的技术如 HTML、CSS 和 JavaScript 等。 简单制作一个网页 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>柒毓同学网站的首页</title><style>.c1{border: solid 1px g…...

wordpress如何改默认后台地址/dz论坛seo设置

本文以如下树结构为例 深度优先(Deep First Search) 树的孩子称作子树&#xff0c;对于一个树进行深度优先遍历&#xff0c;即将其某一子树下所有节点遍历完再去遍历其他子树。遍历的顺序以根为参照可分为先序遍历&#xff0c;中序遍历&#xff0c;后序遍历。 遍历方式描述…...

1核2g 做网站/seo公司推广宣传

说来惭愧啊。。现在才会并查集。我竟然给我妈妈讲明白并查集怎么回事了- - #define _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace std;#define maxx 50010int set[maxx];int find(int x) { return x set[x] ? x : (set[x] find(set[x])); }int main…...

门户站点是什么/太原百度快照优化排名

文章目录回归问题分类问题快速搭建法保存提取批训练Optimizer优化器回归问题 建立数据集 # 建立数据集 import torch import matplotlib.pyplot as pltx torch.unsqueeze(torch.linspace(-1, 1, 100), dim1) # x data (tensor), shape(100, 1) y x.pow(2) 0.2*torch.rand…...

东莞做企业网站/做一个app软件大概要多少钱

linklinklink 分析&#xff1a; sumsumsum为前缀异或和 如果al⊗al1⊗...⊗ar−1⊗ar0a_l⊗a_{l1}⊗...⊗a_{r-1}⊗a_{r}0al​⊗al1​⊗...⊗ar−1​⊗ar​0 那么suml−1sumrsum_{l-1}sum_rsuml−1​sumr​ 如果对于sumxsum_xsumx​ 有cntcntcnt个前缀和与它相等 方案数有cnt…...

做自己的网站需要什么/德阳seo

我有一组数据&#xff0c;其中x和y是函数中已知的参数&#xff0c;它们在函数中写成xx和yx1&#xff0c;我需要拟合这些数据&#xff0c;这样才能得到未知参数(E&#xff0c;B0&#xff0c;S0)的值。到目前为止&#xff0c;我有这个&#xff0c;但是当我尝试运行这个时&#xf…...

怎么建网站视频/浏览器打开是2345网址导航

别人写的很清楚的一篇&#xff1a; export和export default的区别...