Arduino实例1:——自制一个简易实用的无接触式洗手液器

疫情期间,勤洗手是和戴口罩同等重要的一项防护工作。

国内疫情暂缓,国外疫情还是很严重。平时用洗手液,必须用手去按压,手上的细菌很有可能会残留在按压处。

今天我们来介绍一个国外小哥做的构造十分简单的无接触式洗手液辅助器。

项目的主要材料涉及一块Arduino板子,一个伺服电机,一个超声波传感器。自己在家DIY一个,不仅能一定程度上减少病菌残留,还能省一点洗手液。

材料清单

洗手液选择

 因为只是做一个外接的辅助的装置,所以我们需要选一个按压式的洗手液瓶子。

元器件选择

传感器

首先,我们需要一个传感器来感受到手的靠近,这也相当于是触发整个系统的开关。

正常来想,有两种选择。

1、使用红外传感器

2、使用超声波传感器

红外传感器虽然更便宜,但有时候会不那么准确,所以综合考虑,还是用了HC-SR04超声波传感器,它的有效距离可以低至2cm。

电机 

想要实现“按压”的效果,我们可能会需要泵、电机或者其他的电子元器件。

一开始想到用个微型的蠕动泵,但是它需要放到洗手
液的瓶子里面,比较麻烦,也不是很安全。

综合考虑,决定使用一个带有金属齿轮的伺服电机,来获得最大扭矩,从洗手液的外部来构建一个按压装置。

微控制器

整个项目,当然需要一个微控制器来控制输入和输出,Arduino是一个比较好的选择,易于调整参数,微调输出,这里使用了Arduino Nano。

机械结构选择

正式动手之前,还需要想好机械布置。

首先,肯定需要一个力,来推动洗手液的喷嘴向下喷出液体。由于我们选用的是伺服电机,提供的是圆周运动,并不能直接形成一个向下的压力,所以还需要构建一个简单的机械装置。这里想到用类似滑轮的结构,固定住一端,然后把电机转动的旋转力转换成向下的推动力。我们用到了铜线来传递这个矢量力,听起来很复杂,但是其实很简单。

连接元器件

连接也很简单!

传感器到Arduino

  • Trigger - D10
  • Echo - D11
  • VCC - VCC
  • GND - GND

伺服电机到Arduino

  • Signal - D9

  • VCC - VIN

  • GND - GND

连接的电路图

伺服电机固定

第一步就是把电机固定到塑料盒子里面

铜线与伺服电机连接

用热胶棒增加接触面

使用热胶棒

切一段2cm长的热胶棒,把铜线穿过胶棒,增大按压的接触面积。

螺丝固定

把螺丝安装在塑料盒的另外一侧,放上洗手液的瓶子,将铜线连到螺丝上,根据情况调整松紧程度。

调整松紧程度

代码可以在后台回复“洗手液代码”查看。

测试

代码上传好之后,就可以来测试一下实际效果了。

组装

调试完毕后,我们来把盖子组装起来。

可以参考下面的步骤:

1、测量超声波传感器的尺寸和瓶子的尺寸;

2、给铜线预留一个孔;

3、标记出所有的切割孔;

4、用刀片或者钻头打孔;

5、用热熔胶修补。

完工!

一个简单的无接触式洗手液辅助器已经完成,整体效果还是不错的。

附代码:

/*==========================================================================  
by "Akshay Momaya"
for "Mission Critical" ( youtube )
******subscribe for more ARDUINO projects and tutorials******
https://www.youtube.com/channel/UCM6rbuieQBBLFsxszWA85AQ?sub_confirmation=1
==========================================================================*/

const int servo = 9;     //define Servo Signal Pin
const int trigPin = 10;  //define Trigger Pin
const int echoPin = 11;  //define Echo Pin

// defines variables

long duration;
int distance;

#include <Servo.h>

Servo myservo;    // create servo object to control a servo

int pos = 0;    // variable to store the servo position

void setup() {
  pinMode(trigPin, OUTPUT);    // Sets the trigPin as an Output
  pinMode(echoPin, INPUT);    // Sets the echoPin as an Input
  myservo.attach(servo);     // attaches the servo on pin 9 to the servo object  
  myservo.write(0);         // Sets Servo to initially 0 degrees 
  Serial.begin(9600);      // Starts the serial communication
}

void loop() {
    //
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    
    // Sets the trigPin on HIGH state for 10 micro seconds
    
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    
    // Reads the echoPin, returns the sound wave travel time in microseconds
    
    duration = pulseIn(echoPin, HIGH);
    
    // Calculating the distance
   
    distance= duration*0.034/2;
    
    // Prints the distance on the Serial Monitor
    Serial.print("Distance: ");
    Serial.println(distance);
    
    //Servo
    
    if(distance<10)
    { //Check distance is less than 10cm 
       myservo.write(45); // Sets Servo in stages from 0 to 180 degrees so soap does not pitch out. 
       delay(100);
       myservo.write(90);
       delay(100);
        myservo.write(135);
       delay(100);
       myservo.write(120); //Ajust how far you want the servo to go.
       delay(1000);
       myservo.write(00); // Reset the servo to 0 Degrees
       delay(2500);   //Delay the next time someone can get soap
    }                 
}

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 终极编程指南 设计师:CSDN官方博客 返回首页
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值