提示:以下是本篇文章正文内容,下面案例可供参考

1. 前言

微流控注射泵作为一种重要的微流体设备,在医学、生物科学和化学实验等领域发挥着关键作用。本文旨在综合讨论微流控注射泵系统的设计与实现,涵盖了电路设计、PCB画板、机械结构和Arduino编写代码等关键领域。通过对这些方面的研究和讨论,我们可以深入了解微流控注射泵系统的原理和应用,并为相关研究和实际应用提供有价值的参考。

2.硬件设计

我们要得到的是三个电机,每一个电机控制一个4出口的电磁阀,三个电机需要单独控制注射器的一个装置。

2.1电路原理图设计

Mega2560实物图 ,选择Mega2560 因为Mega2560的IO口比较多 设计分配IO口比较自由。

在这里插入图片描述
Mega2560引脚表可以参考

https://blog.csdn.net/qq_43419705/article/details/104962808?ops_request_misc=&request_id=&biz_id=102&utm_term=arduino%20mega2560%E5%8E%9F%E7%90%86%E5%9B%BE&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-4-104962808.nonecase&spm=1018.2226.3001.4187

电路原理图采用立创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.总结


本次的设计主要是用于博士师姐的生物实验的前期 由实验室师兄共同完成微流控注射的硬件和软件设计。


Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