基于Arduino的电阻切割机

描述

大多数先进的电子 PCB 装配线都有拾取和放置机器,可以从 SMD 卷轴上拾取元件并将其放置在 PCB 上。但是,当您进行中等规模生产或在 PCB 上使用 THT(通孔型)组件时,这是不可能的。这种情况适用于大多数低成本电路板组件,如 LED 驱动器、无变压器电源等。为了帮助加快组装过程并准备所需数量的组件,我们构建了这款基于 Arduino 的电阻切割机。

这台机器可以处理任何分接元件卷轴,如电阻卷轴、二极管卷轴或任何类似的部件。它可以从一个卷轴中抽取特定数量的组件并将其切割成所需的数量。通过这种方式,我们可以轻松地将整个卷轴切割成所需数量的小块。

基本机制和功能

当我开始这个项目时,互联网上有一个项目叫Pablo 的电阻切割机器人。该项目非常令人印象深刻,但我想对其进行修改以使其更可靠,更易于每个人构建,因此我添加了以下提示:

该机器应该易于构建,这意味着任何拥有 3D 打印机的人都应该能够构建它,而无需使用许多其他电动工具。

通过添加 MOC7811 opt 隔离传感器来提高机器的准确性和可靠性,该传感器将作为我们的 Arduino 的反馈。这将有助于了解每次推送多少组件

用市场上容易买到的铝挤压代替木制底座,也使设计更坚固,更容易工作。

将切割机构从使用步进电机更改为伺服电机,使设计更简单,更容易构建。

通过提供可编辑的 CAD 文件、原理图和 Arduino 代码,让每个人都能以开源的形式使用完整的设计。

制作电阻器卷筒切割机所需的材料

如前所述,此构建的想法是使所需的材料和工具尽可能简单和容易。您只需要以下组件来构建您的电阻切割机。

机械部件

铝挤压型材 20x40 6T 槽

光轴杆直径 8mm

螺纹杆 8mm 直径

Nema17 8mm软轴电机联轴器

法兰球轴承 8mm 孔 – 2 个

枕座安装 8 毫米孔 – 2 件

用于 2020 年铝型材的铸角支架 – 4 件

用于 2020 铝型材的滑动 T 型螺母 – 20 件

用于 T 形螺母的 M4 6mm 内六角螺丝 – 20 件

皮带轮正时皮带

电子元器件

Nema17步进电机

MG90S 金属齿轮伺服马达

Arduino纳米

16x2液晶屏

A4988步进电机驱动模块

MOC7811光耦传感器

12V 2A 直流适配器

按按钮

50V 100uf电解电容

连接线和穿孔板

Arduino电阻切割机的机械结构

机器的完整机械结构分为小部分,并在下面进行说明。

驱动机制:

我们使用 NEMA17 步进电机作为我们机器的主驱动电机。如果您不熟悉使用 NEMA17 步进电机,您可以查看这篇文章,了解如何将 NEMA17 与 A4988步进电机驱动模块一起使用,其中介绍了基础知识。NEMA17 电机使用如下图所示的耦合器连接到 8mm 软轴,这样当电机旋转时,软轴也随之旋转。

切割机

使用步进电机的原因是我们可以在整个机器运行过程中统一控制步数,并且可以有统一的进给。正如您在上图中所见,我们已经 3D 打印了一个电机支架,以将 NEMA17 电机固定在铝挤压杆上。

进料机制:

机器的下一个阶段是送料机构,它使用软轴、螺杆、一对枕块和送料辊来实现,如下图所示。

切割机

进料辊:进料辊是一个 3D 打印部件,上面粘有同步带。同步带中的橡胶提供足够的摩擦力和压力,以均匀地推动卷轴带。

软轴:软轴与步进电机耦合,送料辊拧紧在软轴上。这样,进料辊可以按需要的距离分开,并且辊与步进电机一起旋转。

枕块:我们在软轴的两侧使用了两个枕块,以确保软轴与铝挤压件平行。此外,这两个块帮助我们设置软轴和螺杆之间的距离,从而控制电阻卷筒上滚轮施加的压力。

螺纹杆和法兰轴承:一根 8 毫米螺纹杆,带有安装在软轴下方的法兰轴承。带法兰的轴承有助于将电阻滚刀固定在适当的位置,并且还可以在滚轮移动时自由旋转,从而将滚刀送入切割部分。法兰轴承在上图中并未完全可见,但您可以查看本页底部链接的视频以获得更好的理解。

卷轴导轨:卷轴导轨又是一对安装在铝挤压件上的 3D 打印部件。正如您在图像中看到的,电阻器卷筒通过此卷筒导轨送入辊筒,以确保卷筒始终垂直于送料辊筒进入。

计数和反馈机制:

