当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]作为一名学生,我常常难以合理分配时间来专注于某些作业。虽然我曾使用过在线计时器,但随着时间推移,几乎所有的计时器都变得令人分心,因为我不喜欢它们要显示在与我工作相同的屏幕上。

作为一名学生,我常常难以合理分配时间来专注于某些作业。虽然我曾使用过在线计时器,但随着时间推移,几乎所有的计时器都变得令人分心,因为我不喜欢它们要显示在与我工作相同的屏幕上。

本项目旨在通过将计时器转换为一个便携的实体装置来解决这一问题。计时器被封装在一个定制的3D打印外壳中,尺寸为长3.3英寸、宽2.4英寸、高2.7英寸。为了实现明亮的显示效果,使用了一块0.96英寸的OLED屏幕来展示倒计时,并由Arduino Nano提供电源。此外,还配备了旋转编码器,使用户能够轻松设置工作或学习的时间长度。

通过这个设备,我和学生们都能提高学习效率和时间管理能力。

工作原理:

将项目插入5V USB电源后,会显示一个简短的标题界面,随后开始倒计时,时间为25分钟。

通过多次按下编码器旋钮,即可访问该项目的主要功能。

1 按键:暂停计时器

2个按钮:允许用户通过顺时针或逆时针旋转编码器来调整“分钟”数值

3个按钮:允许用户通过顺时针或逆时针旋转编码器来调整“第二”数值

4 次按键:提示用户是否要返回倒计时

5 次按压:恢复计时器

倒计时结束后,将显示“学习时间结束!”并自动暂停计时器。

名称原因:

该项目的名称灵感来源于番茄工作法,这是一种时间管理策略,包括25分钟的工作时段,之间间隔5分钟的休息。

第一步:编写定时器代码

1.1:时间设置机制

我首先开始项目,编写了在OLED屏幕上显示对象所需的程序。由于屏幕分辨率的原因,我决定使用OLED屏幕而不是LCD。

然后我编写了代码,用于响应用户转动并按下编码器旋钮。

由于我将编码器旋钮用作按钮,因此决定开发一个消除按钮弹跳的系统。通过使用 millis() 函数,将按钮按下响应分为 50 毫秒的间隔进行处理。有关 millis() 的更多详细信息将在项目后续部分列出。

此后,我重新设计了程序结构,将编码器逻辑拆分为多个中断。其中两个中断——minuteTurnSensing() 和 secondTurnSensing()——通过一系列简单的 if 语句来实现操作。

第一句话比较了变量 "currentStateClick" 和 "lastStateClick" 的状态。由于 "currentStateClick" 总是在 "lastStateClick" 之前从 "CLK" 中获取新值进行更新,因此按钮始终处于响应状态。

第二条语句将“DT”的值与“currentStateClick”进行比较。这行代码使程序能够记录编码器旋钮的旋转方向。

1.2:设置定时器

我设计的倒计时屏幕布局类似于标准的数字秒表。在编程过程中,我发现0.96英寸的OLED屏幕每行只能显示10个字符。因此,项目中的所有文字都非常简洁。

1.3 计时倒计时机制

此时,我开始研究创建倒计时功能的方法。由于程序的多个部分需要以不同速率进行轮询,我决定使用 millis() 来设定一个“节拍”,使函数能够持续按此节奏运行。

millis() 是 Arduino 中的一个函数,用于计算程序初始化以来经过的毫秒数。

由于倒计时机制必须每秒运行一次,因此递减计时器的函数需要每隔1000毫秒进行一次调用。它通过将 millis() 与一个名为“previousCountdownMillis”的自定义变量进行比较来实现这一功能。

程序开始时,"previousCountdownMillis" 初始值为 0。重要的是,在 "millis()" 与 "previousCountdownMillis" 的差值达到 1000 毫秒之前,该值不会被更新以匹配 millis() 的时间。

通过这种方法,定时器递减的代码可以精确地每秒运行一次,而无需延迟整个while循环。更进一步,该系统可应用于并定制到代码中任何需要以特定间隔运行的部分,例如检测按钮按下事件。

第二步:构建3D模型

2.1:测量与建模

为了使项目便于携带,我努力将它的外壳设计得非常紧凑。

最初计划的尺寸与普通电脑鼠标相当,但在移除小型面包板后进一步缩小。在当前的设计中,该项目仅使用了1块迷你面包板。

该设计还包括多个结构,用于固定微电子元件。

在3D模型的前面,我加了一个凹槽,用于固定OLED屏幕。计时器的“顶部”厚度仅为0.18英寸,以便将编码器螺栓固定到上面。

打印时,将模型的OLED屏幕一侧朝上,模型背面放置在打印床上。

打印材料可以是任何颜色或线材,我使用了黑色PLA。

