基于ESP32的厨房计时器

news2024/11/26 3:44:34

基于ESP32的厨房计时器

  • 一、项目说明
  • 二、项目材料
  • 三、OLED显示屏
  • 四、外壳设计
  • 五、外壳打印
  • 六、电路和外壳的集成
  • 七、编程
  • 八、成品展示

一、项目说明

厨房计时器很有用,但现在没有多少人使用实体厨房计时器了。我个人还是喜欢使用它们,因为拥有一个可以按下的实体物品增加了体验感。不过,我遇到的一个问题是,有时我会因为各种原因去另一个房间,我会忘记我的计时器,而且我会离得太远而听不到它响。

我想创造一个解决方案,所以我制作了一个计时器,当时间到了就会给我发短信。当然,我也可以直接在手机上设置一个闹钟,但那样有什么乐趣呢?

实物图:
在这里插入图片描述

二、项目材料

材料:

  • ESP32开发模块
  • OLED屏幕板
  • 双AA电池包(4节电池)
  • 开关
  • 两个按钮
  • 亚克力1/8英寸厚
  • 加热垫片
  • 螺丝

工具:

  • 焊铁(或者可以使用面包板)
  • 3D打印机(可选)
  • 激光切割机(可选)

软件:

  • Arduino IDE
  • Fusion 360

电子设备的外壳是用3D打印塑料和激光切割亚克力制成的,然而整个外壳完全可以通过使用一些纸板来创造性地制作。
在这里插入图片描述

三、OLED显示屏

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我首先打开Fusion 360来CAD设计每个组件的简单近似模型,这些组件将用于外部外壳。

我根据尺寸创建了草图,并将其拉伸到正确的厚度,以获得我将使用的部件的大致近似模型,我确保孔的位置特别准确,尤其是在OLED屏幕上,以便我以后可以参考。

四、外壳设计

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在调整了我的外壳尺寸以适应零件之后,我开始为零件将要安装的位置添加孔。我为OLED屏幕添加了安装孔,以及让引脚穿过盒子的孔。然后我为按钮的安装位置添加了孔。我知道我希望前面板和顶板是亚克力的,因为我想要电子部件是透明的,并且前面板有一个盖子,这样在处理外壳时,食物/液体就不会通过孔隙进入,尤其是在手脏的时候。我制作了前面板和顶板的模型,然后为将要添加的加热垫片的位置添加了孔,我稍后会通过这些孔来拧螺丝组装外壳。为了使面板透明,我在Fusion 360的材料标签中将它们设置为透明塑料。

最后,我为开关添加了一个孔。为了将面板导出为DXF文件,这是我激光切割所需的,我将它们的几何投影到另一个草图上,并将它们导出为DXF文件,如最后一张图片所示。我还把外壳导出为STEP文件,以便进行3D打印。

五、外壳打印

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我将文件导入切片软件,准备进行3D打印,然后进行了3D打印,并且我还用激光切割机切割了外壳的面板。这个过程通常因3D打印机/激光切割机的不同而有所差异,但3D打印的一般过程是使用如Prusa Slicer、Bambu Slicer或Cura这样的切片软件来切片模型,然后使用SD卡或WIFI将其发送到你的3D打印机。对于激光切割,通常是将DXF文件放入Corel Draw或Adobe Illustrator这样的软件中,将线宽设置为极细或0.001,并将其打印到激光切割机进行矢量切割。

我通过使用焊铁加热将加热垫片添加到外壳中。它们比直接在3D打印部件的塑料中拧螺丝更好,并且是为3D打印塑料部件添加螺纹的好方法。通常,我将焊铁的热量设置为比塑料的熔点高100华氏度,并使用钳子握住垫片。

六、电路和外壳的集成

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在电子方面,我将所有东西直接连接到ESP32上,而不是使用面包板,这样可以更容易地将所有东西放入外壳中。我将按钮的地针焊接在一起,然后将它们连接到ESP32。我还焊接了一些跳线到电源开关上。我使用跳线将OLED屏幕连接到ESP32板的引脚上。

我发现将跳线焊接到相关物品上最容易,将其安装到外壳上,然后将ESP32最后放入外壳并连接到跳线上。用热胶将按钮粘在外壳上,用热胶将开关固定住,并使用螺丝来固定OLED屏幕。我还没有将面板用螺丝固定,因为我需要访问主板来编程。

七、编程

