Arduino - 旋转编码器 - 伺服电机

news2024/11/16 13:49:17

Arduino - 旋转编码器 - 伺服电机

Arduino - Rotary Encoder
In this tutorial, We are going to learn how to program Arduino to rotate a servo motor according to the rotary encoder’s output value.
在本教程中,我们将学习如何对Arduino进行编程,使其根据旋转编码器的输出值旋转伺服电机。

About Servo Motor and Rotary Encoder 关于伺服电机和旋转编码器

If you do not know about servo motor and rotary encoder (pinout, how it works, how to program …), learn about them in the following tutorials:
如果您不了解伺服电机和旋转编码器(引脚排列、工作原理、如何编程等),请在以下教程中了解它们:

  • Arduino - Servo Motor tutorial
    Arduino - 伺服电机教程
  • Arduino - Rotary Encoder tutorial
    Arduino - 旋转编码器教程

Wiring Diagram 接线图

Arduino Rotary Encoder Servo Motor Wiring Diagram

This image is created using Fritzing. Click to enlarge image
此图像是使用 Fritzing 创建的。点击放大图片

Arduino Code Arduino代码

/*

 * Created by ArduinoGetStarted.com
   *
 * This example code is in the public domain
   *
 * Tutorial page: https://arduinogetstarted.com/tutorials/arduino-rotary-encoder-servo-motor
   */

#include <Servo.h>

#define CLK_PIN 2

#define DT_PIN 3

#define SW_PIN 4

#define SERVO_PIN 9

#define DIRECTION_CW 0   // clockwise direction

#define DIRECTION_CCW 1  // counter-clockwise direction

int counter = 0;
int direction = DIRECTION_CW;
int CLK_state;
int prev_CLK_state;

Servo servo;  // create servo object to control a servo

void setup() {
  Serial.begin(9600);

  // configure encoder pins as inputs
  pinMode(CLK_PIN, INPUT);
  pinMode(DT_PIN, INPUT);

  // read the initial state of the rotary encoder's CLK pin
  prev_CLK_state = digitalRead(CLK_PIN);
  servo.attach(SERVO_PIN);  // attaches the servo on pin 9 to the servo object
  servo.write(0);
}

void loop() {

  // read the current state of the rotary encoder's CLK pin
  CLK_state = digitalRead(CLK_PIN);

  // If the state of CLK is changed, then pulse occurred
  // React to only the rising edge (from LOW to HIGH) to avoid double count
  if (CLK_state != prev_CLK_state && CLK_state == HIGH) {
    // if the DT state is HIGH
    // the encoder is rotating in counter-clockwise direction => decrease the counter
    if (digitalRead(DT_PIN) == HIGH) {
      counter--;
      direction = DIRECTION_CCW;
    } else {
      // the encoder is rotating in clockwise direction => increase the counter
      counter++;
      direction = DIRECTION_CW;
    }

​    Serial.print("DIRECTION: ");
​    if (direction == DIRECTION_CW)
​      Serial.print("Clockwise");
​    else
​      Serial.print("Counter-clockwise");

​    Serial.print(" | COUNTER: ");
​    Serial.println(counter);

​    if (counter < 0)
​      counter = 0;
​    else if (counter > 180)
​      counter = 180;

​    // sets the servo angle according to the counter
​    servo.write(counter);
  }

  // save last CLK state
  prev_CLK_state = CLK_state;
}

Quick Steps 快速步骤

  • Connect Arduino to PC via USB cable
    通过USB线将Arduino连接到PC
  • Open Arduino IDE, select the right board and port
    打开Arduino IDE,选择正确的板卡和端口
  • Copy the above code and open with Arduino IDE
    复制上面的代码并使用Arduino IDE打开
  • Click Upload button on Arduino IDE to upload code to Arduino
    单击Arduino IDE上的“上传”按钮,将代码上传到Arduino

Arduino IDE Upload Code

  • Open Serial Monitor 开放式串行监视器
  • Rotate the rotary encoder
    旋转旋转编码器
  • See the servo motor’s rotation
    查看伺服电机的旋转
  • See the result on Serial Monitor
    在串行监视器上查看结果

