news 2026/7/28 3:26:36

基于Arduino的智能温控摇头风扇DIY:从传感器到执行器的嵌入式实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于Arduino的智能温控摇头风扇DIY:从传感器到执行器的嵌入式实践

1. 项目缘起:从“热得不行”到“摇头晃脑”的智能降温

夏天一到,书桌角落就成了“热岛”。电脑主机呼呼作响,路由器默默发热,再加上手边一杯热茶,那个小区域的气温总能比别处高上几度。开空调吧,大材小用还费电;用普通小风扇对着吹,风是固定的,吹久了不舒服,而且它也不知道你热不热,只会傻乎乎地转。这种时候,一个能自己感知温度、还能摇头晃脑把凉风均匀送过来的小风扇,就成了一个非常诱人的想法。

这个想法并不新鲜,但自己动手把它做出来,乐趣和成就感是完全不同的。它不像买一个成品那样简单直接,你需要考虑怎么让一个单片机“感觉”到热,怎么指挥一个电机“摇头”,怎么让这两件事协调工作。这恰恰是Arduino这类开源硬件平台最擅长的领域:把想法快速、低成本地变成现实。我手头正好有一块吃灰许久的Arduino Uno,几个闲置的舵机,还有从旧设备上拆下来的小风扇和传感器,于是,“DIY基于Arduino的摇头温控小风扇”这个项目就正式提上了日程。

这个项目非常适合刚接触Arduino和电子DIY的朋友。它涉及了传感器数据读取、执行器(电机、风扇)控制、条件判断逻辑这些嵌入式开发的核心概念,但硬件结构简单,代码逻辑清晰,成功率高。做完之后,它不仅能成为一个实用的桌面小工具,更能让你透彻理解一个完整自动化小系统是如何搭建和运作的。接下来,我就把从零件选型、电路连接、代码编写到调试优化的全过程,毫无保留地分享给你。

2. 核心部件选型与功能拆解

一个摇头温控风扇,听起来复杂,拆解开来就是几个模块的组合。我们需要一个大脑(控制器)、一双眼睛(温度传感器)、一张嘴(用来吹风的风扇)和一个脖子(实现摇头的机构)。下面我们来逐一分析每个部分该怎么选,以及为什么这么选。

2.1 控制核心:为什么是Arduino Uno?

控制器是整个系统的大脑,负责处理所有信息并发出指令。市面上可选的单片机开发板很多,比如更便宜的STM32、功能更强的ESP32、或者更迷你的ATTiny系列。我选择Arduino Uno,是基于以下几个非常实际的考虑:

首先,生态与入门友好度。Arduino拥有最庞大、最成熟的社区和库资源。无论你遇到什么问题,几乎都能找到现成的代码示例和解决方案。对于这个项目,我们需要驱动舵机和控制风扇电机,Arduino IDE自带的Servo库和通过PWM(脉冲宽度调制)控制风扇转速,都是几行代码就能搞定的事情。如果换用STM32,光是配置开发环境和GPIO就能劝退不少新手。

其次,接口与供电的便利性。Arduino Uno板载了稳压电路,可以通过USB口或者外部7-12V电源供电,非常方便。它提供了数字IO、模拟输入、PWM输出等丰富接口,正好满足我们的需求:一个模拟口接温度传感器,一个PWM口控制风扇转速,一个数字口(支持PWM)控制舵机。所有接口都以排针形式引出,用杜邦线连接即可,无需焊接,适合快速原型开发。

最后,性能与成本平衡。ATmega328P这颗芯片处理读取一个传感器数据、输出两路控制信号的任务绰绰有余。它的成本也足够低,即使做坏了也不心疼。相比之下,ESP32虽然功能强大(带Wi-Fi/蓝牙),但在这个纯本地控制的项目里属于性能过剩,且功耗和复杂度都会增加。

注意:如果你手头只有Arduino Nano、Leonardo或者Pro Micro,也完全没问题。它们的核心芯片相同或类似,只是引脚布局和外形不同,在代码上只需注意对应正确的引脚编号即可。

2.2 感知温度:DS18B20 vs DHT11 vs LM35

让风扇“知冷知热”,关键在温度传感器。常见的有三种:DS18B20、DHT11和LM35。我们来做个快速对比:

