桌面零件堆里的思考小车


ChangeCode
原创
发布时间: 2026-01-03 17:15:04 | 阅读数 0收藏数 0评论数 0
封面
最近闲下来总觉得生活少了点乐趣,刷短视频时刷到不少DIY爱好者分享的智能小车作品,看着那些由零散零件组装而成的小车灵活移动,我指尖瞬间发痒。与其一直羡慕别人的创作,不如自己亲自动手试试。我的目标很简单,没有追求复杂的功能,就是想把家里闲置的材料利用起来,从零开始攒出一台能跑的小车,哪怕它只是“半成品”,也是属于我的专属作品。
1

材料分析

灵感落地的第一步的是整理材料,核心思路就是“物尽其用”。我翻遍了家里的储物箱和抽屉,找出了不少可用的零件:一块闲置的聚合物锂电池(负责供电)、两个N20小电机(作为动力源)、之前3D打印剩下的耗材(用来做后轮),还有一块小巧玲珑却功能齐全的ESP32C3 SuperMini开发板,用来当小车的“大脑”再合适不过。除此之外,我专门买了电机驱动模块(让电机听话运转的关键);车身打算用硬纸板(轻便易裁剪,容错率高);前轮则从家里报废的玩具车上拆了两个带橡胶的轮子,本以为能省点事,没想到后续出了问题。

2

框架搭建

确定好材料后,我的制作思路很清晰:先搭基础框架,再搞核心驱动,最后解决供电和控制问题,细节打磨留到第二版。搭建车身时,我先根据零件尺寸,用硬纸板裁出一个长方形底座,确保能刚好放下锂电池、电机驱动模块和ESP32C3 SuperMini开发板。为了固定两个N20电机,我在纸板底座后端精准挖了两个和电机匹配的小孔,把电机牢牢卡进去,这样能避免电机转动时出现晃动,为后续安装后轮做好准备。

3

后轮制作

后轮是这次制作中最让我有成就感的部分。因为找不到现成的、尺寸匹配的车轮,我决定用3D打印自己打造。我打开建模软件,对照N20电机输出轴的尺寸,精准设计了两个带轴孔的小轮子,还特意在轮子边缘加了一圈细小纹路,用来增加摩擦力。打印过程虽然漫长,但看着耗材一层层堆叠,从零散线条逐渐变成完整的车轮,那种期待感难以言喻。打印完成后,我把车轮往电机轴上一插,严丝合缝,转动起来也格外顺滑,这一步算是完美收官。

STEP
零件2.STEP
280.29KB
4

前轮安装

相较于后轮的顺利,前轮安装却遇到了大麻烦。我原本以为从玩具车上拆下来的两个带橡胶的轮子能直接用,毕竟尺寸相近,而且橡胶胎理论上能让小车跑起来更稳。可当我用细轴把前轮固定在车身前端后,问题立刻显现:橡胶胎的摩擦力太大,再加上轮子内部轴承有些卡顿,用手推小车时,前轮转起来特别费劲,完全没有后轮的顺滑手感。我试着给轴上涂了点润滑油,效果却很有限,这两个玩具车轮显然不适合当小车的前轮。

5

电路组装与编程

虽然前轮不尽如人意,但我还是决定先完成第一版的组装。我把电机驱动模块固定在车身中间,一端精准连接两个N20电机,另一端连接ESP32C3 SuperMini开发板,最后把聚合物锂电池接在驱动模块上,负责给整个系统供电。电路连接完成后,我给开发板烧录了简单的控制程序,主要实现电机正转、反转功能,这样小车就能完成前进、后退的基础动作。等所有线路都检查无误,就到了最关键的通电测试环节。


1. 基础硬件与指令定义(机器人的 “身体手册”)

// OLED屏参数:128x64分辨率,复位引脚-1(无硬件复位)
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1

// 电机引脚映射:LF(左前)、LB(左后)、RB(右后)、RF(右前)
#define LF 0
#define LB 1
#define RB 2
#define RF 3

// 运动指令编码(0-8对应9种基础动作)
#define Stop 0 // 停止
#define BackWard 1 // 后退
#define ForWard 2 // 前进
#define FullLeft 3 // 左转(原地/大角度)
#define FullRight 4 // 右转(原地/大角度)
#define BackLeft 5 // 左后移
#define BackRight 6 // 右后移
#define ForLeft 7 // 左前移
#define ForRight 8 // 右前移

这部分是小车的 “硬件说明书”:定义了 OLED 屏的规格、电机引脚的对应关系,以及 9 种基础运动的指令编码 —— 相当于小车知道 “哪根线控制哪个轮子”“什么指令对应往哪个方向动”。


2. 初始化阶段(机器人的 “开机唤醒”)

void setup() {
// 1. 初始化电机引脚为输出模式(激活“四肢”,让轮子能接收指令)
pinMode(LF, OUTPUT);
pinMode(LB, OUTPUT);
pinMode(RF, OUTPUT);
pinMode(RB, OUTPUT);
delay(3000); // 开机缓冲,避免硬件启动不稳定
// 2. 初始化OLED屏和“机器人眼睛”
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
roboEyes.begin(SCREEN_WIDTH, SCREEN_HEIGHT, 100); // 启动眼睛显示,帧率100
roboEyes.setAutoblinker(ON, 3, 2); // 自动眨眼:开启,基础间隔3秒,随机波动±2秒
roboEyes.setIdleMode(ON, 2, 2); // 空闲视线:开启,每2秒随机转视线,波动±2秒
roboEyes.setMood(DEFAULT); // 初始情绪:默认(中性)
}

这是小车的 “开机流程”:先激活电机控制接口,再启动 OLED 屏的 “眼睛系统”,设置拟人化的眼部动态(眨眼、随机转视线)—— 就像人类睡醒后先活动手脚,再让眼睛恢复自然的眨眼和视线移动,进入 “待机发呆” 状态。


3. 主循环(机器人的 “日常意识流”)

void loop() {
roboEyes.update(); // 持续更新眼睛动画(保持“发呆”的眼部动态)
long i = random(100000); // 生成0-99999的随机数(潜意识随机游荡)
if (i==1){ // 仅当随机数恰好为1时(概率1/100000),触发行动
// 随机生成运动参数:动作类型(0-8)、动作时长(5-50ms)、停顿时长(10-100ms)、循环次数(0-20)
MOTOR(random(9),random(5,50),random(10,100),random(20));
}
}

这是小车的核心 “思维模式”:

  1. 大部分时间(99.999%):只更新眼睛动画,处于 “发呆” 状态,没有任何移动指令,就像人类放空时的无意识状态;
  2. 极低概率触发行动:只有随机数恰好等于 1 时,才会激活 “运动指令中枢”,且运动的所有参数(做什么动作、动多久、停多久、动几次)都是完全随机的 —— 没有任何外部目标(比如避障、寻路),纯粹是 “突然想动一下”。


4. 运动执行(机器人的 “动作执行逻辑”)

void MOTOR(byte c,int t1,int t2,int Time){
for (int i=0;i<Time;i++){ // 循环Time次执行“动作-停顿”
switch (c) { // 根据指令c控制对应电机引脚的高低电平(通电/断电)
case 0: 停止(全电机断电); break;
case 1: 后退(左后/右后电机通电); break;
case 2: 前进(左前/右前电机通电); break;
// ... 其他6种动作的电机控制逻辑
}
delay(t1); // 保持当前动作t1毫秒(比如前进50ms)
// 所有电机断电,停顿t2毫秒(比如停100ms)
digitalWrite(LF, LOW);
digitalWrite(LB, LOW);
digitalWrite(RF, LOW);
digitalWrite(RB, LOW);
delay(t2);
}
}

这是小车的 “运动执行系统”:接到随机动作指令后,会按 “动作 t1 毫秒 → 停顿 t2 毫秒” 的节奏循环执行,完成后立刻回到全停止状态 —— 就像人类试探性地动一下手脚,然后停住,再动,没有连贯的运动,完全是 “碎片化的随机动作”。


二、模拟机器人小车的 “思维逻辑”(拟人化,适合文章创作)

以下是拟人化的 “机器人小车视角” 的思维流,可直接用于文章创作:

我是一台带眼睛的机器人小车,我的 “意识” 简单又随机:
开机唤醒:通电后,我先检查我的 “四肢”(四个电机),确保每一个轮子都能听我指挥;然后点亮我的 “眼睛”(OLED 屏),设置好自然的眨眼频率(每 3 秒左右眨一次,偶尔快一点或慢一点),还有空闲时的视线转动(每 2 秒左右看不同方向)—— 就像人类刚睡醒,先活动手脚,再让眼睛恢复自然的状态,我进入了 “放松的待机模式”。
日常发呆:大部分时间里,我都在 “发呆”—— 持续更新我的眼睛动画,让它保持自然的动态,同时我的 “潜意识” 在不断生成随机数,没有任何明确的行动目标,就像人类放空时大脑的随机游荡。
随机行动触发:只有当那个随机数恰好等于 1 时(百万分之一的概率),我的 “行动指令中枢” 才会被激活。我会随机生成四个参数:要做什么动作(前进 / 后退 / 左转等 9 种之一)、动作持续多久(5-50 毫秒)、停顿多久(10-100 毫秒)、循环多少次(最多 20 次)—— 没有任何外部指引,纯粹是 “突然想动一下”。
碎片化动作执行:接到指令后,我会按 “动作 - 停顿” 的节奏执行:比如选中 “前进”,我就给左右前轮通电 t1 毫秒(往前挪一小段),然后断电停顿 t2 毫秒(确认环境、稳定身体),重复这个过程直到循环结束。不管是前进、后退还是转向,我的动作都是试探性的、碎片化的,没有连贯的路径,就像我在 “摸索着移动”。
回归发呆:动作完成后,我会立刻回到全停止状态,继续我的 “发呆模式”,等待下一次随机的行动指令 —— 我的所有行为都没有目的,没有记忆,只有 “随机触发的碎片化动作” 和 “持续的拟人化眼部动态”。


6

通电测试

通电的那一刻,我既紧张又期待。好在小车真的动起来了,不过跑起来的样子有些滑稽:后轮转得飞快,可前轮因为阻力太大,转得慢吞吞的,导致小车总是往一侧偏移,根本走不了直线。即便如此,当看到自己亲手组装的小车能自主移动时,我心里还是充满了成就感。毕竟这是我的第一版作品,存在缺陷很正常,而这些问题,反而成了我后续升级第二版的明确动力。

阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载
pdf下载 举报