第1篇:用Arduino控制曲别针电动机
我们推出了一项新计划,即通过使用了Arduino的简单制作来学习电子制作的原理和基础知识。此次为我们分享的嘉宾是伊藤尚未先生,他活跃于媒体艺术领域,并且在书籍领域以讲解“更深入的情节”而闻名。在第2篇中,我们将尝试用Arduino制作非接触式开关。
目录
1. 前言
大家好!我是伊藤尚未。
在全球病毒肆虐、医学如此发达却也难以找到突破口的情况下,再次让我们认识到一个事实:人类再伟大也只不过地球上的一个生物而已。
人类仍然在努力与敌人奋战,但说实话已经相当疲惫了……
在医疗不发达的时代,遇到“流行病”可能需要依赖于祈祷。如今,已经知道了病毒的存在,也知道了传染途径是接触和飞沫,于是,洗手、酒精消毒等做法已经渗透到我们生活中的方方面面。特别是与他人共用的门把手和开关等接触点,都需要消毒。
当然,比起以前,如今公共场所的马桶和水龙头,有很多是当人站在前面或者伸出手时水就会自动流出,这已经成为司空见惯的事情。这就涉及到所谓的“非接触式开关”了。这次就为大家介绍一下这种非接触式开关的制作和控制相关的内容。
2. 非接触式开关的种类
首先,让我们了解一下非接触式开关有哪些种类。当环顾四周时,您会发现其实有很多种不同开关,并且它们会根据应用产品和环境条件等被区分使用。下面我列举几种常见的非接触式开关。
热释电型
使用“人体感应传感器”这一术语的产品较多,是一种能够对人体发出的红外线(热量、体温)做出反应的产品,被用于正门的安全照明和自动门传感器等应用。由于传感器前面有一个半球形或管状透镜,因此可以很容易通过外观来识别。
透镜不同,其不同方向的灵敏度也不同,可能会产生盲区,还会检测到红外线的变化,因此这种传感器貌似不太适合处理缓慢移动的情况。
超声波测距型
这种开关可以发射超声波,通过探测到达物体并反射回来的超声波来测量距离。以往常被用于测量河流水位的测量仪器等应用中,但近年来,其模块产品已被广泛应用于教学材料和业余爱好制作(比如机器人制作)等领域。
红外线测距型
通过发射红外线并测量从物体返回的反射光来测量距离。还有一种方式是通过三角测量法计算受光部分的光线返回角度来判断距离,其精度因产品而异。
透过型
将红外光发光部分和受光部分分开,利用在它们之间通过物体时会遮光的原理来实现检测功能的一种感应开关。这种方式由来已久,在某种意义上讲可以说是一种很稳定的检测方式。由于其安装位置固定,精度高,所以常被用于自动扶梯、停车场出入口、检票口等生活圈。
小型产品被称为“光断续器”,也被用来检测间隙中是否有什么物体。这种产品还被用于工厂生产线和打印机纸张位置检测等应用,由于是安装在看不见的位置,所以不太会引起注意。
反射型
这是一种我们很熟悉的开关方式,常被用于马桶和水龙头等应用。开关根据有无红外线的反射而判断是否开启,反应精度很高。但是,如果在使用环境中有阳光或白炽灯泡照明等会发出红外线的东西,尤其是在水龙头等的传感器部分附着有污垢或水滴等情况下,反应就会变差。您是不是也有这样的经历,即使伸出手,水也不会流出来,很不方便,对吧?
展示类开关
其实在我的周围就有展览设施用的开关。特别是科学馆等动态展品的启动开关就是其中之一。当按下开关时,展品开始移动,解说视频开始播放,这样可以更直观易懂地展示原理和机制。
不过这些开关也是传染病控制对策中的消毒对象。不管对展览是否感兴趣,孩子们看到开关会饶有兴致地按下去。尤其是在以往的展品中,大量使用了具有物理接触点的开关。由于每天都有若干人多次按下,因此它们实际上是展品中最容易损坏的部分。而且,特别是当开关的缝隙处积有灰尘时,从卫生角度上看也非常不理想。
所以,这使我产生了用Arduino制作非接触式开关的想法。
那么应该制作哪种非接触式开关呢?就上述各种开关方式而言,超声波型必须物理打孔,很难制作;而从开关尺寸小、光束角窄方面来看,热释电型也不合适。另外,考虑到装置的设计,透过型也不合适。
那么,非红外线反射式开关莫属了。如果是这种开关的话,就可以将其嵌入亚克力板的下部,消毒时可以对亚克力表面进行消毒。
3. 使用反射式光电传感器
虽然红外测距传感器也可以,但我希望配置简单一点,所以我考虑使用反射式光电传感器。在这个项目中我使用了ROHM生产的名为“RPR-220”的传感器。
该产品将红外LED和光电晶体管并行封装在了一个封装中,也就是说,是一种结构简单、各器件分别独立工作和感应的产品。可以这么说,如果您知道每种器件的使用方法,您就可以构建每种器件的电路,并根据需求制作一种合适易用的传感器封装。
根据技术规格书提供的参数,我们以1.34V、50mA为基准来驱动红外LED吧。由Arduino供电时,如果取自5V引脚,只要串联一个73.2Ω的限流电阻器即可,为了留有余量,我们用稍大的75Ω限流电阻器吧。
光电晶体管部分是将电阻器连接到集电极,并将其设置为正极,从而可在电阻器和光电晶体管之间向Arduino进行模拟输入。
首先,我尝试了10kΩ的电阻器。电路图如下所示:
与面包板组装后样子如下:
至于草图,则是直接使用例程(AnalogReadSerial),通过串行监视器查看时,通常会看到值在800~900左右变化。
当您用手试着盖住传感器部分时,该值将降至100左右。
我认为这些表现也会受室内和实验周围光环境的影响,因此可能无法形成太大的参考,但不管怎样,至少可以了解通过这样的电路似乎可以检测到手的有无。前面基本上讲的是样品制作本身相关的内容。
接下来,让我们用前面的制作进行设置,使其可以当做开关使用。
手形的设计和LED闪烁用来表达“请用手遮住这里”的含义。因此,电路设计如下。由于是用于演绎的LED,所以我用了4个,并用晶体管“2SC1740S”来驱动。
为了留出可以根据周围的光环境在硬件方面进行调整的空间,我将反射式光电传感器的光电晶体管侧的电阻改成了半固定安装形式。
下面,使LED像缓慢跳动一样闪烁,并使其进入待机状态。
当把手遮盖在它上面时,LED亮3秒钟,用这个来表示开关打开。实际与万用电路板进行组装后,看起来是这样的:
Adruino草图的程序如下:
int led = 9; int brightness = 1; int fadeAmount = 1; void setup() { Serial.begin(9600); pinMode(9, OUTPUT); } void loop() { // read the input on analog pin 0: int sensorValue = analogRead(A0); int sabun1 = sensorValue ; delay(100); int sensorValue2 = analogRead(A0); int sabun2 = sensorValue2 ; // print out the value you read: int sabun3 = sabun1 - sabun2 ; Serial.println(abs(sabun3)); delay(100); // delay in between reads for stability analogWrite(led, brightness); brightness = brightness + fadeAmount; if (brightness <= 1 || brightness >= 50) { fadeAmount = -fadeAmount; } delay(50); if (abs(sabun3) > 20) { digitalWrite(LED_BUILTIN, HIGH); } else { digitalWrite(LED_BUILTIN, LOW); } }
我使用引脚9来实现用PWM控制LED闪烁。受到使用环境的影响,来自光电晶体管的信号会有一定程度的波动,所以有一种可以用绝对值设置阈值的方法,读取两次以产生差值并使其在差值达到一定大小(在这里设置为10)以上时做出反应。我认为这种方法在有阳光射入的展览空间等一天之内光线环境会发生变化的场景下尤其有效。草图中间有注释的部分,在通过串行监视器确认其数值时可以适当参考。
4. 安装外壳
手形设计我用了黑色亚克力板,并使传感器部分可以在亚克力板的另一面可以看得见。这种设计可以让一定量的红外线穿过黑色亚克力板,样子看起来很简洁。
对于黑色亚克力板顶部的反应,可以一边确认半固定电阻器和串行监视器一边调整阈值。
5. 非接触式开关的灵活使用
以上的制作,在功能上暂且令人满意。接下来,只要根据所采用的开关来考虑使用什么器件就可以了。
在这里,我是通过让LED亮起来表示开关打开。同样,如果您想让某种弱电电路工作起来,也可以使用晶体管驱动;如果是电源电压波动较大的应用产品,还可以用光电耦合器或继电器进行保护。如果只是驱动家电级别的设备,那么插入继电器或SSR即可使之运行起来。
就像这样,根据所需条件进行思考,就可以实现各种应用。希望大家也能从身边熟悉的事物中激发创意,一起享受这种用Arduino控制非接触式开关的乐趣。
在下一篇文章中,将为大家介绍用Arduino作为控制设备让各种作品动起来系列的另一个实验,敬请期待!
第1篇:用Arduino控制曲别针电动机
第2篇:非接触式开关的制作与控制(本章)
第3篇:自制电磁执行器的制作方法
第4篇:享受控制RGB LED灯的乐趣
第5篇:用Arduino控制伺服电机来演奏乐器!