在这里插入图片描述
我首先做的是弄清楚并测试按钮。我将它们分配到13号和14号引脚,并设置为输入上拉(INPUT_PULLUP)。通常,当你按下一个按钮时,它有两个状态,高电平(HIGH)和低电平(LOW)。当你按下它时,它会告诉微控制器它是高电平很多次,因为它在循环中频繁地运行。这会导致问题,因为如果你想让微控制器给你发短信,它会发送很多次短信,次数等于它循环的次数。我通过只在按钮状态从低电平变为高电平时才发送消息,来确保它只告诉微控制器它被按下了一次。

接着我摆弄了OLED屏幕的代码,以弄清楚如何让它工作。它需要在设置(setup)中初始化,然后使用display.setCursor()来告诉它在哪里打印,使用display.println()来让它打印,使用display.display()来让它实际显示在屏幕上。

八、成品展示

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
我安装了亚克力面板,之后我就完成了!左边的按钮重置计时器,而右边的按钮将计时器增加一分钟。计时器完成后,我会在几秒钟后收到一条短信。

希望你喜欢这个项目,并在构建过程中找到乐趣!如果你有任何问题或需要帮助,欢迎在评论区交流。

作者:Svan.


注意:本博文为不得在未经本人同意进行转载或者二次创作,违者必究!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2210597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CGAL 带约束的Delaunay三角剖分

CGAL 带约束的Delaunay三角剖分 本文使用CGAL进行简单的2D Delaunay 三角剖分,添加内外边界及点作为约束剖分。 Code #include <CGAL/Exact_predicates_inexact_constructions_kernel.h> #include <CGAL/Constrained_Delaunay_triangulation_2.h> #include <…

问题杂录-NVIDIA Bluefield DPU bfb-build编译报错记录与处理办法?(无数坑)

文章目录 背景bfb-build之后直接退出docker.io无法访问报错 ERROR: failed to solve: processkubernotes 下载失败报错mlnx-fw-updater-signed-24.07-0.6.1.1.aarch64: Cannot download报错 No match for argument: bf-release报错 放弃编译anolis&#xff0c;直接编译老版ubun…

RabbitMQ 入门(二)基本结构和消息模型

一、RabbitMQ的基本结构、角色和消息模型 MQ的基本结构&#xff1a; RabbitMQ中的一些角色&#xff1a; - publisher&#xff1a;生产者 - consumer&#xff1a;消费者 - exchange个&#xff1a;交换机&#xff0c;负责消息路由 - queue&#xff1a;队列&#xff0c;存储消息…

初步认识torch自定义算子

此篇为PyTorch 自定义算子&#xff1a;复现CPU和CUDA版的二维卷积的代码详解 这篇是为了展示setup在构建简单的cpp算子的使用 1.环境配置 整体结构如下图所示 pytorch_cpp_helper.hpp中准备了CPU版卷积需要的头文件 pytorch_cuda_helper.hpp和common_cuda_helper.hpp是cuda…

板级支持包构建1

开发板&#xff1a;STM32h743xi 编程软件&#xff1a;Keil 项目&#xff1a;GPIO外设操作&#xff08;彩色LED灯&#xff09; 学习打卡&#xff1a;Day2 学习地址&#xff1a;【野火】STM32 HAL库开发实战指南 教学视频 手把手教学STM32全系列 零基础入门CubeMXHAL库&#xff0…

jQuery——自定义jQuery插件

1、扩展jQuery&#xff08;将$看成对象&#xff09;的工具方法 $.extend&#xff08;object&#xff09; min&#xff08;a&#xff0c;b&#xff09; 返回较小的值 max&#xff08;c&#xff0c;d&#xff09; 返回较大的值 leftTrim&#xff08;&#xff09; 去掉字符串…

9.4 栅格图层符号化山体阴影渲染

9.4 栅格图层符号化山体阴影渲染-CSDN博客 目录 前言 山体阴影渲染 QGis设置为山体阴影 二次开发代码实现山体阴影 总结 前言 介绍栅格图层数据渲染之山体阴影渲染说明&#xff1a;文章中的示例代码均来自开源项目qgis_cpp_api_apps 山体阴影渲染 以“3420C_2010_327_…

leetcode二叉树(一)-理论基础

本节主要参考代码随想录&#xff1a;代码随想录 题目分类 二叉树的种类 满二叉树 满二叉树&#xff1a;如果一棵二叉树只有度为0的结点和度为2的结点&#xff0c;并且度为0的结点在同一层上&#xff0c;则这棵二叉树为满二叉树。 这棵二叉树为满二叉树&#xff0c;也可以说深…

