zfw152666 发表于 2022-1-18 08:51

使用Arduino Mega控制多个步进电机进行同方向转动

一、简介 本次项目主要使用Arduino Mega开发板和Arduino Mega传感器扩展板结合PAJ7620手势传感器对六个28BYJ-48步进电机进行控制。手势传感器可识别 向左、向右、向上、向下四个方向的手势。并配合手势旋转不同的角度。二、材料清单1、1MEGA2560 R3 开发板
2、6步进电机
3、6按压装置
4、1手势识别模块
5、6亚克力板
6、6联轴器
7、1*MEGA2560专用扩展板三、程序功能第1步:MEGA2560 R3 开发板通过MEGA2560专用扩展板控制6个步进电机,电机根据检测到的手势进行相应的旋转。检测到
向左手势第一次:6个步进电机顺时针旋转45°,如果检测到第二次向左手势,再次旋转45°,以此类推,每次检测到一次向左手势则顺时针旋转45°一次,直到电机顺时针旋转到90°位置。
向右手势第一次:6个步进电机逆时针旋转45°,如果检测到第二次向右手势,再次旋转45°,以此类推,每次检测到一次向右手势则逆时针旋转45°一次,直到电机逆时针旋转到-90°位置。
向上手势第一次:如果电机在-90°或者-45°位置,则6个步进电机顺时针旋转到0°位置,如果电机在0°或者45°位置,则6个步进电机顺时针旋转到90°位置。如果电机处于90°位置,则向上手势无效。
向下手势第一次:如果电机在90°或者45°位置,则6个步进电机逆时针旋转到0°位置,如果电机在0°或者-45°位置,则6个步进电逆时针旋转到-90°位置。如果电机处于-90°位置,则向下手势无效。
第2步:MEGA2560 R3 开发板通过手势识别模块,进行动作捕获。
当检测到向上手势时,向串口监视器发送”UP”字符;
当检测到向下手势时,向串口监视器发送”DOWM”字符;
当检测到向右手势时,向串口监视器发送”RIGHT”字符;
当检测到向左手势时,向串口监视器发送”LEFT”字符;
第3步:MEGA2560 R3 开发板通过类似于按压装置的机械原理,实现按压效果。最终实物不是采用此款。只是借用此原理。四、程序代码以下展现的是代码的主要功能介绍:(包含有接线方法,以及Arduino使用教程)
[*]/@@*
[*]程序目的:
[*]    第1步:Arduino Mega2560通过Mega2560 R3专用传感器扩展板控制步进电机。
[*]    第2步:Mega2560通过与Mega2560 R3专用传感器扩展板连接的PAJ7620U2手势传感器识别手势(向左、向右、向上、向下)
[*]    第3步:Mega2560根据不同的手势,通过与Mega2560 R3专用传感器扩展板连接的ULN2003控制电机向不同的方向旋转一定的角度。
[*]一、硬件材料
[*]    1*Arduino Mega2560开发板
[*]    1*Mega2560 R3专用传感器扩展板
[*]    6*步进电机
[*]    6*ULN2003步进电机驱动板
[*]    6*按压装置
[*]    1*手势识别模块(PAJ7620U2)
[*]    若干杜邦线
[*]二、电路接线
[*]    Mega2560 R3专用传感器扩展板      的      5V      接    PAJ7620U2      的      VCC
[*]    Mega2560 R3专用传感器扩展板      的      GND       接    PAJ7620U2      的      GND
[*]    Mega2560 R3专用传感器扩展板      的      21(SCL)   接    PAJ7620U2      的      SCL
[*]    Mega2560 R3专用传感器扩展板      的      20(SDA)   接    PAJ7620U2      的      SDA
[*]                                        电机1
[*]    Mega2560 R3专用传感器扩展板      的      4         接    ULN2003          的      In1
[*]    Mega2560 R3专用传感器扩展板      的      5         接    ULN2003          的      In2
[*]    Mega2560 R3专用传感器扩展板      的      6         接    ULN2003          的      In3
[*]    Mega2560 R3专用传感器扩展板      的      7         接    ULN2003          的      In4
[*]                                        电机2
[*]    Mega2560 R3专用传感器扩展板      的      8         接    ULN2003          的      In1
[*]    Mega2560 R3专用传感器扩展板      的      9         接    ULN2003          的      In2
[*]    Mega2560 R3专用传感器扩展板      的      10      接    ULN2003          的      In3
[*]    Mega2560 R3专用传感器扩展板      的      11      接    ULN2003          的      In4
[*]                                        电机3
[*]    Mega2560 R3专用传感器扩展板      的      14      接    ULN2003          的      In1
[*]    Mega2560 R3专用传感器扩展板      的      15      接    ULN2003          的      In2
[*]    Mega2560 R3专用传感器扩展板      的      16      接    ULN2003          的      In3
[*]    Mega2560 R3专用传感器扩展板      的      17      接    ULN2003          的      In4
[*]                                        电机4
[*]    Mega2560 R3专用传感器扩展板      的      22      接    ULN2003          的      In1
[*]    Mega2560 R3专用传感器扩展板      的      23      接    ULN2003          的      In2
[*]    Mega2560 R3专用传感器扩展板      的      24      接    ULN2003          的      In3
[*]    Mega2560 R3专用传感器扩展板      的      25      接    ULN2003          的      In4
[*]                                        电机5
[*]    Mega2560 R3专用传感器扩展板      的      26      接    ULN2003          的      In1
[*]    Mega2560 R3专用传感器扩展板      的      27      接    ULN2003          的      In2
[*]    Mega2560 R3专用传感器扩展板      的      28      接    ULN2003          的      In3
[*]    Mega2560 R3专用传感器扩展板      的      29      接    ULN2003          的      In4
[*]                                        电机6
[*]    Mega2560 R3专用传感器扩展板      的      30      接    ULN2003          的      In1
[*]    Mega2560 R3专用传感器扩展板      的      31      接    ULN2003          的      In2
[*]    Mega2560 R3专用传感器扩展板      的      32      接    ULN2003          的      In3
[*]    Mega2560 R3专用传感器扩展板      的      33      接    ULN2003          的      In4
[*]
[*]    Mega2560 R3专用传感器扩展板      的      所有引脚   接    Mega2560开发板    的      所有引脚
[*]    详见接线图
[*]三、程序上传
[*]    第1步:打开Arduino软件,依次点击 -> 工具 -> 开发板选择"Arduino Mega2560 or Mega2560"
[*]    第2步:依次点击 -> 工具 -> 端口选择你自己电脑Arduino的COM口,一般是com3开始,如COM3,COM7
[*]    第3步:点击上传(Arduino软件左上角对勾旁边的图标)
[*]四、程序原理
[*]    第1步:识别手势
[*]    第2步:根据手势,控制步进电机运动
[*]五、预期效果
[*]    在手势传感器前(10-15cm范围),比出不同的手势,电机会向不同的方向旋转
[*]    向左手势,电机向左旋转45°
[*]    向右手势,电机向右旋转45°
[*]    向上手势,电机向左旋转90°
[*]    向下手势,电机向右旋转90°
[*]六、可能的问题
[*]    1、接线不对
[*]    仔细核对接线图接线
[*]    2、添加库文件
[*]    打开 arduino IDE 在菜单栏找到【项目】->【加载库】->【添加。ZIP库】
[*]    在我们发您的文件夹中找到【3、程序代码】->【1、库文件】->找到压缩包进行添加即可
[*]    需要的库:
[*]    PAJ7620 https://www.arduinolibraries.info/libraries/rev-eng-paj7620
[*]    AccelStepper https://www.arduino.cc/reference/en/libraries/accelstepper/
[*]    如何安装库文件 https://www.arduino.cc/en/guide/libraries?setlang=cn
[*]七、参考的资料
[*]    Arduino教程
[*]    https://space.bilibili.com/103589285/video?tid=0&page=4&keyword=&order=pubdate
[*]    https://www.geek-workshop.com/thread-2719-1-1.html
[*]    https://www.yiboard.com/forum-70-1.html
[*]八、升级建议
[*]    暂无
[*]*/
第一步:首先需要安装以下两个库文件,具体的安装方法参考以上第六步中的如何安装库文件。
[*]#include"paj7620.h"
[*]#include<accelstepper.h>
以下是代码的宏定义部分,确定电机的控制引脚以及手势传感器(PAJ7620)的指令
[*]#define turnLeft             0x0A                                             //手势向左
[*]#define turnRight            0x0B                                             //手势向右
[*]#define turnUp               0x0C                                             //手势向上
[*]#define turnDown             0x0D                                             //手势向下                        
[*]
[*]//电机步进方式定义
[*]#define fullStep             4                                                //全步进参数
[*]#define halfStep             8                                                //半步进参数
[*]
[*]//定义1号步进电机引脚
[*]#define motor1Pin1         4                                                //28BYJ48连接的ULN2003电机驱动板引脚 in1
[*]#define motor1Pin2         5                                                //28BYJ48连接的ULN2003电机驱动板引脚 in2
[*]#define motor1Pin3         6                                                //28BYJ48连接的ULN2003电机驱动板引脚 in3
[*]#define motor1Pin4         7                                                //28BYJ48连接的ULN2003电机驱动板引脚 in4
[*]
[*]//定义2号步进电机引脚
[*]#define motor2Pin1         8                                                //28BYJ48连接的ULN2003电机驱动板引脚 in1
[*]#define motor2Pin2         9                                                //28BYJ48连接的ULN2003电机驱动板引脚 in2
[*]#define motor2Pin3         10                                             //28BYJ48连接的ULN2003电机驱动板引脚 in3
[*]#define motor2Pin4         11                                             //28BYJ48连接的ULN2003电机驱动板引脚 in4
[*]
[*]//定义3号步进电机引脚
[*]#define motor3Pin1         14                                             //28BYJ48连接的ULN2003电机驱动板引脚 in1
[*]#define motor3Pin2         15                                             //28BYJ48连接的ULN2003电机驱动板引脚 in2
[*]#define motor3Pin3         16                                             //28BYJ48连接的ULN2003电机驱动板引脚 in3
[*]#define motor3Pin4         17                                             //28BYJ48连接的ULN2003电机驱动板引脚 in4
[*]
[*]//定义4号步进电机引脚
[*]#define motor4Pin1         22                                             //28BYJ48连接的ULN2003电机驱动板引脚 in1
[*]#define motor4Pin2         23                                             //28BYJ48连接的ULN2003电机驱动板引脚 in2
[*]#define motor4Pin3         24                                             //28BYJ48连接的ULN2003电机驱动板引脚 in3
[*]#define motor4Pin4         25                                             //28BYJ48连接的ULN2003电机驱动板引脚 in4
[*]
[*]//定义5号步进电机引脚
[*]#define motor5Pin1         26                                             //28BYJ48连接的ULN2003电机驱动板引脚 in1
[*]#define motor5Pin2         27                                             //28BYJ48连接的ULN2003电机驱动板引脚 in2
[*]#define motor5Pin3         28                                             //28BYJ48连接的ULN2003电机驱动板引脚 in3
[*]#define motor5Pin4         29                                             //28BYJ48连接的ULN2003电机驱动板引脚 in4
[*]
[*]//定义6号步进电机引脚
[*]#define motor6Pin1         30                                             //28BYJ48连接的ULN2003电机驱动板引脚 in1
[*]#define motor6Pin2         31                                             //28BYJ48连接的ULN2003电机驱动板引脚 in2
[*]#define motor6Pin3         32                                             //28BYJ48连接的ULN2003电机驱动板引脚 in3
[*]#define motor6Pin4         33                                             //28BYJ48连接的ULN2003电机驱动板引脚 in4
[*]
[*]uint8_t gestureState         = 0;                                             //手势状态(0x0A向左、0x0B向右)
以下是利用Arduino的步进电机驱动库AccelStepper初始化6个步进电机对应的引脚,这里fullStep我设置的是全步进的工作方式,根据实际情况也可以设置为半步进的工作方式。
[*]/@@*
[*]定义中ULN2003驱动板引脚顺序为 in1-in3-in2-in4
[*]所有电机设置为全步进运行
[*]*/
[*]AccelStepper stepper1(fullStep, motor1Pin1, motor1Pin3, motor1Pin2, motor1Pin4);
[*]AccelStepper stepper2(fullStep, motor2Pin1, motor2Pin3, motor2Pin2, motor2Pin4);
[*]AccelStepper stepper3(fullStep, motor3Pin1, motor3Pin3, motor3Pin2, motor3Pin4);
[*]AccelStepper stepper4(fullStep, motor4Pin1, motor4Pin3, motor4Pin2, motor4Pin4);
[*]AccelStepper stepper5(fullStep, motor5Pin1, motor5Pin3, motor5Pin2, motor5Pin4);
[*]AccelStepper stepper6(fullStep, motor6Pin1, motor6Pin3, motor6Pin2, motor6Pin4);
初始化部分,主要设置电机的最大速度为800,加速度为80.设置硬串口波特率为9600,硬串口打印字符串”\nPAJ7620U2 TEST DEMO: Recognize 9 gestures.”,如果初始化手势传感器OK则打印“INIT OK”,否则则,打印“INIT ERROR,CODE:”。之后打印字符串“Please input your gestures:”,就可以开始输入手势,在输入手势时,不能远离手势传感器超过10cm,否则会无法识别。(由于系统限制我将它放在底部链接)主函数的逻辑主要就是读取手势传感器的手势方向,然后根据相应的手势,返回对应的代码:
turnLeft 0x0A
turnRight 0x0B
turnUp 0x0C
turnDown 0x0D
获得相应的代码之后,再利用电机库当中的currentPosition()函数,获取当前电机的具体位置,再根据这个实际位置旋转相应的角度。具体逻辑关系见代码:(由于系统限制我将它放在底部链接)以下这个函数是loop函数当中被调用的手势识别函数GestureRecognition();主要也是用于判断各种手势(向左、向右、向上、向下)。当然,这个手势模块还有其他手势可以判断,只不过,目前我只用到这几种,小伙伴可以自行探索一下。(由于系统限制我将它放在底部链接)五、功能演示以下为成品的演示图,仅供参考

附件部分包括了整体代码和测试代码,还有相关的演示视频。(由于平台不支持上传视频我只贴个图片在这了。)
https://www.icxbk.com/download/detail/49408.html</accelstepper.h>

gaochy1126 发表于 2022-1-27 20:17

Arduino Mega 使用的是一个控制器吗?               

gaochy1126 发表于 2022-2-27 14:34

如何控制多个步进电机,使用了片选cs的控制信号了吗

cdwess 发表于 2022-5-24 08:38

这个好,不知道能驱动42HSN60080214-565这个不
页: [1]
查看完整版本: 使用Arduino Mega控制多个步进电机进行同方向转动