“LEGO-旋转编码器”的版本间的差异

来自YFRobotwiki
跳转至: 导航搜索
应用示例
第53行: 第53行:
 
<source lang="c">
 
<source lang="c">
 
/*
 
/*
   Alarm
+
   Read Quadrature Encoder
   -  磁控报警
+
   -  旋钮编码 测试
  
 
   This example code is in the public domain.
 
   This example code is in the public domain.
第62行: 第62行:
 
*/
 
*/
  
const int buzzerPin = 5;     // select the pin for the buzzer
+
/*** 顺时针 位置增加 逆时针 位置减小 ***/
const int reedSwitchPin = 11; // select the input pin for the reed Switch
+
#define encoderPinA 9  // A相
 +
#define encoderPinB 10 // B相
 +
 
 +
int encoderPos = 0;
 +
int encoderPinALast = HIGH;
 +
int encoderPinANow = HIGH;
 +
 
 +
int encoderPinBLast = HIGH;
 +
int encoderPinBNow = HIGH;
  
 
void setup() {
 
void setup() {
   pinMode(buzzerPin, OUTPUT);
+
   pinMode(encoderPinA, INPUT);
   pinMode(reedSwitchPin, INPUT);
+
   pinMode(encoderPinB, INPUT);
 +
  Serial.begin (115200);
 
}
 
}
  
 
void loop() {
 
void loop() {
   if (digitalRead(reedSwitchPin) == LOW) {
+
  encoderPinANow = digitalRead(encoderPinA);
     digitalWrite(buzzerPin, HIGH);
+
  encoderPinBNow = digitalRead(encoderPinB);
  } else {
+
 
     digitalWrite(buzzerPin, LOW);
+
   if (encoderPinALast != encoderPinANow) {
 +
    Serial.print("A-Now:");
 +
    Serial.print(encoderPinANow);
 +
    Serial.print("\tB-Now:");
 +
    Serial.print(encoderPinBNow);
 +
    Serial.println();
 +
  }
 +
  encoderPinBNow = digitalRead(encoderPinB);
 +
  if (encoderPinBLast != encoderPinBNow) {
 +
    Serial.print("A-Now:");
 +
    Serial.print(encoderPinANow);
 +
    Serial.print("\tB-Now:");
 +
    Serial.print(encoderPinBNow);
 +
    Serial.println();
 +
  }
 +
 
 +
  if ((encoderPinALast == LOW) && (encoderPinANow == HIGH)) {   //A相 上升沿
 +
     if (encoderPinBNow == LOW) { // B相 低电平 状态
 +
      encoderPos++;
 +
      Serial.print("CW \t");
 +
    } else {
 +
      encoderPos--;
 +
      Serial.print("CCW \t");
 +
     }
 +
    Serial.println(encoderPos);
 
   }
 
   }
 +
 
 +
  encoderPinALast = encoderPinANow;
 +
  encoderPinBLast = encoderPinBNow;
 
}
 
}
 
</source>
 
</source>
第100行: 第136行:
 
===='''程序运行结果'''====
 
===='''程序运行结果'''====
  
  当使用磁铁靠近 旋转编码器 蜂鸣器报警;反之蜂鸣器无声。
+
 旋转编码器, 串口输出:
  
 +
[[Image:LEGO-旋转编码器-串口输出.png|430px|LEGO-旋转编码器-串口输出]]
  
 
===参考资料===
 
===参考资料===

2021年5月18日 (二) 15:48的版本

LEGO-旋转编码器


产品简介


LEGO旋转编码器采用EC11旋转编码器设计制作,通过旋转可计数正反向转动输出的脉冲数;不同于电位器,旋转编码器没有角度限制。

LEGO旋转编码器具有统一的兼容乐高积木的外壳,可轻松完成乐高积木的拼接,实现创意设计。

扩展阅读

EC11旋转编码器是一种增量编码器,特点:可以规避信号抖动引起的误差;

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

更多编码器参数请查看页末 --> 参考资料。

规格参数


  • 供电电压:DC3.3V~5V
  • 信号类型:数字输入
  • 一圈脉冲数:20个
  • 接口类型:PH2.0-4P
  • 外形尺寸:单位mm,整体高度23mm

乐高兼容模块外壳尺寸.png


引脚说明

LEGO-旋转编码器-PINOUT


应用示例


示例需要硬件:

  • Arduino UNO
  • Arduino UNO 专用扩展板
  • 旋转编码器模块
  • 线材

电路连接示意图

旋转编码器的 G、V、A、B分别连接 Arduino UNO的GND、VCC、D9、D10引脚。

LEGO-旋转编码器-连接示意图.png

Arduino IDE示例代码

复制代码至Arduino IDE中编译上传

/*
  Read Quadrature Encoder
   - 旋钮编码器测试
 
  This example code is in the public domain.
  Author     : YFROBOT ZL
  Website    : www.yfrobot.com.cn
  Create Time: 2021-02-19
*/
 
/*** 顺时针 位置增加 逆时针 位置减小 ***/
#define encoderPinA 9  // A相
#define encoderPinB 10 // B相
 
int encoderPos = 0;
int encoderPinALast = HIGH;
int encoderPinANow = HIGH;
 
int encoderPinBLast = HIGH;
int encoderPinBNow = HIGH;
 
void setup() {
  pinMode(encoderPinA, INPUT);
  pinMode(encoderPinB, INPUT);
  Serial.begin (115200);
}
 
void loop() {
  encoderPinANow = digitalRead(encoderPinA);
  encoderPinBNow = digitalRead(encoderPinB);
 
  if (encoderPinALast != encoderPinANow) {
    Serial.print("A-Now:");
    Serial.print(encoderPinANow);
    Serial.print("\tB-Now:");
    Serial.print(encoderPinBNow);
    Serial.println();
  }
  encoderPinBNow = digitalRead(encoderPinB);
  if (encoderPinBLast != encoderPinBNow) {
    Serial.print("A-Now:");
    Serial.print(encoderPinANow);
    Serial.print("\tB-Now:");
    Serial.print(encoderPinBNow);
    Serial.println();
  }
 
  if ((encoderPinALast == LOW) && (encoderPinANow == HIGH)) {   //A相 上升沿
    if (encoderPinBNow == LOW) { // B相 低电平 状态
      encoderPos++;
      Serial.print("CW \t");
    } else {
      encoderPos--;
      Serial.print("CCW \t");
    }
    Serial.println(encoderPos);
  }
 
  encoderPinALast = encoderPinANow;
  encoderPinBLast = encoderPinBNow;
}

Mixly示例代码

MixlyV1.1.5、YFlego库V0.1.1

LEGO-旋转编码器-Mixly示例


Mind+示例代码

Mind+ 1.7

LEGO-旋转编码器-Mind+示例

程序运行结果

旋转编码器,串口输出:

LEGO-旋转编码器-串口输出

参考资料





访问YFRobot论坛 论坛邀请码获取 技术交流群
淘宝企业店 淘宝直营店 联系我们