产品设计——应用架构

我的理解应用架构是业务架构的落地&#xff0c;微服务架构下平台的应用架构设计&#xff0c;实质是根据业务来明确应用微服务的边界。因此业务不同&#xff0c;应用架构图也不同。但是基本框架应该相差不大。 其划分原则莫过于高内聚、低耦合。这个跟接口设计是一致的。我们总是…

MySQL数据库安装手册

MySQL数据库安装手册 MySQL数据库的下载与安装 在上一小节我们已经简单了解了数据库与一些相关概念 没看上一节的同学戳这里 接下来我们首先需要学会如何下载和安装数据库 1 MySQL数据库的版本 目前MySQL官网为我们提供了两个版本&#xff0c;一个是社区版本&#xff0c;…

<<迷雾>> 第11章 全自动加法计算机(4)--带地址译码器的内存模型 示例电路

地址译码器 info::操作说明 书中没有给出具体的实现电路. 这里根据电路特性采用自定义逻辑实现. 关于 “自定义逻辑”, 可参考此链接的说明: https://book.xiaogd.net/usage-of-circuitjs/circuitjs-custom-logic.html 这里本质上就是利用两个 2-4 译码器分别控制读和写. 注: 在…

Linux进程控制(3)(进程程序替换2 -- 微型shell)

目录 补充 一.引入 二.自助微型shell 1&#xff1a;输出一个命令行 2&#xff1a;获取用户命令字符串 3&#xff1a;命令行字符串的分割 4&#xff1a;先试着执行一下命令 5&#xff1a;关键点&#xff1a;需要在执行命令前检查是否为内建命令 其他&#xff1a; 三&…

JSONAJAX

JSON&&AJAX 一、JSON 1.1 json简介 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。JSON采用完全独立于语言的文本格式&#xff0c;而且很多语言都提供了对 json 的支持&#xff08;包括 C, C, C#, J…

常用的devops工具集成方法

常用的devops工具集成方法涵盖了软件开发和运维的各个方面&#xff0c;从版本控制到自动化构建、测试、部署和监控。这些工具的有效集成可以帮助团队提高协作效率&#xff0c;减少沟通障碍&#xff0c;实现快速、高质量的软件交付。以下是对这些工具集成方法的具体介绍&#xf…

双核DSP芯片的内存管理

总体框图 总的来说&#xff0c;在这款DSP芯片上&#xff0c;RAM分成了四种不同的类型&#xff1a; 专用RAM: CPU专用的内存&#xff0c;其他主机无法访问。 双核共享RAM: CLA和CPU共享内存&#xff0c;双方都可以对内存地址进行访问 MSGRAM&#xff1a; CLA和CPU之间传递数据的…

【自动驾驶汽车通讯协议】I2C(IIC)总线通讯技术详解

文章目录 0. 前言1. I2C简介2.I2C的工作原理2.1 硬件要求&#xff1a;2.2 半双工通信&#xff1a; 3. 通信时序4. 其他特性4.1 通信速率4.2 抗干扰措施4.3 注意事项 5. 在自动驾驶汽车中的应用5.1 I2C操作模式5.2 I2C的用途 6. 总结 0. 前言 按照国际惯例&#xff0c;首先声明&…

Spring Boot知识管理系统:创新与实践

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…

【含开题报告+文档+PPT+源码】基于人脸识别的课堂考勤系统的设计与实现

开题报告 随着科技的不断发展&#xff0c;人脸识别技术已经逐渐渗透到各个领域&#xff0c;包括教育领域。传统的课堂考勤方式通常依赖于学生签到或教师手动记录&#xff0c;这种方式存在着许多不足之处&#xff0c;例如容易出现人为错误、耗费时间和资源等。为了解决这些问题…

机器学习:强化学习中的探索策略全解析

引言 在机器学习的广阔领域中&#xff0c;强化学习&#xff08;Reinforcement Learning, RL&#xff09;无疑是一个充满魅力的子领域。它通过智能体与环境的交互&#xff0c;学习如何在特定的任务中做出最优决策。然而&#xff0c;在这个过程中&#xff0c;探索&#xff08;ex…

linux 配置ssh免密登录

一、 cd /root/.ssh/ #不存在就创建mkdir /root/.ssh ssh-keygen #连续按4个回车 ll二、将公钥发送到目标服务器下 #公钥上传到目标服务器 ssh-copy-id root192.168.31.142 #回车完也是要输入密码的 #测试一下免密登录&#xff1a; ssh root192.168.31.142 成功