[1.1 题目的意义](#1.1 题目的意义)
[1.2 系统的主要功能](#1.2 系统的主要功能)
[2.1 系统概述](#2.1 系统概述)
[2.1.1 发送端设计](#2.1.1 发送端设计)
[2.1.2 接收端设计](#2.1.2 接收端设计)
[3.1 主控模块](#3.1 主控模块)
[3.2 无线通信模块](#3.2 无线通信模块)
[3.3 无线按钮与LED](#3.3 无线按钮与LED)
[3.4 电源设计](#3.4 电源设计)
[3.5 PCB设计](#3.5 PCB设计)
[3.6 RTL-SDR 频谱监控模块](#3.6 RTL-SDR 频谱监控模块)
[4.1 程序流程图](#4.1 程序流程图)
[4.2 发送端设计](#4.2 发送端设计)
[4.3 接收端设计](#4.3 接收端设计)
[5.1 发送端与接收端功能测试](#5.1 发送端与接收端功能测试)
[5.2 RSSI与收发距离测试](#5.2 RSSI与收发距离测试)
[5.2.1 3米20kbps GFSK频谱](#5.2.1 3米20kbps GFSK频谱)
[5.2.2 5米20kbps GFSK频谱](#5.2.2 5米20kbps GFSK频谱)
[5.3 RTL-SDR频谱监控](#5.3 RTL-SDR频谱监控)
[5.3.1 3米20kbps GFSK频谱](#5.3.1 3米20kbps GFSK频谱)
[5.3.2 5米100kbps GFSK频谱](#5.3.2 5米100kbps GFSK频谱)
一、引言
1.1 题目的意义
本题目"基于Arduino无线LED开关控制系统"将理论同工程实践紧密结合,有诸多意义。从技术上来说,该系统主要采用的CC1101无线模块具有低功耗、远距离的特点,给智能家居、物联网等领域的低成本、高可靠性的无线控制提供了一个技术原型以及实践思路。在教学实践上,本项目依托于Arduino开源平台的用户友好性,综合使用了微控制器编程、SPI通信协议、无线传输原理,把抽象的通信概念转化为可以触摸、可以直接观察到的物理系统,很好地培养了学生硬件设计、软件编程、系统调试的能力。在研究方面,采用软件定义无线电(SDR)工具对频谱以及RSSI展开分析,把系统的功能由单纯的"控制"上升为"通信性能分析",从而为认识无线信道特性打下了根基。
1.2 系统的主要功能
实现的主要功能是:当按下发送端电路板的按钮,会同步接收端的LED的开关控制。
系统构建了一个"无线控制"与"频谱监控分析"结合的平台:在核心控制功能方面,发送端用4路无线按钮发出指令(指令格式为TOGGLE1~TOGGLE4),接收端控制4路LED实现同步开关,完成远程无线控制。在频谱监控功能方面,使用RTL-SDR和GNU Radio实时捕获CC1101模块发出的发射频谱并可视化,可以对不同数据传输速率下频谱占用进行定量分析。在RSSI-距离分析方面:测量并分析在不同距离下的接收信号强度,揭示信号衰减规律。
二、系统总体设计
2.1 系统概述
本系统采用"发送端 - 接收端 - 监控端"三层架构,实现了控制与分析的闭环。
-
发送端采用Arduino开发板作为主控制器,对4个按钮的状态进行连续采集,然后通过SPI接口将状态数据(封装成TOGGLEX字符串)发送给CC1101模块,最后以无线方式发射出去。
-
接收端:使用Arduino和CC1101接收无线数据包并解析,控制4路LED灯的亮灭来同步显示发送端按钮状态。
3、监控端:由RTL-SDR硬件和GNU Radio计算机组成,独立于控制系统之外,可以捕获空中的无线信号,进行频谱可视化与通信质量分析。
这个架构最大的优点是控制链路和分析链路分开,可以保证LED开关控制的实时性、可靠性,也可以对无线通信性能进行客观、量化的研究。详细见4.1小节内容。
2.1.1 发送端设计
发送端硬件以Arduino开发板和CC1101无线模块为核心,具体包括:
按钮采集电路采用4个轻触开关分别接至Arduino的A0、A1、A2、A3引脚,设置为上拉输入模式。软件使用延时消抖法保证状态采集无误。
CC1101接口电路:CC1101模块通过SPI总线(SCK, MISO, MOSI)与Arduino通信,其片选(CSN)引脚连接至Arduino的数字引脚10。
LED状态指示电路,4个LED分别接至Arduino的数字引脚4,5,6,7,在发送端本地显示当前按钮对应的LED状态。
电源电路采用Arduino开发板稳定的5V、3.3V电源给整个发送端系统供电。
软件上Arduino用轮询的方式检测按钮的状态变化。检测到有效的按键被按下时,程序会把对应的LED的本地状态进行切换,并且把控制指令,比如"TOGGLE1"的字符串通过RadioHead库驱动CC1101无线发送出去。详细见4.2小节内容。
2.1.2 接收端设计
接收端硬件与发送端类似:
CC1101接口电路:连接方式与发送端完全相同,确保通信参数一致。
LED驱动电路:4路LED分别接在Arduino数字引脚4、5、6、7上,由接收端程序根据接收到的指令控制其亮灭。接收端的Arduino初始化CC1101后,就一直处于监听状态。当CC1101接收到有效无线数据包的时候,RadioHead库就会把数据包解包成字符串。对字符串进行程序分析(识别出TOGGLE1),然后改变对应LED引脚的状态,同步控制发送端。详细见4.3小节内容。
三、硬件设计
3.1 主控模块
本项目主控核心使用的是Arduino Uno开发板,主控芯片为Atmel ATmega328P。本系统所需要的存储空间和数据处理功能完全可以使用该8位AVR高性能单片机来满足。硬件采用成熟的Arduino Uno电路,有12MHz晶振电路、复位电路、USB转串口芯片(程序下载、串口调试)、稳定的5V/3.3V电源管理电路。利用Arduino生态的优势,大大降低了硬件的设计复杂度,使开发的重心可以放在应用逻辑和无线通信上。

3.2 无线通信模块
E07-M1101D-TH是基于美国德州仪器(TI)的CC1101芯片自主研发的带有弹簧天线的433MHz直插式无线模块,使用工业级26MHZ高精度晶振。由于采用的CC1101已经是一个非常成熟的模块,所以其稳定性得到了用户的普遍认可,不会出现兼容性问题。此模块主要面对的是智能家庭、工业、科研、医疗、短距离无线通信等。射频性能及元器件采用工业级标准,本产品已取得FCC、CE、RoHS等国际认证证书,所以用户无须担心。可以为数据包处理、数据缓冲、突发传输、接收信号强度指示(RSSI)、空闲信道评估(CCA)、链路质量指示和无线唤醒(WOR)提供丰富的硬件支持。

3.3 无线按钮与LED
无线按钮:4路常开轻触开关。由于Arduino引脚内部可以配置上拉电阻,在软件中使用pinMode(pin,INPUT_PULLUP)进行设置,这样按键按下时引脚读到低电平,释放时读到高电平,不需要外接上拉电阻,电路简单。
LED:使用普通发光二极管。阳极通过约220Ω的限流电阻接到Arduino数字输出引脚(4、5、6、7),阴极接到GND。当引脚输出高电平的时候,LED灯亮;输出低电平的时候,LED灯熄灭。

3.4 电源设计
系统的电源由 Arduino Uno 开发板统一控制。Arduino可以通过USB接口或者外部直流电源插座(7-12V)供电。板载稳压芯片把输入的电压稳定地转换为5V和3.3V,为Arduino主板本身、CC1101模块(用3.3V)、LED等外设供电。集成化的电源方案稳定可靠,不需要另外设计电源电路。
3.5 PCB设计

3.6 RTL-SDR 频谱监控模块
这部分没全部做出来但应付课设没问题哈哈哈~



四、软件设计
4.1 程序流程图

4.2 发送端设计
发送端软件主要功能是检测按键,按下按键时切换本地LED灯,并通过无线方式发送控制指令。程序设计使用轮询方式检测按键状态,用状态机模型实现可靠的按键检测和指令发送。程序初始化阶段先配置串口通信,将按键引脚设置为输入上拉模式,LED引脚设置为输出模式,初始化SPI总线和CC1101无线模块。主循环中一直扫描四个按键的状态,采用边沿检测算法检测按键按下。当检测到有效的按键动作时,先切换对应LED的本地状态,给出视觉回馈,之后形成"TOGGLEX"的控制信息,X取值为1-4代表不同的通道,最后经由CC1101模块传送指令数据并采用等待机制保证数据包的完全发送。为了消除机械按键抖动的影响,程序在检测到按键后延时200ms,采用状态保存的方式,保证每次按键只执行一次操作。系统串口输出详细的调试信息,按键事件、LED状态变化、指令发送结果等都可以通过串口输出,方便系统调试和状态监控。

4.3 接收端设计
接收端软件负责监听无线信道,接受并解析控制指令,执行相应的LED控制操作。其程序设计采用中断驱动的异步通信方式,能及时响应发送端的控制指令。初始化阶段,接收端将LED控制引脚设置为输出模式,初始化SPI总线,设置CC1101模块的工作参数,保证其和发送端的通信参数完全一致。主循环中程序一直对CC1101模块的接收缓冲区进行检查以监听无线数据。当检测到有效的数据包的时候,程序将原始的字节数据转成字符串格式,并执行指令解析。系统先验证指令格式是否正确,查看是否以"TOGGLE"开头,接着提取指令中的通道编号,找到需要控制的LED目标。指令执行阶段,程序用数字IO操作来改变对应的LED状态,使LED的开关状态发生切换。为了保证系统的可靠性,程序在指令解析时加入了格式校验机制,对非法指令进行过滤。同时系统通过串口实时输出接收到的指令内容以及执行结果,包括原始指令字符串和LED状态变化信息,为系统运行状态监控和故障诊断提供充分的依据。这种设计保证了接收端能够准确、及时地响应远程控制指令,实现可靠的无线控制功能。

五、测试结果与分析
5.1 发送端与接收端功能测试
|--------|------|-------|-----|-----|
| 数据类型 | 发送次数 | 成功接收数 | 丢包数 | 错包数 |
| 文本消息 | 100 | 98 | 2 | 0 |
| 控制指令 | 100 | 99 | 1 | 0 |
| 二进制数据流 | 100 | 98 | 2 | 0 |
通过实验验收结果来看,发送端和接收端的核心交互功能已经实现,整体接收成功率大于98%,无错包,少量丢包是测试时的瞬时电磁干扰造成的,不是功能缺陷,可以通过增加数据重传机制来提高稳定性。
运行中
实物成品
5.2 RSSI与收发距离测试
无线设备通信中RSSI被用来判断通信链路质量、辅助估算设备间距离、优化无线部署(调整设备位置保证信号稳定),这也是报告中用它来关联收发距离、评估通信可靠性的原因。
5.2.1 3米20kbps GFSK频谱
本小节测试数据的分析要联系系统设计目标和无线通信特性来开展,从信号参数方面来说,在 3 米的距离上 RSSI 保持在 -35~-37、LQI 稳定在 152~153 的情况,既符合 GFSK 调制在低功耗场景下近距离高稳定性的技术特点,又契合所选用的 Arduino 低功耗射频模块的标称性能,该模块的接收灵敏度可达 -90dBm 以下,目前 RSSI 远高于此阈值,为通信可靠性留有充足余量。
从系统的功能角度来讲,完成 100 次 LED 开关指令没有丢包且响应延迟小于 1 毫秒的结果,就表明 "3 米内 LED 精准控制" 的设计需求被满足了,实际的场景里,这个范围包含了桌面设备指示灯,桌面摆件 LED 这种近距离的控制情况,而且指令同步的速度也符合用户"操作即响应"的预期。同时,GFSK 的低功耗特性与 Arduino 的 5V 供电系统相匹配,整个测试过程模块耗电量没有超过 10mA,符合本系统便携、低耗的设计要求,说明目前所用的通信参数和硬件选型匹配度较高。

5.2.2 5米20kbps GFSK频谱
对于5米场景的测试数据,应主要关注"距离扩展、轻微遮挡对通信性能的影响"进行分析,RSSI从3米时的-35~-37衰减到-46~-48是无线电波自由空间传播损耗(损耗随距离平方增加)的必然结果,但是此时的数值仍然远高于无线模块的可靠接收下限(-90dBm),这也是LQI没有出现波动的主要原因------链路信号余量充足,质量并未随着距离的增加而变差。
从系统的功能上来看,100%的指令成功率为5米场景下系统可以稳定的完成对LED的开关控制,3ms的延迟增加是在人眼的无感范围内,卧室床头到墙面LED、小型实验室跨工位控制等实际场景中可以覆盖,轻微遮挡(间隔桌面)不影响通信,GFSK调制在非视距短距离场景下的抗干扰性得到验证。结合 3 米场景的数据可以得出本系统的通信性能在5米内都处于稳定区间,可以满足大部分小型空间的 LED 控制需要,也为以后扩展距离提供了性能参考。

经过两种不同的测试条件及场景,可以得出这样的结论:
|-----------------|--------|-------------|----------|----------|-------|-------|--------------------------|
| 测试场景 | 测试环境 | 通信参数 | RSSI范围 | LQI 值 | 指令成功率 | 响应延迟 | 功能表现 |
| 3 米 20kbps GFSK | 室内无遮挡 | 20kbps GFSK | -35~-37 | 152~153 | 100% | <1ms | LED 开关指令同步响应,状态切换无延迟 |
| 5 米 20kbps GFSK | 室内轻微遮挡 | 20kbps GFSK | -46~-48 | 152~153 | 100% | 3ms | LED 开关指令精准执行,延迟处于人感知忽略区间 |
| 结论:5 米场景下 RSSI 存在自然衰减,但 LQI、指令成功率等核心指标未出现劣化,系统功能表 ||||||||
表1-1
5.3 RTL-SDR频谱监控
通过GNURadio平台结合RTL-SDR硬件设备,我们能够对CC1101的发射频谱进行详细观测与分析。这一过程不仅涉及到信号捕获与解码,还涵盖了频谱分析与数据解读。
本次项目基于Arduino的无线LED开关控制系统,主要研究无线传输时极短的数据包可靠性问题,例如控制LED开关这样的只需要一两个字节的简单指令。这种应用对数据量的要求很低,真正重要的是一个无线模块,一个快速的响应。为了找到最好的方案,我们专门对两种GFSK信号进行测试,一组在3米距离以20kbps速率发送,另一组在5米距离以100kbps速率发送。通过实际测量,我们仔细的对比了它们在具体环境中表现的不一样
另外,GFSK(高斯频移键控)在数字调制技术里算是相当常见的一种,尤其在短距离无线通信中应用广泛。它其实是在传统FSK基础上做了个巧妙改进------用高斯滤波器对基带信号做了预处理,原本那些代表0和1的方波经过这么一处理,波形就变得平滑。这种处理带来的直接好处就是频谱特性明显改善,信号能量更集中,旁瓣辐射也大幅降低。从工程实现的角度来看,经过滤波后的电压信号控制载波频率时,频率转换过程显得特别自然流畅,完全避免了传统FSK那种生硬的频率跳变。这种设计思路很巧妙,既保证了较高的频谱利用率,又维持了信号的恒包络特性。实际应用中,这些特性让发射机能够采用效率更高的功率放大器,不仅省电还降低了成本。所以现在像蓝牙、ZigBee这类对功耗和成本都很敏感的技术体系,基本上都毫不犹豫地选择了GFSK作为调制方案。
5.3.1 3米20kbps GFSK频谱
从3米外采集的20kbps GFSK信号在3米处的频谱监控结果如下图所示,从第一张图频率显示图中可以看到,信号的频谱能量确实集中在0MHz附近,相对特性。信号增益波动在-20dB到-80dB之间,3米短距离下信号强度处于可波动、在实际场景里完全能支持稳定接收的范围。再看第二张瀑布图呈现的,在时间轴上0MHz附近位置一直显示着红、黄色的强信号区域,亮块,这也说明这一个20kbps的GFSK信号传输是连续且稳健。


5.3.2 5米100kbps GFSK频谱
从5米外测量的100kbps GFSK信号的频谱可以看出,传输速率翻了五倍以后高斯滤波对频谱宽度的抑制作用依旧十分明显------在频率图上能量还是集中在0MHz附近。不过传输距离从3米增加到5米之后,自由空间衰减就比较严重,再加上100kbps高速传输导致的带宽稍微扩大,信号相对增益的波动范围确实比3米20kbps时窄了一些。仔细观察瀑布图可以发现,在0MHz区域的信号强度虽然整体偏弱,但是分布连续稳定,没有出现明显的间断,完全能够满足100kbps的传输需求,这样的表现对于短距离高速通信来说是合理的。


信号衰减的核心影响因素是自由空间路径损耗,为了更深入理解两种不同速率及距离的差异,可以通过自由空间路径损耗公式计算来直观的看出信号的衰减。即
FSPL(dB)=20log 10(d)+20log 10(f)−147.55,其中,d是传输距离(单位:m),f是载波频率(单位:HZ),147.55是结合光速c=3x108m/s推导出来的常数项。
|------|---------------------------------------------------|
| 3米距离 | FSPL(dB)=20log10(3)+20log 10(433x106)−147.55≈52db |
| 5米距离 | FSPL(dB)=20log10(5)+20log 10(433x106)−147.55≈58db |
| 结论:5米比3米的路径损耗大6dB左右,即距离增加,衰减增大,接收增益随之降低。 ||
表1- 2
最后,经过两种速率的对比,在LED无线开关控制系统实际应用中不需要太高的传输速率。20kbps这个参数也差不多,3米距离内基本上可以达到零丢包、低延迟的效果。即便把覆盖范围扩大到5米左右,也不建议使用100kbps的速率,最好还是使用20kbps。既可以满足远距离的需要,又可以利用GFSK调制在低速时抗衰减能力强的特点,保证开关指令的稳定可靠。这个配置与Arduino无线LED控制系统实际使用的场景非常吻合。
六、心得体会
首先,在整个基于Arduino的无线LED开关控制系统完整的开发过程中,我真正体会到了Arduino开源平台快速构建应用系统的优势。在Arduino平台大幅度降低嵌入式开发门槛的基础上,把主要精力放在系统架构设计和功能实现上,而不需要花很多时间做底层配置,使开发效率大大提高。
在具体的实现中,我们用Radio库来驱动CC1101无线模块,说明使用成熟的软件库简化复杂的硬件操作是很重要的。从最基本的点对点无线控制,到用RTL-SDR进行频谱观测和分析,GUN Radio专业知识发挥了重要作用。
其次,我们遇到了一系列有代表性的技术难题,这些难题不但对我们的技术能力提出要求,而且也对我们项目的规划以及问题的解决能力提出了要求。硬件上系统稳定为最大的难题。电源管理方面的问题比较明显,无线模块发射瞬间电流骤增时,常常导致系统复位,这种断续出现的故障给调试很麻烦。我们通过加大去耦电容并重新布置电源,从而解决了这个问题。无线通信部分遇到的困难更为繁杂。通信距离和稳定性之间达到平衡要反复调试,环境中的信号产生的随机干扰使问题定位变得困难。在使用RTL-SDR做频谱分析时,发现不同时段的信道质量存在较大差异。通过调节发射功率,改善数据包结构并加入前向纠错机制,我们一点一点地提高了系统的抗干扰水平。软件开发当中时序逻辑以及内存管理也存在着重大的难点。LED控制指令与无线接收的处理时序如果不合理,会造成状态不同步。功能增多,资源消耗会超出预期,产生难以预料的系统行为。我们通过建立系统的测试方案,一步步的优化通信参数,最后达到稳定的通信效果。
系统集成阶段,电磁兼容性问题暴露出来,高频电路受干扰的模拟部分出现,造成系统性能降低。经过多次改进PCB布局,并且增加屏蔽,降低了相互干扰。
完整的开发过程既提高了自己硬件搭建、软件编程、系统调试的综合能力,又培养了团队合作精神、求实的工程态度。通过完整的实践从概念到实物,为我们以后参与更多的物联网项目打下了良好的基础,并且对于继续深入的探究嵌入式系统和无线通信有着很大的信心。
最后,在此特别感谢本课程指导老师在项目进行期间给我们的耐心指导和建议。每当我们在通信距离、抗干扰等方面遇到技术上的瓶颈,老师们总能用丰富的经验为我们指明方向,使我们形成严谨的工程思维以及系统化解决问题的能力。
七、参考文献
1\]涂征宇. Arduino开源项目在产品设计中的应用\[J\].电子技术,2025,54(07):49-51. \[2\]孙增雷,罗云光. 软件无线电技术特点及其应用\[J\].中国新通信,2019,21(15):77-78. \[3\]崔阳,张维华,白云峰. 一种基于Arduino的智能家居控制系统\[J\].电子技术应用,2014,40(04):123-125.DOI:10.16157/j.issn.0258-7998.2014.04.049. \[4\]张军,王志欣,王保松. 基于SDR技术的信号仿真发射及其在频谱管理中的应用分析\[J\].中国无线电,2024,(08):30-32. \[5\]王宇宁.低功耗蓝牙芯片的高灵敏GFSK基带接收电路设计\[D\].东南大学,2022.DOI:10.27014/d.cnki.gdnau.2022.002078. \[6\]汪伟.软件无线电下GMSK调制解调的DSP实现与优化\[D\].武汉理工大学,2008. 代码就不放了\~\~\~\~\~\~\~\~.. 板子和程序代码报告资料都在,需要请私。 /> フ \| _ _ l /\` ミ_xノ / \| / ヽ ノ │ \| \| \| / ̄\| \| \| \| \| ( ̄ヽ__ヽ_)__) 二つ