尽管有很好的进料机制(尽我所能),但电阻器卷轴时不时会滑动,因此进料不会保持均匀。因此,必须引入一个传感器来计算在机器被切割之前有多少电阻器被送入机器。此外,通过这种方式,我们可以从机器获得反馈,我们可以确保一切运行顺利。

切割机

上图显示了我们如何安装 MOC7811 光耦合器传感器来计算被推出馈电机构的电阻器或二极管。请注意,传感器的发射器和接收器之间的距离已被削减和修改,以允许完整的条带通过电阻器。

斩波机制:

机器的最后一个机制是斩波机制,为了完成这项工作,我们使用了两个伺服电机,刀片连接到其角上,如下所示。

切割机

我仍然相信这个区域可以进行很多改进,主要是刀片的安装方式。也许读到这里的人可以提出更好的选择。虽然使用两个伺服器确实提供了一个优势,因为刀片可以独立控制,但我们可以单独调整伺服角度以保持刀片靠近带材,并确保它们以相同的速度和相同的时间行进,以确保在任何一个上均匀切割边。

3D 打印所有必需的零件

这款基于 Arduino 的电阻切割机有 13 个部件需要 3D 打印。我已经在 thingverse 上上传了所有 STL 文件,您可以使用下面的链接自行下载和打印。

切割机

下载电阻切割机的 STL 文件

除了 STL 文件,您还可以找到可在 fusion 360 上使用的可编辑文件来修改或即兴设计。

我使用 cura 对所有 13 个 STL 文件进行切片,并使用我的 Ender 3D 打印机打印它们,因为没有高精度零件我已将 cura 设置为以低质量(0.28 毫米层厚)切片并仅对悬挂在上方的零件添加支持构建板。如上面的屏幕截图所示,整个打印大约需要 7.5 小时。您还可以在上面共享的 thing verse 链接中找到相同的 Gcode。

基于 Arduino 的电阻器卷筒切割机的电路图

我们的 DIY Arduino 电阻切割机的完整电路图如下所示 -

切割机

如您所见,电路非常简单,我们使用 12V 2A 适配器为整个设置供电。nano 上的板载 5V 稳压器用于使用 Arduino 板上的 5V 引脚为 MOC7811 传感器和伺服电机供电。16x2 LCD 使用 Arduino 的 I2C 引脚(即引脚 A4 和 A5)上的 I2C 模块连接到 Arduino nano。

左右伺服电机分别连接到 PWM 引脚 9 和 10。A4988 步进驱动器模块的 Enable、Step 和 Dir 引脚分别连接到 D6、D3 和 D4。每当我们不使用步进电机时,我们都会使用启用引脚来切断它的电源。MOC7811 连接到引脚 A0,按钮连接到引脚 D8。按钮用于在操作期间启动或停止机器。

在上面的示意图中,由于fritzing没有MOC7811组件,我们单独展示了它的电路。220 欧姆电阻器用于限制流向光电二极管的电流,10K 电阻器用于在检测到物体时上拉传感器的输出引脚,Sigout 引脚读数为 0V,否则读数为 5V。该引脚连接到 Arduino 模拟引脚,以检查是否有任何组件穿过传感器。

切割机

正如您在上图中看到的,我在零 PCB 上构建了完整的电路,并提供了连接步进电机、伺服电机、LCD 显示器和传感器的插头引脚。然后我使用 L 型夹和一些螺丝将电路板和 LCD 显示器安装到位,如下图所示 -

切割机

使用 Arduino 编程电阻器卷盘切割机

电阻切割机的完整代码 可以在页面底部找到,在本节中我将解释代码的重要部分。完整的代码是使用旧的引导加载程序为 Arduino nano 编写和测试的,如果您有任何问题,可以将它们留在下面的评论部分。

在 void setup 函数中,我们首先定义输入和输出引脚的类型。请注意,我们已将按钮引脚定义为输入上拉,因此每当按下此按钮时,数字读数都会给我们一个零。

// 设置引脚模式

pinMode(stepPin,输出);

pinMode(dirPin,输出);

pinMode(启用引脚,输出);

pinMode(pushButton,INPUT_PULLUP);

然后我们将伺服电机设置在初始位置,这会将刀片移出进料路径,并让我们将电阻卷盘加载到位。您可能想根据您的要求调整left_pos和right_pos的值。

//将舵机移动到默认位置

left_servo.attach(9); // 将引脚 9 上的伺服附加到伺服对象

left_servo.write(left_pos);

延迟(1000);

right_servo.attach(10); //将引脚10上的伺服附加到伺服对象

right_servo.write(right_pos);

延迟(1000);

一切都初始化后,我们使用 while 循环来保持程序,同时读取按钮的状态。只有当按下按钮时,代码才会进一步移动。这样,用户将有时间在机器开始工作之前对其进行准备。

while(digitalRead (pushButton) ==HIGH) //在这里等到这个按钮被长按

{

}

