提示:以下是本篇文章正文内容,下面案例可供参考
1. 前言
微流控注射泵作为一种重要的微流体设备,在医学、生物科学和化学实验等领域发挥着关键作用。本文旨在综合讨论微流控注射泵系统的设计与实现,涵盖了电路设计、PCB画板、机械结构和Arduino编写代码等关键领域。通过对这些方面的研究和讨论,我们可以深入了解微流控注射泵系统的原理和应用,并为相关研究和实际应用提供有价值的参考。
2.硬件设计
我们要得到的是三个电机,每一个电机控制一个4出口的电磁阀,三个电机需要单独控制注射器的一个装置。
2.1电路原理图设计
Mega2560实物图 ,选择Mega2560 因为Mega2560的IO口比较多 设计分配IO口比较自由。
Mega2560引脚表可以参考
电路原理图采用立创EDA
1.主控板
2.
3.使用mos管控制电磁阀的通断
4.3组开关控制电机的进出
5.三个电机 需要两块驱动芯片
6.12个电磁阀 每组电磁阀一正一负7.电源端子
最后经过PCB的排布连线,得出电路板。(这里省略)
2.2外观结构设计
通过3D打印中间的塑料板和螺丝固定注射器 整体由亚克力板和螺柱固定 组成的微流控注射泵
电机采用的是慢速电机,搭配编程可以使速度降低到更低实现微流控。
3.软件设计
整个软件基于Aruino编程 使用的都是最基本的函数和语法。
首先是定义的宏 便于修改
// 电机驱动
#define PWMA 3
#define PWMB 4
#define PWMC 5
#define AIN1 6
#define AIN2 7
#define STBY 8
#define BIN1 9
#define BIN2 10
#define CIN1 11
#define CIN2 12
#define STBY2 13
// 编码器
#define ED1 14
#define E1 2
#define ED2 15
#define E2 18
#define ED3 16
#define E3 19
//电磁阀
#define snva1 22
#define snva2 23
#define snva3 24
#define snva4 25
#define snvb1 26
#define snvb2 27
#define snvb3 28
#define snvb4 29
#define snvc1 30
#define snvc2 31
#define snvc3 32
#define snvc4 33
//开关
#define Ajia 36
#define Ajian 37
#define Bjia 34
#define Bjian 35
#define Cjia 38
#define Cjian 39
在setup里 配置端口的输入输出和一些PWM的启用和电机驱动芯片使能。
void setup()
{
pinMode(STBY, OUTPUT);
pinMode(PWMA, OUTPUT);
pinMode(AIN1, OUTPUT);
pinMode(AIN2, OUTPUT);
pinMode(PWMB, OUTPUT);
pinMode(BIN1, OUTPUT);
pinMode(BIN2, OUTPUT);
digitalWrite(STBY, LOW); //停止驱动低电平有效
pinMode(STBY2, OUTPUT);
pinMode(PWMC, OUTPUT);
pinMode(CIN1, OUTPUT);
pinMode(CIN2, OUTPUT);
digitalWrite(STBY2, LOW); //停止驱动低电平有效
//开关
pinMode(Ajia,INPUT);
pinMode(Ajian,INPUT);
pinMode(Bjia,INPUT);
pinMode(Bjian,INPUT);
pinMode(Cjia,INPUT);
pinMode(Cjian,INPUT);
//电磁阀
pinMode(snva1, OUTPUT);
pinMode(snva2, OUTPUT);
pinMode(snva3, OUTPUT);
pinMode(snva4, OUTPUT);
pinMode(snvb1, OUTPUT);
pinMode(snvb2, OUTPUT);
pinMode(snvb3, OUTPUT);
pinMode(snvb4, OUTPUT);
pinMode(snvc1, OUTPUT);
pinMode(snvc2, OUTPUT);
pinMode(snvc3, OUTPUT);
pinMode(snvc4, OUTPUT);
//电机编码器
pinMode(ED1, INPUT);
pinMode(E1, INPUT);
pinMode(ED2, INPUT);
pinMode(E2, INPUT);
pinMode(ED3, INPUT);
pinMode(E3, INPUT);
Serial.begin(115200);
控制电机运动的代码 这样可以执行电机最基本的运动 1速度 2方向 和 3电机选择
void move(int motor,int speed,int mode)
//motor1 AO1 A02 motor2 BO1 B02 motor3 CO1 C02
//speed 用来调pwm波大小 0-255
// mode=0 向后拉 mode=1 往前推
{
digitalWrite(STBY, HIGH);
digitalWrite(STBY2,HIGH);
boolean pin1=HIGH;
boolean pin2=LOW;
if(!mode)
{
pin1=LOW;
pin2=HIGH;
}
switch (motor)
{
case 1:
{
digitalWrite(AIN1,pin1);
digitalWrite(AIN2,pin2);
analogWrite(PWMA,speed);
break;
}
case 2:
{
digitalWrite(BIN1,pin1);
digitalWrite(BIN2,pin2);
analogWrite(PWMB,speed);
break;
}
case 3:
{
digitalWrite(CIN1,pin1);
digitalWrite(CIN2,pin2);
analogWrite(PWMC,speed);
break;
}
}
}
这一部分是实现按键控制电机的移动 按下移动
3组开关分别对应控制3个电机的前进后退
增加delay(20)的操作进行按键的消抖
void keycontrol()
{
if(digitalRead(Ajia)==LOW)
{
move(1,255,1);
delay(20);
if(digitalRead(Ajia)==HIGH)
move(1,0,1);
}
if(digitalRead(Ajian)==LOW)
{
move(1,255,0);
delay(20);
if(digitalRead(Ajian)==HIGH)
move(1,0,0);
}
if(digitalRead(Bjia)==LOW)
{
move(2,255,1);
delay(20);
if(digitalRead(Bjia)==HIGH)
move(2,0,1);
}
if(digitalRead(Bjian)==LOW)
{
move(2,255,0);
delay(20);
if(digitalRead(Bjian)==HIGH)
move(2,0,0);
}
if(digitalRead(Cjia)==LOW)
{
move(3,255,1);
delay(20);
if(digitalRead(Cjia)==HIGH)
move(3,0,1);
}
if(digitalRead(Cjian)==LOW)
{
move(3,255,0);
delay(20);
if(digitalRead(Cjian)==HIGH)
move(3,0,0);
}
}
最后一部分都是电磁阀的控制,这里我把他封装在一起,可以实现自由的控制
这里只拿一组电磁阀举例子。总共以下几种电磁阀的通断,我用二进制的形式进行封装。例如setsnv_a(xxxx)就可以随意的控制哪几个电磁阀通,哪几个电磁阀断。
void setsnv_a(int a)//a电机控制
{
switch(a)
{
case 0000:digitalWrite(snva1,LOW);digitalWrite(snva2,LOW); digitalWrite(snva3,LOW); digitalWrite(snva4,LOW); break;
case 0001:digitalWrite(snva1,HIGH);digitalWrite(snva2,LOW); digitalWrite(snva3,LOW); digitalWrite(snva4,LOW); break;
case 0010:digitalWrite(snva1,LOW);digitalWrite(snva2,HIGH); digitalWrite(snva3,LOW); digitalWrite(snva4,LOW);break;
case 0011:digitalWrite(snva1,HIGH);digitalWrite(snva2,HIGH); digitalWrite(snva3,LOW); digitalWrite(snva4,LOW);break;
case 0100:digitalWrite(snva1,LOW);digitalWrite(snva2,LOW);digitalWrite(snva3,HIGH); digitalWrite(snva4,LOW);break;
case 0101:digitalWrite(snva1,HIGH);digitalWrite(snva2,LOW);digitalWrite(snva3,HIGH); digitalWrite(snva4,LOW);break;
case 0110:digitalWrite(snva1,LOW);digitalWrite(snva2,HIGH);digitalWrite(snva3,HIGH); digitalWrite(snva4,LOW);break;
case 0111:digitalWrite(snva1,HIGH);digitalWrite(snva2,HIGH);digitalWrite(snva3,HIGH); digitalWrite(snva4,LOW);break;
case 1000:digitalWrite(snva1,LOW);digitalWrite(snva2,LOW);digitalWrite(snva3,LOW); digitalWrite(snva4,HIGH);break;
case 1001:digitalWrite(snva1,HIGH);digitalWrite(snva2,LOW);digitalWrite(snva3,LOW); digitalWrite(snva4,HIGH);break;
case 1010:digitalWrite(snva1,LOW);digitalWrite(snva2,HIGH);digitalWrite(snva3,LOW); digitalWrite(snva4,HIGH);break;
case 1011:digitalWrite(snva1,HIGH);digitalWrite(snva2,HIGH);digitalWrite(snva3,LOW); digitalWrite(snva4,HIGH);break;
case 1100:digitalWrite(snva1,LOW);digitalWrite(snva2,LOW);digitalWrite(snva3,HIGH); digitalWrite(snva4,HIGH);break;
case 1101:digitalWrite(snva1,HIGH);digitalWrite(snva2,LOW);digitalWrite(snva3,HIGH); digitalWrite(snva4,HIGH);break;
case 1110:digitalWrite(snva1,LOW);digitalWrite(snva2,HIGH);digitalWrite(snva3,HIGH); digitalWrite(snva4,HIGH);break;
case 1111:digitalWrite(snva1,HIGH);digitalWrite(snva2,HIGH);digitalWrite(snva3,HIGH); digitalWrite(snva4,HIGH);break;
}
}
最后可以通过目标不同 编写不同的主程序代码 实现不同的操控,实现微流控的注射。
4.总结
本次的设计主要是用于博士师姐的生物实验的前期 由实验室师兄共同完成微流控注射的硬件和软件设计。