亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

由串行对话控制的基于步进的旋转支架

组件和用品

28BYJ48 步进电机
× 1
X113647 步进电机驱动器
× 1
用于 5 毫米轴的 Pololu 通用铝制安装轮毂
× 1
Arduino UNO
× 1
木底座 15cm x 15cm
× 1
橡胶垫
× 4

必要的工具和机器

线锯
用 6 毫米钻头钻木头

关于这个项目

全文在这里:http://www.cesarebrizio.it/Arduino/Turntable.html

本项目是基于步进电机的旋转平台。

步进器型号为 28BYJ48,通过 X113647 步进电机驱动器(基于 ULN2003A IC)控制,通常与步进器一起购买。

平台可以双向旋转,通过串口监视器或Tera Term控制。

实现了以下命令:

  • R =连续顺时针旋转(意思是:几圈)
  • r =旋转 360 度;顺时针
  • L =连续逆时针旋转(意思是:转几圈)
  • l =旋转 360 度;逆时针
  • S =停止旋转

从机械的角度来看,组装非常简单:只需要​​一块正方形的胶合板或类似材料,大约 15cmx15cm 大小,作为基台。

将在对角线的交叉处找到桌子的中心 - 将在该点精确钻出 6 毫米的孔。

步进器轮毂偏心:将轮毂插入6mm的孔中,用铅笔画出步进器的轮廓。

然后,用线锯在步进器轮廓周围切出一个尽可能紧的圆孔,使步进器的两个固定孔牢牢地坐在桌子的木头上,这样它们就可以用来将步进器固定到桌面上。桌子。

需要 10 毫米高的橡胶垫以留出所需的间隙(步进器会粘在桌子下方)。

借助适用于 5mm 轴的 Pololu 通用铝制安装轮毂,旋转板将固定在步进器上。

信息来源:

小步进控制:http://arduino-info.wikispaces.com/SmallSteppers

实际上我使用了 4 个不同的引脚,但下面的电路图准确地再现了连接。看上面的照片(Arduino的红线代替了“粉红色”):

#define motorPin1 4 // Blue - 28BYJ-48 pin 1#define motorPin2 5 // Pink - 28BYJ-48 pin 2#define motorPin3 6 // Yellow - 28BYJ-48 pin 3#define motorPin4 7 / / 橙色 - 28BYJ-48 引脚 4 // 红色 - 28BYJ-48 引脚 5 (VCC) // 蓝色 - 28BYJ-48 引脚 GND #define STEPS_PER_TURN 2048 // 360 度的步数; 

代码

  • Arduino 中的完整草图
