一、
本项目尝试自己设计一种可以联网且ai拍题教学解答的ai科学计算器,我预期完成pcb设计,电路调试与外壳建模,和实际调试。这篇文章的目的是作为我个人性质的研究报告存档留存。
初步方案包括 ESP32-S3 主控、OV2640 摄像头、128×64 LCD 显示屏、矩阵键盘输入、电源管理模块以及打印外壳。
二、
总体方案上,我选择 ESP32-S3 作为主控芯片。选择它的主要原因是它相对于普通微控制器具有更强的处理能力,并且部分型号支持较大的片上存储或外接 PSRAM,更适合处理摄像头拍照、图像缓存和联网通信等任务。由于本项目需要将题目图像采集后上传到服务器或 AI 接口,因此主控不仅要完成普通按键扫描和屏幕显示,还要承担摄像头驱动、Wi-Fi 连接、HTTP 请求和返回结果解析等工作。
摄像头部分我选择了常见的 OV2640 模块。它在 ESP32 系列开发中使用较多,资料相对丰富,能够输出 JPEG 图像,便于后续通过网络上传。显示部分则选择常规的 ST7567 系列 128×64 LCD。相比彩色屏幕,黑白 LCD 显示信息量有限,但功耗较低,驱动相对简单,也更接近传统科学计算器的显示风格。对于本项目来说,屏幕主要承担菜单、输入表达式、联网状态和 AI 返回步骤的显示,因此在原型阶段,128×64 的分辨率基本可以满足最小可用需求。
在按键方案上,我一开始犯了一个比较明显的工程错误:没有提前拆解和研究市售计算器的实际结构,而是想当然地使用轻触开关作为按键矩阵的基本单元。后来我才发现,真正的计算器产品大多采用导电硅胶按键。导电硅胶结构更简洁,厚度更低,键位排列也更加紧凑,同时适合大面积按键阵列。相比之下,轻触开关会带来高度增加、结构固定复杂、按键手感不统一、外壳开孔困难等问题。这一选择直接影响了后续外壳设计和按键面板设计。
![image.jpg]()
布局我选择把摄像头和lcd排线一种布置在底层,而电源层在顶层,中间两层则是gnd平面,用于隔离两者信号。
传统计算器的程序逻辑主要围绕本地输入、表达式解析和数值计算展开。本项目还需要加入图像采集、网络传输和 AI 结果显示。因此,我将软件流程初步划分为几个状态:待机状态、普通计算状态、拍照状态、联网请求状态、结果显示状态和错误处理状态。这样的划分有利于后续编写程序时进行模块化管理,也方便在调试过程中定位问题。
在普通计算状态下,设备主要读取键盘输入,并将按键转换为对应的字符或功能。例如数字键、运算符、括号、函数键和 SHIFT 组合键都需要在程序中建立映射关系。由于科学计算器的按键数量较多,如果直接在主循环中用大量条件判断处理,会导致程序结构混乱。因此我计划将按键输入设计成“键值表”的形式:每一个物理按键对应普通功能和 SHIFT 功能两个逻辑值,程序根据当前模式决定实际输入内容。这样既符合科学计算器的使用习惯,也方便后期修改按键布局。
联网功能则是本项目与普通计算器区别最大的部分。我的设想是,当用户按下拍照或 AI 讲解功能后,ESP32-S3 首先驱动 OV2640 采集题目图像,并将图像以 JPEG 格式暂存在内存中。随后设备将图像数据上传到服务器端。服务器端可以完成图像预处理、OCR 识别和 AI 模型调用,再将题目解析结果和分步讲解返回给设备。设备收到返回内容后,再根据 LCD 屏幕的显示能力,将文字结果分页显示。
而我还要设计一个dashboard在我的主机上,用于注册用户设备与分配额度,便于我的管理。
![image.jpg]()
![image.jpg]()
三、
接下来是硬件与pcb实现。
主控部分采用 ESP32-S3。选择它的主要原因是它能够支持摄像头采集和 Wi-Fi 联网,同时资料较多,适合个人开发者进行原型验证。在原理图设计中,ESP32-S3 需要连接摄像头数据线、LCD 通信线、按键相关信号、电源控制和下载调试接口。由于 ESP32-S3 的引脚虽然较多,但部分引脚存在启动、电压域或特殊功能限制,因此在分配引脚时不能只看数量是否足够,还要考虑这些引脚是否适合作为普通 GPIO 或高速信号使用。
摄像头部分采用 OV2640。它需要多根数据线、时钟线、同步信号线和 I2C 配置线,因此对布线空间要求较高。与普通低速传感器相比,摄像头信号更容易受到走线长度、地参考和串扰的影响。我在早期设计中对这一点认识不足,只是尽量完成连通,没有充分考虑信号完整性。后续检查时我才意识到,摄像头走线应尽量短、尽量平行有序,并保证附近有较完整的地参考。如果在双层板上走线过长,虽然不一定必然失败,但会增加图像采集不稳定的风险。尽管这样,我的实际生产板camera线的长度还是比较长80mm左右。
LCD 部分采用 ST7567 系列黑白屏,使用串行通信方式。相比摄像头,LCD 的信号速率较低,对走线要求相对宽松。它的主要问题不在于通信本身,而在于屏幕型号、FPC 接口顺序和供电方式是否完全一致。在选型的时候,我选择了一款HS12864G19A,该lcd目前已经停产,寻找合适货源花费了我很多时间,最后从云汉芯城找到了现货库存。以后我选型的时候会更加谨慎,注意库存与状态。
按键是本项目中一个看似简单、实际影响很大的部分。最初我按照常见电子制作的思路,直接使用轻触开关组成按键矩阵。这样做在电路上比较容易理解,每个按键就是一个开关,通过行列扫描判断按下状态。但后来在研究市售计算器结构时,我发现真正的计算器大多采用导电硅胶按键和 PCB 碳膜触点。这种结构更薄、更紧凑,也更适合大量按键排列。
我的方案使用轻触开关,虽然可以实现功能,但会带来几个问题。第一,轻触开关本身有一定高度,会增加整机厚度;第二,每个按键都需要单独焊接,装配复杂度较高;第三,外壳上需要为每个按键预留较精确的位置,否则容易出现按键偏位;第四,科学计算器按键数量多,轻触开关占用面积会影响整体布局。这个问题并不是原理图层面的错误,而是结构工程和产品实现层面的不足。
在后续改进中,我开始考虑将按键改为整块硅胶膜方案。这样可以更接近真实计算器结构,同时也能使外壳更简洁。但是由于 PCB 已经按照轻触开关方案设计,后续修改会牵涉到焊盘、间距、外壳开孔和按键面板设计,不能简单替换。这一经历让我认识到,硬件设计前期应尽量先拆解同类产品,了解成熟产品的结构逻辑,而不是只从电路原理出发。
电源部分是整个硬件设计中最需要谨慎的部分之一。本项目需要为 ESP32-S3、摄像头、LCD 和其他外围器件供电。不同器件的工作电压不同,对电流和纹波的要求也不同。尤其是摄像头和无线通信工作时,瞬时电流可能变化较大,如果电源设计不稳定,可能导致设备复位、摄像头初始化失败或通信异常。
在设计电源时,我使用了多个电压转换和稳压模块,为不同电压域提供供电。例如主控和部分逻辑电路通常需要 3.3V,摄像头可能还涉及 2.8V、1.2V 等不同供电。每一路电源都需要合适的输入输出电容,并且电容应尽量靠近对应芯片或稳压器放置。理论上这些电容只是辅助滤波和稳定电源,但在实际焊接和调试中,如果某个电容焊接短路、型号错误或所在电源网络异常,就可能导致局部严重发热。
在 PCB 上电调试时,我遇到过某个电容区域明显发热的问题。由于当时没有限流电源,只能依靠万用表进行初步排查。最后发现c10发热过快,疑似上电反复震荡。这个过程让我认识到,硬件调试设备非常重要。限流电源可以在上电初期限制电流,避免故障扩大;而如果直接使用普通电源上电,短路点可能在几秒内迅速升温,甚至损坏元件。后续我也意识到,在电源设计中应增加更多调试和保护意识,例如预留测试点、分区上电、检查电源网络阻值,并在首次上电前仔细确认焊接状态。
PCB 布局时,我首先根据计算器的外形确定大致区域:屏幕位于上方,按键区域位于下方,主控和电源部分放在内部可布线的位置,摄像头根据结构需求安排在合适位置。这样的布局符合计算器的使用习惯,但也带来了一些走线压力。尤其是摄像头与主控之间需要连接多根信号线,如果两者距离较远,布线会变得困难。
由于我最初采用双层板设计,顶层和底层都承担了大量信号走线任务。双层板成本较低,也适合个人项目打样,但在摄像头、LCD、键盘矩阵和电源线同时存在时,地平面的完整性容易被打断。地参考不连续可能会影响高速信号稳定性,也可能增加电源噪声。因此,在后续复盘中,我认为如果条件允许,四层板会更适合这类包含摄像头和无线主控的设计。四层板可以提供更完整的电源层和地层,使信号回流路径更清晰,也有利于降低调试难度。
在走线过程中,我也遇到过自动布线效果不理想的问题。自动布线虽然可以快速完成连通,但它并不了解具体电路中哪些信号更敏感、哪些线应优先走短、哪些区域应保持地平面完整。因此,关键走线仍然需要人工规划。对于本项目来说,摄像头信号、电源路径、晶振相关线路和主控启动相关引脚都应优先手动处理,而不是完全依赖自动布线。
![_cgi-bin_mmwebwx-bin_webwxgetmsgimg__&MsgID=4072381967404251836&skey=@crypt_f3e035cb_1d8f8c200e5059c1d46a753c5b946491&mmweb_appid=wx_webfilehelper.jpg]()
在原型设计中,调试接口往往比正式产品更加重要。因为第一版 PCB 很难一次成功,必须通过下载口、串口、测试点和电源测量点来定位问题。因此,我在设计中需要考虑 USB 下载、串口输出、复位按键、启动模式选择以及主要电源网络的测试点。如果这些接口预留不足,后续一旦出现“不识别串口”“上电无反应”“某一区域发热”等问题,排查难度会明显增加。
从这次设计经历来看,我认为原型板不应过早追求极限小型化。对于个人项目,第一版 PCB 更重要的是能测、能改、能定位问题。适当增加测试点、跳线位和电源分割点,虽然会占用一些面积,但能显著降低调试难度。等功能验证稳定后,再进行第二版小型化和结构优化,会更加稳妥。
从电路板排查故障来看,我往往会低估项目的复杂度,以后再设计硬件时我会更加小心谨慎,选型布局严格按照需求标准。
软件部分是本项目区别于普通计算器的重要内容。传统计算器主要完成按键输入、表达式显示和本地计算,而本项目还需要处理拍照、联网、上传图像、调用 AI 服务和显示返回结果。因此,在设计软件时,我没有把它看成一个单一程序,而是按功能模块进行划分。
整体流程上,设备上电后先初始化 LCD、按键、摄像头和 Wi-Fi。用户可以选择普通计算模式,也可以选择拍照识题模式。在普通计算模式下,设备主要完成本地输入和显示;在拍照识题模式下,设备先调用 OV2640 拍摄题目图像,再通过 Wi-Fi 将图像上传到服务器。服务器完成 OCR 识别和 AI 分析后,把结果返回给设备,设备再将内容分页显示在 LCD 上。
代码结构上,我计划将程序分成几个模块:按键模块负责读取输入并区分普通功能和 SHIFT 功能;显示模块负责菜单、文字、分页和状态提示;摄像头模块负责初始化和拍照;网络模块负责 Wi-Fi 连接、图像上传和结果接收;AI 交互模块负责组织请求和解析服务器返回内容。这样做可以减少主循环中的混乱逻辑,也方便后续调试。
联网过程中需要特别注意稳定性。实际使用时可能出现 Wi-Fi 连接失败、服务器无响应、图像上传失败、AI 返回过慢或返回内容过长等情况。如果程序只考虑成功流程,设备很容易卡死。因此,代码中需要加入超时、错误提示和返回主菜单的机制,使设备在异常情况下仍能继续操作。
由于 LCD 屏幕只有 128×64,AI 返回内容也不能太长。服务器端最好返回较短、分段清楚的内容,例如“识别题目”“解题思路”“短、分段清楚的内容,例如“识别题目”“解题主要步骤”“最终结果”。设备端再根据屏幕大小进行分页显示。这样比直接显示一大段文字更适合计算器这种小屏设备。
我使用codex开发esp固件,使用mock模式验证,idf烧录固件。
五、
在完成电路方案后,外壳设计成为项目中另一个重要问题。。
由于项目仍处于原型阶段,我选择使用 FDM 3D 打印制作外壳。壁厚约为 3mm,以保证基本强度。可拆卸结构的好处是便于后续维修、重新焊接和更换电池,但也带来了固定方式的问题。螺丝柱、卡扣和热熔铜螺母都可以作为连接方式,其中螺丝配合铜螺母更适合需要多次拆装的原型设备。
![image.jpg]()
按键区域是外壳设计中最麻烦的部分。早期 PCB 使用轻触开关作为按键单元,因此外壳需要为每个按键预留孔位,并保证按键帽能够准确压到开关。这种结构对加工精度要求较高,也容易出现按键偏移、手感不一致和装配复杂的问题。后来我开始考虑使用整块硅胶按键面板,在硅胶表面印刷按键边界和字符,这样外观更接近真实计算器,也能减少外壳开孔数量。
![image.jpg]()
持续制作中