
最近在整理桌面时发现手边有不少闲置的电子元件于是萌生了一个想法能否用极低的成本打造一个功能完整的桌面轮式机器人经过一番摸索和实践我成功用不到50元的预算实现了一个可以通过手机APP遥控、具备基础避障和灯光效果的“桌面小坦克”。整个过程不仅充满乐趣也让我对嵌入式开发、电机控制和无线通信有了更深的体会。本文将完整分享从零件选型、电路设计、代码编写到最终组装的“手搓”全流程无论你是电子爱好者还是编程新手都能跟着一步步实现自己的第一个桌面机器人。1. 核心概念与项目目标在开始动手之前我们首先要明确这个“50元桌面轮式小机器人”到底是什么以及它能做什么。1.1 什么是桌面轮式机器人桌面轮式机器人顾名思义是一种可以在桌面等平坦表面移动的小型机器人。它通常由以下几个核心部分组成移动底盘负责机器人的移动最常见的是两轮差分驱动结构两个轮子独立控制通过差速实现转向这也是我们本项目采用的结构成本最低且控制简单。控制核心相当于机器人的“大脑”负责接收指令、处理传感器数据并控制电机。我们将使用一款性价比极高的微控制器。动力系统包括电机、电机驱动模块和电源。电机将电能转化为轮子的转动。感知系统可选例如超声波传感器用于测距避障红外传感器用于巡线。为了控制成本我们先实现基础遥控再考虑增加避障功能。通信模块实现机器人与外界的交互比如通过蓝牙接收手机发送的遥控指令。1.2 50元预算能实现什么在严格的成本控制下我们的目标是实现一个最简可行产品MVP核心功能通过手机蓝牙APP遥控机器人前进、后退、左转、右转、停止。扩展功能在基础遥控之上增加一个超声波传感器实现遇到前方障碍物时自动停止的简易避障功能遥控模式下优先。趣味功能添加几个LED灯在机器人移动或检测到障碍时闪烁增加可玩性。结构要求车身结构使用易于获取的材料如亚克力板、雪糕棒、3D打印件制作确保坚固且美观。这个项目不仅是一个玩具更是一个学习嵌入式开发、PWM电机控制、串口通信和传感器应用的绝佳实践平台。2. 硬件选型与成本清单“手搓”的第一步是准备零件。所有元件均采购自主流电商平台以下是详细的物料清单及选型理由。元件名称型号/规格预估单价元数量小计元备注主控芯片ESP32-C3开发板12.00112.00核心集成Wi-Fi/蓝牙性价比远超STM32电机驱动L9110S 双路H桥模块2.5012.50驱动两个直流电机足够用直流电机N20减速电机3-6V3.5027.00带减速箱扭矩大适合小车轮子65mm塑料轮带联轴器2.0024.00需匹配电机轴径常用D形轴电源18650锂电池带保护板8.0018.00单节供电需配套电池盒电池盒18650单节电池盒1.5011.50传感器HC-SR04超声波模块4.0014.00用于避障可选但推荐LED与电阻5mm LED多色220Ω电阻0.50若干1.00用于状态指示车体结构亚克力板/洞洞板/雪糕棒--5.00可利用手边材料成本极低连接线杜邦线公对公、母对母--2.00用于电路连接其他螺丝、螺母、扎带、万向轮--3.00固定和辅助支撑总计约 50.00选型核心思路ESP32-C3 vs Arduino/STM32ESP32-C3是RISC-V内核集成蓝牙价格与UNO相当但性能更强、功能更多无需额外蓝牙模块是成本控制的关键。L9110S驱动对于N20这种小电流电机完全足够比常用的L298N、TB6612便宜很多。N20电机价格、扭矩和尺寸的平衡点比普通的TT马达更耐用。单节18650供电电压范围3.7V-4.2V符合电机和ESP32的工作电压无需复杂的降压模块。3. 电路设计与连接电路是机器人的“神经系统”正确的连接是成功的第一步。我们将分模块进行连接。3.1 核心控制电路ESP32-C3首先确保ESP32-C3开发板能正常工作。使用Micro-USB数据线将其连接到电脑。3.2 电机驱动电路L9110SL9110S模块有两个独立的H桥可以驱动两个直流电机。每个通道有两个控制引脚IA, IB和两个电机输出端OA, OB。连接方式ESP32-C3 GPIO-L9110S 引脚GPIO4-A-IA(控制电机A方向)GPIO5-A-IB(控制电机A方向)GPIO6-B-IA(控制电机B方向)GPIO7-B-IB(控制电机B方向)L9110S 电源VCC- 电池正极直接接18650正极约3.7-4.2VGND- 电池负极与ESP32-C3的GND共地电机连接左电机Motor A两根线 -A-OA和A-OB右电机Motor B两根线 -B-OA和B-OB注意如果电机转向与预期相反交换OA和OB上的线即可。3.3 超声波传感器电路HC-SR04HC-SR04有4个引脚VCC, Trig, Echo, GND。VCC- ESP32-C3的3.3V引脚切记不要接5V会损坏ESP32GND- ESP32-C3的GNDTrig- ESP32-C3的GPIO2Echo- ESP32-C3的GPIO33.4 电源电路这是关键且容易出错的部分。ESP32-C3和L9110S的供电必须共地。18650电池正极接L9110S的VCC。18650电池负极接L9110S的GND同时用一根杜邦线连接到ESP32-C3的GND。ESP32-C3的供电不要接VIN引脚它需要5V。我们直接通过其Micro-USB口供电调试时用电脑USB运行时可以用一个旧的手机充电宝或USB充电器。这样电机驱动部分3.7-4.2V和逻辑控制部分USB 5V通过共地连接在一起可以协同工作。3.5 LED指示电路将一个LED长脚为正通过一个220Ω的限流电阻连接到ESP32-C3的GPIO8和GND之间。最终电路逻辑图文字描述[18650电池] [L9110S.VCC] [18650电池-] [L9110S.GND] [ESP32-C3.GND] [USB 5V] [ESP32-C3.USB] | |--- GPIO4,5,6,7 --- L9110S.IA,IB |--- GPIO2,3 -------- HC-SR04.Trig,Echo |--- GPIO8 ---------- LED - 220Ω - LED- - GND |--- 3.3V ----------- HC-SR04.VCC强烈建议在面包板上先搭建整个电路并测试确认所有功能正常后再进行焊接或固定。4. 软件环境搭建与代码编写硬件连接好后我们需要让机器人的“大脑”运行起来。4.1 开发环境准备我们使用Arduino IDE来开发ESP32-C3因为它对新手最友好。安装Arduino IDE从官网下载并安装。添加ESP32开发板支持打开Arduino IDE点击文件-首选项。在“附加开发板管理器网址”中输入https://espressif.github.io/arduino-esp32/package_esp32_index.json点击工具-开发板-开发板管理器搜索“esp32”找到“ESP32 by Espressif Systems”并安装。选择开发板安装后在工具-开发板中选择 “ESP32C3 Dev Module”。端口选择对应的串口。4.2 核心控制代码解析我们将代码分为几个部分电机驱动、蓝牙通信、超声波测距和主逻辑循环。第一步定义引脚和变量// 电机驱动引脚定义 #define MOTOR_A_IA 4 // 左电机方向A #define MOTOR_A_IB 5 // 左电机方向B #define MOTOR_B_IA 6 // 右电机方向A #define MOTOR_B_IB 7 // 右电机方向B // 超声波引脚定义 #define TRIG_PIN 2 #define ECHO_PIN 3 // LED引脚定义 #define LED_PIN 8 // 蓝牙对象 #include BluetoothSerial.h BluetoothSerial SerialBT; // 全局变量 long duration; int distance; int safeDistance 15; // 安全距离单位厘米 // 电机控制函数 void motorControl(int leftSpeed, int rightSpeed) { // 控制左电机 if (leftSpeed 0) { digitalWrite(MOTOR_A_IA, HIGH); digitalWrite(MOTOR_A_IB, LOW); } else if (leftSpeed 0) { digitalWrite(MOTOR_A_IA, LOW); digitalWrite(MOTOR_A_IB, HIGH); } else { digitalWrite(MOTOR_A_IA, LOW); digitalWrite(MOTOR_A_IB, LOW); } // 控制右电机 (注意两个轮子对称安装可能需要反向) if (rightSpeed 0) { digitalWrite(MOTOR_B_IA, HIGH); digitalWrite(MOTOR_B_IB, LOW); } else if (rightSpeed 0) { digitalWrite(MOTOR_B_IA, LOW); digitalWrite(MOTOR_B_IB, HIGH); } else { digitalWrite(MOTOR_B_IA, LOW); digitalWrite(MOTOR_B_IB, LOW); } }第二步初始化设置setup()void setup() { // 初始化串口用于调试 Serial.begin(115200); // 初始化电机驱动引脚为输出模式 pinMode(MOTOR_A_IA, OUTPUT); pinMode(MOTOR_A_IB, OUTPUT); pinMode(MOTOR_B_IA, OUTPUT); pinMode(MOTOR_B_IB, OUTPUT); // 初始化超声波引脚 pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); // 初始化LED引脚 pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, LOW); // 初始化蓝牙 SerialBT.begin(DesktopRobot_50); // 蓝牙设备名称手机可搜索到 Serial.println(蓝牙已启动设备名: DesktopRobot_50); Serial.println(等待手机连接...); // 启动时停止所有电机 motorControl(0, 0); }第三步超声波测距函数int getDistance() { digitalWrite(TRIG_PIN, LOW); delayMicroseconds(2); digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); duration pulseIn(ECHO_PIN, HIGH); // 读取高电平持续时间 distance duration * 0.034 / 2; // 计算距离声速340m/s if (distance 200) distance 200; // 限制最大测量范围 return distance; }第四步主循环loop()与蓝牙控制void loop() { // 1. 获取前方距离 int currentDist getDistance(); Serial.print(Distance: ); Serial.print(currentDist); Serial.println( cm); // 2. 检查蓝牙是否有数据 if (SerialBT.available()) { char command SerialBT.read(); // 读取手机发送的单个字符命令 Serial.write(command); // 在串口监视器显示 // 3. 根据命令控制小车同时检查安全距离 // 如果距离太近强制停止除非是后退命令 if (currentDist safeDistance command ! B) { Serial.println(Obstacle too close! Force STOP.); motorControl(0, 0); digitalWrite(LED_PIN, HIGH); // LED亮起警示 delay(500); digitalWrite(LED_PIN, LOW); return; // 跳过本次命令执行 } // 安全距离内或后退命令正常执行 switch (command) { case F: // 前进 motorControl(100, 100); // 左右电机全速正转 digitalWrite(LED_PIN, HIGH); break; case B: // 后退 motorControl(-100, -100); // 左右电机全速反转 digitalWrite(LED_PIN, HIGH); break; case L: // 左转 motorControl(-100, 100); // 左轮反转右轮正转 digitalWrite(LED_PIN, HIGH); break; case R: // 右转 motorControl(100, -100); // 左轮正转右轮反转 digitalWrite(LED_PIN, HIGH); break; case S: // 停止 motorControl(0, 0); digitalWrite(LED_PIN, LOW); break; default: // 未知命令忽略 break; } } delay(50); // 短暂延迟稳定循环 }4.3 手机APP准备我们需要一个能通过蓝牙发送字符的APP。可以在手机应用商店搜索“蓝牙串口”或“Arduino Bluetooth Controller”这类APP非常多。安装后搜索名为“DesktopRobot_50”的设备并连接。在APP内设置按钮分别发送字符F,B,L,R,S。5. 机械结构与组装电路和代码都调试通过后最后一步是给机器人一个“身体”。5.1 车体制作方案方案一推荐激光切割亚克力板。使用绘图软件如LaserCAD、Inkscape设计一个简单的两层板结构上层固定ESP32、电池等下层固定电机和轮子。网上有很多开源的小车底盘图纸可以参考。方案二洞洞板铜柱。用一块大小合适的洞洞板作为主平台用铜柱和螺丝搭建一个立体结构。灵活性强但美观度稍差。方案三废旧材料改造。利用结实的塑料盒、木板甚至乐高积木作为底盘。这是最具创意和零成本的方案。5.2 组装步骤固定电机将两个N20电机用螺丝或热熔胶固定在底盘前部左右两侧。安装轮子将轮子套在电机轴上用配套的螺丝拧紧。安装万向轮在底盘前部或后部中心位置安装一个万向球轮或一个简单的塑料脚轮作为支撑点。固定主控和驱动板将ESP32开发板和L9110S模块用铜柱或尼龙柱固定在底盘上层确保不会短路。固定电池盒将18650电池盒粘贴或捆绑在底盘上确保重心平衡。固定传感器将HC-SR04超声波模块安装在车头正前方水平朝前。布线使用扎带或胶带整理所有连接线避免缠绕到轮子。6. 系统调试与常见问题组装完成后上电测试是整个项目最激动人心的环节也最容易遇到问题。6.1 上电与配对流程将18650电池放入电池盒给L9110S供电。用USB线连接ESP32-C3和电脑或充电宝。打开Arduino IDE的串口监视器波特率115200看到“蓝牙已启动...”的提示。打开手机蓝牙串口APP搜索并配对“DesktopRobot_50”。连接成功后尝试按下APP上的按钮观察串口监视器是否有对应字符输出同时听电机是否有反应。6.2 常见问题排查清单问题现象可能原因排查步骤与解决方案上电后无任何反应1. 电源未接通2. ESP32未正确供电1. 检查电池是否有电电池盒接线是否牢固。2. 检查ESP32的USB线是否连接正常电脑或充电宝是否有输出。蓝牙搜索不到设备1. 蓝牙名称错误2. 代码未上传成功3. ESP32-C3蓝牙硬件问题1. 确认代码中SerialBT.begin()内的名称与搜索名称一致。2. 重新编译上传代码观察上传过程有无报错。3. 尝试用手机蓝牙设置界面搜索而非APP内搜索。APP连接后按键无反应1. 蓝牙未真正连接2. 命令字符不匹配3. 电机驱动部分故障1. 查看串口监视器连接成功会有提示。检查APP连接状态。2. 确认APP发送的字符F,B,L,R,S与代码中case判断的字符完全一致大小写敏感。3. 用万用表测量L9110S输出端OA,OB在按键时是否有电压变化。电机只震动不转1. 供电电压不足2. 电机堵转或负载过大1. 检查电池电压低于3.5V可能带不动电机请充电或更换电池。2. 用手轻轻拨动轮子看是否被卡住。电机空载测试是否转动。两个电机转向不一致电机接线顺序问题交换其中一个电机的两根接线OA和OB对调。确保“前进”命令下两个轮子都向前转。超声波测距不准或为01. 接线错误2. 物体不在测量范围或表面不反射声波3. 代码中声速换算错误1. 确认Trig和Echo引脚是否接反VCC是否接3.3V。2. 对准平整的硬质物体测试。3. 检查getDistance()函数中的计算公式。遥控有延迟或卡顿1. 蓝牙信号干扰2. 主循环delay()过长3. 电源功率不足1. 远离Wi-Fi路由器等强信号源。2. 减少不必要的delay()或使用非阻塞式定时。3. 检查电池电量电机启动瞬间电流大可能导致ESP32重启。7. 功能扩展与优化建议基础版本成功运行后你可以尝试以下扩展让机器人更智能、更强大。7.1 软件功能扩展速度控制将motorControl函数中的digitalWrite改为analogWrite需接支持PWM的引脚实现无极调速。自动避障巡航修改主循环逻辑当蓝牙无指令时自动进入巡航模式根据超声波数据自动绕障。手机APP定制使用MIT App Inventor或Android Studio开发一个专属控制APP可以添加摇杆控制、速度滑块、距离实时显示等功能。Wi-Fi控制与视频传输利用ESP32-C3的Wi-Fi功能将其连接至局域网通过网页或MQTT协议控制。甚至可以添加一个OV2640摄像头模块实现简易的FPV第一人称视角小车。7.2 硬件功能扩展增加更多传感器添加红外巡线传感器让机器人可以沿着黑线走添加红外接收头用家用遥控器控制。改进电源管理增加一个TP4056充电模块可以直接通过Micro-USB口给18650电池充电无需取出电池。增加机械臂使用小型舵机如SG90制作一个简易的2自由度机械臂安装在车身上实现抓取功能。美化外观使用3D打印为小车设计一个酷炫的外壳或者用模型喷漆进行涂装。7.3 工程化与稳定性建议电源隔离电机工作时会产生电压尖峰可能干扰微控制器。可以在ESP32的电源入口处增加一个100μF的电解电容进行滤波。结构加固检查所有螺丝和连接点确保在碰撞和震动下不会松动。对于亚克力板可以用角码加强。代码优化将蓝牙命令解析、电机控制、避障逻辑等模块化使用状态机设计模式使代码更易维护和扩展。安全第一始终在安全、平坦的环境下测试远离楼梯、桌边。长时间不用时务必断开电池连接。从零件散落一地到机器人灵活地在桌面上穿梭这个“手搓”的过程充满了挑战与成就感。它不仅仅是一个成本控制下的玩具更是一个涵盖了电子电路、嵌入式编程、机械结构和问题解决的综合实践项目。希望这份详细的指南能帮助你顺利搭建属于自己的桌面伙伴。当你看到它按照你的指令行动时那种亲手创造事物的快乐是无与伦比的。如果遇到任何问题欢迎在评论区交流讨论也期待看到大家更有创意的改造和升级版本。