Arduino 中的完整草图Arduino
带有注释的软件的完整描述
/* 由串行对话电路控制的基于步进器的旋转支架和注释:参见 http://www.cesarebrizio.it/Arduino/Turntable.htmlCircuit 如下所示:https:// www.tdegypt.com/wp-content/uploads/2017/08/stepper-motor-wiring.png唯一的例外是草图使用数字输出4 - 5 - 6 - 7而Fritzing图创建于2017年12月23日修改--- - 作者 Cesare Brizio 此示例代码在公共领域。此草图控制基于步进电机的旋转平台。步进模型为 28BYJ48,通过通常与步进器一起购买的 X113647 步进电机驱动器(基于 ULN2003A IC)控制。该平台可以双向旋转,并通过串行监视器或 Tera Term 进行控制。执行以下命令:R =顺时针连续旋转(意思是:旋转几圈)r =旋转 360 度;顺时针L =连续逆时针旋转(意思是:转几圈)l =旋转360度;逆时针S =停止旋转信息来源:Small stepper control:http://arduino-info.wikispaces.com/SmallSteppers*//*-----(导入需要的库)-----*/#include /*-----( 声明常量和引脚编号 )-----*//* NEVER PUT;在#define 语句之后!!!! */// 电机引脚#define motorPin1 4 // 蓝色 - 28BYJ-48 引脚 1#define motorPin2 5 // 粉色 - 28BYJ-48 引脚 2#define motorPin3 6 // 黄色 - 28BYJ-48 引脚 3#define motorPin4 7 / / 橙色 - 28BYJ-48 引脚 4 // 红色 - 28BYJ-48 引脚 5 (VCC) // 蓝色 - 28BYJ-48 引脚 GND #define STEPS_PER_TURN 2048 // 360 度的步数;int motorSpeed =500; // 高速(800 及以上)可能会导致 28BYJ-48int motorAccel =400 中的不稳定行为; // 如上:更好地避免极端加速sint myPos =0; // 将用于定义 360 度的起点;旋转左转 =0; // 确定旋转方向的几个标志int RightTurnDown =0; // 确定旋转方向的几个标志int Continuous =0; // 下面用于区分单次旋转命令intcomingByte =0; // 对于传入的串行数据/*-----( 步进器控制对象)-----*/// 将步进器设置为引脚 4、5、6、7 上的 4 线双极 // 注意: 28BYJ48AccelStepper stepper(4,motorPin1,motorPin3,motorPin2,motorPin4)的正确排序需要序列1-3-2-4; void setup(){ Serial.begin(9600); stepper.setMinPulseWidth(20); // 避免来自 Arduino 的脉冲太快而无法解码的建议设置 stepper.setMaxSpeed(motorSpeed); stepper.setSpeed(motorSpeed); stepper.setAcceleration(motorAccel); // 以下两行将“step zero”重置为当前位置 stepper.setCurrentPosition(stepper.currentPosition()); stepper.runToPosition(); Serial.println("可用命令:"); Serial.println("R =连续顺时针旋转"); Serial.println("r =360deg; 顺时针旋转"); Serial.println("L =连续逆时针旋转"); Serial.println("l =360deg;逆时针旋转"); Serial.println("S =停止旋转");}void loop(){ if (Serial.available()> 0) {comingByte =Serial.read(); { if (incomingByte =='R') { Serial.println("收到«R» - 激活连续顺时针旋转"); // 下面的两行允许以任何顺序发送命令: // 在执行之前,执行快速停止 stepper.stop(); // 尽快停止:设置新目标 stepper.runToPosition(); // 现在在 quickstop 后停止 // 以下几个标志确定旋转方向 LeftTurnUp =1; RightTurnDown =0;连续 =1; // 下面用于区分单次旋转命令 stepper.setCurrentPosition(stepper.currentPosition()); // 在“这里”设置第 0 步 stepper.setSpeed(motorSpeed); // 之前的命令重置了速度 } if (incomingByte =='L') { Serial.println("received «L» - 激活连续逆时针旋转"); // 下面的两行允许以任何顺序发送命令: // 在执行之前,执行快速停止 stepper.stop(); // 尽快停止:设置新目标 stepper.runToPosition(); // 现在在 quickstop 后停止 // 以下几个标志确定旋转方向 RightTurnDown =1; LeftTurnUp =0;连续 =1; // 下面用于区分单次旋转命令 stepper.setCurrentPosition(stepper.currentPosition()); // 在“这里”设置第 0 步 stepper.setSpeed(motorSpeed); // 之前的命令重置了速度 } if (incomingByte =='r') { Serial.println("received «r» - 激活单次顺时针旋转"); // 下面的两行允许以任何顺序发送命令: // 在执行之前,执行快速停止 stepper.stop(); // 尽快停止:设置新目标 stepper.runToPosition(); // 现在在 quickstop 后停止 // 以下几个标志确定旋转方向 LeftTurnUp =1; RightTurnDown =0;连续 =0; // 下面用于区分单次旋转命令 stepper.setCurrentPosition(stepper.currentPosition()); // 在“这里”设置第 0 步 stepper.setSpeed(motorSpeed); // 之前的命令重置了速度 // 由于我必须向前步进 2047 步,所以我将当前位置存储为 // 旋转的起点 myPos=stepper.currentPosition(); } if (incomingByte =='l') { Serial.println("received «l» - 激活单个逆时针旋转"); // 下面的两行允许以任何顺序发送命令: // 在执行之前,执行快速停止 stepper.stop(); // 尽快停止:设置新目标 stepper.runToPosition(); // 现在在 quickstop 后停止 // 以下几个标志确定旋转方向 RightTurnDown =1; LeftTurnUp =0;连续 =0; // 下面用于区分单次旋转命令 stepper.setCurrentPosition(stepper.currentPosition()); // 在“这里”设置第 0 步 stepper.setSpeed(motorSpeed); // 先前的命令已重置速度 // 由于我将不得不向后步进 2047 步,因此我将当前位置存储为 // 旋转的起点 myPos=stepper.currentPosition(); } if (incomingByte =='S') { Serial.println("收到«S» - 停​​止旋转"); // 重置决定旋转方向的标志 LeftTurnUp =0; RightTurnDown =0; stepper.stop(); // 尽快停止:设置新目标 stepper.runToPosition(); // 现在在快速停止后停止 } } } if (Continuous ==1) // 连续旋转 { if (LeftTurnUp ==1) //left turn { stepper.moveTo(10000); //移动很多步 - 比机械需要更多 } if (RightTurnDown ==1) //右转 { stepper.moveTo(-10000); //移动许多步骤 - 比机械需要的更多 } stepper.run(); } if (Continuous ==0) // 连续旋转 { if (LeftTurnUp ==1) //左转 { stepper.moveTo(myPos+STEPS_PER_TURN); // 1 转 =2048 步 } if (RightTurnDown ==1) //右转 { stepper.moveTo(myPos-STEPS_PER_TURN); // 1 轮 =2048 步 } } stepper.run();} 

示意图

Fritzing 制造的完整电路

制造工艺

  1. 步进电机
  2. 集成驱动器简化了步进电机设计
  3. 温控风扇
  4. Raspoulette 原型
  5. 自主神经哨兵炮塔
  6. 双极步进电机库
  7. 使用 Raspberry Motor Shield 的 Android 控制玩具
  8. Swiper - 自动 Tinder/Bumble Swiper
  9. DIY Arduino 机械臂——由手势控制
  10. SmartWay
  11. 什么是直线电机?
  12. 什么是伺服电机?