283浏览
查看: 283|回复: 7

[项目] 【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)

[复制链接]
本帖最后由 驴友花雕 于 2025-6-7 06:35 编辑



【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图1

驴友花雕  中级技神
 楼主|

发表于 2025-5-27 17:23:53

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)

大家好,在这个项目中,我将向大家展示如何制作这款外观精美的3D打印镂空时钟。几天前我在 Thingiverse上看到了这个项目 ,觉得非常有趣,所以我制作了一个视频,展示了我如何使用3D打印机打印和组装所有部件。


【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图2

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图1

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图3

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-27 17:55:07

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)

步骤1:打印和组装零件

按照提供的姿势打印所有零件。无需支撑。“washer1.stl”和“washer2.stl”是可选零件,用于调整齿轮的间隙。

在此设计中,时针和分针的角度由磁力控制,而非机械控制。设置时间非常容易。用一定长度的螺丝固定时针和分针。插入磁铁并测试它们如何与重力对齐。组装前,请确保所有轴都能正常旋转。

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图1

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图3

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图2

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图4

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图5

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图6

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图7

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图8

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图9

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图10

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图11

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图12

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图14

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图13

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图15

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图17

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图16

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-27 17:57:42

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)

步骤2:电路元件和印刷电路板

我们需要一个 Arduino Nano、一个步进电机、一个驱动器和一些电线。但在这种情况下,电路可能有点复杂,我想让它看起来更专业、更简洁。所以 我设计了一块定制的印刷电路板,创建了一个 Gerber 文件,并从 PCBWay订购了它。

所需组件:
三个 8mm x 3mm 钕磁铁
28BYJ-48步进电机及驱动板(ULN2003)
Arduino Nano 板
BOM 清单和 Gerber 文件可在 PCBWay 项目页面上找到。

为了有效利用空间,请拆下步进电机头并按照所示的颜色顺序将电线焊接到电路板上。

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图1

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图2

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图3

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图4

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图5

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图6

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-27 18:03:07

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)

步骤3:源代码

打开共享源代码,选择Arduino Nano开发板上传代码。如果电机转动方向相反,请修改代码中的电机连接顺序。

  1. // Please tune the following value if the clock gains or loses.
  2. // Theoretically, standard of this value is 60000.
  3. #define MILLIS_PER_MIN 60000 // milliseconds per a minute
  4. // Motor and clock parameters
  5. // 4096 * 90 / 12 = 30720
  6. #define STEPS_PER_ROTATION 30720 // steps for a full turn of minute rotor
  7. // wait for a single step of stepper
  8. int delaytime = 2;
  9. // ports used to control the stepper motor
  10. // if your motor rotate to the opposite direction,
  11. // change the order as {4, 5, 6, 7};
  12. int port[4] = {7, 6, 5, 4};
  13. // sequence of stepper motor control
  14. int seq[8][4] = {
  15.   {  LOW, HIGH, HIGH,  LOW},
  16.   {  LOW,  LOW, HIGH,  LOW},
  17.   {  LOW,  LOW, HIGH, HIGH},
  18.   {  LOW,  LOW,  LOW, HIGH},
  19.   { HIGH,  LOW,  LOW, HIGH},
  20.   { HIGH,  LOW,  LOW,  LOW},
  21.   { HIGH, HIGH,  LOW,  LOW},
  22.   {  LOW, HIGH,  LOW,  LOW}
  23. };
  24. void rotate(int step) {
  25.   static int phase = 0;
  26.   int i, j;
  27.   int delta = (step > 0) ? 1 : 7;
  28.   int dt = 20;
  29.   step = (step > 0) ? step : -step;
  30.   for(j = 0; j < step; j++) {
  31.     phase = (phase + delta) % 8;
  32.     for(i = 0; i < 4; i++) {
  33.       digitalWrite(port[i], seq[phase][i]);
  34.     }
  35.     delay(dt);
  36.     if(dt > delaytime) dt--;
  37.   }
  38.   // power cut
  39.   for(i = 0; i < 4; i++) {
  40.     digitalWrite(port[i], LOW);
  41.   }
  42. }
  43. void setup() {
  44.   pinMode(port[0], OUTPUT);
  45.   pinMode(port[1], OUTPUT);
  46.   pinMode(port[2], OUTPUT);
  47.   pinMode(port[3], OUTPUT);
  48.   rotate(-20); // for approach run
  49.   rotate(20); // approach run without heavy load
  50.   rotate(STEPS_PER_ROTATION / 60);
  51. }
  52. void loop() {
  53.   static long prev_min = 0, prev_pos = 0;
  54.   long min;
  55.   static long pos;
  56.   
  57.   min = millis() / MILLIS_PER_MIN;
  58.   if(prev_min == min) {
  59.     return;
  60.   }
  61.   prev_min = min;
  62.   pos = (STEPS_PER_ROTATION * min) / 60;
  63.   rotate(-20); // for approach run
  64.   rotate(20); // approach run without heavy load
  65.   if(pos - prev_pos > 0) {
  66.     rotate(pos - prev_pos);
  67.   }
  68.   prev_pos = pos;
  69. }
复制代码




回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-27 18:04:27

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)

板上的跳线接头用于通过 Type-C USB 端口为 Arduino Nano 和电机提供 5 伏电源。

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图1

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图2

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图3

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图4

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图5

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图6


又一个项目结束了,首先感谢PCBWay的支持。如果您喜欢这个项目,可以关注并点赞。感谢您的阅读。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-5-27 18:11:20

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)

本帖最后由 驴友花雕 于 2025-6-7 06:35 编辑

附录
项目链接:https://www.pcbway.com/project/s ... river_9507c8ea.html
项目作者:土耳其 梅尔特·基利奇 MertArduino
项目视频(2分钟):https://www.youtube.com/watch?v=0vr2Qu_AF7U
https://www.youtube.com/watch?v=hRpLiRoMx34&t=2s
项目代码:https://pcbwayfile.s3.us-west-2. ... 8/0037494941168.ino
3D文件:https://www.thingiverse.com/thing:5636482

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图1

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图2

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-6-7 06:36:37

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图2

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图3

【Arduino 动手做】制作一个简单的 3D 空心时钟(V4版本)图1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail