tag 标签: 创客传感器

相关博文
  • 热度 2
    2020-6-17 13:14
    467 次阅读|
    0 个评论
    【雕爷学编程】Arduino动手做(66)---SR501热释电红外模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)实验六十六:HC-SR501 热释电人体红外感应传感器模块 热释电红外探头 在结构上引入场效应管,其目的在于完成阻抗变换。由于热电元输出的是电荷信号,并不能直接使用,因而需要用电阻将其转换为电压形式。故引入的N沟道结型场效应管应接成共漏形式来完成阻抗变换。热释电红外传感器由传感探测元、干涉滤光片和场效应管匹配器三部分组成。设计时应将高热电材料制成一定厚度的薄片,并在它的两面镀上金属电极,然后加电对其进行极化,这样便制成了热释电探测元。 热释电效应 是指极化强度随温度改变而表现出的电荷释放现象,宏观上是温度的改变使在材料的两端出现电压或产生电流。热释电效应与压电效应类似,热释电效应也是晶体的一种自然物理效应。对于具有自发式极化的晶体,当晶体受热或冷却后,由于温度的变化(△T)而导致自发式极化强度变化(△Ps),从而在晶体某一定方向产生表面极化电荷的现象称为热释电效应。具有热释电性质的材料称为热释电体。压电陶瓷属于热释电体。若不考虑温度的不均匀性,热释电体一般具有一级和二级热释电效应。其中二级热释电效应是由于温度变化引起材料形变,再由压电效应产生电荷的二级效应。一般情况下,若温度变化率相同,升降温过程中产生的热释电电荷大小相等,但符号相反。热释电效应在近10年被用于热释电红外探测器中,广泛地用于辐射和非接触式温度测量、红外光谱测量、激光参数测量、工业自动控制、空间技术、红外摄像中。我国利用ATGSAS晶体制成的红外摄像管已开始出口国外。其温度响应率达到4~5μA/℃,温度分辨率小于0.2℃,信号灵敏度高,图像清晰度和抗强光干扰能力也明显地提高,且滞后较小。此外,由于生物体中也存在热释电现象,故可预期热释电效应将在生物,乃至生命过程中有重要的应用。 热释电探头结构 由滤光片、热释电探测元和前置放大器组成,补偿型热释电传感器还带有温度补偿元件。为防止外部环境对传感器输出信号的干扰,上述元件被真空封装在—个金属管内。 1、热释电传感器的滤光片为带通滤光片,它封装在传感器壳体的顶端,使特定波长的红外辐射选择性地通过,到达热释电探测元+在其截止范围外的红外辐射则不能通过。 2、热释电探测元是热释电传感器的核心元件,它是在热释电晶体的两面镀上金属电极后,加电极化制成,相当于一个以热释电晶体为电介质的平板电容器。当它受到非恒定强度的红外光照射时,产生的温度变化导致其表面电极的电荷密度发生改变,从而产生热释电电流。 3、前置放大器由一个高内阻的场效应管源极跟随器构成,通过阻抗变换,将热释电探测元微弱的电流信号转换为有用的电压信号输出。 4、前置放大器将微弱的热释电电流转换为有效电压输出。前置放大器必须具备高增益、低噪声、抗干扰能力强的特点,以便从众多的噪声干扰中提取微弱的有用信号。热释电探测元和前置放大器通常集成封装在晶体管内,以避免空气湿度使泄露电流增大。这种结构的前置放大器信噪比高,受温度影响小。 热释电红外探头的工作原理 人体都有恒定的体温,一般在37度,所以会发出特定波长10UM左右的红外线,被动式红外探头就是靠探测人体发射的10UM左右的红外线而进行工作的。人体发射的10UM左右的红外线通过菲泥尔滤光片增强后聚集到红外感应源上。红外感应源通常采用热释电元件,这种元件在接收到人体红外辐射温度发生变化时就会失去电荷平衡,向外释放电荷,后续电路经检测处理后就能产生报警信号。 1)这种探头是以探测人体辐射为目标的。所以热释电元件对波长为10UM左右的红外辐射必须非常敏感。 2)为了仅仅对人体的红外辐射敏感,在它的辐射照面通常覆盖有特殊的菲泥尔滤光片,使环境的干扰受到明显的控制作用。 3)被动红外探头,其传感器包含两个互相串联或并联的热释电元。而且制成的两个电极化方向正好相反,环境背景辐射对两个热释元件几乎具有相同的作用,使其产生释电效应相互抵消,于是探测器无信号输出。 4)一旦人侵入探测区域内,人体红外辐射通过部分镜面聚焦,并被热释电元接收,但是两片热释电元接收到的热量不同,热释电也不同,不能抵消,经信号处理而报警。 5)菲泥尔滤光片根据性能要求不同,具有不同的焦距(感应距离),从而产生不同的监控视场,视场越多,控制越严密。 被动式热释电红外探头的优缺点 优点:本身不发任何类型的辐射,器件功耗很小,隐蔽性好。价格低廉。 缺点: ◆容易受各种热源、光源干扰 ◆被动红外穿透力差,人体的红外辐射容易被遮挡,不易被探头接收。 ◆易受射频辐射的干扰。 ◆环境温度和人体温度接近时,探测和灵敏度明显下降,有时造成短时失灵。 抗干扰性能: 1.防小动物干扰---探测器安装在推荐地使用高度,对探测范围内地面上地小动物,一般不产生报警。 2.抗电磁干扰---探测器的抗电磁波干扰性能符合GB10408中4.6.1要求,一般手机电磁干扰不会引起误报。 3.抗灯光干扰---探测器在正常灵敏度的范围内,受3米外H4卤素灯透过玻璃照射,不产生报警。 红外线热释电探头的安装要求 只能安装在室内,其误报率与安装的位置和方式有极大的关系,正确的安装应满足下列条件--- 1.红外线热释电传感器应离地面2.0-2.2米。 2.红外线热释电传感器远离空调, 冰箱,火炉等空气温度变化敏感的地方。 3.红外线热释电传感器探测范围内不得隔屏、家具、大型盆景或其他隔离物。 4.红外线热释电传感器不要直对窗口,否则窗外的热气流扰动和人员走动会引起误报,有条件的最好把窗帘拉上。红外线热释电传感器也不要安装在有强气流活动的地方。 红外线热释电探头对人体的敏感程度还和人的运动方向关系很大。红外线热释电传感器对于径向移动反应最不敏感, 而对于横切方向 (即与半径垂直的方向)移动则最为敏感. 在现场选择合适的安装位置是避免红外探头误报、求得最佳检测灵敏度极为重要的一环。 HC-SR501 热释电人体红外感应传感器模块 模块技术参数 1.工作电压:DC5V至20V 2.静态功耗:小于60微安 3.电平输出:高3.3V,低0V 4.延时时间:可调(0.3秒~18秒) 5.封锁时间:2.5秒 6.触发方式:L不可重复,H可重复,默认值为H 7.感应范围:小于120度锥角,7米以内 8.工作温度:-15~+70度 9.PCB外形尺寸:32*24mm,螺丝孔距28mm,螺丝孔径2mm 10.感应透镜尺寸:(直径)23mm(默认) 模块功能特点 1、全自动感应:人进入其感应范围则输出高电平, 人离开感应范围则自动延时关闭高电 平,输出低电平。 2、光敏控制(可选择,出厂时未设)可设置光敏控制,白天或光线强时不感应。 3、温度补偿(可选择,出厂时未设):在夏天当环境温度升高至 30~32℃,探测距离稍变短,温度补偿可作一定的性能补偿。 4、 两种触发方式:(可跳线选择) a、不可重复触发方式:即感应输出高电平后,延时时间段一结束,输出将自动从高电 平变成低电平; b、可重复触发方式:即感应输出高电平后,在延时时间段内,如果有人体在其感应 范围活动,其输出将一直保持高电平,直到人离开后才延时将高电平变为低电平(感应模块检 测到人体的每一次活动后会自动顺延一个延时时间段,并且以最后一次活动的时间为延时 时间的起始点)。 5、具有感应封锁时间(默认设置:2.5S 封锁时间):感应模块在每一次感应输出后(高电平 变成低电平),可以紧跟着设置一个封锁时间段,在此时间段内感应器不接受任何感应信 号。此功能可以实现“感应输出时间”和“封锁时间”两者的间隔工作,可应用于间隔探测产 品;同时此功能可有效抑制负载切换过程中产生的各种干扰。(此时间可设置在零点几秒 —几十秒钟)。 6、 工作电压范围宽:默认工作电压 DC4.5V-20V。 7、 微功耗:静态电流<50 微安,特别适合干电池供电的自动控制产品。 8、 输出高电平信号:可方便与各类电路实现对接。 模块电原理图 模块使用说明 1. 感应模块通电后有一分钟左右的初始化时间,在此期间模块会间隔地输出 0-3 次,一分钟后进入待机状态。 2. 应尽量避免灯光等干扰源近距离直射模块表面的透镜,以免引进干扰信号产生误动作; 使用环境尽量避免流动的风,风也会对感应器造成干扰。 3. 感应模块采用双元探头,探头的窗口为长方形,双元(A 元 B 元)位于较长方向的两 端,当人体从左到右或从右到左走过时,红外光谱到达双元的时间、距离有差值,差值越 大,感应越灵敏,当人体从正面走向探头或从上到下或从下到上方向走过时,双元检测不 到红外光谱距离的变化,无差值,因此感应不灵敏或不工作;所以安装感应器时应使探头 双元的方向与人体活动最多的方向尽量相平行,保证人体经过时先后被探头双元所感应。 为了增加感应角度范围,本模块采用圆形透镜,也使得探头四面都感应,但左右两侧仍然 比上下两个方向感应范围大、灵敏度强,安装时仍须尽量按以上要求。 使用注意事项 1、直流工作电压必须符合我们要求的数值,过高和过低都会影响模块性能,而且要求电源必须经过良好的稳压滤波,例如电脑USB电源、手机充电器电源、比较旧的9V的层叠电池都无法满足模块工作要求,建议客户用变压器的电源并经过三端稳压芯片稳压后再通过220UF和0.1UF的电容滤波后供电。 2、调试时人体尽量远离感应区域,有时虽然人体不在模块的正前方,但是人体离模块太近时模块也能感应到造成一直有输出,还有调试时人体不要触摸电路部分也会影响模块工作,比较科学的办法是将输出端接一个LED或者是万用表,把模块用报纸盖住,人离开这个房间,等2分钟后看看模块是否还是一直有输出? 3、模块不接负载时能正常工作,接上负载后工作紊乱,一种原因是因为电源容量很小负载比较耗电,负载工作时引起的电压波动导致模块误动作,另一种原因是负载得电工作时会产生干扰,例如继电器或者电磁铁等感性负载会产生反向电动势,315M发射板工作时会有电磁辐射等都会影响模块。解决办法如下:A、电源部分加电感滤波。B、采用负载和模块使用不同的电压的方法,例如:负载使用24V工作电压,模块使用12V工作电压,其间用三端稳压器隔离。C: 使用更大容量的电源。 4、人体感应模块只能工作在室内并且工作环境应该避免阳光、强烈灯光直接照射,如果工作环境有强大的射频干扰,可以采用屏蔽措施。若遇有强烈气流干扰,关闭门窗或阻止对流。感应区尽量避免正对着发热电器和物体以及容易被风吹动的杂物和衣物。 5、人体感应模块建议安装在密封的盒里,否则可能一直会有输出信号。 6、如果要求人体感应模块的探测角度小于90度时,可以用不透明胶纸遮挡镜片或裁剪缩小镜片来实现。 7、人体感应模块采用双元探头,人体的手脚和头部运动方向与感应灵敏度有着密切的联系,而且红外模块的特性决定了无法精确控制感应距离。 8、模块中的探头(PIR)可以装焊在电路板的另一面。也可将探头用双芯屏蔽线延长,长度应在20厘米以内为好。 实验开源代码 /* 【Arduino】168种传感器模块系列实验(65) 实验六十六:HC-SR501 热释电人体红外感应传感器模块 程序一,简单测试串口开关量 */ int Sensor= 7; void setup() { Serial.begin(9600); pinMode(Sensor, INPUT); } void loop() { int SensorState = digitalRead(Sensor); Serial.println(SensorState); delay(100); } 当有检测到人体运动,输出1,否则输出0。 实验开源代码 /* 【Arduino】168种传感器模块系列实验(65) 实验六十六:HC-SR501 热释电人体红外感应传感器模块 程序二,在传感器前移动时,Arduino 上的 LED 灯会亮 */ int ledPin = 13; int pirPin = 7; int pirValue; int sec = 0; void setup() { pinMode(ledPin, OUTPUT); pinMode(pirPin, INPUT); digitalWrite(ledPin, LOW); Serial.begin(9600); } void loop() { pirValue = digitalRead(pirPin); digitalWrite(ledPin, pirValue); sec += 1; Serial.print("Second: "); Serial.print(sec); Serial.print("PIR value: "); Serial.print(pirValue); Serial.print('\n'); delay(1000); } 注意事项 1、直流工作电压必须符合我们要求的数值,过高和过低都会影响模块性能,而且要求电源必须经过良好的稳压滤波,例如电脑USB电源、手机充电器电源、比较旧的9V的层叠电池都无法满足模块工作要求,建议客户用变压器的电源并经过三端稳压芯片稳压后再通过220UF和0.1UF的电容滤波后供电。 2、调试时人体尽量远离感应区域,有时虽然人体不在模块的正前方,但是人体离模块太近时模块也能感应到造成一直有输出,还有调试时人体不要触摸电路部分也会影响模块工作,比较科学的办法是将输出端接一个LED或者是万用表,把模块用报纸盖住,人离开这个房间,等2分钟后看看模块是否还是一直有输出? 3、模块不接负载时能正常工作,接上负载后工作紊乱,一种原因是因为电源容量很小负载比较耗电,负载工作时引起的电压波动导致模块误动作,另一种原因是负载得电工作时会产生干扰,例如继电器或者电磁铁等感性负载会产生反向电动势,315M发射板工作时会有电磁辐射等都会影响模块。解决办法如下:A、电源部分加电感滤波。B、采用负载和模块使用不同的电压的方法,例如:负载使用24V工作电压,模块使用12V工作电压,其间用三端稳压器隔离。C: 使用更大容量的电源。 4、人体感应模块只能工作在室内并且工作环境应该避免阳光、强烈灯光直接照射,如果工作环境有强大的射频干扰,可以采用屏蔽措施。若遇有强烈气流干扰,关闭门窗或阻止对流。感应区尽量避免正对着发热电器和物体以及容易被风吹动的杂物和衣物。 5、人体感应模块建议安装在密封的盒里,否则可能一直会有输出信号。 6、如果要求人体感应模块的探测角度小于90度时,可以用不透明胶纸遮挡镜片或裁剪缩小镜片来实现。 7、人体感应模块采用双元探头,人体的手脚和头部运动方向与感应灵敏度有着密切的联系,而且红外模块的特性决定了无法精确控制感应距离。 8、模块中的探头(PIR)可以装焊在电路板的另一面。也可将探头用双芯屏蔽线延长,长度应在20厘米以内为好。 实验开源图形编程(Mind+) 实验开源仿真编程(linkboy3.7)
  • 热度 3
    2020-3-14 10:43
    1034 次阅读|
    0 个评论
    【雕爷学编程】Arduino动手做(64)---RGB全彩LED模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)实验六十四: 5MM三色RGB全彩LED模块颜色执行器KY-016 RGB LED 白光LED 与 RGB LED 两者殊途同归,都是希望达到白光的效果,只不过一个是直接以白光呈现,另一个则是以红绿蓝三色混光而成。RGB灯是以三原色共同交集成像,此外,也有蓝光LED配合黄色荧光 粉,以及紫外LED配合RGB荧光粉,整体来说,这两种都有其成像原理。某些LED背光板出现的颜色特别清楚而鲜艳,甚至有高画质电视的程度,这种情形,正是RGB的特色,标榜红就是红、 绿就是绿、蓝就是蓝的特性,在光的混色上,具备更多元的特性。 RGB色彩模式 (也翻译为“红绿蓝”,比较少用)是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,所以RGB灯就是三种颜色组合出来的颜色,那么很多人都学过三原色吧,所以RGB也就是利用了三原色的原理来成色的,这样就能通过灯效颜色的强弱混合来组成任何颜色及绚丽多彩的各种颜色灯效了。尤其是在内存条上的RGB灯条上尤为突出的展现出来了,一般RGB灯条都是渐变色或者是三种主色,然后混合区会变换不同的颜色,这样就混合成不同组合,变换不同色彩了。这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。RGB色彩模式使用RGB模型为图像中每一个像素的RGB分量分配一个0~255范围内的强度值。例如:纯红色R值为255,G值为0,B值为0;灰色的R、G、B三个值相等(除了0和255);白色的R、G、B都为255;黑色的R、G、B都为0。RGB图像只使用三种颜色,就可以使它们按照不同的比例混合,在屏幕上重现16777216种颜色。在 RGB 模式下,每种 RGB 成分都可使用从 0(黑色)到 255(白色)的值。 例如,亮红色使用 R 值 246、G 值 20 和 B 值 50。 当所有三种成分值相等时,产生灰色阴影。 当所有成分的值均为 255 时,结果是纯白色;当该值为 0 时,结果是纯黑色。 5MM四脚全彩(RGB) LED灯珠 型号: XHS-5RGB-C 胶体形状:圆头 封装材料:环氧树脂 功率特性:小功率 发光颜色:全彩 发光强度:高指向性 支架:长脚支架 胶体颜色:无色透明 工作电压:1.8-3.5V 工作电流:20MA 封装形式:直插型 技术参数 外观:5MM透明圆头颜色:红-绿-蓝波长:红色= 625nm -绿色= 525nm -蓝色= 460nm光强度:红色= 1000mcd -绿色=3000mcd -蓝色= 2000mcd角度:50 ° -60 °电压(典型值):红= 2.0V - 3.2V =绿色-蓝色= 3.2V供电,每片内电流(典型):20MA焊接温度:260 °~5秒。 主要优势 1、体积小---LED基本上是一块很小的晶片被封装在环氧树脂里面,所以它非常的小,非常的轻。 2、功率低---LED耗电相当低,一般来说LED的工作电压是2-3.6V。只需要极微弱电流即可正常发光。 3、使用寿命长---在恰当的电流和电压下,LED的使用寿命可达10万小时。 4、高亮度、低热量---LED使用冷发光技术,发热量比同等功率普通照明灯具低很多。 5、环保---LED是由无毒的材料作成,不像荧光灯含水银会造成污染,同时LED也可以回收再利用。 6、坚固耐用---LED是被完全的封装在环氧树脂里面,它比灯泡和荧光灯管都坚固。灯体内也没有松动的部分,这些特点使得LED可以说是不易损坏的。 5MM三色RGB全彩LED模块颜色传感器KY-016 模块参数 1.PCB颜色:黑色 2.使用5mm全彩超高亮LED 3.带限流电阻防止烧坏LED 4.可接各种单片机 5.高电平点亮LED 6.工作电压:3.3V/5V 7.模块重量:4g 8.可直接插在Arduino主板上使用,无需杜邦线连接 实验接线示意图 实验开源代码 /* 【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真) 实验六十四: 5MM三色RGB全彩LED模块颜色传感器KY-016 程序之一,颜色的依次循环变化 */ int redPin = 13; int greenPin = 12; int bluePin = 11; void setup() { pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); } void loop() { setColor(255, 0, 0); // 红色 delay(1000); setColor(0, 255, 0); // 绿色 delay(1000); setColor(0, 0, 255); // 蓝色 delay(1000); setColor(255, 255, 0); // 黄色 delay(1000); setColor(80, 0, 80); // 紫色 delay(1000); setColor(0, 255, 255); // 浅绿色 delay(1000); } void setColor(int red, int green, int blue) { analogWrite(redPin, 255-red); analogWrite(greenPin, 255-green); analogWrite(bluePin, 255-blue); } /* 【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真) 实验六十四: 5MM三色RGB全彩LED模块颜色传感器KY-016 程序之二,颜色慢慢变化~即从255每等待10ms降低一点直到0 */ int led1 = 9; int led2 = 10; int led3 = 11; void setup() { pinMode(led1,OUTPUT); pinMode(led2,OUTPUT); pinMode(led3,OUTPUT); } void setColor(int red,int green,int blue) { analogWrite(led1,255-red); analogWrite(led2,255-green); analogWrite(led3,255-blue); } void loop() { int i,j; for(i=0,j=255;i<256;i++) { setColor(i,j,0); delay(4); j--; } delay(100); //绿色向红色渐变 for(i=0,j=255;i<256;i++) { setColor(j,0,i); delay(4); j--; } delay(100); //红色向蓝色渐变 for(i=0,j=255;i<256;i++) { setColor(0,i,j); delay(4); j--; } delay(100); //蓝色向绿色渐变 } /* 【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真) 实验六十四: 5MM三色RGB全彩LED模块颜色传感器KY-016 程序之三,简单渐变 */ void setup() { pinMode(11,OUTPUT); pinMode(12,OUTPUT); pinMode(13,OUTPUT); } void loop() { digitalWrite(11,LOW); delay(1000); digitalWrite(11,HIGH); delay(1000); digitalWrite(12,LOW); delay(1000); digitalWrite(12,HIGH); delay(1000); digitalWrite(13,LOW); delay(1000); digitalWrite(13,HIGH); delay(1000); } 实验开源图形编程(Mind+) 实验开源仿真编程(linkboy3.7)
  • 热度 2
    2020-2-24 15:51
    1362 次阅读|
    2 个评论
    【雕爷学编程】Arduino动手做(63)---TCS3200D颜色识别传感器
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真) 实验六十三: TCS3200D颜色识别传感器(可编程彩色光频识别转换器模块) TCS3200D 是TAOS(Texas Advanced Optoelectronic Solutions)公司推出的可编程彩色光到频率的转换器。它把可配置的硅光电二极管与电流频率转换器集成在一个单一的CMOS电路上,同时在单一芯片上还集成了红绿蓝(RGB)三种滤光器,是业界第一个有数字兼容接口的RGB彩色传感器。TCS3200D的输出信号是数字量,可以驱动标准的TTL或CMOS逻辑输入,因此可直接与微处理器或其它逻辑电路相连接。由于输出的是数字量,并且能够实现每个彩色信道10位以上的转换精度,因而不再需要A/D转换电路,使电路变得更简单。该颜色传感器主要可用于尿液分析仪,生化分析仪,验钞机等需要检测颜色的产品上。 三原色 三原色指色彩中不能再分解的三种基本颜色,我们通常说的三原色,即品红、黄、青(是青不是蓝,蓝是品红和青混合的颜色)。三原色可以混合出所有的颜色,同时相加为黑色,黑白灰属于无色系。色光三原色是指红、绿、蓝三色,各自对应的波长分别为700nm,546.1nm,435.8nm,光的三原色和物体的三原色是不同的。光的三原色,按一定比例混合可以呈现各种光色。根据托马斯·杨和赫尔姆豪兹的研究结果.这三种原色确定为红、绿、蓝(相当于颜料中的大红、中绿、群青(紫蓝)的色彩感觉)。彩色电视屏幕就是由这红、绿、蓝三种发光的颜色小点组成的。由这三原色按照不同比例和强弱混合.可以产生自然界的各种色彩变化。颜料和其他不发光物体的三原色是品红(相当于玫瑰红、桃红)、品青(相当于较深的天蓝、湖蓝)、浅黄(相当于柠檬黄)。由英国化学家富勃斯特(1781—1868)研究选定的这三原色可以混合出多种多样的颜色,不过不能调配出黑色,只能混合出深灰色。 色相 是色彩的首要特征,是区别各种不同色彩的最准确的标准。事实上任何黑白灰以外的颜色都有色相的属性,而色相也就是由原色、间色和复色来构成的。色相,色彩可呈现出来的质地面貌。自然界中各个不同的色相是无限丰富的,如紫红、银灰、橙黄等。色相即各类色彩的相貌称谓。 色相环(color circle) 是指一种圆形排列的色相光谱(SPECTRUM),色彩是按照光谱在自然中出现的顺序来排列的。暖色(WARM COLOR)位于包含红色和黄色的半圆之内,冷色则包含在绿色和紫色的那个半圆内。互补色(COMPLEMENTARY COLOR)出现在彼此相对的位置上。 三原色原理 人眼对红、绿、蓝最为敏感,人的眼睛像一个三色接收器的体系,大多数的颜色可以通过红、绿、蓝三色按照不同的比例合成产生。同样,绝大多数单色光也可以分解成红、绿、蓝三种色光,这是色度学的最基本的原理,也称三原色原理。白光通过棱镜后被分解成多种颜色逐渐过渡的色谱,颜色依次为红、橙、黄、绿、青、蓝、紫,这就是可见光谱。其中人眼对红、绿、蓝最为敏感,人的眼睛就像一个三色接收器的体系,大多数的颜色可以通过红、绿、蓝三色按照不同的比例合成产生。同样绝大多数单色光也可以分解成红绿蓝三种色光。这是色度学的最基本原理,即三基色原理。三种基色是相互独立的,任何一种基色都不能有其它两种颜色合成。红绿蓝是三基色,这三种颜色合成的颜色范围最为广泛。红绿蓝三基色按照不同的比例相加合成混色称为相加混色。 红色+绿色=黄色 绿色+蓝色=青色 红色+蓝色=品红 红色+绿色+蓝色=白色 TCS3200是TAOS公司推出的可编程彩色光到频率的转换器,它把可配置的硅光电二极管与电流频率转换器集成在一个单一的CMOS电路上,同时在单一芯片上集成了红绿蓝(RGB)三种滤光器,是业界第一个有数字兼容接口的RGB彩色传感器,TCS3200的输出信号是数字量,可以驱动标准的TTL或CMOS逻辑输入,因此可直接与微处理器或其他逻辑电路相连接,由于输出的是数字量,并且能够实现每个彩色信道10位以上的转换精度,因而不再需要A/D转换电路,使电路变得更简单,TCS3200的引脚图 TCS3200采用8引脚的SOIC表面贴装式封装,在单一芯片上集成有64个光电二极管,这些二极管分为四种类型,其16个光电二极管带有红色滤波器;16个光电二极管带有绿色滤波器;16个光电二极管带有蓝色滤波器,其余16个不带有任何滤波器,可以透过全部的光信息,这些光电二极管在芯片内是交叉排列的,能够最大限度地减少入射光辐射的不均匀性,从而增加颜色识别的精确度;另一方面,相同颜色的16个光电二极管是并联连接的,均匀分布在二极管阵列中,可以消除颜色的位置误差。工作时,通过两个可编程的引脚来动态选择所需要的滤波器,该传感器的典型输出频率范围从2Hz-500kHz,用户还可以通过两个可编程引脚来选择100%、20%或2%的输出比例因子,或电源关断模式。输出比例因子使传感器的输出能够适应不同的测量范围,提高了它的适应能力。例如,当使用低速的频率计数器时,就可以选择小的定标值,使TCS3200的输出频率和计数器相匹配。 TCS3200识别颜色的原理 由上面的三原色感应原理可知,如果知道构成各种颜色的三原色的值,就能够知道所测试物体的颜色。对于TCS3200 来说,当选定一个颜色滤波器时,它只允许某种特定的原色通过,阻止其它原色的通过。例如:当选择红色滤波器时,入射光中只有红色可以通过,蓝色和绿色都被阻止,这样就可以得到红色光的光强;同理,选择其它的滤波器,就可以得到蓝色光和绿色光的光强。通过这三个值,就可以分析投射到TCS3200 传感器上的光的颜色。TCS3200这种可编程的彩色光到频率转换器适合于色度计测量应用领域,如彩色打印、医疗诊断、计算机彩色监视器校准以及油漆、纺织品、化妆品和印刷材料的过程控制和色彩配合。 白平衡和颜色识别原理 白平衡就是告诉系统什么是白色。从理论上讲,白色是由等量的红色、绿色和蓝色混合而成的;但实际上,白色中的三原色并不完全相等,并且对于 TCS3200 的光传感器来说,它对这三种基本色的敏感性是不相同的,导致TCS3200 的RGB 输出并不相等,因此在测试前必须进行白平衡调整,使得TCS3200 对所检测的“白色”中的三原色是相等的。进行白平衡调整是为后续的颜色识别作准备。在本装置中,白平衡调整的具体步骤和方法如下:将空的试管放置在传感器的上方,试管的上方放置一个白色的光源,使入射光能够穿过试管照射到TCS3200 上;根据前面所介绍的方法,依次选通红色、绿色和蓝色滤波器,分别测得红色、绿色和蓝色的值,然后就可计算出需要的三个调整参数。 TCS3200D颜色识别传感器(可编程彩色光频识别转换器模块) 主要参数 尺寸:37*37mm 固定孔:3mm 孔距:22.6*22.6mm 电压:5V 芯片:TCS3200D 端口:数字量 输出:10-12KHz,占空比50% 检测距离:10mm 平台:Arduino 单片机 主要特点 输出占空比50% 所有的引脚全部引出 采用TCS3200D,性能优于TCS230D 所有IO全部引出,可控式LED补光灯 通过程序可以读取颜色的RGB值 适用于静态物体颜色的检测 注意:不能检测灯光的颜色 检测距离1厘米最佳 检测有效距离小于等于5厘米 可直接和单片机连接 采用高亮白色LED灯反射光 静态识别物体颜色,不同颜色输出不同频率 模块电原理图 模块接线 Arduino Uno TSC3200颜色传感器 Pin 6 S0 Pin 5 S1 Pin 4 S2 Pin 3 S3 Pin 2 OUT 5V VCC GND GND TCS3200颜色传感器是一款全彩的颜色检测器,包括了一块TAOS TCS3200RGB感应芯片和4个白光LED灯,TCS3200能在一定的范围内检测和测量几乎所有的可见光。它适合于色度计测量应用领域。比如彩色打印、医疗诊断、计算机彩色监视器校准以及油漆、纺织品、化妆品和印刷材料的过程控制。 通常所看到的物体颜色,实际上是物体表面吸收了照射到它上面的白光(日光)中的一部分有色成分,而反射出的另一部分有色光在人眼中的反应。白色是由各种频率的可见光混合在一起构成的,也就是说白光中包含着各种颜色的色光(如红R、黄Y、绿G、青V、蓝B、紫P)。根据德国物理学家赫姆霍兹(Helinholtz)的三原色理论可知,各种颜色是由不同比例的三原色(红、绿、蓝)混合而成的。 由上面的三原色感应原理可知,如果知道构成各种颜色的三原色的值,就能够知道所测试物体的颜色。对于TCS3200D 来说,当选定一个颜色滤波器时,它只允许某种特定的原色通过,阻止其它原色的通过。例如:当选择红色滤波器时,入射光中只有红色可以通过,蓝色和绿色都被阻止,这样就可以得到红色光的光强;同理,选择其它的滤波器,就可以得到蓝色光和绿色光的光强。通过这三个光强值,就可以分析出反射到TCS3200D传感器上的光的颜色。 TCS3200D传感器有红绿蓝和清除4种滤光器,可以通过其引脚S2和S3的高低电平来选择滤波器模式,如下图。 TCS3200D有可编程的彩色光到电信号频率的转换器,当被测物体反射光的红、绿、蓝三色光线分别透过相应滤波器到达TAOS TCS3200RGB感应芯片时,其内置的振荡器会输出方波,方波频率与所感应的光强成比例关系,光线越强,内置的振荡器方波频率越高。TCS3200传感器有一个OUT引脚,它输出信号的频率与内置振荡器的频率也成比例关系,它们的比率因子可以靠其引脚S0和S1的高低电平来选择,如下图。 白平衡校正方法是:把一个白色物体放置在TCS3200颜色传感器之下,两者相距10mm左右,点亮传感器上的4个白光LED灯,用Arduino控制器的定时器设置一固定时间1s,然后选通三原色的滤波器,让被测物体反射光中红、绿、蓝三色光分别通过滤波器,计算1s时间内三色光对应的TCS3200传感器OUT输出信号脉冲数(单位时间的脉冲数包含了输出信号的频率信息),再通过正比算式得到白色物体RGB值255与三色光脉冲数的比例因子。有了白平衡校正得到的RGB比例因子,则其它颜色物体反射光中红、绿、蓝三色光对应的TCS3200输出信号1s内脉冲数乘以R、G、B比例因子,就可换算出了被测物体的RGB标准值了。 安装程序中的TimerOne.h库文件的二种办法 1、请下载: https://github.com/PaulStoffregen/TimerOne 2、安装TimerOne库:IDE—工具—管理库—搜索TimerOne—安装 /* 【Arduino】168种传感器模块系列实验(63) 实验六十三: TCS3200D颜色识别传感器(可编程彩色光频识别转换器模块) 安装TimerOne库:IDE—工具—管理库—搜索TimerOne—安装 */ #include //申明库文件 //把TCS3200颜色识别传感器各控制引脚连到Arduino数字端口 #define S0 6 //物体表面的反射光越强,TCS3200内置震荡器产生的方波频率越高, #define S1 5 //SO和S1的组合决定输出信号频率比例因子,比例因子为2% //比例因子为TCS3200传感器OUT引脚输出信号频率与其内置振荡器频率之比 #define S2 4 //S2和S3的组合决定让红、绿、蓝,哪种光线通过滤波器 #define S3 3 #define OUT 2 //TCS3200颜色传感器输出信号 //在中断函数中纪录TCS3200输出信号的脉冲个数 int g_count = 0; // 计算与反射光相对应TCS3200颜色传感器输出信号的脉冲数 int g_array ; // 存储RGB值 int g_flag = 0; // 滤波器模式选择顺序标志 float g_SF ; // 从TCS3200输出信号的脉冲数转换为RGB标准值的RGB比例因子 //初始化TSC3200各控制引脚的输入输出模式 //设置TCS3200的内置振荡器方波频率与其输出信号频率的比例因子为2% void TSC_Init() { pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); pinMode(OUT, INPUT); digitalWrite(S0, LOW); digitalWrite(S1, HIGH); } //选择滤波器模式,决定让红、绿、蓝,哪种光线通过滤波器 void TSC_FilterColor(int Level01, int Level02) { if(Level01 != 0) Level01 = HIGH; if(Level02 != 0) Level02 = HIGH; digitalWrite(S2, Level01); digitalWrite(S3, Level02); } //中断函数,计算TCS3200输出信号的脉冲波 void TSC_Count() { g_count ++ ; } //定时器中断函数,每1S中断后,把该时间内的红、绿、蓝三种光线通过滤波器时, //TCS3200输出信号脉冲个数分别存储到数组g_array 的相应元素变量中 void TSC_Callback() { switch(g_flag) { case 0: WB Start"); TSC_WB(LOW, LOW); //选择让红色光线通过滤波器的模式 break; case 1: Frequency R="); Serial.println(g_count); //打印1s内的红光通过滤波器时,TCS3200输出的脉冲个数 g_array = g_count; //存储1S内的红光通过滤波器时,TCS3200输出的脉冲个数 TSC_WB(HIGH, HIGH); //选择让绿色光线通过滤波器的模式 break; case 2: Frequency G="); Serial.println(g_count); //打印1S内的绿光通过滤波器时,TCS3200输出的脉冲个数 g_array = g_count; //存储1S内的绿光通过滤波器时,TCS3200输出的脉冲个数 TSC_WB(LOW, HIGH); //选择让蓝色光线通过滤波器的模式 break; case 3: Frequency B="); Serial.println(g_count); //打印1s内的蓝光通过滤波器时,TCS3200输出的脉冲个数 WB End"); g_array = g_count; //存储1s内的蓝光通过滤波器时,TCS3200输出的脉冲个数 TSC_WB(HIGH, LOW); //选择无滤波器的模式 break; default: g_count = 0; //计数值清零 break; } } //设置反射光中红、绿、蓝三色光分别通过滤波器时如何处理数据的标志 //该函数被TSC_Callback()调用 void TSC_WB(int Level0, int Level1) //White Balance { g_count = 0; //计数值清零 g_flag ++; //输出信号计数标志 TSC_FilterColor(Level0, Level1); //滤波器模式 Timer1.setPeriod(1000000); // 设置输出信号脉冲计数时长1s } //初始化 void setup() { TSC_Init(); Serial.begin(9600); //启动串口通信 Timer1.initialize(); // defaulte is 1s缺省是1秒 Timer1.attachInterrupt(TSC_Callback); //设置定时器1的中断,中断调用函数为TSC_Callbace() //设置TCS3200输出信号的上跳沿触发中断,中断调用函数为TSC_Count() attachInterrupt(0, TSC_Count, RISING); delay(4000); //延时4s,以等待被测物体红、绿、蓝三色在1s内的TCS3200输出信号脉冲计数 //通过白平衡测试,计算得到白色物体RGB值255与1s内三色光脉冲数的RGB比例因子 for(int i=0; i<3; i++) Serial.println(g_array); g_SF = 255.0/ g_array ; //红色光比例因子 g_SF = 255.0/ g_array ; //绿色光比例因子 g_SF = 255.0/ g_array ; //蓝色光比例因子 //打印白平衡后的红、绿、蓝三色的RGB比例因子 Serial.println(g_SF ); Serial.println(g_SF ); Serial.println(g_SF ); } //红、绿、蓝三色光分别对应的1s内TCS3200输出脉冲数乘以相应的比例因子就是RGB标准值 //打印被测物体的RGB值 void loop() { g_flag = 0;//每获得一次被测物体的RGB颜色值时需要4s for(int i=0; i<3; i++) //打印被测物体的RGB值 Serial.println(int(g_array * g_SF)); delay(4000); } 识别接近灰白色的串口输出数据 白色的串口数据 实验仿真编程(linkboy3.6) 三种原色的波形,都是255一条线的是白色 在具体项目中,您所检测的是某种特定颜色的物体,可能就像前面图片展示的几种颜色类似,绝不会有连续变化颜色的物体。于是,应该以上述程序获得的被测物体颜色R、G、B值为中心,设置一个距离中心值±20的范围值,在任何环境光条件下,再次检测被测物体的RGB值,只要RGB值落在范围内,就可以认为被测物体是那种特定颜色的物体。这样设定颜色值范围的方法,可以有效提高物体颜色的识别率。 /* 【Arduino】168种传感器模块系列实验(64) 实验六十四: TCS3200D颜色识别传感器(可编程彩色光频识别转换器模块) 实验程序之二:不使用库,实现简单颜色感应 实验模块接线 Arduino Uno TSC3200颜色传感器 Pin 6 S0 Pin 5 S1 Pin 4 S2 Pin 3 S3 Pin 2 OUT 5V VCC GND GND */ #define S0 6 #define S1 5 #define S2 4 #define S3 3 #define sensorOut 2 int frequency = 0; void setup() { pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); pinMode(sensorOut, INPUT); // 将频率缩放设置为20% digitalWrite(S0, HIGH); digitalWrite(S1, LOW); Serial.begin(9600); } void loop() { // 设置要读取的红色滤波光电二极管 digitalWrite(S2, LOW); digitalWrite(S3, LOW); // 读取输出频率 frequency = pulseIn(sensorOut, LOW); frequency = map(frequency,-10, -49, 255, 0); // 在串行监视器上打印值 Serial.print("R= ");//打印名称 Serial.print(frequency);//打印红色频率 Serial.print(" "); delay(2000); // 设置要读取的绿色过滤光电二极管 digitalWrite(S2, HIGH); digitalWrite(S3, HIGH); // 读取输出频率 frequency = pulseIn(sensorOut, LOW); frequency = map(frequency,-10, -50, 255, 0); //在串行监视器上打印值 Serial.print("G= ");//打印名称 Serial.print(frequency);//打印绿色频率 Serial.print(" "); delay(2000); // 设置要读取的蓝色滤光光电二极管 digitalWrite(S2, LOW); digitalWrite(S3, HIGH); // 读取输出频率 frequency = pulseIn(sensorOut, LOW); frequency = map(frequency,-10, -41, 255, 0); // 在串行监视器上打印值 Serial.print("B= ");//打印名称 Serial.print(frequency);//打印蓝色频率 Serial.println(" "); delay(2000); } /* 【Arduino】168种传感器模块系列实验(64) 实验六十四: TCS3200D颜色识别传感器(可编程彩色光频识别转换器模块) 实验程序之三:颜色识别感应 实验模块接线 Arduino Uno TSC3200颜色传感器 Pin 6 S0 Pin 5 S1 Pin 4 S2 Pin 3 S3 Pin 2 OUT 5V VCC GND GND */ int s0 = 6, s1 = 5, s2 = 4, s3 = 3; int out = 2; int flag = 0; byte counter = 0; byte countR = 0, countG = 0, countB = 0; void setup() { Serial.begin(115200); pinMode(s0, OUTPUT); pinMode(s1, OUTPUT); pinMode(s2, OUTPUT); pinMode(s3, OUTPUT); } void TCS() { flag = 0; digitalWrite(s1, HIGH); digitalWrite(s0, HIGH); digitalWrite(s2, LOW); digitalWrite(s3, LOW); attachInterrupt(0, ISR_INTO, CHANGE); timer0_init(); } void ISR_INTO() { counter++; } void timer0_init(void) { TCCR2A = 0x00; TCCR2B = 0x07; //时钟频率源1024点 TCNT2 = 100; //10毫秒再次溢出 TIMSK2 = 0x01; //允许中断 } int i = 0; ISR(TIMER2_OVF_vect) //计时器2,10ms再次中断溢出,内部溢出中断执行功能 { TCNT2 = 100; flag++; if (flag == 1) { countR = counter; Serial.print("red="); Serial.println(countR, DEC); digitalWrite(s2, HIGH); digitalWrite(s3, HIGH); } else if (flag == 2) { countG = counter; Serial.print("green="); Serial.println(countG, DEC); digitalWrite(s2, LOW); digitalWrite(s3, HIGH); } else if (flag == 3) { countB = counter; Serial.print("blue="); Serial.println(countB, DEC); Serial.println("\n"); digitalWrite(s2, LOW); digitalWrite(s3, LOW); } else if (flag == 4) { flag = 0; } counter = 0; } void loop() { TCS(); while (1); }
  • 热度 2
    2020-2-19 10:49
    958 次阅读|
    0 个评论
    【雕爷学编程】Arduino动手做(62)---1排4键薄膜开关模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真) 实验六十二: 1排4键薄膜开关 Arduino扩展键盘模块(控制面板) 薄膜开关 又称轻触式键盘,采用平面多层组合而成的整体密封结构,是将按键开关、面板、标记、符号显示及衬板密封在一起的集光、机、电一体化的一种新型电子元器件,是电子产品外观结构根本性的变革,它可取代常规分立元件的按键,更可靠地执行操作系统的任务。薄膜开关具有良好的防水、防尘、防油、防有害气体侵蚀、性能稳定可靠、重量轻、体积小、寿命长、装联方便,面板可洗涤而字符不受损伤,色彩丰富,美观大方等优点。使用薄膜开关令您的产品更具时代特色。薄膜开关主要类型薄膜开关面板是一种由刚性或柔性印制电路板为基体,安装上有手感或无手感按键,再覆以印刷有彩色装饰性图案的塑料(聚碳酸酯PC、聚酯PET等)薄膜面板构成的、集开关功能和装饰性功能为一体的电子部件,是一种新型的人机对话界面。其开关电路与整机的连接方式可采用焊接或插接的方式来完成。 柔性薄膜开关 柔性薄膜开关是薄膜开关的典型形式。这类薄膜开关之所以称为柔性,是因为该薄膜开关的面膜层、隔离层、电路层全部由各种不同性质的柔性薄膜所组成。柔性薄膜开关的电路层,均采用电器性能良好的聚酯薄膜(PET)作为开关电路图形的载体,此层也分装手感弹片、上下电路。由于聚酯薄膜所具有性质的影响,使得该薄膜开关具有良好的绝缘性、耐热性、抗折性和较高的回弹性。开关电路的图形,包括开关的联机及其引出线均采用低电阻,低温条件下固化的导电性涂料印刷而成。因此,整个薄膜开关的组成,具有一定的柔软性,不仅适合于平面体上使用,还能与曲面体配合。柔性薄膜开关引出线与开关体的本身是一体的,在制作群体开关的联机时,将其汇集于薄膜的某一处,并按设计指定的位置和标准的线距向外延伸,作为柔软的、可任意弯曲的、密封的引出导线与整机的后置电路相连。 薄膜开关如图所示,它由引出线、上部电极电路、下部电极电路、中间隔离层及面板层等构成。该种开关具有密封性好、重量轻、体积小,采用低电压、低电流且能防水、防尘,寿命长等优点,多用于办公设备、家用电器等电子产品中。薄膜开关的背面有强力压敏胶层,将防粘纸撕掉后,便可贴在仪器的面板上,且开关的引出线为薄膜导电带,并配以专用插座连接。此种结构为使用带来了很大的方便,故得到了广泛的使用。 面板层 面板层一般在低于0.25MM的PET、PC等无色透光片材丝印上精美图案和文字制作而成,因面板层最主要的作用在于起标识和按键作用,所以选用材料必须具有高透明度、高油墨附着力、高弹性、高韧性等特点。 面胶层 面胶最主要的作用是将面板层与电路层紧密相连,以达到密封和连接的效果,此层一般要求厚度在0.05---0.15MM之间,具有高强的粘性和防老化性;在生产中,一般选用专用的薄膜开关双面胶,有些薄膜开关要求能防水防高温,因此面胶也必须根据需要而使用不同性质的材料。 控制电路上层和下层 此层均采用性能良好的聚酯薄膜(PET)作为开关电路图形的载体并在其上用特殊的工艺丝印上导电银浆和导电碳浆,使其具有导电性能,其厚度一般在0.05--0.175MM以内,最常见的是用0.125MM PET。 夹胶层 它是处于上电路与下电路层之间并起密封和连接的作用,一般采用PET双面胶,其厚度有0.05--0.2MM不等; 在选择此层材质的时候应充分考虑产品的整体厚度,绝缘性,电路按键包手感和密封性。 背面胶层 背胶的采用与薄膜开关与何种材质相粘贴紧密相关,比较常采用的有普通双面胶、3M胶、防水胶等。 凸起薄膜 通常,薄膜开关上的按键只是用色彩来表达键体的位置、形状和大小。这样,只能凭操作者的视觉来识别操作的准确性,由于没有适当的反馈信息,因而影响了对机子监控的自信和操作的速度。所以在面板的设计阶段就要作好安排,备有工艺孔,以便在模具压制时有精确的定位, 其立体凸起的高度一般不宜超过基材厚度的两倍。为美观产品的外观,凸起薄膜开关的凸起可有多种变化制作。 1排4键薄膜开关 Arduino扩展键盘模块(控制面板) 实验开源代码 /* 【Arduino】168种传感器模块系列实验(62) 实验六十二:1排4键薄膜开关 Arduino扩展键盘模块(控制面板) */ #include const byte ROWS = 1; //矩阵键盘行数 const byte COLS = 4; //矩阵键盘列数 //按键定义 char hexaKeys = { {'1','2','3','4'}, }; byte rowPins = {6}; //行的针脚连接的接口 byte colPins = {5,4,3,2}; //列的针脚连接的接口 Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); void setup(){ Serial.begin(9600); } void loop(){ char customKey = customKeypad.getKey(); if (customKey){ Serial.println(customKey); } } 实验串口输出 实验仿真编程(linkboy3.6)
  • 热度 2
    2020-1-29 11:11
    614 次阅读|
    0 个评论
    【雕爷学编程】Arduino动手做(61)---电压检测传感器
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真) 实验六十一:电压检测模块 Voltage Sensor 电压传感器 电压检测传感器模块资料 由于目前电子产品各式各样,供电电源的电压也各不相同,要想检测就需要一款合适的电压检测模块和控制器。控制器模拟接口检测输入电压上限为5V,也就是说大于5V的电压将无法检测。 2011 年新推出的这款电压检测模块能够解决此问题,实现检测大于5V的电压,此模块基于电阻分压原理所设计,能使红色端子接口输入的电压缩小5倍,模拟输入电压上限为5V,那么电压检测模块的输入电压则不能大于5V×5=25V(如果用到3.3V系统,输入电压不能大于3.3Vx5=16.5V)。因为Arduino所用AVR 芯片为10位AD,所以此模块的模拟分辨率为0.00489V(5V/1023),故电压检测模块检测输入下限电压为 0.00489V×5=0.02445V。 通过3P传感器连接线插接到传感器扩展板,不仅可以轻松实现对电压电量大小的检测,监控互动媒体作品或机器人电池供电的电量,也可以通过IICLCD1602液晶模块显示电压制作电压监测器。 为配合实验,找了一块DC-DC升压模块 升压模块 1、体积小可调升压模块,可轻松安装于各种小型设备里面。 2、可采用MicroUSB输入,用USB充电器或者移动电源通过手机数据线即3、可轻松得到9V,12V,15V,18V,24V的常用电压,使用非常方便。 4、宽的输入和输出电压,高的转换效率。 升压模块特性 1)大输出电流:2A(建议在1A内使用) 2)输入电压:2 v--24 v 28 v(建议在26V内使用) 93%(效率与输入和输出的压差有关) 5)尺寸:30mm* 17mm* 14mm(长*宽*高) 注意事项 1)此模块是升压模块,输出电压要大于输入电压 2)峰值电流输出电流不过2A 电压检测传感器模块 此模块基于电阻分压原理所设计,能使端子接口输入的电压缩小5倍,Arduino模拟输入电压最大为5V,那么电压检测模块的输入电压则不能大于5V×5=25V(如果用到3.3V系统,输入电压不能大于3.3Vx5=16.5V)。因为Arduino所用AVR芯片为10位AD,所以此模块的模拟分辨率为0.00489V(5V/1023),故电压检测模块检测输入最小电压为0.00489V×5=0.02445V。 电压传感器模块参数 电压输入范围:DC0-25V 电压工作范围:DC0-25V 电压检测范围:DC0.02445V-25V 数据类型:模拟输入 电压模拟分辨率:0.00489V DC输入接口:红色端子正极接VCC,负极接GND 尺寸:30mm x 25mm 接口类型:KF2510-3P 输出接口: "-"接GND, "+"接5/3.3V, "S"接Arduino的AD引脚(A0) 实验接线示意图 实验开源代码 /* 【Arduino】66种传感器模块系列实验(61) 实验六十一:电压检测模块 Voltage Sensor 电压传感器 试试看波形如何 */ void setup() { Serial.begin(9600); } void loop() { int val; float temp; val=analogRead(0); temp=val/40.92; val=(int)temp; Serial.println(val); delay(1000); } 串口输出的实验电压变动波形图 /* 【Arduino】66种传感器模块系列实验(61) 实验六十一:电压检测模块 Voltage Sensor 电压传感器 程序之二 */ int analogpin=0; int val,val5; int val2=0; int val3=0; int val4=0; void setup() { Serial.begin(9600); } void loop() { int val,val5; float val1; val=analogRead(analogpin); val1=val/3.9; val5=(int)val1; val3=val5/100; val2=(val5%100)/10; val4=val5%10; Serial.print("$CLEAR\r\n"); Serial.print("$GO 1 1\r\n"); Serial.print("$PRINT Voltage:\r\n"); Serial.print("$GO 1 9\r\n"); Serial.print("$PRINT "); Serial.print(val3); Serial.print(val2); Serial.print("."); Serial.print(val4); Serial.println("V"); delay(1000); } 串口输出的实验电压实时变动数值 实验开源图形编程(Mind+) 设定12V为监控电压阙值,当电压小于12V时自动报警(板载LED亮),十分精准
广告