传感器型号通信方式精度优点缺点本项目适用性
DS18B20单总线 (1-Wire)±0.5°C精度高,防水探头可选,抗干扰好,单总线可挂多个需要额外的4.7K上拉电阻,代码稍复杂推荐
DHT11单总线±2°C (温度)同时测温度和湿度,集成度高精度较低,响应慢,代码复杂一般
LM35模拟电压±0.5°C (典型)输出线性电压,无需复杂库,最简单需要模拟引脚,易受电源噪声干扰可用

我最终选择了DS18B20。原因很简单:它精度足够,而且封装形式多样。我用的就是一个不锈钢封装、带导线的防水探头,可以直接把传感部分伸到需要监测的区域(比如电脑主机出风口附近),而电路部分可以远离热源。它的单总线协议虽然需要OneWireDallasTemperature这两个库支持,但库函数封装得很好,实际用起来就两三行代码读取温度,并不麻烦。

如果你手头只有LM35,也可以用。它输出的是模拟电压(10mV/°C),接到Arduino的模拟输入口(如A0),用analogRead()读取值再换算成温度即可。只是要注意给它一个稳定的5V供电,并且模拟地(AGND)要接好,以减少读数波动。

2.3 执行机构:风扇与摇头方案

执行部分分为吹风和摇头两件事。

风扇驱动:我们用的通常是直流风扇,比如电脑机箱里常见的12V或5V风扇。Arduino的数字IO口直接驱动能力很弱(每个引脚最大约40mA),无法直接驱动风扇电机。因此,我们需要一个“开关”——晶体管。最常用、最便宜的就是S8050(NPN型)三极管。用Arduino的一个PWM引脚(如~3, ~5, ~6, ~9, ~10, ~11)通过一个限流电阻(如220Ω)连接到三极管的基极(B),风扇接在集电极(C)和电源正极之间,发射极(E)接地。这样,通过PWM信号就能无级调节风扇的转速。PWM值越大,转速越高。

摇头机构:实现左右摆头,最理想的元件是舵机。舵机是一种位置伺服电机,你给它一个角度信号,它就会转到那个角度并保持住。对于小风扇来说,一个普通的9g微型舵机(如SG90)就足够带动了。它的控制线(通常是橙色或白色)接到Arduino的一个数字引脚(如9),红色和棕色线分别接5V和GND。使用Arduino自带的Servo库,可以轻松地让它在一定角度范围内(如0-180度)往复运动。

为什么不使用普通的直流电机加齿轮组?因为那样还需要额外的定位和反馈电路(如编码器)来知道转到了哪里,复杂度陡增。舵机是“一体化解决方案”,控制简单,精度足够,成本也低。

2.4 供电方案:别小看电源

整个系统的供电需要仔细规划。Arduino Uno可以通过USB供电(5V),但USB口通常只能提供500mA电流。一个5V小风扇工作电流可能在100-200mA,舵机在转动瞬间的峰值电流可能达到300-500mA,加起来可能会让USB供电捉襟见肘,导致Arduino重启或舵机抖动无力。

更可靠的方案是使用外部电源。一个7-12V的直流电源适配器,插到Arduino的DC插座上。Arduino板上的稳压芯片会将电压降至5V,为板载芯片和5V引脚供电。这样,风扇和舵机都可以从Arduino的5V引脚取电,电流能力大大增强(通常可达1A以上)。

如果你用的风扇是12V的,那么就不能直接从Arduino的5V取电了。需要将外部电源(如12V)正极同时接到风扇正极和晶体管集电极,风扇负极接晶体管发射极,再通过晶体管控制通断。此时,Arduino和风扇实际上是“共地”的,但供电电压不同。

3. 电路连接与“洞洞板”焊接实战

理清了各个部件,接下来就是把它们正确地连接起来。我强烈建议在面包板上先完成所有连接并测试功能,确认无误后再焊接,这样可以避免很多麻烦。

3.1 绘制电路原理图

