[Arduino资料]

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

[复制链接]
1942|3
手机看帖
扫描二维码
随时随地手机跟帖
zfw152666|  楼主 | 2022-1-18 08:51 | 显示全部楼层 |阅读模式
一、简介
 本次项目主要使用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步:依次点击 -> 工具 -> 端口选择你自己电脑ArduinoCOM口,一般是com3开始,如COM3COM7
  •     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();主要也是用于判断各种手势(向左、向右、向上、向下)。当然,这个手势模块还有其他手势可以判断,只不过,目前我只用到这几种,小伙伴可以自行探索一下。(由于系统限制我将它放在底部链接)
五、功能演示
以下为成品的演示图,仅供参考
407edac4d442e49986f31d22b07f482b.png
附件部分包括了整体代码和测试代码,还有相关的演示视频。(由于平台不支持上传视频我只贴个图片在这了。)
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这个不

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则