您当前的位置: 首页 >  ar

张巧龙

暂无认证

  • 2浏览

    0关注

    1208博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

用Arduino做一个“空心时钟”(只有表针,没有表盘)

张巧龙 发布时间:2022-06-19 14:30:52 ,浏览量:2

82b5e375e25191bc96cefa8d468b99da.png

这周我们来一起看看如何用Arduino自制一个只有表针,没有表盘的“空心时钟”。

看起来还是挺炫酷的,再放几张网友们参照教程做的图欣赏一下:

23ac0b71bec4b6e33d07ea87d3392d60.png f5957ff48b189900a63738ea3afef59c.png

▲ 视频演示

第0步:材料准备
  • 步进电机28BYJ-48和驱动板包括

  • 用于控制步进电机的微控制器(比如Arduino nano)

  • 2mm x 10mm自攻螺钉 * 8

  • 润滑脂(高粘性)

这个时钟可以用大多数常见的200 x 200mm打印机打印,除了装饰部分(index.stl,203 x 203mm)。

文章最后还有一个缩小小的版本(85%)。

文中所有的涉及的STL文件可以到文末下载。

第1步:打印零件 e143f82c003fe95d1467ec942fee0486.png
  • 打印零件

  • 有些零件需要支撑

  • 好好去毛刺,特别是几个非常小的齿轮(时钟中心的蜗轮和小齿轮)

相关STL文件可以到文末下载。

第2步:组装蜗杆传动系统 cfd97292937ce108b0618a427fe63e70.png
  • 用烙铁进行塑料焊接,对于连接gear.stlaxis.stlworm-gear.stl相互之间是很有用的。

  • 你也可以使用一些安全的胶水,如双组分环氧胶。

  • 在中央齿轮中注入一点油脂。不仅可以减少摩擦,而且可以减少齿隙。

  • 中央齿轮的齿隙对时钟的精确性影响很大。h-gear1.1x.stl比原来的h-gear.stl要大一点,以抑制齿隙。中央齿轮的齿隙对时钟的精确性影响很大。从两个候选中选择更好的小齿轮。h-gear1.1x.stl比原来的h-gear.stl大一点。

第3步:组装电机驱动器 380c0a2395ac1066d11b1755f1f3f8c1.png
  • 如果2毫米自攻螺钉的头部比步进电机的孔小,请使用垫圈或换更大的螺钉。

第4步:啮合分钟旋转器和时钟的主体 cf285a06a44152dbf0a9c7b224102eac.png
  • 为了避免齿轮脱落,我们可以翻转机身一侧(上图中的绿色部分),然后把顶部的钩子钩住。

  • 需要使用三颗自攻螺钉安装分钟盖。

第5步:安装时针 050a1f0db2a68712a22f52a1ed11c632.png
  • 注意使用自攻螺丝安装时针的时候不要拧太紧了,当你调整时钟时,它应该是会滑动的

  • 固定好其他部分

第6步:准备电路 acf17542518830ade7a0bb5b184acd3a.png 64b150e2a74121769b3ce8aac041af5c.png a37b1fa8affdda6c67e553a484e0f45b.png b6f48cc373df09d3365a5022939adbdb.png
  • 将Nano的端口4、5、6和7连接到步进电机驱动器

  • 连接VCC(+5V)和GND

如果你想把整个电路封闭起来放到盒子里,可以打印零件做个盒子(相关文件放在文末)。

然后用两个2毫米的自攻螺钉来组装起来。

第7步:程序

将代码闪到Arduino上。把代码上传到Arduino IDE 上。

如果你的电机跑错了方向,请修改代码中的数字顺序:

int port[4] = {4, 5, 6, 7};

改为

int port[4] = {7, 6, 5, 4};

这上面的数字和Arduino Nano的针脚有关(D4-D7)。

完整代码如下:

// 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 * 110 / 8 = 56320
#define STEPS_PER_ROTATION 56320 // 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] = {4, 5, 6, 7};

// 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             
关注
打赏
1665727216
查看更多评论
0.0696s