第三步:组装计时器

组装前:

•收集Arduino Nano、OLED屏幕、编码器和一块小型面包板。

•收集9根4英寸的公母跳线。

•将编码器旋钮从编码器上取下。

1:将编码器对准面包板。确保编码器左侧有2个触点未连接,右侧有3个触点未连接。

2:将一根跳线连接到编码器的GND引脚上,将跳线的公头端插入微控制器GND引脚正对面的接触点。对连接5V和+号引脚的跳线重复此操作。

3:将跳线从SW引脚连接到D4引脚旁的孔。然后,将导线从DT引脚连接到D3引脚。接着,将导线从CLK引脚连接到D2引脚。

4:将跳线连接到OLED的GND引脚,然后将其连接到编码器GND引脚正对面的接触点。重复此操作,用第二根跳线将OLED的VCC引脚连接到编码器5V引脚正对面的接触点。

5:将跳线连接在OLED的SCL引脚与微控制器A5引脚旁的接点之间。同样,将跳线连接在OLED的SDA引脚与A4引脚旁的接点之间。

6:准备3D打印件,清除外壳和盖子的边缘毛刺。支架可能会出现在OLED凹槽孔内以及编码器旋钮盖内部,这些部分必须移除。

7:将编码器插入模型天花板上的孔中。使编码器的导线朝向机箱的左侧墙壁,然后使用M7六角螺母将其拧紧固定。

8:将OLED屏幕放入凹槽中。

9:将微控制器滑入机箱,确保USB接口朝向机箱侧面的孔洞。然后将USB线插入接口,并将盖子滑入机箱侧边的凹槽中。

10:将编码器旋钮安装到轴上,然后将盖子盖在旋钮顶部。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

我们生活在一个信息过载的世界。我想将计算机视觉与日常生活结合起来,解决一个简单的问题:为了查看早间新闻,不得不在手机上不停地滚动浏览。

关键字: 计算机视觉 Arduino LCD屏

市面上的每款智能音箱看起来都像是出自同一场设计会议:圆柱形机身、网状格栅、发光环。我想打造一个东西,你一眼望去以为是装饰品,直到你注意到那支手工绘制的黄铜号角里传来微弱的音乐嗡鸣声。

关键字: 智能音箱 扬声器 Arduino

这是一个基于M5Stack StickS3的六边柱体闹钟项目。StickS3通过两颗螺丝安装在普通六边柱体的一个面上。

关键字: StickS3 计时器 闹钟

在传统模式下,人类使用手工库存管理系统,这种方式耗时且容易出错。随着技术的发展,我们开发了一款条码扫描器,能够快速扫描产品并管理库存系统。本项目展示了如何构建一款基于树莓派的条码扫描终端,通过即时扫描和记录产品信息,实现...

关键字: 树莓派 条码扫描器 Arduino

无论您是在打印购物小票、餐厅账单、停车券、运单还是排队凭证,很可能您都曾使用过热敏打印机。与传统的喷墨或激光打印机不同,热敏打印机通过选择性加热特殊的热敏纸张来生成文字,因此无需使用墨盒或碳粉。

关键字: 热敏打印机 Arduino QR204

在这个项目中,你将学习如何使用Arduino构建一个智能报警系统。当有人靠近传感器时,系统会触发警报,并向用户发送电子邮件通知。

关键字: 传感器 Wi-Fi Arduino

这个项目从广受欢迎的战术射击游戏《反恐精英2》中提取了一个核心的游戏玩法元素,并将其转化为一个真实的互动玩具。该设备采用Arduino Uno/Nano、4x4矩阵键盘、I2C LCD显示屏和蜂鸣器,模拟了游戏中经典的倒...

关键字: Arduino LCD显示屏 蜂鸣器

如果你小时候玩过《过山车大亨》,你一定知道那种感觉:你建造一座过山车,向游客开放,然后屏住呼吸,等待游戏计算出刺激度、紧张度和恶心值。太刺激?没人坐。太无聊?也没人坐。准确地获得全部三个数值,才是整个游戏的全部重点。

关键字: 可穿戴设备 Arduino IMU

参加一次IT会议时,我注意到一些同事佩戴着商用的中国制造蓝牙LED徽章。我觉得这是一个绝妙的想法——比传统的纸质徽章更加实用且富有动感。我立刻就想为自己也买一个。

关键字: 电源管理 OLED显示屏 Wi-Fi TP4056

这是一个DIY手持式Arduino游戏机,由Arduino UNO R4 WiFi驱动。它在一块0.96英寸的SSD1306 OLED显示屏(128×64像素)上运行10款复古风格的街机游戏,通过四个触控按钮进行控制。配...

关键字: Arduino Wi-Fi 升压转换器
关闭