使用Arduino开发板连接ec11旋转编码器

因为最近要用到旋转编码器,从网上花了好长时间找了好多关于arduino使用旋转编码器的资料,总是找不到合适的,最后总结了一下(部分内容有借鉴,仅作分享,未作商用),分享给大家。

需要的元件:
杜邦线、arduino uno开发板、ec旋转编码器、面包板

首先了解一下编码器(附上几张ec11编码器的图)


旋转编码器的功能是什么呢:
首先旋转编码器是一种电子组件,能够在旋转时监视运动和位置。旋转编码器利用光学传感器,当旋转编码器旋转时,光学传感器可以产生脉冲。它能把被测的角位移直接转换成数字信号,可以分为增量型编码器和绝对型编码器。在本文中,我们将使用简单的增量式旋转编码器。
EC11编码器一共五条引线,当然两边还有两个角,那是用来固定的。五条引线分别是:
**下面三个:**A信号输出、B信号输出、GND(接地)
上面两个:一路开关信号输入,一路GND接地
具体看下图:

介绍一下编码器的工作原理:
编码器具有一个磁盘,该磁盘具有均匀分布的接触区,这些接触区连接到公共引脚C和两个其他单独的接触引脚A和B,如下所示。

当磁盘逐步开始旋转时,引脚A和B将开始与公共引脚接触,因此将产生两个方波输出信号。
如果我们仅对信号脉冲进行计数,则可以使用两个输出中的任何一个来确定旋转位置。但是,如果我们也要确定旋转方向,则需要同时考虑两个信号。
我们可以注意到,两个输出信号彼此之间相差90度。如果编码器顺时针旋转,则输出A将在输出B之前
因此,如果我们每次计算信号从高到低或从低到高变化的步数,我们就会注意到那时两个输出信号的值相反。如果编码器逆时针旋转,则输出信号具有相等的值。因此,考虑到这一点,我们可以轻松地对控制器进行编程以读取编码器位置和旋转方向。

 **接下来我们进行arduino和ec11编码器的连接**

GND------GND
VCC------+5V
SW--------D4
DT(A信号输出)---------D3
CLK(B信号输出)------D2

我们的程序采用中断(可百度搜索arduino 的 attachInterrupt函数进一步了解)的方式,所以连接用了中断引脚(我们D2用来中断,D3 仅作为普通引脚):

#define encoder0PinA 2
#define encoder0PinB 3
#define encoder0Btn 4
int encoder0Pos = 0;
void setup() {Serial.begin(9600);pinMode(encoder0PinA, INPUT_PULLUP);pinMode(encoder0PinB, INPUT_PULLUP);pinMode(encoder0Btn, INPUT_PULLUP);attachInterrupt(0, doEncoder, CHANGE);
}
int valRotary,lastValRotary;
void loop() {int btn = digitalRead(encoder0Btn);Serial.print(btn);Serial.print(" ");Serial.print(valRotary);if(valRotary>lastValRotary){Serial.print("  CW");}if(valRotary)  {Serial.print("  CCW");}lastValRotary = valRotary;Serial.println(" ");delay(250);
}
void doEncoder()
{if (digitalRead(encoder0PinA) == digitalRead(encoder0PinB)){encoder0Pos++;}else{encoder0Pos--;}valRotary = encoder0Pos/2.5;
}
 **解释一下程序:**

第一部分当然是先定义要要连接的引脚

#define encoder0PinA 2
#define encoder0PinB 3
#define encoder0Btn 4

下面是启动串口通讯,并将引脚定义为输入上拉模式,当然还有中断函数attachInterrupt()用于启用D2的中断

void setup() {Serial.begin(9600);pinMode(encoder0PinA, INPUT_PULLUP);pinMode(encoder0PinB, INPUT_PULLUP);pinMode(encoder0Btn, INPUT_PULLUP);attachInterrupt(0, doEncoder, CHANGE);
}

下面的程序是确定旋转编码器CW还是CCW的程序。当前的旋转编码器读数大于先前的旋转数据,然后表示为CW。而如果当前读数小于先前读数,则将其表示为CCW

void loop() {int btn = digitalRead(encoder0Btn);Serial.print(btn);Serial.print(" ");Serial.print(valRotary);if(valRotary>lastValRotary){Serial.print("  CW");}if(valRotary)  {Serial.print("  CCW");}lastValRotary = valRotary;Serial.println(" ");delay(250);
}

在下面的“ doEncoder”功能中,,如果DT和CLK(Arduino Uno的引脚)的值相同,则“ encoder0Pos”变量将增加,否则,“encoder0Pos”变量将减少。ValRotary值是已运行的步骤数的值。ValRotary值由旋转传感器编码器读数值除以2.5获得。从测试中获得2.5的值,因为旋转编码器的一个步长可能会超过1,所以根据每个步长以及读取延迟的增加将其值除以2.5。

void doEncoder()
{if (digitalRead(encoder0PinA) == digitalRead(encoder0PinB)){encoder0Pos++;}else{encoder0Pos--;}valRotary = encoder0Pos/2.5;
}

因为我的EC11旋转编码器没有焊片,所以在连接时不好连接,所以只连接测试了下面三个引脚,即A信号输出、B信号输出、和GND,测试运行没问题(连接好接线并烧入上面的程序后,打开arduino的串口监视器,按下复位一次(不按应该也可以),可以看到有输出,旋转编码器,可以看到数据发生变化)

