一、任务
设计并制作一个简易智能电动车,其行驶路线示意图如下:
二、要求
1、基本要求
(1)电动车从起跑线出发(车体不得超过起跑线),沿引导线到达 B 点。在“直道区”铺设的白纸下沿引导线埋有 1~3 块宽度为 15cm、长度不等的薄铁片。电动车检测到薄铁片时需立即发出声光指示信息,并实时存储、显示在“直道区”检测到的薄铁片数目。
(2)电动车到达 B 点以后进入“弯道区”,沿圆弧引导线到达 C 点(也可脱离圆弧引导线到达 C 点)。C 点下埋有边长为 15cm 的正方形薄铁片,要求电动车到达 C 点检测到薄铁片后在 C 点处停车 5 秒,停车期间发出断续的声光信息。
(3)电动车在光源的引导下,通过障碍区进入停车区并到达车库。电动车必须在两个障碍物之间通过且不得与其接触。
(4)电动车完成上述任务后应立即停车,但全程行驶时间不能大于 90 秒,行驶时间达到90 秒时必须立即自动停车。
2、发挥部分
(1)电动车在“直道区”行驶过程中,存储并显示每个薄铁片(中心线)至起跑线间的距离。
(2)电动车进入停车区域后,能进一步准确驶入车库中,要求电动车的车身完全进入车库。
三、说明
1、跑道上面铺设白纸,薄铁片置于纸下,铁片厚度为 0.5~1.0mm。
2、跑道边线宽度 5cm,引导线宽度 2cm,可以涂墨或粘黑色胶带。示意图中的虚线和尺寸标注线不要绘制在白纸上。
3、障碍物 1、2 可由包有白纸的砖组成,其长、宽、高约为 50cm×12cm×6cm,两个障碍物分别放置在障碍区两侧的任意位置。
4、电动车允许用玩具车改装,但不能由人工遥控,其外围尺寸(含车体上附加装置)的限制为:长度≤35cm,宽度≤15cm。
5、光源采用 200W 白炽灯,白炽灯泡底部距地面 20cm,其位置如图所示。
6、要求在电动车顶部明显标出电动车的中心点位置,即横向与纵向两条中心线的交点。
(3)停车后,能准确显示电动车全程行驶时间。
(4)其它。
GPT-4o给出的设计方案:
红外或光电传感器检测
微控制器(MCU)控制
路径规划和自动停车
利用传感器和MCU的结合,通过检测白线实现循迹,通过检测薄铁片和计算位置实现精准停车,整个过程实时监控,保证自动小车在轨道上的稳定运行。
循迹功能
停车精度
控制响应
传感器电路
电动机驱动电路
电源管理电路
红外传感器TCRT5000
微控制器STM32
H桥电动机驱动L298N
以下是实现循迹和停车的简单C代码示例:
#include "stm32f4xx_hal.h"
// 定义引脚
#define LEFT_SENSOR_PIN GPIO_PIN_0
#define RIGHT_SENSOR_PIN GPIO_PIN_1
#define MOTOR_LEFT_PIN GPIO_PIN_2
#define MOTOR_RIGHT_PIN GPIO_PIN_3
// 初始化
void setup() {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM_PWM_Init(); // 用于控制电动机进行PWM设置
}
// 返回检测到的值
int read_sensor(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) {
return HAL_GPIO_ReadPin(GPIOx, GPIO_Pin);
}
void control_motor(int left_speed, int right_speed) {
// PWM通道设置电动机速度,根据传感器值调整转向
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, left_speed);
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, right_speed);
}
void loop() {
int left_sensor = read_sensor(GPIOA, LEFT_SENSOR_PIN);
int right_sensor = read_sensor(GPIOA, RIGHT_SENSOR_PIN);
// 传感器值判断小车移动方向
if (left_sensor == 0 && right_sensor == 1) {
control_motor(100, 200); // 左转
} else if (left_sensor == 1 && right_sensor == 0) {
control_motor(200, 100); // 右转
} else {
control_motor(200, 200); // 直行
}
// 检测进入停车区停车
if (left_sensor == 1 && right_sensor == 1) {
control_motor(0, 0); // 停车
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // 报警,可选
}
HAL_Delay(100);
}
int main(void) {
setup();
while (1) {
loop();
}
}
这个题目考察的知识点:
本题要求设计一个简易智能电动车,考察的主要知识点包括: