风筝
发表于: 2020-12-31 10:40:01 | 显示全部楼层

由于近期的COVID-19病毒,人类的生活发生了巨大变化,最大程度地减少病毒传播的唯一方法是保持社会距离并遵循我们各自政府提出的指导方针。现如今消毒和灭菌已成为我们日常生活中不可分割的一部分。谈到消毒和灭菌,存在一个问题,我们不能直接参与灭菌过程,因为有可能从受污染的空间中感染致命的病毒,因此我们要解决的问题是制作一个功能强大,、高效且自主的机器人,可以很容易地对场所进行消毒,而无需暴露自己。机器人可用于人类面临暴露风险的多种应用中。因此,在本篇文章中,我们将制作一个紫外线消毒机器人,该机器人可以杀死医院和公寓大楼中的冠状病毒,我们将使用Arduino、一些UV LED和超声波传感器进行制作。


紫外线如何消灭病毒和病原体?

机器人的主要功能是使用紫外线(UV)杀菌辐射对房间或物体表面进行消毒。该机器人使用杀死病毒的紫外线LED。已知的细菌、病毒等生物体在暴露于紫外线时会失活。紫外线会破坏病原体中的遗传物质,即细菌中的DNA和病毒中的RNA,从而阻止了它们的繁殖。像病毒一样的COVID-19可以在表面长时间保持活性,并且已证明紫外线可以破坏病毒中的RNA,从而在过程中将其杀死,从而减少了传播的机会。


紫外线消毒机器人的工作原理

该机器人是全自动的,它将检测到障碍物并在碰撞发生之前避开障碍物。有很多方法可以检测到障碍物,但是对于本文,我们选择使用超声波传感器模块来进行检测,因为与常规的基于IR的避障传感器相比,它具有更多优势,首先是范围,与基于IR的接近传感器的范围相比它具有更广的范围。其次,像红外传感器一样,阳光不会干扰传感器的感应功能。下图显示了此项目中使用的所有传感器。

HC-SR04-Ultrasonic-Distance-Sensor.jpg


HC-SR04超声波距离传感器模块具有4个引脚VCC、Trigger、Echo和地。它有一台超声波发射器和一台接收器。工作非常简单,第一个模块发送超声波,该超声波在空气中传播,撞到障碍物时反弹,然后在接收器接收到该波。要测量物体的距离,我们需要计算反弹波所花费的时间。我们可以借助微控制器来计算该时间,借助该方程式Distance =声音速度*所花费的时间,我们可以计算障碍物的距离。


在该机器人中,我们具有三个超声波传感器,用于检测左右和前方的障碍物。当障碍物进入任何传感器的前方(一定距离)时,机器人将转向另一侧并避开该障碍物,例如,如果障碍物在左侧传感器的前方,机器人将向右移动。

Ultrasonic-Distance-Sensor-Working.png


接通机器人电源后,UV LED将保持点亮状态,并且消毒过程将持续。它总共有十个UV LED(每侧两个、下侧两个),因此可以进行360°+下侧灭菌。该机器人的操作是100%安全的,它将检测周围环境中的物品,以确保其操作和操作员的安全(避开障碍物)。当执行紫外线照射时,该机器人是完全自主的,该机器人可以进行完整的360度运动。


制造紫外线杀菌消毒机器人所需的组件

由于我们使用了非常通用的组件来制作机器人的控制和硬件部分,因此您很容易找到所有这些组件。

●    Arduino Pro Min开发板

●    HC-SR04超声波模块

●    L293D电机驱动器

●    5V N20电动机和安装支架

●    N20马达轮

●    紫外线LED

●    7805稳压器

●    7.4V锂离子电池

●    330R电阻

UV-Sanitization-Robot-Components.jpg


紫外线消毒机器人的原理图

Ultraviolet-Light-Enabled-Surface-Disinfecting-Robot-Circuit-Diagram.png


该原理图刚开始看起来很复杂,但是非常简单。我们使用三个超声波传感器来检测障碍物。我们分别连接了所有传感器的Ground和VCC引脚,Ground引脚连接至Arduino的接地,VCC引脚连接至Arduino的VCC引脚。如电路图所示,将Trig和Echo引脚连接到Arduino PWM引脚。我们使用L293D电机驱动器驱动电机,将电机驱动器的两个使能引脚连接到5v,我们也需要将驱动器电压引脚连接到5v,因为我们使用的是5v兼容电机。我们将所有的UV LED并联连接,每个UV LED都包含一个限流电阻,并将它们全部连接至VCC和地。在本文中,我们根据所使用的LED类型选择了电阻,LED是通用类型,因此我使用的是330ohm电阻。 Arduino、超声波模块、电动机驱动器和电动机工作在5V,我们使用的是7.4伏电池,使用了7805稳压器将其转换为5伏。


使用Arduino Pro Mini制作电路

由于我们制作的是一个移动机器人,因此需要使所有物体都尽可能小。为了将每个组件焊接在一起,首先,我使用了一个非常小的PCB面包板,并根据电路图放置了每个组件,然后进行了所有焊接。这部分非常简单。完成焊接过程后,电路板和传感器如下图所示。

Arduino-Pro-Mini.jpg


制作消毒机器人的外壳

我们需要放置三个超声传感器模块,并隐藏所有其他电路以进行更好的修饰。在我们制作过程中,可以选择多种类型的外壳,例如泡沫板、MDF、硬纸板等。本文中,我们选择泡沫板是因为它很容易修改,并且表面看起来很棒。