如果为了好连接,可以购买下图(为了省事,图来自网络,如有侵权,请联系我,立删)这种,比较好连接)
我的运行输出:

中间一列是转动转编码器的数据变化显示,最左边一列是未按下开关时的初始值。
至此,分享结束,我非专业人士,我也不是很精通,有问题欢迎评论讨论。
转载请注明出处

使用Arduino开发板连接ec11旋转编码器相关推荐

  1. Arduino开发板连接XBee模块的方法

    在本篇文章中,我们将使用Arduino Uno开发板连接一个XBee模块.与Arduino开发板连接的XBee模块将作为一个接收器,它将与其他XBee模块进行无线通信,这些模块使用Explorer B ...

  2. 使用Arduino开发板连接模拟pH传感器

    在化学中,pH是用于指定水基溶液的酸性或碱性的标度.酸性溶液的pH值较低,而碱性溶液的pH值较高.因此,Ph传感器具有确定任何溶液的Ph的能力,即可以判断该物质本质上是酸性.碱性还是中性.通过了解pH ...

  3. 如何使用Arduino开发板连接NEO-6M GPS模块

    本文主要介绍如何使用Arduino开发板连接NEO-6M GPS模块,然后获取GPS数据. GPS全称全球定位系统,当你旅行时,它可以用来确定位置.时间和速度. NEO-6M GPS模块简介 NEO- ...

  4. 四针角oled屏连接arduino_使用Arduino开发板连接OLED显示屏制作一款智能手表

    我们大多数人都比较熟悉1602点阵液晶显示屏,它在许多项目中用于向用户显示一些信息.但是这些LCD显示器在他们能做的事情上有很多限制.在本篇文章中,我们将使用OLED显示Android智能手机的一些基 ...

  5. Arduino开发板连接振动传感器模块

    有几种关键机器或昂贵的设备因振动而受损.在这种情况下,需要振动传感器来确定机器或设备是否产生振动.如果使用适当的传感器来检测振动,识别连续振动的物体并不是一项棘手的工作.市场上有几种类型的振动传感器可 ...

  6. 使用Arduino开发板连接12位数模转换器MCP4725的方法

    我们都知道微控制器只能使用数字量,但在现实世界中有很多模拟信号需要处理.这就是为什么使用ADC(模数转换器Analog to Digital Converters)将现实世界的模拟量转换为数字量,以便 ...

  7. 如何使用Arduino开发板连接PS2无线控制器

    控制器在我们的生活中有着悠久的历史:从控制遥控车和四轮车到游戏控制器-,他们都使用无线或有线控制器.在本篇文章中,您将学习如何使用Arduino连接和使用PS2游戏机控制器. PS2控制器的功能 每个 ...

  8. 如何基于Arduino开发板使用BH1750环境光传感器

    当您将手机放在阳光下或强光照条件下时,它会根据光线条件自动调节亮度.现在大多数显示设备,无论是电视还是手机,都内置环境光传感器来自动调节亮度.今天在本篇文章中,我们将使用一个这样的传感器BH1750光 ...

  9. 使用火焰传感器和Arduino开发板搭建火灾报警系统

    在本篇文章中,我们通过将火焰传感器与Arduino开发板连接起来,一步步学习使用Arduino和火焰传感器搭建火灾报警系统.火焰传感器模块包含一个用于检测光照的光电二极管和一个用于控制灵敏度的运算放大 ...

最新文章

  1. kubernetes学习笔记之十三:基于calico的网络策略入门
  2. 20张图助你了解JVM运行时数据区,你还觉得枯燥吗?
  3. python pandas dataframe 列 转换为离散值
  4. python官网下载步骤64位-电脑64位怎么下载python
  5. Beta阶段——第4篇 Scrum 冲刺博客
  6. JavaScript的函数声明与函数表达式的区别
  7. 浅谈计算机网络技术应用及发展,【网络技术论文】计算机网络技术的应用及发展(共2891字)...
  8. Oracle创建约束语句,约束 comment 创建语句
  9. 1496.数括号法求广义表深度
  10. ceph 纠删码解读和实践
  11. ros路由器l5和l6的区别_ESXI安装Mikrotik RouterOS(ROS)软路由部署指南(附授权镜像下载)...
  12. Flutter开发App简介
  13. 博弈论:子博弈精炼均衡(子博弈都是纳什均衡,比纳什均衡更强的概念)
  14. 大脑信息编码_编码人大脑的5大小吃
  15. 2019年12月份统考计算机应用基础题库,2019年12月网络教育统考《计算机应用基础》模拟题...
  16. 来到 “鹅厂” 的 2019
  17. 计算机组装与系统安装实验目的,计算机原理与系统组装实验
  18. 【python】 爬取网易云音乐 专辑图片+歌词
  19. 招商银行信用卡中心18秋招题解
  20. 云服务器远程登录方法

热门文章

  1. javascript学习笔记整理
  2. 奥凯丰 PDF转换大师使用教程
  3. 通达信N字形态选股公式,突破前期高点发出信号
  4. [译] Swift 代码格式化
  5. WINDOWS图像编程
  6. c++逆序输出正整数
  7. Docker部署NG并设置 NG为静态文件管理器
  8. VRRP协议以及vrrpd工具的使用 - 1
  9. 发现【Stable-Diffusion WEBUI】的神奇插件:离线自动翻译中文提示词
  10. 【观察】跨境电商“独立站”模式崛起,如何抓住下一个红利爆发时代?