Function References

  • analogRead()
  • map()
  • Servo.attach()
  • Servo.write()
  • Servo.writeMicroseconds()
  • Servo.read()
  • Servo.attached()
  • Servo.detach()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1868402.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浏览器页面打不开(网络连接正常的情况下)

目录 一、代理被打开 二、DNS被篡改 三、网络配置出现问题 四、浏览器配置问题 一、代理被打开 1. 右击Wifi图标 2.点击“打开网络和internet设置” 3. 点击代理&#xff0c;把该窗口所有的东西都关闭&#xff0c;尤其是代理服务器 二、DNS被篡改 如果第一个方法不行&am…

平板WPS转换的PDF文件保存位置解析

在日常工作和生活中&#xff0c;我们经常需要将文档转换成PDF格式进行分享&#xff0c;以确保接收者能够无障碍地查看文件内容&#xff0c;不受软件版本或操作系统的限制。WPS作为一款功能强大的办公软件&#xff0c;也提供了文档转换为PDF的功能。然而&#xff0c;有时在转换并…

一本顶三本?入门LLM大模型必读《大模型应用开发极简入门》附PDF书籍

今天带来的是最近刚出版的新书&#xff1a; 《大模型应用开发极简入门&#xff1a;基于 GPT-4 和ChatGPT》 。 这本书是 O’Reilly 出版的&#xff0c;两位共同作者是来自 Worldline 公司的机器学习研究员 Olivier Caelen 和 数据工程师 Marie-Alice Blete。这两位作者一位侧重…

Kafka入门到精通(二)-安装Zookeeper

前言&#xff1a;因为我们要学习kafka&#xff0c;那么我们必须先安装了解下Zookeeper&#xff1b; Zookeeper简介 Zookeeper是一个开源的分布式协调服务&#xff0c;由Apache维护&#xff0c;旨在为分布式系统提供一致性、可靠性和高效的数据管理。 它通过提供一系列简单…

【Java Web】MVC架构模式

目录 一、MVC是什么? 二、MVC组成结构 三、MVC模式下项目常见包 一、MVC是什么? MVC&#xff08;ModelViewController&#xff09;是软件工程中的一种软件架构模式&#xff0c;它把软件系统分为模型、视图和控制器三个基本部分。用一种业务逻辑、数据、界面显示分离的方法组织…

Django项目部署:uwsgi+daphne+nginx+vue部署

一、项目情况 项目根目录&#xff1a;/mnt/www/alert 虚拟环境目录&#xff1a;/mnt/www/venv/alert 激活虚拟环境&#xff1a;source /mnt/www/venv/alert/bin/activate 二、具体配置 1、uwsgi启动配置 根目录下&#xff1a;新增 uwsgi.ini 注意&#xff1a;使用9801端…

LSTM理解

目录 一、LSTM的本质 二、LSTM的原理 三、LSTM的应用 本文将从LSTM的本质、LSTM的原理、LSTM的应用三个方面&#xff0c;带您一文搞懂长短期记忆网络Long Short Term Memory | LSTM。 一、LSTM的本质 RNN 面临问题&#xff1a;RNN&#xff08;递归神经网络&#xff09;在处理…

劳易测应用案例:橡胶密炼生产线安全改造项目(下)

橡胶密炼是汽车轮胎制造流程中的核心环节&#xff0c;主要负责将橡胶与多种添加剂混合&#xff0c;确保均匀分散&#xff0c;以制备合格的橡胶材料。橡胶密炼生产线由多个关键设备组成&#xff0c;包括切胶机、导切机、称重和输送系统、密炼机、开炼机以及胶片冷却机等&#xf…

《分析模式》漫谈07-怎样把一张图从不严谨改到严谨

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 下图是《分析模式》原书第2章的图2.10&#xff0c;里面有一些错误和考虑不周的地方&#xff1a; 2004中译本和2020中译本的翻译如下&#xff1a; 基本上都是照搬&#xff0c;没有改过…

Flutter第十五弹 Flutter插件

目标&#xff1a; 1.Flutter插件是什么&#xff1f;有什么作用&#xff1f; 2.怎么创建Flutter插件&#xff1f; 一、什么是插件 在flutter中&#xff0c;一个插件叫做一个package&#xff0c;使用packages的目的就是为了达到模块化&#xff0c;可以创建出可被复用和共享的代…

