37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料+代码+图形编程+仿真编程)

实验四十:360度旋转增量编码器模块(KY-040)

EC11旋转编码器

也叫开关编码器、旋转编码器,EC11系列编码器有直插编码器、贴片式编码器、沉板式编码器、侧插式编码器,EC11A为直插式编码器。因广泛用于车载DVD、车载导航、汽车影音上,也经常被人称为汽车编码器。EC11编码器在各类仪器设备中用于频率、音量、速度、温度、电压、菜单选择、光线强弱等参数的控制。此款编码器有做20脉冲20定位点、15脉冲30定位点两种。调节轴有金属柄和塑胶柄,轴长区间9-30mm,调节轴有全柄、半柄、螺纹柄等类型供您选择。EC11系列编码器主要用于汽车电子、多媒体音响、仪器仪表、家用电器、智能家居、计算机周边、医疗器械等领域。主要用于频率调节、亮度调节、温度调节、音量调节的参数控制等。

技术参数
使用温度范围:-30℃ to+80℃
保存温度范围: -40℃ to+85℃
额定电压:DC 5V(最高12V)
全回转角度:360度(无止档点)
回转寿命:30000+200 Cycles
接触电阻:≤100mΩ
绝缘阻抗:100MΩ 以上
振荡:≤10mS 按压(开关SW)
寿命:20,000±200次.(0.5行程)
          15,000±200次.(1.5行程)

工作原理
增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表明位移的巨细。编码器是把角位移或直线位移转换成电信号的一种设备。依照读出办法编码器能够分为机械式和非机械式两种:机械式选用电刷输出,一电刷触摸导电区或绝缘区来表明代码的状况是“1”仍是“0”;非机械式的承受灵敏元件是光敏元件或磁敏元件,选用光敏元件时以透光区和不透光区来表明代码的状况是“1”仍是“0”。旋转增量式编码器以转变时输出脉冲,通过计数设备来晓得其方位,当编码器不动或停电时,依托计数设备的内部回忆来记住方位。这样,当停电后,编码器不能有任何的移动,当来电作业时,编码器输出脉冲进程中,也不能有搅扰而丢掉脉冲,否则,计数设备回忆的零点就会偏移,并且这种偏移的量是无从晓得的,只要过错的出产成果呈现后才晓得。

目前常用的增量式编码器全部为机械式编码器,好用且成本低,高端的一般为非机械光电式的。

旋转编码器
可通过旋转可以计数正方向和反方向转动过程中输出脉冲的次数,旋转计数不像电位计,这种转动计数是没有限制的。配合旋转编码器上的按键,可以复位到初始状态,即从 0 开始计数。增量编码器是一种将旋转位移转换为一连串数字脉冲信号的旋转式传感器。这些脉冲用来控制角位移。在 Eltra 编码器中角位移的转换采用了光电扫描原理。读数系统以由交替的透光窗口和不透光窗口构成的径向分度盘(码盘)的旋转为依据,同时被一个红外光源垂直照射,光把码盘的图像投射到接收器表面上。接收器覆盖着一层衍射光栅,它具有和码盘相同的窗口宽度。接收器的工作是感受光盘转动所产生的变化,然后将光变化转换成相应的电变化。再使低电平信号上升到较高电平,并产生没有任何干扰的方形脉冲,这就必须用电子电路来处理。读数系统通常采用差分方式,即将两个波形一样但相位差为180°的不同信号进行比较,以便提高输出信号的质量和稳定性。读数是再两个信号的差别基础上形成的,从而消除了干扰。

光电编码器
是一种将位移或角度的模拟信号转换成相应的电脉冲或数字量角度/角速度检测元件,具有精度高、体积小、工作可靠、接口数字化等优点。光电编码器一般由透镜、光栅盘(码盘)、光敏元件和放大整形电路组成。工作时,光栅盘与电机同速旋转,同时一个带有辨向狭缝(或狭缝群)的扇形薄片与圆盘平行放置,当光线通过这两个做相对运动的光栅盘时,光敏元件接受到的光通量也时大时小地连续变化,经放大整形电路处理后变成脉冲信号。通过测量捕捉到的脉冲数目和频率即可测出工作轴的转角和转速。而电机的当前转速通过每秒光电编码器输出脉冲的个数可以计算出来。

旋转编码器模块 
工作电压:5V
一圈脉冲数:20
旋转编码器可通过旋转可以计数正方向和反方向转动过程中输出脉冲的次数,旋转计数不像电位计,这种转动计数是没有限制的。配合旋转编码器上的按键,可以复位到初始状态,即从0开始计数。

我手头的旋转编码器模块有5个引脚,分别是VCC, GND, SW, CLK, DT。其中VCC和GND用来接电源和地,按缩写SW应该是Switch(开关)、CLK是Clock(时钟)、DT是Data(数据)。两个引脚那一端为普通的按键,也就是圆柄按下去的那个按键,当做普通按键使用即可。右边三个引脚中间的为GND,两边为两路脉冲信号CLK和DT。旋转编码器的操作是旋转和按压转轴,在按下转轴的时候SW引脚的电平会变化,旋转的时候每转动一步CLK和DT的电平是有规律的变化。

引脚接线
Arduino Uno              旋转传感器模块 
D2                              CLK(Clock 时钟)
D3                              DT (Data 数据)
D4                              SW   (按钮开关)   
5V                              +VCC   
GND                           GND

/*

【Arduino】168种传感器模块系列实验(资料+代码+图形编程+仿真编程)

实验四十:360度旋转增量编码器模块(KY-040)

*/

int CLK = 2;

int DT = 3;

int SW = 4;

const int interrupt0 = 0;

int count = 0;

int lastCLK = 0;

void setup()

{

  pinMode(SW, INPUT);

  digitalWrite(SW, HIGH);

  pinMode(CLK, INPUT);

  pinMode(DT, INPUT);

  attachInterrupt(interrupt0, ClockChanged, CHANGE);

  Serial.begin(9600);

}

void loop()

{

  if (!digitalRead(SW) && count != 0)

  {

  count = 0;

  Serial.print("count:");

  Serial.println(count);

  }

}

void ClockChanged()

{

  int clkValue = digitalRead(CLK);

  int dtValue = digitalRead(DT);

  if (lastCLK != clkValue)

  {

  lastCLK = clkValue;

  count += (clkValue != dtValue ? 1 : -1);

  Serial.print("count:");

  Serial.println(count);

  }

}

  

模块电原理图

/*

【Arduino】168种传感器模块系列实验(资料+代码+图形编程+仿真编程)

实验四十:360度旋转增量编码器模块(KY-040)之二

输出数字换屏

*/

const int clkPin = 2; 

const int dtPin = 3; 

const int swPin = 4 ; 

int encoderVal = 0;

void setup()

{

  pinMode(clkPin, INPUT);

  pinMode(dtPin, INPUT);

  pinMode(swPin, INPUT);

  digitalWrite(swPin, HIGH);

  Serial.begin(9600); 

}

void loop()

{

  int change = getEncoderTurn();

  encoderVal = encoderVal + change;

  if (digitalRead(swPin) == LOW) 

  {

    encoderVal = 0;

  }

  Serial.println(encoderVal);

}

int getEncoderTurn(void)

{

  static int oldA = HIGH; 

  static int oldB = HIGH;

  int result = 0;

  int newA = digitalRead(clkPin);

  int newB = digitalRead(dtPin);

  if (newA != oldA || newB != oldB) 

  {

    if (oldA == HIGH && newA == LOW)

    {

      result = (oldB * 2 - 1);

    }

  }

  oldA = newA;

  oldB = newB;

  return result;

  delay(500);

}

  

「雕爷学编程」Arduino动手做(40)——旋转编码器模块的更多相关文章

  1. 「雕爷学编程」Arduino动手做(15)——手指侦测心跳模块

    37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...

  2. 「雕爷学编程」Arduino动手做(9)——火焰传感器模块

    37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...

  3. 「雕爷学编程」Arduino动手做(10)——敲击传感器模块

    37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...

  4. 「雕爷学编程」Arduino动手做(14)——倾斜角度模块

    37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...

  5. 「雕爷学编程」Arduino动手做(13)——触摸开关模块

    37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...

  6. 「雕爷学编程」Arduino动手做(12)——霍尔磁力模块

    37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...

  7. 「雕爷学编程」Arduino动手做(11)——金属触摸模块

    37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...

  8. 「雕爷学编程」Arduino动手做(8)——湿度传感器模块

    37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...

  9. 「雕爷学编程」Arduino动手做(7)——旋转电位器模块

    37款传感器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备逐一做做实验 ...

随机推荐

  1. Ubuntu中安装Hadoop

    安装前 1,更新apt sudo apt-get update   会让你输入密码(自己登录Ubuntu的时候设置的),输入密码不会显示在终端面板上,确定自己敲对之后点回车就行. 2,安装SSH服务器 ...

  2. 2019-2020-1 20199310《Linux内核原理与分析》第四周作业

    1.问题描述 在前面的文章中,已经接触过一些Linux内核的知识,本文将进一步从Linux内核源代码的目录结构入手,在Oracle VM VirtualBox的Linux环境中构造一个简单的操作系统M ...

  3. 修改mysql配置中my.conf中max_allowed_packet变量

    mysql根据配置文件会限制server接受的数据包大小. 有时候大的插入和更新会受max_allowed_packet 参数限制,导致写入或者更新失败. 查看目前配置 show VARIABLES ...

  4. Linux网络服务第七章DNS域名解析服务

    端口:53 一.DNS服务器 正向解析:根据域名查IP地址,即将指定的域名解析为相对应的IP地址.域名的正向解析是DNS服务器最基本的功能,也是最常用的功能. 反向解析:根据IP地址查域名,即将指定的 ...

  5. js 之 for循环

    js之 for循环 普通for 循环 语法 for ([initialization]; [condition]; [final-expression]) statement initializati ...

  6. MYSQL隔离级别 与 锁

    1.四种隔离级别下数据不一致的情况   脏读 不可重复读 幻读 RU 是 是 是 RC(快照读) 否 是 是 RC(当前读) 否 否 是 RR(快照读) 否 否 是 RR(当前读) 否 否 否 Ser ...

  7. 第三方库PyYAML

    建议参考PyYAML Documentation来源:http://pyyaml.org/wiki/PyYAMLDocumentation:http://blog.csdn.net/conquer07 ...

  8. 有赞透明多级缓存解决方案(TMC)设计思路

    引子 TMC 是什么 TMC,即"透明多级缓存(Transparent Multilevel Cache)",是有赞 PaaS 团队给公司内应用提供的整体缓存解决方案. TMC 在 ...

  9. Mysql 字符串拆分 OR 一行转多行

    Mysql 字符串拆分 OR 一行转多行 需要了解的的几个mysql 函数: A.substring_index():字符串截取 substring_index(str,delim,count)   ...

  10. Function-time()

    time()函数返回自1970年1月1日0点以来经过的秒数,每秒变化一次? time()函数定义在头文件<time.h>中,原型是: time_t time(time_t *arg); 如 ...