一、任务
设计并制作一个无线充电电动小车及无线充电系统,电动小车可采用成品车 改制,全车重量不小于 250 g,外形尺寸不大于 30cm×26cm,圆形无线充电装置 发射线圈外径不大于 20cm。无线充电装置的接收线圈安装在小车底盘上,仅采用 超级电容(法拉电容)作为小车储能、充电元件。如图 1 所示,在平板上布置直 径为 70cm 的黑色圆形行驶引导线(线宽≤2cm),均匀分布在圆形引导线上的 A、B、C、D 点(直径为 4cm 的黑色圆点)上分别安装无线充电装置的发射线 圈。无线充电系统由 1 台 5V 的直流稳压电源供电,输出电流不大于 1A。
二、要求
1. 基本要求
(1) 小车能通过声或光显示是否处在充电状态。
(2) 小车放置在 A 点,接通电源充电,60 秒时断开电源,小车检测到发射线圈停止工作自行起动,沿引导线行驶至 B 点并自动停车。
(3) 小车放置在 A 点,接通电源充电,60 秒时断开电源,小车检测到发射线圈停止工作自行起动,沿引导线行驶直至停车(行驶期间,4 个发射线圈均不工作),测量小车行驶距离 L1,L1 越大越好。
2. 发挥部分
(1) 小车放置在 A 点,接通电源充电并开始计时;60 秒时,小车自行起动(小车超过 60 秒起动按超时时间扣分),沿引导线单向不停顿行驶直至停车(沿途由 4 个发射线圈轮流动态充电);180 秒时,如小车仍在行驶,则断开电源,直至停车。测量小车行驶距离 L2,计算 L=L2-L1,L 越大越好。
(2) 在发挥部分(1)测试中,测量直流稳压电源在小车开始充电到停驶时间段内输出的电能 W,计算 K= L2/W,K 越大越好。
(3) 其他。
三、说明
(1) 本题所有控制器必须使用 TI 公司处理器。
(2) 小车行驶区域可采用表面平整的三夹板等自行搭建,4 个发射线圈可放置在板背面,发射线圈的圆心应分别与 A、B、C、D 圆点的圆心同心。
(3) 作品采用的处理器、小车全车重量、外形尺寸、发射线圈最大外形尺寸及安装位置不满足题目要求的作品不予测试。
(4) 每次测试前,要求对小车的储能元件进行完全放电,从而确保测试时小车无预先额外储能。
(5) 题中距离 L 的单位为 cm,电能 W 的单位为 Wh。
(6) 测试小车行驶距离时,统一以与引导线相交的小车最后端为测量点。
(7) 基本要求(2)测试中,小车停车后,其投影任一点与 B 点相交即认为到达 B 点。
(8) 在测试小车行驶距离时,如小车偏离引导线(即小车投影不与引导线相交),则以该驶离点为该行驶距离的结束测试点。
专家解析:
浙江大学 潘再平老师—电动小车动态无线充电系统(A题)解析与交流
GPT-4o给出的设计方案:
起始设定
路径跟随与导航
继续前进
数据记录与分析
基于Arduino的自动驾驶孔氏代码实现。这里以Arduino为例,使用PID控制算法实现小车的路径跟随功能。
#include <PID_v1.h>
// PID 控制变量
double Setpoint, Input, Output;
// PID 参数
double Kp = 2, Ki = 5, Kd = 1;
// 创建 PID 对象
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
// 霍尔传感器输入引脚
const int hallSensorPin = A0;
// 电机控制引脚
const int motorPin = 9;
// LED 状态显示引脚
const int ledPin = 13;
// 目标点检测引脚
const int goalPin = 2;
// 设置 PID 控制目标值
void setup() {
pinMode(motorPin, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(goalPin, INPUT);
// 设置PID目标值,例如目标磁场值为500
Setpoint = 500;
// 初始化PID控制器
myPID.SetMode(AUTOMATIC);
myPID.SetOutputLimits(-255, 255); // 输出值限制为电机PWM范围
}
void loop() {
// 读取霍尔传感器值
Input = analogRead(hallSensorPin);
// 计算PID输出
myPID.Compute();
// 根据PID输出值控制电机
analogWrite(motorPin, Output);
// 检测到目标点,停止小车
if (digitalRead(goalPin) == HIGH) {
analogWrite(motorPin, 0);
digitalWrite(ledPin, HIGH); // 点亮LED显示已到目标点
delay(60000); // 延时60秒后继续执行
digitalWrite(ledPin, LOW); // 关闭LED
}
}
使用ESP32和充电状态检测模块的无线充电控制代码实现。此代码使用ESP32的ADC进行电压检测,判断是否开启或关闭充电。
#include <Arduino.h>
const int chargingPin = 34; // 充电检测引脚
const int threshold = 2000; // 电压阈值,当检测到的电压低于阈值时认为在充电
const int ledPin = 2; // LED 状态显示引脚
void setup() {
Serial.begin(115200);
pinMode(chargingPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
int reading = analogRead(chargingPin);
Serial.println(reading);
if (reading < threshold) {
digitalWrite(ledPin, HIGH); // 点亮LED,表示正在充电
} else {
digitalWrite(ledPin, LOW); // 关闭LED,表示未在充电
}
delay(1000);
}
无线充电发射端控制。下面的代码展示了如何控制无线充电发射端,当小车进入充电区域时打开无线充电,当小车离开时停止充电。
#include <Arduino.h>
const int transmitPin = 12; // 无线充电发射控制引脚
void setup() {
Serial.begin(115200);
pinMode(transmitPin, OUTPUT);
}
void loop() {
// 当检测到小车进入充电区域时,打开无线充电
if (/* 条件:检测到小车进入充电区域 */) {
digitalWrite(transmitPin, HIGH); // 打开无线充电
} else {
digitalWrite(transmitPin, LOW); // 关闭无线充电
}
delay(1000);
}
希望这些示例代码能对硬件设计和开发提供参考。如果需要更详细的代码实现,可根据具体硬件配置和系统需求进行调整。
该题目考察的知识点:
本设计方案考察电动小车自动驾驶控制和无线充电系统的设计与实现,包括动力系统设计、路径跟随算法、无线充电电路、数据监测与反馈等。通过硬件和软件的协同设计,确保小车能够自动完成指定路径的任务。