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());
}