动手之前,先在纸上或使用Fritzing这类软件画个简单的原理图。这能帮你理清思路,避免接错线。我们的系统原理图核心如下:

  1. 电源部分:外部7-12V电源接入Arduino的DC插座。Arduino的5VGND引脚作为整个系统的5V电源总线。
  2. 温度传感:DS18B20的VDD接5V,GND接GND,DQ(数据)引脚接Arduino数字引脚2(或其他),同时在DQ5V之间连接一个4.7kΩ的上拉电阻。
  3. 风扇驱动
    • Arduino的PWM引脚~6接一个220Ω电阻的一端。
    • 电阻的另一端接S8050三极管的基极(B)。
    • 风扇的正极(红线)接外部电源正极(如果风扇是5V,也可接Arduino的5V)。
    • 风扇的负极(黑线)接三极管的集电极(C)。
    • 三极管的发射极(E)接GND。
    • 重要:在三极管的集电极和发射极之间,反向并联一个续流二极管(如1N4148),阴极接集电极,阳极接发射极。这个二极管用于吸收风扇电机线圈在断电时产生的反向电动势,保护三极管不被击穿。这是很多教程会忽略但极其关键的一步。
  4. 舵机控制:舵机的信号线(橙)接Arduino数字引脚9,红线接5V,棕线接GND。

3.2 面包板测试与常见问题排查

按照原理图在面包板上搭建电路。上电前,务必再三检查电源正负极有没有接反,特别是舵机和风扇的接线。

上电测试顺序

  1. 先只连接Arduino和DS18B20,上传一个简单的读温度程序,打开串口监视器,看是否能正常输出温度值。如果显示-12785,通常是接线错误或上拉电阻没接。
  2. 然后单独测试舵机。上传一个让舵机在0度和180度之间缓慢转动的程序,观察运动是否平滑,有无异响或抖动。如果抖动,可能是供电不足,尝试改用外部电源供电。
  3. 最后测试风扇。上传一个让PWM值从0缓慢增加到255的程序,听风扇是否从停止逐渐加速到最高速。如果风扇不转,检查三极管是否接错(B、C、E脚位),续流二极管方向是否正确。

常见坑点

  • 舵机抖动或复位:这是供电不足的典型表现。USB供电能力有限,舵机启动瞬间电流大,导致Arduino电压被拉低而重启。必须使用外部电源
  • 风扇转速不可控或一直全速:检查PWM引脚是否选对(带~符号的),三极管是否损坏,基极限流电阻是否阻值过大导致驱动电流不足。
  • 温度读数跳变剧烈:检查DS18B20的数据线是否过长(建议不超过20米),接线是否牢固,上拉电阻是否接好。可以在程序里加入简单的滤波算法,比如连续读5次取平均值。

3.3 从面包板到永久电路:洞洞板焊接

测试全部成功后,就可以考虑做一个更稳固的版本了。洞洞板(万孔板)是最佳选择。

焊接步骤与技巧

  1. 规划布局:在洞洞板上大致摆放一下主要元件(Arduino插座、三极管、电阻、排针等),规划一下电源线和地线的走线路径,尽量使布线简洁清晰。
  2. 先焊接电源主干:用较粗的导线或直接利用洞洞板上的铜箔,先焊接出5VGND两条总线。这相当于电路板的“骨架”。
  3. 焊接核心元件:依次焊接Arduino的排针插座、三极管、限流电阻、上拉电阻、续流二极管。焊接三极管和二极管时务必注意极性,不确定时可以再用万用表测一下。
  4. 焊接接口:在板子边缘焊接一些排针,作为连接传感器、风扇和舵机的接口。这样以后拆装方便。
  5. 飞线连接:根据原理图,用细导线连接各个元件。焊接时使用助焊剂,可以使焊点更圆润光亮。线不要留得过长,避免杂乱。
  6. 检查与测试:焊接完成后,先用万用表通断档检查是否有短路(特别是电源和地之间)或虚焊。确认无误后,插上Arduino和所有外设,再次进行完整功能测试。

焊接好的洞洞板,可以找一个合适的小盒子装起来,风扇和传感器用延长线引出,一个自成一体、稳固可靠的温控风扇控制器就做好了。

4. 代码逻辑剖析:从感知到行动的智能决策

硬件是身体,软件是灵魂。这段代码的任务很明确:读取温度,根据温度决定风扇转速和舵机动作。我们一步步来构建这个“灵魂”。

4.1 库文件引入与引脚定义

任何Arduino程序都从引入库和定义引脚开始。我们需要Servo库来控制舵机,需要OneWireDallasTemperature库来读取DS18B20。

