1) 主题:姿态传感器交互步进电机左右摆动
器件:ESP32主控、MPU6050模块、按钮模块、步进电机驱动模块、步进电机。以上模块也可以采用分立器件结合面包板进行搭建。
任务要求:
步进电机自中间位置左右循环摆动,摆动的角度通过MPU6050模块的俯仰角或滚转角控制。当MPU6050模块处理水平位置时,单侧摆动角度为0度,步进电机处理静止状态;当MPU6050模块处于垂直位置时,单侧摆动角度为180度。具体任务要求如下:
1.装置通电启动后,步进电机处于静止状态。
2.点击按键,步进电机开始自检。自检方式为:步进电机顺时针转动90度后停止,然后逆时针旋转180度后停止,再顺时针旋转90度回到初始位置后停止。自检完毕,装置进入工作状态。
3.进入工作状态后,步进电机随着MPU6050模块和转动开始左右循环摆动。
4.当MPU6050处于水平位置时,步进电机处于静止状态,此时摆动角度为0度。
5.当X轴或Y轴转动MPU6050模块,当模块处于45度位置时,步进电机单侧摆动角度为90度;当模块处于垂直(90度)位置时,步进电机单侧摆动角度为180度。
6.步进电机的转动采用梯形加减速控制。
7.程序采用Arduino C/C++代码编写。
8.未作规定处可自行处理,无明显与事实违背即可。
9.编写程序文件命名规则为:DJKS6_身份证号,考试完毕拷贝上交备案。
10.程序编写过程中不得打开库例程和其它程序,如发现,实操成绩按照0分处理。
说明
1、AccelStepper类库头文件和相关类库函数如下,供参考。
头文件:AccelStepper.h
类库对象:AccelStepper(mode, pin1, pin2, pin3, pin4)
成员函数:
setAcceleration(val); //设置步进电机转动时的加速度
setMaxSpeed(val); //设置步进电机转动的最大允许速度
setSpeed(val); 设置步进电机恒定转动时的速度值
runSpeed(); 启动步进电机以设定的速度值恒定转动
currentPosition(); 返回当前的位置值
moveTo(val); 设置步进电机运转的目标位置
run(); 启动步进电机按照设定的加速度和最大速度运转
setCurrentPosition(val); 设置当前位置为指定值
distanceToGo(val); 返回当前位置到目标位置之前的脉冲值
2、教材所使用类库MPU6050_tockn-1.5.2的例程如下,供参考。
#include <MPU6050_tokcn.h>
#include <Wire.h>
MPU6005 mpu6050(Wire);
void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
}
void loop() {
mpu6050.update();
Serial.print("angleX: ");
Serial.print(mpu6050.getAngleX());
Serial.print("\tangleY: ");
Serial.print(mpu6050.getAngleY());
Serial.print("\tangleZ: ");
Serial.println(mpu6050.getAngleZ());
}