ESP32 步进电机精准控制:打造高精度 DIY 写字机器人,实现流畅书写体验
摘要: 想让你的 ESP32 不再仅仅是控制灯光的工具吗? 本文将带你使用 ESP32 开发板、步进电机和简单的机械结构打造一个能够自动写字的机器人。我们将深入浅出地讲解硬件连接、软件代码以及控制逻辑,并提供完整的项目代码和电路图,即使是 Arduino 和物联网开发的初学者也能轻松上手。
关键词: ESP32, 步进电机, 写字机器人, Arduino, 物联网
一、 项目概述
本项目利用 ESP32 强大的性能和丰富的接口资源,精确控制两个步进电机分别驱动 X-Y 轴的移动,从而引导笔尖在纸面上书写文字。
1.1 项目目标
- 实现 ESP32 对步进电机的精确控制,实现流畅的文字书写。
- 通过程序控制,使机器人能够按照预设轨迹书写文字。
- 提供友好的人机交互界面,方便用户输入文字并控制书写。
1.2 项目特色
- 低成本: 仅需使用 ESP32 和常见的步进电机驱动模块,成本低廉。
- 易于实现: 项目代码基于 Arduino 平台开发,简单易懂,适合初学者学习。
- 扩展性强: 可以通过添加传感器、网络模块等,实现更加丰富的功能,例如远程控制、图像识别等。
二、 硬件设计
2.1 硬件清单
- ESP32 开发板 x 1
- 步进电机驱动器 (A4988 或 DRV8825) x 2
- 步进电机 (42 步进电机) x 2
- 笔架结构 (可参考 3D 打印模型或自行设计)
- 电源 (5V)
- 面包板
- 杜邦线
2.2 电路连接

