一、任务
如图 1 所示门形支架的一个立柱上用转轴固定一根 U 型导轨,导轨的另一端可由固定在顶梁上的电机控制其上下运动,使小球在导轨上按要求灵活滚动或定位。导轨以转轴处为原点,以厘米(cm)为单位标注位置(见图中放大部分)。
二、要求
1.基本部分
(1) 在导轨两端头设置触发机构,小球触碰时有明显声或光指示;
(2) 15s 内自动将导轨从±15°范围内的任一位置调整至水平状态,小球放置在导轨 25~35cm 区间某一位置时静止不滚动;
(3) 小球在原点从静止开始,15s 内使小球在导轨上做 3 次往复运动,且运动控制在 5~55cm 区间范围内;
(4) 在往复运动状态下,通过设置指令(按键)使小球在 15s 内稳定停止在 30±2 cm 位置区域内,并至少保持 10s。
2.发挥部分
(1) 小球在原点从静止开始,在 30s 内完成不少于 3 次往复运动,往复运动周期在 3~8s 间可设置;
(2) 小球在原点从静止开始,在 30s 钟内控制小球在导轨上以 30cm 处为中心,做不少于 4 次往复运动;往复运动偏离中心的最大位移可在15cm~25cm 区间设置,且最大位移偏差不超过 2cm。
(3) 其他。
三、说明
1. 系统结构及实现方法说明
(1) 导轨为硬质材料,轨道必须平直光滑,长度 60cm±5cm,如可将双列直插集成电路封装管剖开后使用;导轨外侧可以安装检测装置或电路,但不得以任何方式影响小球自由滚动;
(2) 硬质光滑均质小球直径在 6-20mm 范围内,材质不限;
(3) U 型导轨的边缘不能过高,要求能够在侧面观察到小球运动;在导轨外侧,以转轴处为起始原点,以厘米为单位标注位置;题中各项要求的位置即以此为依据,小球往复运动的位移也据此判断;
(4) 门形支架的高度不超过 1 米,导轨固定转轴端距顶梁的距离不限;电机控制另一非固定端上下运动的方式不限;
(5) 检测小球位置的方法不限;
2. 测试要求说明
(1) 除基本部分(2)可以手动放置小球外,其它各项要求中,小球的起始位置均为原点的导轨顶端;
(2) 开始运动之后,小球不得触碰导轨两边端头,否则本项目视作失败;
(3) 各项要求中,运动最大位移、周期等参数用键盘设置;
(4) 除基本部分(4)外,各项动作启动后不得人为干预;
(5) 各项动作达到要求时,须有明显的声或光指示,以便计时或测量;
(6) 往复运动的中心为运动两端点位置之和除 2,因此在测试中须记录每次运动端点位置数据;
(7) 题中要求的各项动作完成时间越短越好,超过规定时间 1 倍时不计成绩。
GPT-4o给出的设计方案
设计一个门形支架的小球运动控制装置。该装置通过电机控制导轨的上下运动和小球在导轨上的滑动,实现小球的准确定位与往复运动。包括电机、导轨、小球、触发机构、显示与控制系统等。
机械结构
电子控制系统
单点定位
往复运动控制
精确停留操作
#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define ANGLE_SENSOR_PIN A0
#define BALL_POSITION_PIN A1
#define MOTOR_CONTROL_PIN 9
#define LIMIT_SWITCH_LEFT 2
#define LIMIT_SWITCH_RIGHT 3
#define BUTTON_PIN 4
Servo motor;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
pinMode(ANGLE_SENSOR_PIN, INPUT);
pinMode(BALL_POSITION_PIN, INPUT);
pinMode(LIMIT_SWITCH_LEFT, INPUT_PULLUP);
pinMode(LIMIT_SWITCH_RIGHT, INPUT_PULLUP);
pinMode(BUTTON_PIN, INPUT_PULLUP);
motor.attach(MOTOR_CONTROL_PIN);
lcd.begin();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Ball Control");
}
void loop() {
if (digitalRead(BUTTON_PIN) == LOW) {
moveBallToPosition(30);
}
// 控制逻辑
int currentAngle = analogRead(ANGLE_SENSOR_PIN);
int ballPosition = analogRead(BALL_POSITION_PIN);
//显示当前状态
lcd.setCursor(0, 1);
lcd.print("Pos: ");
lcd.print(ballPosition);
lcd.print(" Angle: ");
lcd.print(currentAngle);
delay(100);
}
void moveBallToPosition(int targetPos) {
int currentPos = analogRead(BALL_POSITION_PIN);
while (abs(currentPos - targetPos) > 2) {
int angleAdjust = calculateAngleAdjust(currentPos, targetPos);
motor.write(angleAdjust);
delay(100);
currentPos = analogRead(BALL_POSITION_PIN);
}
delay(15000);
}
int calculateAngleAdjust(int currentPos, int targetPos) {
int error = currentPos - targetPos;
int adjustAngle = map(error, -50, 50, -45, 45);
return constrain(adjustAngle, -15, 15);
}
系统整体测试
动态响应测试
稳定性测试
通过该方案的设计和实施,将能够满足题目中的各项要求,确保小球运动控制系统的精确性和稳定性。
本题目考察的主要知识点: