本帖最后由 Kara 于 2022-11-17 15:02 编辑
利用电子废弃物制作的低成本离心机,物联网远程环境监控系统
高质量的微型离心机通常太贵,大多数人买不起。该项目旨在提供低成本的替代方案。
简介
微型离心机是任何生物医学实验室的必备设备。然而,像这样的生物医学设备对于大多数爱好者来说通常都太贵了,所以我开发了这个离心机来帮助降低一个合适的微型离心机的成本。
什么是微型离心机? 微型离心机是一种设备,以很高的转速旋转样品,以分离和纯化样品中的材料。微离心机的一个常见用途是差速离心,它用于从细胞样本中分离细胞器和核酸(如DNA)。高质量、可靠的微型离心机的价格从1000美元起,入门级微型离心机的价格约为300- 700美元。这对许多业余爱好者和其他人来说太贵了,所以我开始开发自己的开源微离心机。
项目影响
该项目的目标贫困学校和资金不足、买不起适当设备的医院。我希望这个项目将对许多人有用,并能在其他方面无法提供机会的领域开辟机会。
设计过程 1. 硬件 对于这个项目,我将使用arduino 101,因为我正在参加发明未来比赛。不过不幸的是,我没有赢得Arduino 101,所以我买了一个。我想让这个设备联网,以便把它集成到我即将到来的互联网连接生物黑客实验室,并将最终开发一个应用程序,可以集成这些设备,以提供无缝的实验室体验。
为了制作离心机,我需要一个马达,它可以以很高的转速旋转,以产生足够的向心力来分离细胞样本。我决定使用一个3.5英寸的硬盘,因为它可以以7200转/分钟的速度旋转,并且应该能够产生高达4400克的功率!因为我想让这个离心机尽可能的用户友好,同时给用户最大的控制权,我选择增加一个液晶显示器,电位器,和几个按钮,这样我就可以开发一个有用的设备界面。我还想增加一个互联网控制的离心机接口,使设备更容易使用。
为了能够使用硬盘驱动器,我们需要移除硬盘驱动器的所有部分,除了电机。为了做到这一点,我们需要从使用TORX扳手去除背板上的PCB开始。我没有正确大小的torx扳手,所以我只是撕下了PCB。我并不打算使用它,虽然它应该是好的。
现在已经取下了PCB,翻转硬盘驱动器,并开始删除螺丝在红色圈的区域。一旦你做对了,你应该能够撬开保护板。
现在,您已经拆卸了前板,然后您可以拆卸针的硬盘驱动器通过拆卸顶部磁铁撬出它与螺丝刀。它只是被两块磁铁的力粘在了一起。取下它们的时候要小心,因为磁铁的吸力非常强大,我之前在玩它们的时候很多次不小心压到了我的手指。
只要能够把上面的磁铁拿掉,剩下的就很简单了!只要取下针铰链上的螺丝,然后取下针。然后你就可以继续拆卸固定第二个磁铁的其他螺丝了。
完成之后,取下固定盘片的螺丝,取出来盘片和垫片。 布线
要控制硬盘驱动器,我们必须添加一个ESC(电子速度控制器)到设备。我使用的是一个标准的爱好ESC,常用在爱好飞机,因为它运行12v,和硬盘运行12v。为了给ESC和硬盘提供足够的电源,你可以使用任何12v电源,但我找不到,所以我使用了一个标准的计算机电源。我把一个跳线连接到绿色的电线和一个GND端子上,这样它一插进去就能接通电源。你也可以添加一个电源开关来增加一些额外的控制设备。
将ESC连接到12v轨和GND上。然后将ESC的PWM线缆连接到GND、5V和D7。从5v和GND接一个电位器,中间端接A0。然后你可以测试一下电机的接线。
测试/基本的原型
上传以下代码到Arduino 101: - #include <Servo.h>
- Servo esc;
- int throttlePin = 0;
- void setup()
- {
- esc.attach(9);
- }
- void loop()
- {
- int throttle = analogRead(throttlePin);
- throttle = map(throttle, 0, 1023, 0, 179);
- esc.write(throttle);
- }
复制代码
要连接电机到ESC,你必须做一个连续性测试,检查是否在硬盘驱动器的底部的引脚连接或不。你也可以随机焊接在ESC的电线上的针上的硬盘驱动器电机,并切换他们如果电机不工作,因为有6个可能的组合,只有2个工作正常。这些代码和线路应该足以开发一个基本的离心机。
3D打印照片:
安装和测试之后,我们就可以改进代码和界面了。我在Arduino上添加了格罗夫盾(Grove Shield)和液晶显示器(LCD),并在程序中添加了RPM指示器。不能完全依靠它的读数,因为它提供的估计基于电位器上的读数,而不是电机。下面是v0.1代码的副本: - #include <Wire.h>
- #include "rgb_lcd.h"
- #include <Servo.h>
- Servo esc;
- rgb_lcd lcd;
- int throttlePin = 0;
- void setup() {
- // set up the LCD's number of columns and rows:
- lcd.begin(16, 2);
- // Print a message to the LCD.
- lcd.print("Initializing...");
- esc.attach(9);
- lcd.setRGB(50, 50, 50);
- }
- void loop() {
- lcd.clear();
- int throttle = analogRead(throttlePin);
- throttle = map(throttle, 0, 1023, 0, 179);
- int throttlepercent = (throttle*100) / 179;
- int myRPM = 7200 / (100 - throttlepercent);
- esc.write(throttle);
- // Turn off the display:
- lcd.print("Speed: ");
- if(myRPM == -1){
- lcd.print("7200");
- }else if(myRPM <= 100){
- lcd.print("0");
- }else{
- lcd.print(myRPM);
- }
- lcd.print(" RPM");
- delay(50);
- }
复制代码该设备工作时的照片: - V0.1 Code(Current):
- #include <Wire.h>
- #include "rgb_lcd.h"
- #include <Servo.h>
-
- Servo esc;
- rgb_lcd lcd;
- int throttlePin = 0;
- void setup() {
- // set up the LCD's number of columns and rows:
- lcd.begin(16, 2);
- // Print a message to the LCD.
- lcd.print("Initializing...");
- esc.attach(9);
- lcd.setRGB(50, 50, 50);
- }
- void loop() {
- lcd.clear();
- int throttle = analogRead(throttlePin);
- throttle = map(throttle, 0, 1023, 0, 179);
- int throttlepercent = (throttle*100) / 179;
- int myRPM = 7200 / (100 - throttlepercent);
- esc.write(throttle);
- // Turn off the display:
- lcd.print("Speed: ");
- if(myRPM == -1){
- lcd.print("7200");
- }else if(myRPM <= 100){
- lcd.print("0");
- }else{
- lcd.print(myRPM);
- }
- lcd.print(" RPM");
- delay(50);
- }
复制代码
如果您对此项目有任何想法、意见或问题,请在下方留言。 以上内容翻译自网络,原作者:kemfic,如涉及侵权,可联系删除。
|