说明:
- ESP32 的 TXD 引脚连接到两个驱动器的 EN 引脚,用于控制电机的使能状态。
- D5、D18、D19 引脚分别连接到 X 轴驱动器的 DIR、STEP、SLEEP 引脚,用于控制 X 轴电机的方向、步进和休眠状态。
- D4、D2、D15 引脚分别连接到 Y 轴驱动器的 DIR、STEP、SLEEP 引脚,用于控制 Y 轴电机的方向、步进和休眠状态。
2.3 机械结构
本项目采用简单的笔架结构,通过两个步进电机分别控制 X 轴和 Y 轴的移动,从而带动笔尖在纸面上书写。
三、 软件设计
3.1 开发环境
- Arduino IDE
- ESP32 开发板支持包
3.2 库文件
- Stepper.h: Arduino IDE 自带的步进电机控制库,用于控制步进电机的基本运转。
- AccelStepper.h: 提供加速度控制的步进电机库,使电机运行更加平滑,减少震动和噪音。
3.3 代码实现
#include <Stepper.h>
#include <AccelStepper.h>// 定义步进电机引脚
#define X_STEP_PIN 5
#define X_DIR_PIN 18
#define X_ENABLE_PIN 19
#define Y_STEP_PIN 4
#define Y_DIR_PIN 2
#define Y_ENABLE_PIN 15// 定义步进电机参数
#define STEPS_PER_MM 20 // 每毫米步数,根据实际情况调整
#define MAX_SPEED 1000 // 最大速度
#define ACCELERATION 500 // 加速度// 创建步进电机对象
AccelStepper stepperX(AccelStepper::DRIVER, X_STEP_PIN, X_DIR_PIN);
AccelStepper stepperY(AccelStepper::DRIVER, Y_STEP_PIN, Y_DIR_PIN);void setup() {Serial.begin(115200);// 初始化步进电机参数stepperX.setMaxSpeed(MAX_SPEED);stepperX.setAcceleration(ACCELERATION);stepperY.setMaxSpeed(MAX_SPEED);stepperY.setAcceleration(ACCELERATION);// 使能步进电机digitalWrite(X_ENABLE_PIN, LOW);digitalWrite(Y_ENABLE_PIN, LOW);
}void loop() {// 此处添加控制逻辑,例如:// moveTo(10, 10); // 移动到坐标 (10, 10)// drawLine(0, 0, 20, 20); // 画一条从 (0, 0) 到 (20, 20) 的直线
}// 移动到指定坐标
void moveTo(float x, float y) {// 将坐标转换为步数long targetX = x * STEPS_PER_MM;long targetY = y * STEPS_PER_MM;// 控制电机移动到目标位置stepperX.moveTo(targetX);stepperY.moveTo(targetY);// 等待电机移动完成while (stepperX.distanceToGo() != 0 || stepperY.distanceToGo() != 0) {stepperX.run();stepperY.run();}
}// 画一条直线
void drawLine(float x1, float y1, float x2, float y2) {// 计算直线长度float distance = sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));// 计算步数long steps = distance * STEPS_PER_MM;// 计算 X 轴和 Y 轴每步的增量float xInc = (x2 - x1) / steps;float yInc = (y2 - y1) / steps;// 循环执行步进for (long i = 0; i <= steps; i++) {moveTo(x1 + xInc * i, y1 + yInc * i);}
}
代码说明:
- 包含头文件: 引入
Stepper.h和AccelStepper.h库文件,用于控制步进电机。 - 定义引脚和参数: 定义步进电机连接的引脚以及电机参数,例如每毫米步数、最大速度和加速度。
- 创建步进电机对象: 创建
AccelStepper对象,分别代表 X 轴和 Y 轴的步进电机。 - 设置电机参数: 在
setup()函数中初始化步进电机的最大速度和加速度。 - 使能电机: 将电机使能引脚设置为低电平,使能电机。
- 控制逻辑: 在
loop()函数中添加控制逻辑,例如调用moveTo()函数移动到指定坐标,或调用drawLine()函数画一条直线。 - 移动到指定坐标:
moveTo()函数接收目标坐标作为参数,将坐标转换为步数,然后控制电机移动到目标位置。 - 画一条直线:
drawLine()函数接收直线的起点和终点坐标作为参数,计算直线长度和步数,然后循环执行步进,使笔尖沿着直线移动。
使用方法:
- 将代码上传到 ESP32 开发板: 将上述代码复制到 Arduino IDE 中,选择正确的开发板型号和端口号,然后点击上传按钮将代码上传到 ESP32 开发板。
- 打开串口监视器: 上传完成后,打开 Arduino IDE 的串口监视器,选择合适的波特率 (例如 115200)。
- 输入指令控制电机: 在串口监视器中输入指令控制电机,例如:
M10,10将笔尖移动到坐标 (10, 10)。L0,0,20,20画一条从 (0, 0) 到 (20, 20) 的直线。
- 观察机器人书写: 观察机器人根据指令进行书写,并根据需要调整代码中的参数,例如步进电机参数、坐标值等。
注意:
- 在运行代码之前,请确保已将步进电机、驱动器和 ESP32 正确连接,并将笔尖放置在纸面的合适位置。
- 可以根据实际需要修改代码中的指令格式和控制逻辑,例如添加更多指令控制电机速度、加速度等。
- 可以使用不同的字体库和算法将文字转换为坐标点,实现更加复杂的文字书写。
进阶功能:
- 添加 LCD 显示屏: 可以添加一个 LCD 显示屏,用于显示当前坐标、输入文字等信息,提升用户体验。
- 使用蓝牙或 Wi-Fi 控制: 可以使用蓝牙模块或 Wi-Fi 模块,实现手机或电脑对机器人的无线控制。
- 结合图像识别: 可以添加摄像头模块,使用图像识别技术识别文字或图案,实现更加智能的书写功能。
总结:
本文介绍了如何使用 ESP32、步进电机和简单的机械结构打造一个能够自动写字的机器人。通过学习本文,读者可以了解到步进电机的控制原理、基本的 Arduino 编程知识以及简单的机械结构设计,为进一步学习机器人和物联网开发奠定基础。
相关文章:
ESP32 步进电机精准控制:打造高精度 DIY 写字机器人,实现流畅书写体验
摘要: 想让你的 ESP32 不再仅仅是控制灯光的工具吗? 本文将带你使用 ESP32 开发板、步进电机和简单的机械结构打造一个能够自动写字的机器人。我们将深入浅出地讲解硬件连接、软件代码以及控制逻辑,并提供完整的项目代码和电路图,即使是 Ardu…...
传知代码-图神经网络长对话理解(论文复现)
代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 概述 情感识别是人类对话理解的关键任务。随着多模态数据的概念,如语言、声音和面部表情,任务变得更加具有挑战性。作为典型解决方案,利用全局和局部上下文信息来预测对话中每…...
部署前端项目
常见部署方式有:静态托管服务、服务器部署 1. 静态托管服务 使用平台部署代码,比如 GitHub。 | 创建一个仓库,仓库名一般是 yourGithubName.github.io。 | 将打包后的静态文件文件上传到仓库。 | 在“Settings”(选项࿰…...
使用POI实现Excel文件的读取(超详细)
目录 一 导入poi相关的maven坐标 二 实现创建并且写入文件 2.1实现步骤 2.2实现代码 2.3效果展示 编辑 2.4注意 三 实现从Excel文件中读取数据 3.1实现步骤 3.2实现代码 3.3结果展示 一 导入poi相关的maven坐标 <!-- Apache poi --><dependency><gro…...
Debezium系列之:记录一次数据库某张表部分数据未同步到hive表的原因
Debezium系列之:记录一次数据库某张表部分数据未同步到hive表的原因 一、背景二、查找数据丢失流程三、数据丢失原因四、解决方法一、背景 反馈mysql数据库中某张表的数据没有同步到hive中,现在需要排查定位下原因数据丢失一般常见需求排查的方向: 数据是否采集到hdfs上采集…...
爆破器材期刊
《爆破器材》简介 《爆破器材》自1958年创刊以来,深受广大读者喜爱,是中国兵工学会主办的中央级技术刊物,在国内外公开发行,近几年已发行到10个国家和地区。《爆破器材》杂志被美国著名检索机构《化学文摘》(CA&a…...
Nginx Websocket 协议配置支持
前后分离的 Web 架构应用,在开发环境启动是可以直接连接支持 websocket 协议,因为没有中间件做转发处理。 当我们对前端进行编译后,通过 nginx 反向代理访问时,需要在nginx 配置文件中增加一些特定的头信息,让服务端识…...
【生成式对抗网络】GANs在数据生成、艺术创作,以及在增强现实和虚拟现实中的应用
一、GANs在数据生成中的应用 生成对抗网络(Generative Adversarial Networks, GANs)在数据生成领域具有显著的应用价值。GANs通过生成器(Generator)和判别器(Discriminator)两个相互竞争的神经网络&#x…...
大模型面试(三)
这次是某家公司的一个电话面试,问的过程还比较简单直接。 问:我们在大模型开源项目的应用上遇到了什么困难? 这个。。有两个困难,一个是RAG的优化,一开始RAG是比较慢的,而且召回率不高; 后来…...
pycharm中快捷键汇总
Pycarm指令汇总 Ctrl鼠标 单击,能直接查看其用法 Ctrl/ 快速注释 CtrlC 在pycharm的terminal中可以停止运行, 其他的地方可以复制。 CtrlV 粘贴 CtrlA 全选 CtrlP 查看()中需要填写什么参数 Altenter 自动不补全所需要的库...
TCP/IP协议族结构和协议
TCP/IP协议族是互联网及许多其他网络的基础,它由一系列相互关联的协议组成,用于实现网络通信。TCP/IP协议族采用ARPANET参考模型,大致可以分为四个层次:链路层、网络层、传输层和应用层。每个层次都有特定的协议和功能,确保数据能够从一个网络设备传输到另一个网络设备。 …...
大模型一些概念的理解 - 线性层、前向传播、后向传播
文章目录 前言一、线性层1. 什么是线性层?2. 通俗解释3. 示例 二、前向传播1. 什么是前向传播?2. 通俗解释3. 示例 三、后向传播1. 什么是后向传播?2. 通俗解释3. 具体步骤 四、示例五、在 PyTorch 中的后向传播 前言 最近提问里有问到一些名…...
AWS 云安全性:检测 SSH 暴力攻击
由于开源、低成本、可靠性和灵活性等优势,云基础设施主要由基于linux的机器主导,然而,它们也不能幸免于黑客的攻击,从而影响云的安全性。攻击Linux机器最流行的方法之一是通过SSH通道。 什么是 SSH 安全外壳协议(Sec…...
7.9数据结构
思维导图 作业 doubleloop.h #ifndef __DOUBLELOOP_H__ #define __DOUBLELOOP_H__#include <stdio.h> #include <stdlib.h>typedef int datatype; typedef struct node {union{int len;datatype data;};struct node *pri;//前驱指针struct node *next;//后继指针…...
Python 文件操作:打开数据处理的大门
在 Python 的学习之旅中,文件操作是一个非常实用且必不可少的技能。不论是数据分析还是日常的数据处理,良好的文件操作技巧都能让你的编程之路更加顺畅。今天,我将带你走进 Python 文件操作的世界,不仅教你如何读写文件࿰…...
单对以太网连接器多场景应用
单对以太网连接器应用场景概述 单对以太网(Single Pair Ethernet,简称SPE)作为一种新兴的以太网技术,以其独特的优势在多个领域得到了广泛的应用。SPE通过单对电缆进行数据传输,支持高速数据传输,同时还能…...
Python pip的更新问题
你是否也出现了更新pip的情况 1、提示更新pip版本 pip install --upgrade pip2、更新操作,我操作了 pip install --upgrade pip更新了,等啊等。。。 然后就是连接超时,安装失败 3、我不信,我就要更新,我还要使用镜…...
[Linux][Shell][Shell基础] -- [Shebang][特殊符号][变量][父子Shell]详细讲解
目录 0.前置知识1.Shebang2.Linux特殊符号整理3.变量4.环境变量5.父子shell0.概念1.创建进程列表(创建子shell执行命令) 6.内置命令 vs 外置命令 0.前置知识 #用于注释shell脚本语⾔属于⼀种弱类型语⾔:⽆需声明变量类型,直接定义使⽤shell三剑客&#…...
DS200CVMAG1AEB处理器 控制器 模块
DS200CVMAG1AEB特征: 高性能:采用先进的控制算法和高功率IGBT器件,可提供高电流和精确的运动控制。 高精度:采用高分辨率编码器和位置环路技术,位置精度可达0.1μm,适用于各种精密机械应用,如数…...
阈值分割后配合Connection算子和箭头工具快速知道区域的ID并选择指定区域
代码 dev_close_window () read_image (Image, E:/机器视觉学习/海康视觉平台/二期VM视觉学习/二期VM视觉学习/机器视觉程序/标定相机找圆心和焊头修正相机找圆心之算法软件/标定相机找圆心和焊头修正相机找圆心之算法软件/03 标定相机找圆心/S2/1号机/1.bmp) get_image_size …...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
