【电子设计大赛】2014年 电子设计大赛B题通关指南
本文解析了2014年电子设计大赛B题中的三个项目:无线测温系统、超声波测距仪和波形发生器。重点以无线测温系统为例,详细介绍了从任务解读、方案设计到硬件电路搭建和软件编程的全过程,包括NTC热敏电阻应用、NRF24L01无线模块配置、STC89C52单片机编程等关键技术。文章还简要分析了其他两个项目的设计要点,并分享了参赛经验,强调充分准备、团队协作和时间管理的重要性。这些项目设计思路和解决方案对电
目录
1. 大赛 B 题回顾

2014 年的电子设计大赛 B 题涵盖了多个富有挑战性和创新性的项目,涉及无线通信、传感器应用、智能控制等多个热门领域,充分考验了参赛选手们的综合设计能力与创新思维。这些题目不仅在当时引起了广泛关注,对于如今想要深入学习电子设计的爱好者们来说,也极具参考价值。
其中,“基于热敏电阻的无线测温及收发系统设计(B-1)” 需要使用热敏电阻(正负温度系数不限)设计并制作测温节点和无线收发中继器。基本要求包括测温点数为 1 ,测温范围在 0 - 100℃,精度达到 0.1℃ ,传输距离无障碍不小于 30m ,中继器具有精确到小数点后 2 位的数字显示功能。而发挥部分则要求可在测温中继器上设定节点测温时间间隔(2 秒 - 1 分钟,精确到 1 秒),测温节点按设定时间间隔测温并发送数据,同时闪动 LED,还需具有语音播报功能以及其他创新。在实际应用中,这种无线测温及收发系统可用于工业生产中的温度监测、智能家居的环境温度检测等场景,能够实时准确地获取温度信息并进行传输和显示。
“无线传输超声波测距仪(B-2)” 的任务是设计并制作一台用电池供电的超声波测距仪。基本要求有具有超声波测距功能,测量距离在 0.40m - 2.00m,测距精度为 ±1cm;具有测量距离数值无线传输功能;实时显示测量的距离,显示格式为:X.XX m;并且当距离在 0.10m - 0.50m 时,显示 “危险距离” 并用红色 LED 灯指示;距离在 0.50m - 1.00m 时,显示 “保持距离” 并用黄色 LED 灯指示;距离在 1.0m 以上时,显示 “安全距离” 并用绿色 LED 灯指示。发挥部分则是将测量距离扩展到 0.20m - 5.00m,测距精度提升到 ±0.3cm,具有实时语音播报功能以及其它特色与创新。超声波测距仪在汽车倒车雷达、机器人避障、建筑测量等方面有着广泛的应用,通过精确测量距离,为各种设备的安全运行和精准操作提供了关键的数据支持。
2. 以无线测温及收发系统设计(B-1)为例详细解析
2.1 任务要求解读
在 “基于热敏电阻的无线测温及收发系统设计(B-1)” 中,任务要求使用热敏电阻设计制作测温节点和无线收发中继器。具体来说,测温点数为 1 ,这意味着只需要对一个温度点进行监测。测温范围被限定在 0 - 100℃ ,在这个温度区间内,系统要保证精度达到 0.1℃ ,这对温度测量的准确性提出了较高要求。传输距离方面,在无障碍的情况下不小于 30m ,以确保信号能够在一定范围内稳定传输。无线收发中继器则需要具备精确到小数点后 2 位的数字显示功能,方便用户直观读取温度数据。
而在发挥部分,要求可在测温中继器上设定节点测温时间间隔,范围是 2 秒 - 1 分钟,并且精确到 1 秒。测温节点要按照设定的时间间隔进行测温并发送数据,同时闪动 LED 来提示工作状态。此外,还要求系统具有语音播报功能,能够将温度信息以语音的形式传达给用户,增加了信息传达的方式,提升了系统的实用性 。
2.2 方案设计思路
为了实现上述任务要求,在方案设计上需要综合考虑各个环节。首先是热敏电阻的选择,NTC(负温度系数)热敏电阻是一个不错的选择。以常用的 MF58 系列 NTC 热敏电阻为例,它具有较高的灵敏度,其电阻值会随着温度的升高而显著降低,在 0 - 100℃的测温范围内,能够准确地将温度变化转化为电阻值的变化,为后续的温度测量提供可靠的数据基础。
在无线收发模块的选择上,NRF24L01 脱颖而出。它工作在 2.4GHz 的 ISM 频段,具备低功耗特性,工作电压范围为 1.9 - 3.6V ,工作电流最小可达 12.3mA ,待机电流更是低至 900nA ,这对于需要长时间运行的测温节点来说,能够有效节省能源。其传输距离较远,在开阔地无障碍环境下,可实现长达 100 米的无线传输距离,满足任务中不小于 30m 的要求。数据传输速率快也是它的一大优势,最大可达 2Mbps ,能够快速地将测温节点采集到的温度数据传输给无线收发中继器,保证数据的实时性。而且它使用的 2.4GHz 频段具有较强的抗干扰能力,能够有效避免周围环境中的其他无线信号干扰,确保数据传输的稳定性和可靠性 。
在微控制器的选型上,可选用 STC89C52 单片机。它是一款经典的 8 位单片机,拥有丰富的资源,具备 32 个 I/O 口,能够方便地与 NTC 热敏电阻、NRF24L01 无线收发模块以及其他外围设备进行连接。其内部集成了 4KB 的 Flash 程序存储器和 512B 的 RAM 数据存储器,足以存储系统运行所需的程序代码和数据。工作频率范围为 0 - 33MHz ,可根据实际需求进行调整,以满足系统对处理速度的要求。此外,它还具有价格低廉、易于开发等优点,对于电子设计竞赛项目来说,是一个性价比很高的选择 。
2.3 硬件电路设计
测温节点的硬件电路图主要由 NTC 热敏电阻、信号调理电路、STC89C52 单片机最小系统和 NRF24L01 无线收发模块组成。NTC 热敏电阻与一个固定电阻组成分压电路,随着温度的变化,NTC 热敏电阻的阻值改变,从而使得分压点的电压发生变化,这个电压信号就是温度的模拟量表示 。
信号调理电路则对该电压信号进行放大、滤波等处理,以满足单片机 AD 转换的输入要求。STC89C52 单片机最小系统包括单片机、晶振电路和复位电路,晶振电路为单片机提供稳定的时钟信号,复位电路则保证单片机在启动和运行过程中的稳定性 。NRF24L01 无线收发模块通过 SPI 接口与单片机相连,接收单片机发送的温度数据,并将其以无线信号的形式发送出去 。
无线收发中继器的硬件电路图主要由 NRF24L01 无线收发模块、STC89C52 单片机最小系统、显示电路和语音播报电路组成。NRF24L01 无线收发模块接收来自测温节点的无线信号,并将接收到的温度数据传输给 STC89C52 单片机 。单片机对接收到的数据进行处理后,将温度值通过显示电路进行显示,显示电路可采用 LCD1602 液晶显示屏,它能够清晰地显示两行字符,每行最多可显示 16 个字符,正好满足显示温度值精确到小数点后 2 位的要求 。语音播报电路则采用 WT588D 语音模块,它内置了多种语音提示信息,通过单片机的控制,能够将温度值以语音的形式播报出来 。
3. 软件代码实现
3.1 整体架构与流程
软件设计采用模块化的架构,主要包括数据采集模块、数据处理模块、无线传输模块和显示模块。数据采集模块负责从 NTC 热敏电阻获取模拟电压信号,并通过单片机的 AD 转换功能将其转换为数字信号。数据处理模块对采集到的数字信号进行计算,将其转换为实际的温度值。无线传输模块利用 NRF24L01 无线收发模块,将处理后的温度数据发送给无线收发中继器。显示模块则将接收到的温度数据在 LCD1602 液晶显示屏上进行显示 。
程序流程图如下:
st=>start: 开始
init=>operation: 系统初始化(包括单片机、NRF24L01、LCD1602等)
acquire=>operation: 采集NTC热敏电阻电压信号,进行AD转换
process=>operation: 数据处理,计算温度值
transmit=>operation: 通过NRF24L01发送温度数据
receive=>operation: 无线收发中继器接收数据
display=>operation: 在LCD1602上显示温度值
check=>condition: 是否有设置测温时间间隔操作?
set=>operation: 设置测温时间间隔
loop=>loop: 按照设定时间间隔循环
e=>end: 结束
st->init->acquire->process->transmit->receive->display->check
check(yes)->set->loop(acquire)
check(no)->loop(acquire)
loop.e(yes)->e
系统首先进行初始化,包括对单片机的寄存器配置、NRF24L01 无线收发模块的初始化以及 LCD1602 液晶显示屏的初始化。初始化完成后,进入数据采集阶段,单片机读取 NTC 热敏电阻的电压信号,并通过内部的 AD 转换器将其转换为数字信号 。接着,数据处理模块根据热敏电阻的特性曲线以及 AD 转换值,计算出实际的温度值。然后,无线传输模块将温度数据打包,通过 NRF24L01 发送出去 。无线收发中继器的 NRF24L01 接收数据后,将其传递给单片机,单片机再将数据发送给 LCD1602 进行显示 。在整个过程中,系统会不断检测是否有设置测温时间间隔的操作,如果有,则进行相应的设置,并按照新的时间间隔进行循环 。
3.2 关键代码展示与解析
下面以 C 语言代码为例,展示部分关键功能的代码及解析。
初始化代码:
#include <reg52.h>
#include <intrins.h>
#include "nrf24l01.h"
#include "lcd1602.h"
sbit CE = P1^0;
sbit CSN = P1^1;
sbit SCK = P1^2;
sbit MOSI = P1^3;
sbit MISO = P1^4;
void System_Init()
{
// 初始化NRF24L01
NRF24L01_Init();
// 初始化LCD1602
LCD1602_Init();
// 清屏显示
LCD1602_Clear();
}
这段代码首先包含了必要的头文件,其中reg52.h是 51 单片机的寄存器定义头文件,intrins.h提供了一些内部函数,如_nop_()用于产生一个机器周期的延时。nrf24l01.h和lcd1602.h分别是 NRF24L01 无线收发模块和 LCD1602 液晶显示屏的驱动头文件 。System_Init()函数中,先调用NRF24L01_Init()函数对 NRF24L01 进行初始化,包括设置工作模式、地址、频道等参数;再调用LCD1602_Init()函数对 LCD1602 进行初始化,设置显示模式、光标模式等;最后调用LCD1602_Clear()函数清屏,为后续的显示操作做准备 。
数据采集代码:
unsigned int Get_AD_Value()
{
unsigned int ad_value;
ADC_RES = 0;
ADC_RESL = 0;
ADC_CONTR = 0x84; // 选择通道0,启动AD转换
_nop_();
_nop_();
while (!(ADC_CONTR & 0x10)); // 等待转换完成
ad_value = (ADC_RES << 8) | ADC_RESL;
ADC_CONTR &= ~0x10; // 清除转换完成标志
return ad_value;
}
Get_AD_Value()函数用于获取 AD 转换值。首先将 AD 转换结果寄存器ADC_RES和ADC_RESL清零,然后通过设置ADC_CONTR寄存器选择通道 0 并启动 AD 转换 。通过_nop_()函数进行简单延时,确保转换启动。接着进入循环,等待ADC_CONTR寄存器的第 4 位(转换完成标志位)被置 1,即等待转换完成 。转换完成后,将高 8 位和低 8 位的转换结果组合成一个 16 位的 AD 值,清除转换完成标志,最后返回 AD 值 。
无线传输代码:
bit Send_Temperature(float temperature)
{
unsigned char buffer[3];
// 将温度值转换为整数,方便传输
unsigned int temp_int = (unsigned int)(temperature * 10);
buffer[0] = temp_int >> 8;
buffer[1] = temp_int & 0xff;
buffer[2] = 0x00; // 校验位,可根据需要设置
CE = 0;
CSN = 0;
SPI_Write_Buf(WR_TX_PLOAD, buffer, 3);
CSN = 1;
CE = 1;
// 等待发送完成
while (IRQ);
if (NRF24L01_Read_Reg(STATUS) & 0x0e)
{
NRF24L01_Write_Reg(STATUS, 0x0e);
return 0;
}
else
{
return 1;
}
}
Send_Temperature()函数用于将温度数据通过 NRF24L01 发送出去。首先将浮点数的温度值乘以 10 后转换为整数,方便传输。然后将温度值的高 8 位和低 8 位分别存储到buffer数组的前两个字节,第三个字节作为校验位,这里暂时设为 0 。接着通过 SPI 接口将buffer数组中的数据写入 NRF24L01 的发送缓冲区 。发送完成后,等待中断标志IRQ变为低电平,表示发送完成 。最后检查 NRF24L01 的状态寄存器STATUS,如果发送失败(状态寄存器的第 1、2、3 位有置 1),则清除状态寄存器并返回 0 表示发送失败;否则返回 1 表示发送成功 。
显示代码:
void Display_Temperature(float temperature)
{
char str[16];
sprintf(str, "Temp: %.1f C", temperature);
LCD1602_SetCursor(0, 0);
LCD1602_Print(str);
}
Display_Temperature()函数用于在 LCD1602 上显示温度值。首先定义一个字符数组str,用于存储格式化后的温度字符串 。通过sprintf()函数将温度值格式化为 “Temp: X.X C” 的形式存储到str数组中 。然后调用LCD1602_SetCursor()函数设置显示光标位置为第一行第一列,再调用LCD1602_Print()函数将str数组中的字符串显示在 LCD1602 上 。
3.3 代码优化与调试技巧
在代码优化方面,减少内存占用是一个重要的目标。可以合理定义变量类型,尽量使用占用内存较小的数据类型。例如,对于一些只需要表示 0 - 255 范围的整数,可以使用unsigned char类型,而不是int类型,因为int类型通常占用 2 个或 4 个字节,而unsigned char类型只占用 1 个字节 。在循环中,避免不必要的变量声明和函数调用,将一些不变的计算移到循环外部,减少循环体内的计算量,从而提高运行效率 。
在调试过程中,遇到的一个常见问题是无线传输不稳定,数据丢失。经过排查,发现是 NRF24L01 的射频参数设置与实际环境不匹配。通过调整射频频道、发射功率等参数,并增加数据校验和重传机制,解决了这个问题 。另一个问题是 LCD1602 显示乱码,经过检查发现是初始化顺序和指令发送有误,重新梳理了初始化流程和指令发送逻辑后,显示恢复正常 。在调试时,使用串口调试助手可以方便地输出中间变量的值,帮助定位问题 。同时,合理利用示波器观察信号的波形和时序,也能快速找出硬件和软件之间的配合问题 。
4. 其他 B 题项目简述
4.1 无线传输超声波测距仪(B-2)
任务要求:需设计并制作一台以电池供电的超声波测距仪。基本要求涵盖具备超声波测距功能,测量距离范围在 0.40m - 2.00m ,测距精度要达到 ±1cm ;拥有测量距离数值无线传输功能;能够实时显示测量的距离,显示格式设定为:X.XX m;并且当距离处于 0.10m - 0.50m 时,显示 “危险距离”,同时用红色 LED 灯指示;距离在 0.50m - 1.00m 时,显示 “保持距离”,并用黄色 LED 灯指示;距离在 1.0m 以上时,显示 “安全距离”,并用绿色 LED 灯指示 。发挥部分则是将测量距离扩展到 0.20m - 5.00m,测距精度提升到 ±0.3cm,还要具有实时语音播报功能以及其它特色与创新 。
设计思路:通常采用超声波传感器作为距离检测的核心部件。以常见的 HC - SR04 超声波传感器为例,它具有高精度、高灵敏度的特点,能够准确地检测到超声波的发射和接收时间。在设计中,通过单片机控制超声波传感器发射超声波,并精确测量从发射到接收回波的时间差。以 STC89C52 单片机为例,利用其定时器功能可以实现高精度的计时。根据超声波在空气中的传播速度(常温下约为 340m/s),通过公式 L = v×t/2(其中 L 为距离,v 为声速,t 为时间差)即可计算出测量距离 。无线传输模块可选用 NRF24L01,它能将测量得到的距离数据发送出去,接收端接收到数据后进行显示和相应的指示 。
关键技术点:超声波的发射与接收控制是关键技术之一。在发射超声波时,需要产生特定频率的脉冲信号来驱动超声波传感器,一般常用的频率为 40kHz,这个频率下超声波传感器的性能较为稳定,能够有效提高测距的准确性。对回波信号的处理也至关重要,回波信号通常比较微弱,需要经过放大、滤波、整形等一系列处理,才能被单片机准确识别 。温度补偿技术也是提升测距精度的重要手段,由于超声波的传播速度会受到温度的影响,通过使用温度传感器,如 DS18B20,实时测量环境温度,并根据温度对声速进行修正,从而提高测距的精度 。
4.2 波形发生器(B - 3)
任务要求:要设计制作一个波形发生器,该波形发生器需能产生正弦波、方波、三角波和由用户编辑的特定形状波形 。基本要求有具有产生正弦波、方波、三角波三种周期性波形的功能;用键盘输入编辑生成上述三种波形(同周期)的线性组合波形,以及由基波及其谐波(5 次以下)线性组合的波形;输出波形的频率范围为 100Hz - 20kHz(非正弦波频率按 10 次谐波计算),重复频率可调,频率步进间隔 100Hz;输出波形幅度范围 0 - 5V(峰 - 峰值),可按步进 0.1V(峰 - 峰值)调整 。发挥部分是将输出波形频率范围扩展至 100Hz - 200kHz;用键盘或其他输入装置产生任意波形;增加稳幅输出功能,当负载变化时,输出电压幅度变化不大于 ±3%(负载电阻变化范围:100Ω - ∞);具有掉电存储功能,可存储掉电前用户编辑的波形和设置;可产生单次或多次(1000 次以下)特定波形(如产生 1 个半周期三角波输出);其它(如增加频谱分析、失真度分析、频率扩展 > 200kHz、扫频输出等功能) 。
设计思路:基于直接数字频率合成(DDS)技术是一种常见的设计思路。以 AD9850 芯片为例,它是一款常用的 DDS 芯片,能够快速、准确地生成各种频率的波形。通过单片机对 AD9850 进行控制,设置频率控制字、相位控制字等参数,从而实现不同频率、相位的波形输出 。对于用户编辑的特定形状波形,可以将波形数据存储在存储器中,如 EEPROM,单片机读取存储器中的数据并通过 DDS 芯片输出 。
关键技术点:DDS 技术的核心是相位累加器和波形存储器。相位累加器根据频率控制字不断累加相位,通过相位值从波形存储器中读取对应的波形数据,再经过 D/A 转换和低通滤波,得到所需的模拟波形 。在频率合成过程中,频率分辨率和杂散抑制是关键指标。提高频率分辨率需要增加相位累加器的位数,而降低杂散则需要优化电路设计和参数设置 。对于用户编辑波形的实现,需要设计合理的人机交互界面,如键盘输入、触摸屏输入等,方便用户输入波形参数和数据 。
5. 参赛总结与经验分享
参加 2014 年电子设计大赛,对我来说是一次极具挑战但又收获满满的经历。在准备过程中,我对电子设计的各个领域有了更深入的学习,从电路设计、硬件制作到软件编程,每一个环节都让我不断提升自己的专业技能。在团队协作方面,与队友们一起攻克难题、共同讨论方案,让我深刻体会到团队的力量。我们在遇到问题时相互鼓励,在取得进展时共同欢呼,这种团队精神不仅有助于比赛的顺利进行,也为我今后的学习和工作积累了宝贵的经验 。
对于想要参加电子设计大赛的朋友,我的建议是:首先,要提前做好充分的准备,熟悉常用的电子元器件、电路设计方法和编程技巧,多做一些相关的练习题和项目,积累经验 。其次,在比赛过程中,合理安排时间至关重要,制定详细的计划,确保各个环节都能按时完成 。在选择题目时,要充分评估自己团队的能力和优势,选择一个既有挑战性又在能力范围内的题目 。另外,团队协作不可或缺,明确每个成员的分工,充分发挥各自的长处,遇到问题及时沟通解决 。同时,要善于利用网络资源和图书馆资料,遇到难题时,可能在网上就能找到相关的解决方案或参考资料 。
电子设计大赛是一个锻炼自己、提升能力的绝佳平台,无论最终成绩如何,在这个过程中所学到的知识和积累的经验都将让你受益终身。希望大家都能积极参与到这样的赛事中来,在电子设计的世界里尽情探索,收获属于自己的成长与进步 。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)