我们使用了一个名为step_forward()的函数,它将步进电机向前移动一步。在这样做的同时,它还会增加一个名为step_count的变量,并检查在馈送电阻器卷盘时是否有任何故障。这意味着当电机旋转时,电阻器卷轴应该向前移动,并且 MOC7811 传感器应该由在它之间移动的电阻器触发,如果尽管步进电机向前移动传感器没有看到任何组件,则意味着存在故障,我们有停止。下面代码中的else 循环对故障条件进行了检查。

无效 step_forward()

{

如果(步数 《 Max_steps_before_fault)

{

数字写入(dirPin,HIGH);// 使电机沿特定方向移动

数字写入(stepPin,LOW);

延迟微秒(1000);

数字写入(stepPin,HIGH);

延迟微秒(1000);

步数++;

}

别的

{

lcd.clear();

lcd.setCursor(3,0);

lcd.print(“步骤错误”);

数字写入(启用引脚,高);//禁用步进电机

而(1);

}

}

继续前进,我们还有另一个函数,称为Chop()。此功能用于在挤出所需数量的元件后激活伺服电机并切割电阻卷盘。这里重要的是同时将两个伺服电机移动到相同的距离,我们使用两个for 循环如下所示来实现相同的效果。

无效斩()

{

for (int 步数 = 0; 步数 《= 120; 步数 += 1) {

left_pos = 170 步;//将伺服从 160 移动到 60

right_pos = 60+步;//将伺服从60移动到160

left_servo.write(left_pos);

right_servo.write(right_pos);

延迟(3);

}

延迟(100);

for (int 步数 = 0; 步数 《= 120; 步数 += 1) {

left_pos = 60+步;//将伺服从60移动到160

right_pos = 170 步;//将伺服从 160 移动到 60

left_servo.write(left_pos);

right_servo.write(right_pos);

延迟(3);

}

}

在void 循环中,我们无需做太多事情。我们只需要旋转步进电机,直到传感器接收到一个电阻。我们还在电机的每一步之间使用了 20 毫秒的延迟来减慢它的速度。

//旋转步进器直到我们找到一个电阻

if (sensorValue《500)//如果没有找到电阻

{

向前一步();

延迟(20);

}

如果传感器被电阻中断,我们将通过增加变量 Resistor_count 来注册它,然后继续前进。

//IF RESISTOR DETECTED - 前进直到电阻通过

if (sensorValue》500)//检测到电阻

{

Resistor_count = Resistor_count+1;

步数=0;

while (sensorValue》500)//当电阻还在传感器下面时

{

向前一步();

传感器值 = 模拟读取(A0);

延迟(20);

}

}

如果机器挤出了所需数量的电阻器,那么是时候切断电阻器卷轴了,下面的代码完全一样。可变斩波计数可以根据您希望机器切割的所需电阻器数量进行更改。

//如果计数达到

if (Resistor_count==Chop_Count)

{

step_forward();step_forward();step_forward();step_forward(); step_forward();step_forward(); //向前迈出几步,正好切在两个电阻器的中间

劈();

Total_cut++;

电阻计数=0;

延迟(200);

}

Arduino电阻切割机在行动

使用机器相当简单。刚开机,机器就会初始化,之后会提示你按一个按钮。但是,在此之前,将您的电阻器或任何其他胶带组件卷起来并将其送入机器。在这个阶段,步进电机将被禁用,因此您可以手动移动电机以将卷轴设置在正确的位置,如下图所示。

切割机

在此之后,只需按下开始按钮,我们的机器就会启动。如果您想查看完整的工作,可以查看页面底部链接的视频。

所以,有了这个,我结束了这篇文章。希望你喜欢阅读它并学到一些有用的东西,如果你有任何改进它的建议或想法,请在评论部分提出,我很乐意听到他们的声音。此外,如果您想询问有关此项目或任何其他类似项目的任何问题,请查看我们的论坛。

代码

/* 电阻切割数控机床

* 伺服连接到 PWM 引脚 9 和 10

* A4988 步进驱动器启用,步进和 Dir 引脚分别连接到 D6、D3 和 D4。

* I2C LCD dipslay 连接到 A4 和 A5

* MOC7811 连接到 A0

* 按钮连接到 D8

*/

#include 《Servo.h》

#include 《Wire.h》

#include 《LiquidCrystal_I2C.h》

// 定义引脚编号

const int stepPin = 3;

常量 int dirPin = 4;

常量 int enablePin = 6;

常量 int pushButton = 8;

常量 int Max_steps_before_fault=25;

常量 int Job_Complete = 20;

int Chop_Count = 0;

int 电阻计数 = -1;

int Step_count =0;

int Total_cut = 0;

int left_pos = 170; // 存储伺服位置的变量

int right_pos =60;

伺服左伺服;

伺服右舵机;

LiquidCrystal_I2C lcd(0x27, 16, 2);

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分