为了制作外壳,首先在泡沫板上划线,然后将它们切下来。我们切割的前四个块是每个11 CM,完成后,我们使用四个3CM的正方形块切出机器人的底部,并钻了所有必要的孔,第一个大孔将用于脚轮和另外两个将容纳UV LED。

Enclosure-for-Arduino-Based-Sterilizing-Robot.jpg


在对所有零件进行切割和钻孔之后,我们使用其支架将所有N20电机安装在了追逐器上。在另一个正方形上,我们像盒子一样固定了四个矩形,并插入了超声波传感器和LED。再次检查完所有内容后,我们将电池放好。

Arduino-Based-Sterilizing-Robot-Assembly.jpg


代码说明

接下来,我们将逐步讲解代码的重要部分。我们不使用任何额外的库来解码HC-SR04传感器的距离数据,因为它非常简单。

在代码中,我们定义连接到Arduino开发板的Trig引脚和Echo引脚。在本文中,我们有三个Trig引脚和三个Echo引脚。请注意,1表示左传感器,2表示前传感器,3表示右传感器。

  1. const  int trigPin1 = 3;
  2. const int echoPin1 = 5;
  3. const int trigPin2 = 6;
  4. const int echoPin2 =9;
  5. const int trigPin3 = 10;
  6. const int echoPin3 = 11;
复制代码

然后,我们定义了距离相关的所有变量,它们都是(int)类型变量,对于持续时间,我们选择使用(long)。同样,我们每个都有三个。

  1. long duration1;
  2. long duration2;
  3. long duration3;
  4. int distanceleft;
  5. int distancefront;
  6. int distanceright;
复制代码

接下来,在setup()函数中,我们需要使用pinModes()函数将所有相关引脚作为输入或输出。要从模块发送超声波,我们需要将Trig引脚设为高电平,所有Trig引脚都应定义为OUTPUT。为了接收回声,我们需要读取Echo引脚的状态,所有Echo引脚都应定义为INPUT。另外,我们启用串口监视器进行故障排除

  1. pinMode(trigPin1, OUTPUT);
  2. pinMode(trigPin2, OUTPUT);
  3. pinMode(trigPin3, OUTPUT);
  4. pinMode(echoPin1, INPUT);
  5. pinMode(echoPin2, INPUT);
  6. pinMode(echoPin3, INPUT);
  7. Serial.begin(9600);
复制代码

以下这些数字引脚被定义为电机驱动器的输出。

  1. pinMode(4, OUTPUT);
  2. pinMode(7, OUTPUT);
  3. pinMode(8, OUTPUT);
  4. pinMode(12, OUTPUT);
复制代码

loop函数中,我们为三个传感器提供了三个段代码。工作原理相同,但每段代码适用于不同的传感器。在本节中,我们读取与每个传感器的障碍物距离并将其存储在每个定义的整数中。要读取距离,首先,我们必须确保清除Echo引脚,为此,我们需要将触发引脚设置为LOW持续2 µs。现在,为了产生超声波,我们需要将Trig引脚转为高电平10 µs。使用pulseIn()函数,我们可以读取行程时间,并将该值存储到变量“ duration”中。此功函数有2个参数,第一个是Echo引脚的名称,第二个可以写入HIGH或LOW。高电平意味着pulseIn()函数将等待由反弹的声波引起的引脚变为高电平并开始计数,然后在声波结束时等待引脚变为低电平而停止计数。并且此函数给出脉冲的长度(以微秒为单位)。为了计算距离,我们将持续时间乘以0.034(空气中的声音速度为340m / s),然后将其除以2(这是由于声波的来回传播)。最后,我们将每个传感器的距离存储为相应的整数。

  1. digitalWrite(trigPin1, LOW);
  2. delayMicroseconds(2);
  3. digitalWrite(trigPin1, HIGH);
  4. delayMicroseconds(10);
  5. digitalWrite(trigPin1, LOW);
  6. duration1 = pulseIn(echoPin1, HIGH);
  7. distanceleft = duration1 * 0.034 / 2;
  8. Serial.print("Distance1: ");
  9. Serial.println(distanceleft);
复制代码

与每个传感器保持距离后,我们可以借助if语句控制电机,从而控制机器人的运动。这非常简单,首先,我们给出的障碍物距离值为15厘米(根据需要更改此值)。然后我们根据该值给出条件。例如,当障碍物进入左传感器的前方(即左传感器的距离应小于或等于15 cm)并且其他两个距离都很高(这意味着该传感器的前方无障碍物)时,然后使用digital write函数,我们可以将电机向右驱动。

  1. if ((distanceleft <= 15 && distancefront <= 15 && distanceright > 15) || (distanceleft <= 15 && distancefront > 15 && distanceright > 15))
复制代码

以上条件仅表示在右传感器(右传感器的距离小于15厘米)前方以及前传感器中是否有障碍物,以及左传感器前是否无障碍物或障碍物仅出现在左侧传感器的前面。


以下代码的用于向右移动机器人:

  1. digitalWrite(4, HIGH);
  2. digitalWrite(7, LOW);
  3. digitalWrite(8, HIGH);
  4. digitalWrite(12, LOW);
复制代码

Automatic-Surface-Disinfecting-Robot.jpg


以上就是本篇文章的全部内容。如有任何疑问,您可以在本帖下面进行回复。


跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1480



手机版|

GMT+8, 2024-4-20 15:56 , Processed in 0.174019 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表