一、任务
设计并制作一个电动车跷跷板,要求跷跷板起始端一侧装有可移动的配重物体,配重物体位置可调范围不小于 400mm。电动车从起始端出发,按要求自动在跷跷板上行驶。电动车跷跷板起始状态和平衡状态示意图分别如图 1 和图 2 所示。
二、要求
1.基本要求
(1)先将跷跷板固定为水平状态,电动车从起始端 A 位置出发,行驶跷跷板的全程(全程的含义:电动车从起始端 A 出发至车头到达跷跷板顶端 B 位置)。停止 5 秒后,电动车再从跷跷板的 B 端倒退回至跷跷板的起始端 A,电动车能分别显示前进和倒退所用的时间。前进行驶在 1 分钟内、倒退行驶在 1.5 分钟内完成。
(2)跷跷板处在图 1 所示的状态下(配重物体位置不限制),电动车从起始端 A 出发,行驶跷跷板的全程。停止 5 秒后,电动车再从跷跷板的 B 端倒退回至跷跷板的起始端 A,电动车能分别显示前进和倒退所用的时间。前进行驶在 1.5分钟内、倒退行驶在 2 分钟内完成。
2.发挥部分
(1)由参赛队员将配重物体设定在可移动范围中的某位置,电动车从起始端 A 出发,当跷跷板达到平衡时,保持时间不小于 5 秒,同时发出声光提示,电动车显示所用的时间。全过程要求在 2 分钟内完成。
(2)在可移动范围内任意设定配重物体的位置(由测试人员指定),电动车从起始端 A 出发,当跷跷板达到平衡时,保持时间不小于 5 秒,同时发出声光提示,电动车显示所用的时间。全过程要求在 2 分钟内完成。
(3)其他。
三、说明
1.跷跷板长 1600mm、宽 300mm。为便于携带也可将跷跷板制成折叠形式。
2.跷跷板中心固定在直径不大于 40mm 的圆轴上,圆轴两端支撑在两个支架上,与支架圆滑接触。跷跷板在图 2 所示的平衡状态下,跷跷板底距地面或桌面的距离为 70mm。
3.允许在跷跷板面上画有寻迹线。
4.电动车(含车体上的其它装置)的外形尺寸规定:长≤300mm,宽≤200mm。测试过程中电动车外形尺寸不允许变动。
5.电动车不允许采用有线或无线遥控,电动车自身应具备转弯功能。
6.电动车行驶距离的测量以车尾为基准。
7.平衡状态的含义是:当跷跷板出现上下摆动,且 B 端底部与水平状态的偏移量≤60mm 范围内时,可视为进入平衡状态。
GPT-4o给出的设计方案:
驱动系统
平衡检测
控制系统
显示与反馈
该设计涵盖了电动车从起点到终点的全程控制,及时对电动车状态的监测和反馈,以及动态调整方法,确保电动车在坡道上行驶稳定,符合任务要求。
平衡控制
时间控制
电动机控制
电动机控制电路
传感器与检测电路
显示与反馈电路
L298N H桥电路
加速度传感器
步进电机
以下是一个实现基本电机控制和传感器数据采集的示例代码:
#include <Wire.h>
#include <LiquidCrystal.h>
#include "MPU6050.h"
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
MPU6050 mpu;
int motorPin1 = 9;
int motorPin2 = 10;
int motorSpeedPin = 6;
void setup() {
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorSpeedPin, OUTPUT);
Wire.begin();
mpu.initialize();
lcd.begin(16, 2);
lcd.print("Initializing...");
}
void loop() {
int16_t ax, ay, az;
mpu.getAcceleration(&ax, &ay, &az);
int balance = calculateBalance(ax, ay, az);
controlMotor(balance);
lcd.setCursor(0, 1);
lcd.print("Balance:");
lcd.print(balance);
delay(100);
}
int calculateBalance(int16_t ax, int16_t ay, int16_t az) {
// 根据加速度传感器数据计算当前平衡状态
// 返回平衡状态结果
int balance = ...;
return balance;
}
void controlMotor(int balance) {
// 根据平衡状态调整电机速度和方向
if (balance > threshold) {
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
analogWrite(motorSpeedPin, map(balance, 0, 100, 0, 255));
} else if (balance < -threshold) {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
analogWrite(motorSpeedPin, map(-balance, 0, 100, 0, 255));
} else {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
}
}
本题考察的主要知识点:
电机控制与移动:
传感器与检测电路:
平衡控制与配重调整:
显示与反馈: