tag 标签: Arduino动手做

相关博文
  • 2021-8-24 10:26
    255 次阅读|
    0 个评论
    【雕爷学编程】Arduino动手做(90)---4X4矩阵薄膜键盘模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验九十:4x4按键模块 轻触开关4*4薄膜矩阵形键盘 16位单片机外扩外接控制键盘 矩阵键盘 矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。由于电路设计时需要更多的外部输入,单独的控制一个按键需要浪费很多的IO资源,所以就有了矩阵键盘,常用的矩阵键盘有4*4和8*8,其中用的最多的是4*4。 组成结构,在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。 薄膜键盘 是薄膜开关范畴的一例,按键较多且排列整齐有序的薄膜开关,人们习惯称之为薄膜键盘。薄膜键盘是近年来国际流行的一种集装饰性与功能性为一体的一个操作系统。由面板、上电路、隔离层、下电路四部分组成。薄膜键盘外形美观、新颖,体积小、重量轻,密封性强。具有防潮、防尘、防油污、耐酸碱、抗震及使用寿命长等特点。广泛应用于,医疗仪器,计算机控制,数码机床,电子衡器,邮电通讯,复印机,电冰箱,微波炉,电风扇,洗衣机,电子游戏机等领域。 优点 1.外形美观、新颖; 2.体积小、厚度薄、重量轻、更有利于笔记本型电脑键盘向轻、薄、短、小和 高智能化方向发展。 3.防潮、防尘、防油污及有害气体,密封性强、耐酸碱抗震。 4.使用寿命长、耐弯折。 薄膜开关电原理图 按键识别方法 这样,当按键没有按下时,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。 一、行扫描法,又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法。 1、判断键盘中有无键按下 将全部行线Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。 2、判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。 二、高低电平翻转法 首先让P1口高四位为1,低四位为0。若有按键按下,则高四位中会有一个1翻转为0,低四位不会变,此时即可确定被按下的键的行位置。然后让P1口高四位为0,低四位为1。若有按键按下,则低四位中会有一个1翻转为0,高四位不会变,此时即可确定被按下的键的列位置。最后将上述两者进行或运算即可确定被按下的键的位置。 实际上,键盘、显示处理是很复杂的,它往往占到一个应用程序的大部份代码,可见其重要性,但说到,这种复杂并不来自于单片机的本身,而是来自于操作者的习惯等等问题,因此,在编写键盘处理程序之前,最好先把它从逻辑上理清,然后用适当的算法表示出来,最后再去写代码,这样,才能快速有效地写好代码。 柔性薄膜键盘 是薄膜键盘的典型形式。这类薄膜键盘之所以称为柔性,是因为该薄膜键盘的面膜层、隔离层、电路层全部由各种不同性质的软件薄膜所组成。柔性薄膜键盘的电路层,均采用电器性能良好的聚酯薄膜(PET)作为开关电路图形的载体。由于聚酯薄膜所具有性质的影响,使得该薄膜键盘具有良好的绝缘性、耐热性、抗折性和较高的回弹性。开关电路的图形,包括开关的联机及其引出线均采用低电阻,低温条件下固化的导电性涂料印刷而成。因此,整个薄膜键盘的组成,具有一定的柔软性,不仅适合于平面体上使用,还能与曲面体配合。柔性薄膜键盘引出线与开关体的本身是一体的,在制作群体开关的联机时,将其汇集于薄膜的某一处,并按设计指定的位置和标准的线距向外延伸,作为柔软的、可任意弯曲的、密封的引出导线与整机的后置电路相连。 平面立体薄膜键盘 一种使开关键体微微凸起,略高于面板,构成立体形状的薄膜键盘,称为立体键开关。立体键不仅能准确地给定键体的范围,提高辨认速度,使操作者的触觉比较敏感,同时还增进了产品外观的装饰效果. 立体键的制作,必须在面板的设计阶段就要作好安排,备有工艺孔,以便在模具压制时有精确的定位, 其立体凸起的高度一般不宜超过基材厚度的两倍。为美观产品的外观,凸起薄膜键盘的凸起可有多种变化。 模块参数 接触电阻为500 绝缘电阻100M 关键操作力150-200N 回弹时间1(ms) 寿命1亿(次) 工作温度60 1.电子特性: 额定电流:35V(DC),100mA,1W 接触电阻:10Ω~500Ω (根据引线长度的不同而不同于所用材料的引线长度) 绝缘电阻:100MΩ100V 介电强度:250VRms(50~60Hz 1min) 电击抖动:<5ms 寿命:触觉类型:≥100万次 2.机械性能 工作压力:触感:170~397g(6~14oz) 开关行程:触摸式:0.6~1.5mm 3.环境参数 工作温度:-40至+80 储存温度:-40至+80 温度:从40,90%到95%,240小时 振动:20G,最大 (10~200Hz,Mil-SLD-202 M204。条件B) /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验九十:4x4按键模块 轻触开关4*4薄膜矩阵形键盘 16位单片机外扩外接控制键盘 */ #include const byte ROWS = 4; const byte COLS = 4; char keys = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowPins = {9, 8, 7, 6}; byte colPins = {5, 4, 3, 2}; Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup(){ Serial.begin(9600); } void loop(){ char key = keypad.getKey(); if (key != NO_KEY){ Serial.println(key); } } 实验串口返回情况 实验开源仿真编程(Linkboy V4.62) 实验开源图形编程(Mind+、Mixly、编玩边学) 实验场景图
  • 热度 3
    2021-8-23 15:34
    564 次阅读|
    0 个评论
    【雕爷学编程】Arduino动手做(89)---8位双向电平转换模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验八十九: 8位 5V-3V IIC UART SPI TTL双向电平转换模块 电平转换器 是一个电压转换装置,电平转换分为单向转换和双向转换,还有单电源和双电源转换,双电源转换采用双轨方案具有满足各方面性能的要求。在新一代电子电路设计中, 随着低电压逻辑的引入,系统内部常常出现输入/ 输出逻辑不协调的问题, 从而提高了系统设计的复杂性。例如, 当1. 8V的数字电路与工作在3. 3V 的模拟电路进行通信时,需要首先解决两种电平的转换问题,这时就需要电平转换器。随着不同工作电压的数字IC 的不断涌现,逻辑电平转换的必要性更加突出, 电平转换方式也将随逻辑电压、数据总线的形式(例如4 线SPI、32 位并行数据总线等) 以及数据传输速率的不同而改变。现在虽然许多逻辑芯片都能实现较高的逻辑电平至较低逻辑电平的转换(如将5V 电平转换至3V 电平) ,但极少有逻辑电路芯片能够将较低的逻辑电平转换成较高的逻辑电平(如将3V逻辑转换至5V逻辑) 。另外,电平转换器虽然也可以用晶体管甚至电阻———二极管的组合来实现, 但因受寄生电容的影响,这些方法大大限制了数据的传输速率。尽管宽字节的电平转换器已经商用化, 但这些产品不是针对数据速率低于20Mbps 的串行总线(SPITM、I2CTM、USB 等) 优化的, 这些器件具有较大的封装尺寸、较多的引脚数和I/ O 方向控制引脚,因而不适合小型串行或外设接口和更高速率的总线(如以太网、LVDS、SCSI等) 。 逻辑电平 所谓电平,是指两功率或电压之比的对数,有时也可用来表示两电流之比的对数。电平的单位分贝用dB表示。常用的电平有功率电平和电压电平两类,它们各自又可分为绝对电平和相对电平两种。逻辑电平是指一种可以产生信号的状态,通常由信号与地线之间的电位差来体现。逻辑电平的浮动范围由逻辑家族中不同器件的特性所决定。 关于逻辑高低电平 1) 5V CMOS、 HC、 AHC、 AC中, 输入大于3.5V算高电平 | | 输入小于1.5V算低电平; 2) 5V TTL 、ABT 、AHCT、 HCT、 ACT中 , 输入大于2V算高电平 | | 输入小于0.8V算低电平; 3) 3.3V LVTTL 、LVT、 LVC 、ALVC、LV 、ALVT中 ,输入大于2V算高电平 | | 输入小于0.8V算低电平; 4) 2.5V CMOS、 ALVC 、LV 、ALVT中 , 输入大于1.7V算高电平 | | 输入小于0.7V算低电平。 场效应管 场效应晶体管(Field Effect Transistor缩写(FET))简称场效应管。主要有两种类型(juncTIon FET—JFET)和金属 - 氧化物半导体场效应管(metal-oxide semiconductor FET,简称MOS-FET)。由多数载流子参与导电,也称为单极型晶体管。它属于电压控制型半导体器件。具有输入电阻高(107~1015Ω)、噪声小、功耗低、动态范围大、易于集成、没有二次击穿现象、安全工作区域宽等优点,现已成为双极型晶体管和功率晶体管的强大竞争者。场效应管(FET)是利用控制输入回路的电场效应来控制输出回路电流的一种半导体器件,并以此命名。由于它仅靠半导体中的多数载流子导电,又称单极型晶体管。 场效应管干什么用的 工作原理:场效应管工作原理用一句话说,就是“漏极-源极间流经沟道的ID,用以栅极与沟道间的pn结形成的反偏的栅极电压控制ID”。更正确地说,ID流经通路的宽度,即沟道截面积,它是由pn结反偏的变化,产生耗尽层扩展变化控制的缘故。在VGS=0的非饱和区域,表示的过渡层的扩展因为不很大,根据漏极-源极间所加VDS的电场,源极区域的某些电子被漏极拉去,即从漏极向源极有电流ID流动。从门极向漏极扩展的过度层将沟道的一部分构成堵塞型,ID饱和。将这种状态称为夹断。这意味着过渡层将沟道的一部分阻挡,并不是电流被切断。在过渡层由于没有电子、空穴的自由移动,在理想状态下几乎具有绝缘特性,通常电流也难流动。但是此时漏极-源极间的电场,实际上是两个过渡层接触漏极与门极下部附近,由于漂移电场拉去的高速电子通过过渡层。因漂移电场的强度几乎不变产生ID的饱和现象。其次,VGS向负的方向变化,让VGS=VGS(off),此时过渡层大致成为覆盖全区域的状态。而且VDS的电场大部分加到过渡层上,将电子拉向漂移方向的电场,只有靠近源极的很短部分,这更使电流不能流通。 作用: 1.场效应管可应用于放大。 2.场效应管很高的输入阻抗非常适合作阻抗变换。 3.场效应管可以用作可变电阻。 4.场效应管可以方便地用作恒流源。 5.场效应管可以用作电子开关。 八MOS管电平 实现八路3V和5V电平的双向转换模块 如果你曾经试图将3.3V设备连接到5V系统,你知道什么是一个挑战。双向逻辑电平转换器是一种小型器件,可以将5V信号安全地降低到3.3V,同时将3.3V升压到5V。此电平转换器也适用于2.8V和1.8V器件。这个逻辑电平转换器与我们之前的版本真正的区别在于,您可以成功地设置高低电压,并在同一通道上安全地升降它们。每个电平转换器具有将高侧上的4个引脚转换为低侧上的4个引脚的能力,其中为每侧提供两个输入和两个输出。 电平转换器非常容易使用。电路板需要由系统使用的两个电压源(高电压和低电压)供电。高电压(例如5V)到“HV”引脚,低电压(例如3.3V)到“LV”,接地从系统到“GND”引脚 兼容5-3V系统 VIN连接5V系统电源 5A连接5V系统 5B连接5V系统 GND连接5V系统GND 3V3连接3V系统电源 3A连接3V系统 3B连接3V系统 GND连接3V系统GND 尺寸:28×19mm / 1.1×0.74英寸 双向传输原理: 为了方便讲述,定义 3.3V 为 A 端,5.0V 为 B 端。 A端输出低电平时(0V) ,MOS管导通,B端输出是低电平(0V) A端输出高电平时(3.3V),MOS管截至,B端输出是高电平(5V) A端输出高阻时(OC) ,MOS管截至,B端输出是高电平(5V) B端输出低电平时(0V) ,MOS管内的二极管导通,从而使MOS管导通,A端输出是低电平(0V) B端输出高电平时(5V) ,MOS管截至,A端输出是高电平(3.3V) B端输出高阻时(OC) ,MOS管截至,A端输出是高电平(3.3V) 优点: 1、适用于低频信号电平转换,价格低廉。 2、导通后,压降比三极管小。 3、正反向双向导通,相当于机械开关。 4、电压型驱动,当然也需要一定的驱动电流,而且有的应用也许比三极管大。 模块特性 1、八MOS管电平模块实现八路3V和5V电平的双向转换 2、电源输入带防反接保护,集成3.3VLDO,并可对外提供不大于150mA的电流 3、带电源指示灯,工作与否一目了然 4、可实现UART、IIC、1-wire,SPI等总线信号3V-5V电平的双向转换 5、8通道的高电压逻辑与低电压逻辑双向转换,实现HV与LV双向互转。 LV接3.3V电源 HV接5V电源 GND接电源负极,两个电源共地 LV1-4输入3.3V TTL电平,HV1-4将输出5V TTL电平 HV1-4输入5V TTL 电平,LV1-4将输出3.3V TTL电平 使用逻辑电平转换器将Arduino连接到模块的示意图 在这个简单的图中,是把Arduino Uno连接到ESP8266 WIFI模块。在不确定所采用的模块输入输出脚所支持的电平时,采用电平转换模块也许是相对安全的选择。下图中,没有直接将ESP8266的TX和RX线连接到Arduino的GPIO引脚上,而是将它们与逻辑电平转换器连接起来:通过逻辑电平转换器连接ESP8266到Arduino uno,逻辑电平转换器是一个很小但非常有用的设备。它有助于连接使用不同电压等级的逻辑信号的设备。 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验八十九:1 x 8通道IIC I2C逻辑电平转换器模块 项目:5V电平转换为3.3V电平,实验失败了,没整明白哦 实验开源代码 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验八十九:1 x 8通道IIC I2C逻辑电平转换器模块 项目:5V电平转换为3.3V电平,实验失败了,没整明白哦 */ void setup() { Serial.begin(9600); pinMode(A0,INPUT); pinMode(13,OUTPUT); } void loop() { digitalWrite(13, HIGH); delay(200); digitalWrite(13, LOW); delay(200); int val; float temp; val=analogRead(A0); temp=val/40.92; val=(int)temp; Serial.println(val); delay(200); } 实验串口返回情况 实验场景图
  • 热度 5
    2021-7-20 17:49
    482 次阅读|
    0 个评论
    【雕爷学编程】Arduino动手做(88)---水流量传感器模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验八十八: 1号霍尔水流量传感器咖啡机直饮机流量监控模块 水流传感器 是指通过对水流量的感应而输出脉冲信号或电流、电压等信号的水流量感应仪器,这种信号的输出和水流量成一定的线性比例,有相应的换算公式和比较曲线,因此可做水控方面的管理和流量计算,在热力方面配合换能器可测量一段时间介质能量的流失,如热能表。水流传感器主要和控制芯片、单片机,甚至PLC配合使用。水流传感器具有流量控制准确,可以循环设定动作流量,水流显示和流量累积计算的作用。 流量 是指单位时间内流经封闭管道或明渠有效截面的流体量,又称瞬时流量。当流体量以体积表示时称为体积流量;当流体量以质量表示时称为质量流量。单位时间内流过某一段管道的流体的体积,称为该横截面的体积流量。简称为流量,用Q来表示。对在一定通道内流动的流体的流量进行测量统称为流量计量。流量测量的流体是多样化的,如测量对象有气体、液体、混合流体;流体的温度、压力、流量均有较大的差异,要求的测量准确度也各不相同。因此,流量测量的任务就是根据测量目的,被测流体的种类、流动状态、测量场所等测量条件,研究各种相应的测量方法,并保证流量量值的正确传递。例如河水流量,河流一秒流过某一个点的立方米数。一般来说越是在下游,流量越大,所以辨别地图上的河流方向时,一般是从窄到宽。河水流量是指单位时间内,通过河流某一横截(断)面的水量,一般用立方米每秒表示。流量也可以用一个月、一季、一年流出来的总水量表示。流量,从水力学角度讲,应该是:单位时间内通过某一过水断面的水体体积,其常用单位为每秒立方米,多用于河流、湖泊的断面的进出水量测量,流量的测量方法,从水文站角度讲,可分为浮标法、流速仪法、超声波法等,流速仪法测量精度最高。 水流传感器基本原理1   水流量传感器是利用霍尔元件的霍尔效应来测量磁性物理量。在霍尔元件的正极串入负载电阻,同时通上5V的直流电压并使电流方向与磁场方向正交。当水通过涡轮开关壳推动磁性转子转动时,产生不同磁极的旋转磁场,切割磁感应线,产生高低脉冲电平。由于霍尔元件的输出脉冲信号频率与磁性转子的转速成正比,转子的转速又与水流量成正比,根据水流量的大小启动燃气热水器。其脉冲信号频率的经验公式见式(1)。   f=8.1q-3(1)   式中:f—脉冲信号频率,H2   q—水流量,L/min   由水流量传感器的反馈信号通过控制器判断水流量的值。根据燃气热水器机型的不同,选择最佳的启动流量,可实现超低压(0.02MPa以下)启动。 水流传感器工作原理2   水流传感器主要由铜阀体、水流转子组件、稳流组件和霍尔元件组成。它装在热水器的进水端用于测量进水流量。当水流过转子组件时,磁性转子转动,并且转速随着流量成线性变化。霍尔元件输出相应的脉冲信号反馈给控制器,由控制器判断水流量的大小,调节控制比例阀的电流,从而通过比例阀控制燃气气量,避免燃气热水器在使用过程中出现夏暖冬凉的现象。水流量传感器从根本上解决了压差式水气联动阀启动水压高以及翻板式水阀易误动作出现干烧等缺点。它具有反映灵敏、寿命长、动作迅速、安全可靠、连接方便利启动流量超低(1.5L/min)等优点,深受广大用户喜爱。   水流转子组件主要由涡轮开关壳、磁性转子、制动环组成。使用水流开关方式时,其性能优于机械式压差盘结构,且尺寸明显缩校当水流通过涡轮开关壳,推动磁性转子旋转,不同磁极靠近霍尔元件时霍尔元件导通,离开时霍尔元件断开。由此,可测量出转子转速。根据实测的水流量、转子转速和输出信号(电压)的曲线,便可确定出热水器的启动水压,以及启动水压相对应的启动水流量与转子的启动转速。由控制电路,便可实现当转子转速大于启动转速时热水器启动工作;在转速小于启动转速时,热水器停止工作。这样热水器启动水压一般设定在0.01MPa,启动水流量为3~5L/min(需满足热水器标准对最高温升的限制)。另外,由于水在永磁材料磁场切割下,变成磁化水,水中的含氧量增加,使人洗浴后感觉清爽。制动环的作用是停水时,制止高速旋转的磁性转子转动,终止脉冲信号输出。控制器接收不到脉冲信号,立即控制燃气比例阀关阀,切断气源,防止干烧。 水流传感器的作用 1、通水通电,防干烧,有开关信号输出的和脉冲信号输出的水流量传感器(赛盛尔); 2、线型比例输出脉冲信号,与流量成比例关系,从而实现加热功率的调整,达到恒温效果,大部分恒热热器和燃气势水器都采用这种方式,现在一些电势水龙头和洗手宝也有的用水流量传感器。 3、水流量传感器从根本上解决了压差式水气联动阀启动水压高以及翻板式水阀易误动作出现干烧等缺点。它具有反映灵敏、寿命长、动作迅速、安全可靠、连接方便利启动流量超低(1.5L/min)等优点,深受广大用户喜爱。 水流量传感器在运用中要注意的事项 1、当磁性资料或对传感器发生磁力的资料接近传感器时其特征能够有所改变。 2、为了防止颗粒、杂物进入传感器在传感器的入水口有必要装置过滤网。 3、水流量传感器的装置要避开有较强轰动和摇晃的环境防止影响传感器的丈量精度。 引出线方式: 1 红IN接正极 2 黄OUT信号输出线 3 黑GND接负极 实验开源代码 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验八十八: 1号霍尔水流量传感器 直饮机流量监控模块 项目一:串口绘图器显示测量的波形 */ void setup() { Serial.begin(9600); } void loop() { Serial.println(analogRead(0)); delay(100); } 实验串口绘图器返回情况 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验九十一: 1号霍尔水流量传感器 直饮机流量监控模块 项目二:通过串口检测是否有工作流量 实验开源代码 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验九十一: 1号霍尔水流量传感器 直饮机流量监控模块 项目二:通过串口检测是否有工作流量 */ int readpin = A0; int incoming = 0; void setup (){ pinMode (readpin, INPUT) ; Serial.begin(9600); } void loop (){ incoming = analogRead(readpin) ; 500) { Serial.println("没有检测到"); } if (incoming < 500) { Serial.println("检测到有流量"); } delay(1000); } 吹气实验,串口输出截图 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验九十一: 1号霍尔水流量传感器 直饮机流量监控模块 项目三:使用串口读取水流速传感器的累计脉冲数 实验接线:Uno D2接流量传感器OUT 实验开源代码 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验九十一: 1号霍尔水流量传感器 直饮机流量监控模块 项目三:使用串口读取水流速传感器的累计脉冲数 实验接线:Uno D2接流量传感器OUT */ #define PIN 2 volatile long count = 0;//变量count声明为volatile类型 void setup() { pinMode(PIN, INPUT); attachInterrupt(0, blinkA, FALLING);//当引脚电平由高电平变为低电平时触发中断服务程序 Serial.begin(9600); } void loop() { Serial.print("累计脉冲="); Serial.println(count); delay(1000); } void blinkA() { count++; } 实验串口输出截图 实验场景图 记录脉冲的原理是,在转盘上设置磁感应点,每次磁场穿过传感器时,输出一个电平信号: 采用外部中断函数计数,当传感器被磁铁触发,程序中断,执行计数函数,记录一次。把每1000毫秒的圈数,再乘以30(双磁铁)即为实时的转速。 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验九十一: 1号霍尔水流量传感器 直饮机流量监控模块 项目四:通过外部中断简易测量转速(转/分钟) 实验接线:Uno D2接流量传感器OUT */ const byte interruptPin = 2; const long taketime = 1000; // 每次测量的时间为1000毫秒 unsigned long time; //设置变量 time,计时 float Val = 0; //设置变量 Val,计数 void setup() { Serial.begin(9600); attachInterrupt(digitalPinToInterrupt(interruptPin), count, FALLING);//触发信号必须是变化的,上升或下降皆可 time = millis();//开始计时,time获得当前系统时间 } void loop() { = time) { Serial.print("转速= "); Serial.println(Val * 30); //转换成rpm,单磁铁触发分辨率为60rpm,2个磁铁为30rpm time = millis() + taketime;//标记未来的时间点,1000ms后执行if判断,输出结果。另,降低刷新频率,可以提高分辨率 Val = 0;//输出速度结果后清零,记录下一秒的触发次数 } } void count() { Val += 1; } 实验串口输出 实验输出的实时转速波形 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验九十一: 1号霍尔水流量传感器 直饮机流量监控模块 项目五:简易测速 */ int rpmcount; //一秒钟旋圈数 int rpm ;//速度(转/分钟) unsigned long sj;//运行时间 void setup (){ Serial.begin(9600); attachInterrupt(0, rpm_fun, CHANGE); rpmcount = 0; rpm = 0; sj = 0; } void loop() { = 1000) { rpm = rpmcount * 3; rpmcount = rpmcount / 2; Serial.print("秒转:"); Serial.print(rpmcount); Serial.println("圈"); Serial.print("转速= "); Serial.print(rpm); Serial.println("转/分钟"); Serial.println(""); sj = millis(); rpmcount = 0; rpm = 0; } } void rpm_fun() { rpmcount++; } 串口输出截图 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验九十一: 1号霍尔水流量传感器 直饮机流量监控模块 项目六:累计脉冲大于等于50则点亮LED灯 实验接线:Uno D2接流量传感器OUT,LED接D13 */ #define pin 2 #define led 13 volatile long count = 0;//变量count声明为volatile类型 void setup() { pinMode(pin, INPUT); pinMode(led, OUTPUT); attachInterrupt(0, blinkA, FALLING);//当引脚电平由高电平变为低电平时触发中断服务程序 Serial.begin(9600); Serial.println("准备就绪OK"); Serial.println(""); } void loop() { Serial.print("累计脉冲="); Serial.println(count); delay(1000); = 50) { digitalWrite(led, HIGH); Serial.println("点亮LED灯"); } else digitalWrite(led, LOW); } void blinkA() { count++; } 实验串口返回情况
  • 热度 2
    2021-7-8 16:53
    460 次阅读|
    0 个评论
    【雕爷学编程】Arduino动手做(87)---ULN2003步进电机模组
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验八十七:步进电机+ULN2003驱动板 4相 5线 5V步进电机模组 ULN2003 ULN2003是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成,每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还可以在高负载电流并行运行,采用DIP—16 或SOP—16 塑料封装。 LN2003芯片引脚介绍 引脚1:CPU脉冲输入端,端口对应一个信号输出端。 引脚2:CPU脉冲输入端。 引脚3:CPU脉冲输入端。 引脚4:CPU脉冲输入端。 引脚5:CPU脉冲输入端。 引脚6:CPU脉冲输入端。 引脚7:CPU脉冲输入端。 引脚8:接地。 引脚9:该脚是内部7个续流二极管负极的公共端,各二极管的正极分别接各达林顿管的集电极。用于感性负载时,该脚接负载电源正极,实现续流作用。如果该脚接地,实际上就是达林顿管的集电极对地接通。 引脚10:脉冲信号输出端,对应7脚信号输入端. 引脚11:脉冲信号输出端,对应6脚信号输入端。 引脚12:脉冲信号输出端,对应5脚信号输入端。 引脚13:脉冲信号输出端,对应4脚信号输入端。 引脚14:脉冲信号输出端,对应3脚信号输入端。 引脚15:脉冲信号输出端,对应2脚信号输入端。 引脚16:脉冲信号输出端,对应1脚信号输入端。 ULN2003 是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成。 ULN2003内部还集成了一个消线圈反电动势的二极管,可用来驱动继电器。它是双列16脚封装,NPN晶体管矩阵,最大驱动电压=50V,电流=500mA,输入电压=5V,适用于TTL COMS,由达林顿管组成驱动电路。 ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,它的输出端允许通过电流为200mA,饱和压降VCE 约1V左右,耐压BVCEO 约为36V。用户输出口的外接负载可根据以上参数估算。采用集电极开路输出,输出电流大,故可直接驱动继电器或固体继电器,也可直接驱动低压灯泡。通常单片机驱动ULN2003时,上拉2K的电阻较为合适,同时,COM引脚应该悬空或接电源。ULN2003是一个非门电路,包含7个单元,单独每个单元驱动电流最大可达350mA,9脚可以悬空。比如1脚输入,16脚输出,你的负载接在VCC与16脚之间,不用9脚。 特点如下: ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。 ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还可以在高负载电流并行运行。 ULN2003 采用DIP—16 或SOP—16 塑料封装。 达林顿管 又称复合管。他将两个三极管串联,以组成一只等效的新的三极管。这只等效三极管的放大倍数是原二者之积,因此它的特点是放大倍数非常高。达林顿管的作用一般是在高灵敏的放大电路中放大非常微小的信号,如大功率开关电路。在电子学电路设计中,达林顿接法常用于功率放大器和稳压电源中。 图示ULN2003,内部是7个达林顿管(比ULN2803少一个达林顿管),可以看出来,每个达林顿管是两个三极管组合起来了,相当于一个NPN三极管。IN端加控制电压,OUT端接负载,输出是低电平有效。 实验八十七:步进电机+ULN2003驱动板 4相 5线 5V步进电机模组 ULN2003驱动板 外形尺寸:31×35mm 使用ULN2003大功率达林顿芯片驱动步进电机; A、B、C、D发光二极管指示四相步进电机工作时的状态; 配有步进电机的标准接口,使用时可直接插拨 模块电原理图 步进电机 是将电脉冲信号转变为角位移或线位移的开环控制电机,是现代数字程序控制系统中的主要执行元件,应用极为广泛。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。步进电机是一种感应电机,它的工作原理是利用电子电路,将直流电变成分时供电的,多相时序控制电流,用这种电流为步进电机供电,步进电机才能正常工作,驱动器就是为步进电机分时供电的,多相时序控制器。虽然步进电机已被广泛地应用,但步进电机并不能像普通的直流电机,交流电机在常规下使用。它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用。因此用好步进电机却非易事,它涉及到机械、电机、电子及计算机等许多专业知识。步进电机作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。 电机名称:减速永磁步进电机 电机型号:28BYJ-48 驱动电压:5V 驱动方式:四相八拍 齿轮减速比:1/64 采用ULN2003驱动,使用方便 优质步进电机,带齿轮减速,噪音极低,运转平稳 5V即可驱动,方便单片机开发者使用 开放性接口,也可用通过本板驱动其他步进电机 适用于51/AVR/Arduino/ARM等各种平台,机器人设计开发必备 28BYJ-48工作原理 假定电机的起始状态,逆时针方向转动,起始时是 B 相绕组的开关闭合,B 相绕组导通,那么导通电流就会在正上和正下两个定子齿上产生磁性,这两个定子齿上的磁性就会对转子上的 0 和 3 号齿产生最强的吸引力,就会如图所示的那样,转子的 0 号齿在正上、3 号齿在正下而处于平衡状态;此时我们会发现,转子的 1 号齿与右上的定子齿也就是 C 相的一个绕组呈现一个很小的夹角,2 号齿与右边的定子齿也就是 D 相绕组呈现一个稍微大一点的夹角,很明显这个夹角是 1 号齿和 C 绕组夹角的 2 倍,同理,左侧的情况也是一样的。 接下来,把 B 相绕组断开,而使 C 相绕组导通,那么很明显,右上的定子齿将对转子 1 号齿产生最大的吸引力,而左下的定子齿将对转子 4 号齿,产生最大的吸引力,在这个吸引力的作用下,转子 1、4 号齿将对齐到右上和左下的定子齿上而保持平衡,如此,转子就转过了起始状态时 1 号齿和 C 相绕组那个夹角的角度。 再接下来,断开 C 相绕组,导通 D 相绕组,过程与上述的情况完全相同,最终将使转子2、5 号齿与定子 D 相绕组对齐,转子又转过了上述同样的角度。 那么很明显,当 A 相绕组再次导通,即完成一个 B-C-D-A 的四节拍操作后,转子的 0、3 号齿将由原来的对齐到上下 2 个定子齿,而变为了对齐到左上和右下的两个定子齿上,即转子转过了一个定子齿的角度。依此类推,再来一个四节拍,转子就将再转过一个齿的角度,8 个四节拍以后转子将转过完整的一圈,而其中单个节拍使转子转过的角度就很容易计算出来了,即 360 度/(8*4)=11.25 度,这个值就叫做步进角度。而上述这种工作模式就是步进电机的单四拍模式——单相绕组通电四节拍。 具有更优性能的工作模式,那就是在单四拍的每两个节拍之间再插入一个双绕组导通的中间节拍,组成八拍模式。比如,在从 B 相导通到 C 项导通的过程中,假如一个 B 相和 C 相同时导通的节拍,这个时候,由于 B、C 两个绕组的定子齿对它们附近的转子齿同时产生相同的吸引力,这将导致这两个转子齿的中心线对比到 B、C 两个绕组的中心线上,也就是新插入的这个节拍使转子转过了上述单四拍模式中步进角度的一半,即 5.625度。这样一来,就使转动精度增加了一倍,而转子转动一圈则需要 8*8=64 拍了。另外,新增加的这个中间节拍,还会在原来单四拍的两个节拍引力之间又加了一把引力,从而可以大大增加电机的整体扭力输出,使电机更“有劲”了。 除了上述的单四拍和八拍的工作模式外,还有一个双四拍的工作模式——双绕组通电四节拍。其实就是把八拍模式中的两个绕组同时通电的那四拍单独拿出来,而舍弃掉单绕组通电的那四拍而已。其步进角度同单四拍是一样的,但由于它是两个绕组同时导通,所以扭矩会比单四拍模式大,在此就不做过多解释了。 八拍模式是这类 4 相步进电机的最佳工作模式,能最大限度的发挥电机的各项性能,也是绝大多数实际工程中所选择的模式。 实验八十七:步进电机+ULN2003驱动板 4相 5线 5V步进电机模组 实验接线示意图 实验八十七:步进电机+ULN2003驱动板 4相 5线 5V步进电机模组 项目一:逆时针旋转一圈,顺时针旋转半圈,串口监控 实验开源代码 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验八十七:步进电机+ULN2003驱动板 4相 5线 5V步进电机模组 项目一:逆时针旋转一圈,顺时针旋转半圈,串口监控 连接引脚:分别将28BYJ-48驱动器的IN1 IN2 IN3 IN4连接到 Arduino Uno R3 4 6 5 7引脚 */ #include // 这里设置步进电机旋转一圈是多少步 #define STEPS 100 //设置步进电机的步数和引脚(就是注意点2里面说的驱动板上IN1~IN4连接的四个数字口)。 Stepper stepper(STEPS, 4, 6, 5, 7); void setup(){ // 设置电机的转速:每分钟为90步 stepper.setSpeed(90); // 初始化串口,用于调试输出信息 Serial.begin(9600); } void loop(){ // 逆时针旋转一周 Serial.println("Counterclockwise rotation"); stepper.step(2048); //4步模式下旋转一周用2048 步 delay(500); // 顺时针旋转半周 Serial.println("Clockwise rotation"); stepper.step(-1024); //4步模式下旋转一周用2048 步 delay(500); } 实验串口返回情况 实验开源仿真编程(Linkboy V4.5) 实验开源图形编程(Mind+、Mixly、编玩边学) 实验开源仿真编程(Linkboy V4.52) 项目四实验开源代码 /* 【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程) 实验八十七:步进电机+ULN2003驱动板 4相 5线 5V步进电机模组 项目四:顺时针旋转1圈,逆时针旋转1/4圈,串口监控 连接引脚:分别将28BYJ-48驱动器的IN1 IN2 IN3 IN4连接到 Arduino UNO R3 8,9,10,11引脚 */ //使用arduino IDE自带的Stepper.h库文件 #include // 这里设置步进电机旋转一圈是多少步,依据步距角计算,及走一圈需要多少脉冲 #define STEPS 64 //设置步进电机的步数和引脚(就是驱动板上IN1~IN4连接的四个数字口)。 Stepper stepper(STEPS, 8, 9, 10, 11); void setup(){ // 设置电机的转速:每分钟为90步 stepper.setSpeed(290); // 初始化串口,用于调试输出信息 Serial.begin(9600); } void loop(){ // 顺时针旋转 Serial.println("顺时针旋转1圈"); stepper.step(2048); delay(500); // 逆时针旋转 Serial.println("逆时针旋转1/4圈"); stepper.step(-512); delay(500); } 实验串口返回情况 项目五,实验开源代码 /* 【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程) 实验八十七:步进电机+ULN2003驱动板 4相 5线 5V步进电机模组 项目三:极慢转动4步用于观察ULN2003电机驱动板LED变化, 慢速顺时针旋转一圈,快速逆时针旋转一圈,间隔0.5秒 连接引脚:分别将28BYJ-48驱动器的IN1 IN2 IN3 IN4连接到 Arduino UNO R3 8,10,9,11引脚 */ //本实验程序使用Stepper库 #include // 定义电机控制用常量 // 电机内部输出轴旋转一周步数 const int STEPS_PER_ROTOR_REV = 32; // 减速比 const int GEAR_REDUCTION = 64; /* 转子旋转一周需要走32步。转子每旋转一周,电机输出轴只旋转1/64周。 (电机内部配有多个减速齿轮,这些齿轮会的作用是让转子每旋转一周, 输出轴只旋转1/64周。) 因此电机输出轴旋转一周则需要转子走32X64=2048步,即以下常量定义。 */ // 电机外部输出轴旋转一周步数 (2048) const float STEPS_PER_OUT_REV = STEPS_PER_ROTOR_REV * GEAR_REDUCTION; // 定义电机控制用变量 // 电机旋转步数 int StepsRequired; // 建立步进电机对象 // 定义电机控制引脚以及电机基本信息。 // 电机控制引脚为 8,9,10,11 // 以上引脚依次连接在ULN2003 驱动板 In1, In2, In3, In4 Stepper steppermotor(STEPS_PER_ROTOR_REV, 8, 9, 10, 11); void setup() { //setup函数内无内容 } void loop() { // 极慢转动4步用于观察ULN2003电机驱动板LED变化 steppermotor.setSpeed(1); StepsRequired = 4; steppermotor.step(StepsRequired); delay(500); // 慢速顺时针旋转一圈 StepsRequired = STEPS_PER_OUT_REV; steppermotor.setSpeed(500); steppermotor.step(StepsRequired); delay(500); // 快速逆时针旋转一圈 StepsRequired = - STEPS_PER_OUT_REV; steppermotor.setSpeed(800); steppermotor.step(StepsRequired); delay(500); } 补充实验场景图
  • 热度 6
    2021-6-24 11:49
    653 次阅读|
    0 个评论
    【雕爷学编程】Arduino动手做(86)---4*4位 WS2812 全彩模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验八十六: WS2812B-4*4位 RGB LED 全彩驱动16位彩灯开发板模块 WS2812B 是一个集控制电路与发光电路于一体的智能外控LED光源。其外型与一个5050LED灯珠相同,每个元件即为一个像素点。像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路,还包含有高精度的内部振荡器和12V高压可编程定电流控制部分,有效保证了像素点光的颜色高度一致。数据协议采用单线归零码的通讯方式,像素点在上电复位以后,DIN端接受从控制器传输过来的数据,首先送过来的24bit数据被第一个像素点提取后,送到像素点内部的数据锁存器,剩余的数据经过内部整形处理电路整形放大后通过DO端口开始转发输出给下一个级联的像素点,每经过一个像素点的传输,信号减少24bit。像素点采用自动整形转发技术,使得该像素点的级联个数不受信号传送的限制,仅仅受限信号传输速度要求。 主要特点 ● 智能反接保护,电源反接不会损坏IC。 ● IC控制电路与LED点光源公用一个电源。 ● 控制电路与RGB芯片集成在一个5050封装的元器件中,构成一个完整的外控像素点。 ● 内置信号整形电路,任何一个像素点收到信号后经过波形整形再输出,保证线路波形畸变不会累加。 ● 内置上电复位和掉电复位电路。 ● 每个像素点的三基色颜色可实现256级亮度显示,完成16777216种颜色的全真色彩显示,扫描频率不低于400Hz/s。 ● 串行级联接口,能通过一根信号线完成数据的接收与解码。 ● 任意两点传传输距离在不超过5米时无需增加任何电路。 ● 当刷新速率30帧/秒时,级联数不小于1024点。 ● 数据发送速度可达800Kbps。 ● 光的颜色高度一致,性价比高。 WS2812B-4*4位 RGB LED 全彩驱动16位彩灯开发板模块 5050高亮LED,内置控制芯片,仅需1个IO口即可控制多个LED 芯片内置整形电路,信号畸变不会累计,稳定显示 三基色256级亮度调剂,16万色真彩显示效果,扫描频率不低于400Hz/S 串行连级接口,能通过一根信号线完成数据的接收与解码 刷新速率30帧/秒时,低速连级模式连级数不小于512点 数据收发速度最高可达800Kbps 高亮LED,光色亮度一致性高 两端有l联级接口,可以直接插接 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验八十六: WS2812B-4*4位 RGB LED 全彩驱动16位彩灯开发板 项目一,点亮矩阵LED模块,循环快闪绿色光 实验开源代码 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验八十九: WS2812B-4*4位 RGB LED 全彩驱动16位彩灯开发板 项目一,点亮矩阵LED模块,循环快闪绿色光 */ #include #define PIN 7 #define MAX_LED 16 #define ADD true #define SUB false int val = 0; boolean stat = ADD; Adafruit_NeoPixel strip = Adafruit_NeoPixel( MAX_LED, PIN, NEO_RGB + NEO_KHZ800 ); void setup(){ strip.begin(); strip.show(); } void loop(){ uint8_t i,a=0; uint32_t color = strip.Color(255, 100, 0); while(a<17) { for(i=0;i<16;i++) { if(i==a) strip.setPixelColor(i, color); else strip.setPixelColor(i, 0); } strip.show(); delay(20); a++; } } 实验场景图 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验八十六: WS2812B-4*4位 RGB LED 全彩驱动16位彩灯开发板 项目二,依次点亮不同色彩灯 */ #include #define LED_PIN 7 #define NUM_LEDS 16 CRGB leds ; void setup() { FastLED.addLeds (leds, NUM_LEDS); } void loop() { leds = CRGB(255, 0, 0); FastLED.show(); delay(500); leds = CRGB(0, 255, 0); FastLED.show(); delay(500); leds = CRGB(0, 0, 255); FastLED.show(); delay(500); leds = CRGB(150, 0, 255); FastLED.show(); delay(500); leds = CRGB(255, 200, 20); FastLED.show(); delay(500); leds = CRGB(85, 60, 180); FastLED.show(); delay(500); leds = CRGB(150, 255, 20); FastLED.show(); delay(500); leds = CRGB(0, 50, 255); FastLED.show(); delay(500); leds = CRGB(255, 255, 0); FastLED.show(); delay(500); leds = CRGB(20, 25, 255); FastLED.show(); delay(500); leds = CRGB(255, 0, 20); FastLED.show(); delay(500); leds = CRGB(50, 0, 55); FastLED.show(); delay(500); leds = CRGB(55, 200, 20); FastLED.show(); delay(500); leds = CRGB(85, 160, 180); FastLED.show(); delay(500); leds = CRGB(20, 255, 0); FastLED.show(); delay(500); leds = CRGB(150, 150, 60); FastLED.show(); delay(500); } 实验场景图 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验八十六: WS2812B-4*4位 RGB LED 全彩驱动16位彩灯开发板 项目之三,简单渐变彩虹色 */ #include #ifdef __AVR__ #include #endif #define PIN 7 #define NUMPIXELS 16 float RDE1=0; float GRE1=0; float BLE1=0; Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); int delayval = 500; void setup() { #if defined (__AVR_ATtiny85__) if (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif pixels.begin(); } void loop() { GRE1=0; for(int o=0;o<255;o++){ RDE1=255; GRE1=GRE1+1; BLE1=0; for(int l=0;l
广告