#include <Servo.h> #include <OneWire.h> #include <DallasTemperature.h> // 引脚定义 #define TEMP_PIN 2 // DS18B20数据引脚接数字2 #define FAN_PIN 6 // 风扇控制接PWM引脚6 #define SERVO_PIN 9 // 舵机信号线接数字9 // 温度传感器对象初始化 OneWire oneWire(TEMP_PIN); DallasTemperature sensors(&oneWire); DeviceAddress tempDeviceAddress; // 用于存储传感器地址 // 舵机对象初始化 Servo myServo; // 全局变量 int currentSpeed = 0; // 当前风扇转速(0-255) int servoPos = 90; // 舵机当前位置(0-180),从90度中间开始 int servoDir = 1; // 舵机转动方向:1向右,-1向左 unsigned long lastServoMoveTime = 0; const int servoMoveInterval = 20; // 舵机每次动作间隔(毫秒) const int servoStep = 1; // 舵机每次转动步进(度)

这里做了几件重要的事:定义了所有硬件连接的引脚,初始化了传感器和舵机对象,并声明了一些控制逻辑需要的变量。servoDirservoPos配合,用来实现舵机在限定角度内的自动往复扫描。

4.2 初始化设置:启动与校准

setup()函数中,我们需要初始化串口通信(用于调试)、启动温度传感器、让舵机归位、并设置风扇引脚为输出模式。

