回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【Arduino 动手做】制作一个简单的 3D 空心时钟(Arduino Nano 和 5V 步进电机) 简单

头像 驴友花雕 2025.05.27 6 0

Arduino是一个开放源码的电子原型平台,它可以让你用简单的硬件和软件来创建各种互动的项目。Arduino的核心是一个微控制器板,它可以通过一系列的引脚来连接各种传感器、执行器、显示器等外部设备。Arduino的编程是基于C/C++语言的,你可以使用Arduino IDE(集成开发环境)来编写、编译和上传代码到Arduino板上。Arduino还有一个丰富的库和社区,你可以利用它们来扩展Arduino的功能和学习Arduino的知识。

Arduino的特点是:
1、开放源码:Arduino的硬件和软件都是开放源码的,你可以自由地修改、复制和分享它们。
2、易用:Arduino的硬件和软件都是为初学者和非专业人士设计的,你可以轻松地上手和使用它们。
3、便宜:Arduino的硬件和软件都是非常经济的,你可以用很低的成本来实现你的想法。
4、多样:Arduino有多种型号和版本,你可以根据你的需要和喜好来选择合适的Arduino板。
5、创新:Arduino可以让你用电子的方式来表达你的创意和想象,你可以用Arduino来制作各种有趣和有用的项目,如机器人、智能家居、艺术装置等。

 

zzz.jpg
zzz-0.jpg

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

00.jpg
00-.jpg
00-1.jpg

步骤1:打印和组装零件

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

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

 

00-3.jpg
01-.png
01-1.png
01-2.png
01-3.png
01-4.png
01-5.png
01-6.png
01-7.png
01-8.png
01-9.png
01-10.png
01-11.png
01-13.png
01-14.png
01-15.png

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

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

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

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

 

02-2.png
02-3.png
02-4.png
02-5.png

02.png
02-1.png

步骤3:源代码

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

 

代码
// Please tune the following value if the clock gains or loses.
// Theoretically, standard of this value is 60000.
#define MILLIS_PER_MIN 60000 // milliseconds per a minute

// Motor and clock parameters
// 4096 * 90 / 12 = 30720
#define STEPS_PER_ROTATION 30720 // steps for a full turn of minute rotor

// wait for a single step of stepper
int delaytime = 2;

// ports used to control the stepper motor
// if your motor rotate to the opposite direction, 
// change the order as {4, 5, 6, 7};
int port[4] = {7, 6, 5, 4};

// sequence of stepper motor control
int seq[8][4] = {
  {  LOW, HIGH, HIGH,  LOW},
  {  LOW,  LOW, HIGH,  LOW},
  {  LOW,  LOW, HIGH, HIGH},
  {  LOW,  LOW,  LOW, HIGH},
  { HIGH,  LOW,  LOW, HIGH},
  { HIGH,  LOW,  LOW,  LOW},
  { HIGH, HIGH,  LOW,  LOW},
  {  LOW, HIGH,  LOW,  LOW}
};

void rotate(int step) {
  static int phase = 0;
  int i, j;
  int delta = (step > 0) ? 1 : 7;
  int dt = 20;

  step = (step > 0) ? step : -step;
  for(j = 0; j < step; j++) {
    phase = (phase + delta) % 8;
    for(i = 0; i < 4; i++) {
      digitalWrite(port[i], seq[phase][i]);
    }
    delay(dt);
    if(dt > delaytime) dt--;
  }
  // power cut
  for(i = 0; i < 4; i++) {
    digitalWrite(port[i], LOW);
  }
}

void setup() {
  pinMode(port[0], OUTPUT);
  pinMode(port[1], OUTPUT);
  pinMode(port[2], OUTPUT);
  pinMode(port[3], OUTPUT);
  rotate(-20); // for approach run
  rotate(20); // approach run without heavy load
  rotate(STEPS_PER_ROTATION / 60);
}

void loop() {
  static long prev_min = 0, prev_pos = 0;
  long min;
  static long pos;
  
  min = millis() / MILLIS_PER_MIN;
  if(prev_min == min) {
    return;
  }
  prev_min = min;
  pos = (STEPS_PER_ROTATION * min) / 60;
  rotate(-20); // for approach run
  rotate(20); // approach run without heavy load
  if(pos - prev_pos > 0) {
    rotate(pos - prev_pos);
  }
  prev_pos = pos;
}

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

 

03.png
03-1.png
03-2.png
03-4.png
03-5.png
03-6.jpg

 

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

附录
项目链接:https://www.pcbway.com/project/shareproject/3D_Hollow_Clock_Controller_Board_Arduino_Nano_Stepper_Motor_and_ULN2003_Driver_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.amazonaws.com/web/24/04/08/0037494941168.ino
3D文件:https://www.thingiverse.com/thing:5636482

 

06.jpg
00134.gif

评论

user-avatar
icon 他的勋章
    展开更多