数据库逻辑结构设计-实体和实体间联系的转换、关系模式的优化

一、引言 如何将数据库概念结构设计的结果&#xff0c;即用E-R模型表示的概念模型转化为关系数据库模式。 E-R模型由实体、属性以及实体间的联系三个要素组成 将E-R模型转换为关系数据库模式&#xff0c;实际上就是要将实体及实体联系转换为相应的关系模式&#xff0c;转换…

iOS包ShaderVariantCollection预热慢问题

1&#xff09;iOS包ShaderVariantCollection预热慢问题 2&#xff09;使用SBP打Bundle如何读取AssetBundleManifest 3&#xff09;如何将一张贴图经过Shader处理后的结果输出给另外一个Shader使用 4&#xff09;为什么我的水这么干净&#xff0c;和UE教程里的有差别 这是第392篇…

位运算算法系列|概念讲解|例题讲解

大家好,我是LvZi,今天带来位运算算法系列|概念讲解|例题讲解 一,位运算基本概念 1.基础位运算 <<:左移操作,相当于 *2>>:右移操作,相当于 /2~:按位取反&:按位与操作,有0则0|:按位或操作,有1则1^:按位异或操作,相同为0,相异为1/无进位相加 注:对于^操作,无进…

昇思25天学习打卡营第4天|linchenfengxue

需求&#xff1a;建立一个图像分类模型&#xff0c;提供自动识别有(猫、狗、飞机、汽车等等) 图片的功能 ResNet50图像分类 图像分类是最基础的计算机视觉应用&#xff0c;属于有监督学习类别&#xff0c;如给定一张图像(猫、狗、飞机、汽车等等)&#xff0c;判断图像所属的类…

【直播倒计时】面向AI领域的开发工程师:TinyML在国产FPGA的边缘AI加速应用

TinyML是机器学习中的一个新兴领域&#xff0c;专注于开发可在低功耗、内存受限的设备上运行的算法和模型。其核心目标是将先进的机器学习算法和模型移植到体积小巧、能耗极低的嵌入式设备中&#xff0c;使这些设备具备边缘智能&#xff0c;能够在没有外部服务器支持的情况下进…

05 threeJs基础---阵列立方体和相机适配体验立方体

1.增加相机视角fov 注&#xff1a; 范围更大&#xff0c;意味着可以看到渲染范围更大&#xff0c;远小近大的视觉效果更明显 fov:眼球张开的角度&#xff0c;0时相当于闭眼。aspect:可视区域横纵比。near:眼睛能看到的最近垂直距离。far&#xff1a;眼睛能看到的最远垂直距离。…

Python类的定义和管理库之attrs使用详解

概要 在 Python 编程中,定义类和数据结构是常见的任务。然而,手动编写类的初始化方法、属性验证和比较方法可能会非常繁琐和容易出错。attrs 库是一个功能强大且灵活的工具,旨在简化类的定义和管理。通过使用 attrs,开发者可以轻松定义不可变对象、进行属性验证和类型检查…

2024长三角快递物流展即将开幕点击收藏逛展不迷路~

2024长三角快递物流展是亚洲范围内超大规模的快递物流业展示平台&#xff0c;由于展会的需求及扩大市场的影响力&#xff0c;ESYE2004转战杭州&#xff0c;凭借着先进的经济发展水平、优越的地理位置、成熟的产业环境以及巨大的电商、微商、零售业、消费的市场空间&#xff0c;…

SAP标准报表 S_ALR_8701XXXX是没有export to excel的 或者禁用 %PC也禁用了,如何开回来

以 s_alr_87012172为例子 系统-状态 进入程序 搜索 XXL 做下替换

大型企业组网如何规划网络

大型企业组网是一个复杂的过程&#xff0c;它需要细致的规划和设计&#xff0c;以确保网络能够满足企业的业务需求&#xff0c;同时保证性能、安全性和可扩展性。以下是规划大型企业网络的一些关键步骤和考虑因素&#xff1a; 1. 需求分析 业务需求&#xff1a;与各个业务部门…