void setup() { Serial.begin(9600); // 启动串口,用于打印调试信息 Serial.println("DIY温控摇头风扇启动..."); // 初始化温度传感器 sensors.begin(); // 获取传感器地址(假设总线上只有一个传感器) if (!sensors.getAddress(tempDeviceAddress, 0)) { Serial.println("未找到DS18B20传感器!请检查接线。"); while (1); // 停止执行 } sensors.setResolution(tempDeviceAddress, 12); // 设置分辨率为12位(最高精度) // 初始化舵机 myServo.attach(SERVO_PIN); myServo.write(servoPos); // 初始位置设为90度 delay(500); // 给舵机时间转动到位 // 初始化风扇控制引脚 pinMode(FAN_PIN, OUTPUT); analogWrite(FAN_PIN, 0); // 初始状态风扇关闭 Serial.println("初始化完成。"); }

在初始化传感器时,我们特意加了一段地址查找和错误处理的代码。这是很好的实践,能帮你快速定位是硬件连接问题还是代码问题。如果找不到传感器,程序会停在这里并通过串口报警。

4.3 主循环逻辑:温度读取与风扇控制

loop()函数是程序的心脏,它不断循环执行。这里的逻辑是:读温度 -> 根据温度计算目标转速 -> 平滑调整到目标转速 -> 控制舵机摇头。

void loop() { unsigned long currentMillis = millis(); // 获取当前时间 // 1. 读取温度(每1秒读取一次,避免过于频繁) static unsigned long lastTempReadTime = 0; if (currentMillis - lastTempReadTime >= 1000) { lastTempReadTime = currentMillis; float temperature = readTemperature(); // 调用自定义函数读取温度 // 2. 根据温度计算目标风扇转速 int targetSpeed = calculateFanSpeed(temperature); // 3. 平滑调整风扇转速(防止突变) adjustFanSpeedSmoothly(targetSpeed); // 打印状态到串口,方便调试 Serial.print("温度: "); Serial.print(temperature); Serial.print("°C, 风扇PWM: "); Serial.println(currentSpeed); } // 4. 控制舵机自动往复摇头(与温度读取异步进行) controlServoSweep(currentMillis); }

这里采用了非阻塞式定时的方法。通过比较millis()函数返回的当前时间与上一次执行的时间戳,来判断是否到了该执行某个任务(如读温度)的时候。这样做的好处是,在等待的间隔里,CPU可以执行其他任务(如控制舵机),而不会被delay()函数阻塞住,使得系统响应更流畅。

4.4 核心函数详解:如何计算风扇转速?

上面主循环中调用了几个自定义函数,它们是智能控制的核心。

readTemperature()函数:封装了DS18B20的读取过程,并加入了简单的软件滤波。

float readTemperature() { sensors.requestTemperatures(); // 发送温度转换命令 // 连续读取3次,取平均值,减少偶然误差 float sum = 0; for (int i = 0; i < 3; i++) { sum += sensors.getTempC(tempDeviceAddress); delay(10); } return sum / 3.0; }

calculateFanSpeed()函数:这是温控策略所在。我采用了一个分段线性控制的方法,你可以根据自己的体感舒适度来调整阈值和转速。

int calculateFanSpeed(float temp) { int speed = 0; // 温度低于25度,风扇不转 if (temp < 25.0) { speed = 0; } // 温度在25-28度之间,线性增加转速(从0到128) else if (temp >= 25.0 && temp < 28.0) { speed = mapFloat(temp, 25.0, 28.0, 0, 128); } // 温度在28-32度之间,线性增加转速(从128到255) else if (temp >= 28.0 && temp < 32.0) { speed = mapFloat(temp, 28.0, 32.0, 128, 255); } // 温度高于32度,全速运转 else { speed = 255; } return constrain(speed, 0, 255); // 确保速度值在0-255范围内 } // 辅助函数:用于浮点数的map映射 float mapFloat(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }

这个策略非常直观:低温停转,中低速微风,高温强风。mapFloat函数是标准map()的浮点数版本,用于线性映射。你可以把25.028.032.0这几个阈值改成你觉得舒服的值。

adjustFanSpeedSmoothly()函数:避免风扇转速突变产生噪音或电流冲击。

void adjustFanSpeedSmoothly(int target) { // 如果当前速度与目标速度相差较大,则逐步逼近 if (abs(currentSpeed - target) > 5) { if (currentSpeed < target) { currentSpeed += 5; } else { currentSpeed -= 5; } currentSpeed = constrain(currentSpeed, 0, 255); analogWrite(FAN_PIN, currentSpeed); } }

每次调整只改变5个PWM值,这样风扇的加速和减速都会有一个柔和的过程,听起来更舒服。

4.5 舵机扫描控制

controlServoSweep()函数实现舵机在设定角度范围内(如30度到150度)自动来回扫描。

void controlServoSweep(unsigned long currentTime) { // 每隔 servoMoveInterval 毫秒移动一次舵机 if (currentTime - lastServoMoveTime >= servoMoveInterval) { lastServoMoveTime = currentTime; servoPos += servoDir * servoStep; // 更新位置 servoPos = constrain(servoPos, 30, 150); // 限制在30-150度之间 myServo.write(servoPos); // 命令舵机转到新位置 // 到达边界时,调转方向 if (servoPos == 30 || servoPos == 150) { servoDir = -servoDir; // 可以在转向时稍作停顿,模拟真人风扇 delay(100); } } }

通过调整servoMoveIntervalservoStep,你可以控制摇头的快慢和流畅度。在边界处加入一个短暂的delay(100),能让动作看起来更自然,不那么机械。

5. 调试、优化与功能扩展

代码写完上传,硬件连接无误,但第一次运行很可能不会那么完美。这就是调试和优化的过程,也是乐趣所在。

5.1 利用串口监视器进行调试

Arduino IDE的串口监视器是你最好的朋友。在代码的关键位置加入Serial.print()语句,可以实时看到温度读数、计算出的目标转速、当前风扇PWM值等信息。

典型调试过程

  1. 温度校准:用手握住DS18B20传感器,观察串口输出的温度是否快速上升。与室内温度计对比,如果有固定偏差,可以在readTemperature()函数的返回值上加上一个修正值,例如return (sum / 3.0) + 0.5;
  2. 风扇响应测试:用打火机或吹风机快速加热传感器,观察风扇转速是否按照你设定的策略平滑上升。如果发现转速变化太突兀或太迟钝,调整calculateFanSpeed()函数中的温度阈值和映射范围,或者修改adjustFanSpeedSmoothly()函数中的步进值(5)。
  3. 舵机范围确认:观察舵机是否在你期望的角度范围内(30-150度)摆动。如果它撞到了物理限位(比如被风扇外壳卡住),请立即断电!然后调整代码中的constrain(servoPos, 30, 150)这两个边界值,确保其运动畅通无阻。

5.2 性能与稳定性优化

基础功能跑通后,可以考虑一些优化,让这个小系统更聪明、更稳定。

  • 增加温度滞后:防止风扇在阈值附近频繁启停。例如,设置风扇启动温度为26度,但停止温度设为24度。这需要在代码中记录风扇状态,并分别用两个阈值进行判断。
  • 加入手动模式:增加一个按钮或旋钮,可以手动切换自动/手动模式,在手动模式下用旋钮直接控制风扇转速和舵机角度。这需要增加输入器件和相应的代码分支。
  • 夜间静音模式:通过一个光敏电阻检测环境光线,在夜晚自动降低风扇最大转速或进入间歇运行模式,减少噪音。
  • 状态指示:加入一个RGB LED,用不同颜色表示当前状态(如蓝色代表低温停转,绿色代表微风,红色代表强风)。

5.3 从原型到产品:外观与结构设计

功能完善后,可以着手美化它。

  1. 风扇选型与固定:选择一个外观好看的电脑机箱风扇或专用静音风扇。用扎带、螺丝或者3D打印的支架,将其牢固地固定在舵机的舵盘上。确保重心平衡,避免舵机负载过大。
  2. 传感器布置:将DS18B20的探头用热缩管或胶带固定在一根较长的导线上,这样你可以把探头放在任何你想监测的地方(如笔记本电脑散热口),而主体电路可以放在别处。
  3. 外壳制作:可以用现成的塑料盒、亚克力板切割粘合,或者使用3D建模软件(如Fusion 360, Tinkercad)设计一个专属外壳,然后3D打印出来。外壳上要留出风扇出风口、传感器引线孔、电源接口和可能的调试USB口。
  4. 走线与收纳:将Arduino、洞洞板、电源模块等全部装入外壳。内部用扎带或热熔胶固定好,所有导线梳理整齐,避免缠绕。一个整洁的内部不仅好看,也更安全可靠。

做完这一切,插上电源,你的专属智能温控摇头风扇就开始工作了。它会静静地感知环境温度,自动调节风力和摇头角度,成为你桌面上一个既实用又有趣的智能伙伴。这个项目最大的收获不是这个风扇本身,而是在动手过程中,你将传感器、控制器、执行器的知识串联了起来,真正理解了“输入-处理-输出”这一自动控制的基本逻辑。下次当你再遇到需要自动化的小需求时,你就能自信地说:这个,我自己就能做。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/28 3:26:18

Amphenol LTW RJS-5EAMMM-LL7E10线束组件应用特点

在工业自动化和智能设备快速发展的今天&#xff0c;线束组件已经成为设备连接系统中的关键基础部件。一套稳定可靠的线束方案&#xff0c;不仅影响信号传输质量&#xff0c;同时也关系到设备运行寿命、维护效率以及整体可靠性。 特别是在户外设备、工业控制系统、传感器网络以及…

作者头像 李华
网站建设 2026/7/28 3:24:38

Python+微信小程序开发健康饮食推荐系统实战

1. 项目概述&#xff1a;Python微信小程序的健康饮食推荐系统这个项目本质上是一个基于Python后端与微信小程序前端的智能推荐系统&#xff0c;专门解决现代人饮食健康管理的痛点。我在实际开发中发现&#xff0c;市面上大多数饮食类应用要么功能单一&#xff08;如仅记录卡路里…

作者头像 李华
网站建设 2026/7/28 3:23:33

MySQL 8 安装与基础使用指南:从下载到执行第一条SQL

最近在帮新同事配置开发环境时,发现很多朋友在初次安装 MySQL 8 时,总会被各种配置选项、环境变量和连接问题卡住,网上教程要么版本过时,要么步骤跳跃。本文旨在提供一个清晰、完整、可复现的 MySQL 8 安装与基础使用指南,从下载到连接,再到执行第一条 SQL,手把手带你走…

作者头像 李华
网站建设 2026/7/28 3:23:23

OpenEMMA:多模态端到端自动驾驶开源框架解析

1. OpenEMMA项目概述OpenEMMA&#xff08;Open-source End-to-end Multimodal Autonomous driving framework&#xff09;是当前自动驾驶领域最具突破性的开源框架之一。作为一个工程师&#xff0c;当我第一次在GitHub上看到这个项目时&#xff0c;就被它"多模态端到端&qu…

作者头像 李华
网站建设 2026/7/28 3:22:33

Maix Duino开发板:基于K210的RISC-V边缘AI实战入门指南

1. 项目概述&#xff1a;为什么是Maix Duino&#xff1f; 在嵌入式开发的浩瀚海洋里&#xff0c;选对第一块开发板&#xff0c;往往决定了你接下来几个月是激情澎湃还是焦头烂额。今天我们不聊那些老生常谈的Arduino Uno或者树莓派&#xff0c;而是聚焦于一个在AIoT&#xff08…

作者头像 李华
网站建设 2026/7/28 3:22:06

华为网络实训:设备配置与OSPF路由实战指南

1. 项目背景与需求分析26年网络建设与运维样题一的网络建设与调试模块&#xff0c;是深圳某职业技术学校&#xff08;深一职&#xff09;与华为技术有限公司合作开发的实训项目。这个项目主要面向网络工程专业的学生&#xff0c;通过模拟真实企业网络环境&#xff0c;让学生掌握…

作者头像 李华