全自动 3D 打印无刷 Nerf Blaster Arduino 控制
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 |
必要的工具和机器
|
关于这个项目
我一直很喜欢建造和创造东西,所以我决定用电影和电子游戏中的物体来创造道具和复制品。将虚拟对象变为现实,然后与有相似兴趣的人分享我的技术。
我最新和最伟大的作品是康涛,这是即将推出的视频游戏赛博朋克 2077 中的一款智能枪 .为了创造出如此复杂的物体,使用3D打印机来实现零件的美观和机械装配。
不过,静态对象太简单了,我想要一个挑战。所以我把它设计成一个功能性的 Nerf Blaster。
为了实现这一功能,它需要控制无刷电机的螺线管和电调。继电器和时间延迟等会太麻烦,所以 Arduino 是一个更实用的解决方案。
本文将重点介绍该项目的 Arduino 和电路方面(因为这是一个 Arduino 站点)。 我将此标记为“简单”,因为 Arduino 部分非常简单。机械设计和3D打印虽然先进。如果您想使用 Arduino 为 Nerf Blasters 控制无刷电调、无刷电机和电磁阀,本指南适合您!
CAD设计,3D打印等在这里解释:http://nerfhaven.com/forums/topic/28493-cyberpunk-2077-kang-tao-3d-printed-nerf-gun/
或在这里:https://www.reddit.com/r/nerfhomemades/comments/djmyu0/3d_printed_kang_tao_nerf_blaster_from_cyberpunk/
视频制作教程在这里:https://www.youtube.com/channel/UCP3j3nmdL5VLFy1indyyzAA/featured?view_as=subscriber
绘制原理图(参见原理图部分)是为了说明一切是如何连接的。使用 Arduino Nano 是因为它体积小。这也适用于 Uno 和其他人。
以下术语 MS1、C2 等请参考示意图
参考 到 代码 部分 开 说明 的 如何 代码 有效。
带飞轮和电磁阀的触发器
代码的工作方式是,当 MS2 (二次微动开关触发器)保持,无刷电机加速。
当 MS1 (初级微动开关触发器)被按下或保持,一个信号被发送到 MOSFET 栅极以触发电磁阀(S ) 反复。螺线管将 Nerf 飞镖推出弹匣并推入飞轮 (M1 &M2 ) 然后加速飞镖离开枪管。
但是,MS1 仅在 MS2 时激活 举行。这有助于防止在飞镖被推入非旋转飞轮时发生卡纸。在代码中(请参阅代码部分),它是使用“&&”的地方。
提供给无刷电机和螺线管的电源不会通过微动开关传输。这意味着您不需要高电流额定微动开关。
无刷电机
我不会在这里解释无刷电机与有刷电机的区别,您可以搜索一些很好的解释。
有inrunner 和跑者 无刷电机。你想要一个跑者 电机,因为它们的形状更扁平,因此您的 Nerf 冲击器侧面不会有难看的罐头。外转子电机也有一部分可以与轴一起旋转。这使得 3D 打印飞轮越过电机变得容易。
获得带有后部安装孔的电机 .
电机电压应至少处理12.6V(3s lipo)。
电机电流不能超过无刷电调电流额定值。
电机功率应>60W。该项目使用 12.6V 电源电压 x 实测 7A 电机消耗 =每个约 80W。
无刷电机的 RPM 应为 ~25k,由 kV 额定值 x 电压决定。本项目采用2600kV电机@12.6V。因此 2600 x 12.6 =~32, 760RPM。我只以半油门运行发动机,飞镖飞行 25m / 82ft!
无刷电调
这些基本上控制了无刷电机的功率。
无刷电机不适用于有刷电调,请使用无刷。
每个电机需要一个电调。否则连接到一个电调的两个电机的反电动势会扰乱电调时序并损坏所述电调和/或电机。
电调的额定电流需要高于电机的电流消耗。在这种情况下,每台电机测量为 7A。推荐电调为20A或更高。
电调的额定电压至少需要12.6V(3s Lipo)。
ESC 不需要内置 BEC。您可以使用“OPTO”电调。如果您有带 BEC 的 ESC,请将接地线和信号线连接到 Arduino,如图所示。 请勿连接 电调 5V 红色电缆连接任何东西。 (除非你有一个特定的目的并且知道你在做什么)。
电池
一块电池为一切供电。我建议使用 XT60 连接器。
电压为12.6V 3S锂电池。
推荐容量最低为1300mAH。
电池的电流放电额定值应足以满足所有负载的功率消耗。在本项目中,负载电流为~25A。
电池的最大放电率由放电率(25C)x 容量(1, 300mAh =1.3Ah)计算得出。
因此,电池的最大放电速率为 25 x 1.3 =32A。您应该可以在电池规格中找到这些数字。
MOSFET
直接从 Arduino 为 12V / 8A 电磁阀供电会产生魔法烟雾(Arduino 死亡)。解决方案? MOSFET。
功率 MOSFET 用作电磁阀的开/关开关。它基本上中断了为电磁阀供电的接地。这称为 N 沟道 MOSFET。 确保您获得 N 通道。
由于从 Arduino 输出引脚 (D4) 发送到 MOSFET 栅极引脚的信号,MOSFET 知道何时开启和关闭 在这种情况下)。 Arduino 输出 5V,门应该在 5V 时完全打开。为此,它需要是一个逻辑电平 MOSFET。
来自电磁阀的电流额定值为 8A。确保 MOSFET 具有更高的最大额定电流。本项目使用最大额定电流为 30A 的 MOSFET。
通过 MOSFET 的电压为 12.6V,可为螺线管供电。该 MOSFET 的最大额定电压为 60V,具有足够的裕量。
在这种情况下,MOSFET 的温度低于 35°C。这是因为 MOSFET 的额定电流为 30A,尽管只有约 8A 的负载通过它。另一个原因是负载(电磁阀)在关闭之前只是暂时通电,而不是一直通电。在这种情况下不需要散热器。
电磁阀
这会将飞镖推入飞轮。您只需要一个 12V 额定电磁阀,行程长度为 35mm。较短的冲程不会将全长型 Nerf 飞镖推得足够远。
将弹簧升级为直径 0.9 毫米、外径 14 毫米和长度 40 毫米以防止卡住。
由于电磁阀是瞬时通电而不是持续通电,因此它应该只升温到 40°C 左右,因此不需要冷却。
这些螺线管相对便宜且通用。它们可以在 Ebay、Aliexpress 等上找到。
安全开关
软件 安全开关只是一个 2 位置滑动开关。它有 3 个触点,但只使用了 2 个。当安全开启时关闭 Arduino,防止飞轮和螺线管激活。
保护电路
本节说明如何防止炸毁您的电子产品!
C1 33μF(推荐 100μF) &C2 100nF (0.1µF) 降低了 Arduino 电源输入的电压波动。
注意:C1 是极性敏感的,条纹的一面是负极, 其他 它 去 砰!
D1 防止反向电压到 Arduino VIN。注意它的极性。
D2 是一个回扫/续流二极管。它可以防止螺线管(或其他电感器)产生反电动势。否则,该反电动势可能会损坏 MOSFET。注意它的极性。
R1 &R2 MS1 和 MS2 的上拉电阻为 4.7kΩ。这可以防止微动开关上的浮动电压。
R3 是一个10kΩ的下拉电阻,防止MOSFET栅极出现浮动电压。
R4 对于 可选 是 150kΩ LED的。我的 LED 是 2 个串联的,每个 2.4V/50mA。您的电阻值可能会有所不同。这些 LED 的闪烁与螺线管同步,以复制枪口闪光!
下面的视频解释和试射!
总结了本指南,任何问题都可以在下面发表评论:)
文件下载,这样您就可以自己打印了!
更新:这是 Thingiverse 文件的链接,尽情享受吧!
https://www.thingiverse.com/thing:3984125
代码
- Nerf Blaster 无刷电机和电磁阀 Arduino 代码 - Clark3DPR
Nerf Blaster 无刷电机和电磁阀 Arduino 代码 - Clark3DPRArduino
1. 当Arduino通过安全开关上电时,它会运行无刷电调的布防序列。我的 ESC 需要 3.7 秒(代码中为 3700)。根据您自己的 ESC,您可能需要将此值增加到 10000(10 秒)才能退出安全模式。2. 按住二级微动开关以转动飞轮,然后按住主微动开关点火。
2. 更改throttle.write(92) 以增加/减少电机空转速度或将其关闭。默认情况下,电机将以低速旋转以减少旋转时间。 (值取决于您的电机/电调)
更改throttle.write(97) 以更改电机最高速度和飞镖速度。 (值取决于您的电机/电调)
更改延迟(90)和延迟(100)以增加/降低电磁阀的射速。
4. 当微动开关松开时,飞轮的 ESC PWM 信号和电磁阀的 MOSET 门信号停止旋转/激活。
5.当电调失去来自Arduino的信号时(当安全开关打开且Arduino断电时),电调恢复到安全模式并关闭电机。
const int buttonPinF =2; // 飞轮 Rev 微动开关引脚号const int buttonPinS =5; // 电磁阀微动开关引脚编号int buttonStateF =0; // 用于读取飞轮 Rev 微动开关 statusint buttonStateS =0; 的变量// 用于读取电磁阀微动开关状态的变量 电磁阀引脚 =4; // 电磁 MOSFET 栅极引脚编号#include伺服油门;int pos =0;int pin =3; // ESC 信号 pinvoid setup() { pinMode(buttonPinF, INPUT); // 将飞轮微动开关引脚初始化为输入 pinMode(buttonPinS, INPUT); // 将电磁阀微动开关引脚初始化为输入油门。attach(pin); pinMode(solenoidPin, OUTPUT); // 将电磁 MOSFET 栅极引脚设置为输出 // ESC 启动序列 for (pos =90; pos <=91; pos +=1) {throttle.write(pos);延迟(3700); // 等待 ESC 布防/退出安全模式// 根据您的 ESC 布防所需的时间增加这个 3700 值 }}void loop() { buttonStateF =digitalRead(buttonPinF); // 读取飞轮微动开关值的状态 if (buttonStateF ==HIGH) { // 检查微动开关被按下,如果是, Flywheel buttonState 是 HIGH 油门.write(92); // <(92) =电机关闭 / (92) =怠速 } else {油门.write(97); // 电机开启 (92) =怠速 / ~(115) =最大速度 }buttonStateS =digitalRead(buttonPinS); // 读取电磁阀微动开关值的状态 if (buttonStateF ==LOW &&buttonStateS ==LOW) { digitalWrite(solenoidPin, HIGH); // 开关电磁阀开启延迟(90); // ON持续时间digitalWrite(solenoidPin, LOW); // 开关电磁阀关闭延迟(100); // 关闭持续时间 } else { digitalWrite(solenoidPin, LOW); // 关闭电磁阀 }}
示意图
这就是它的全部接线方式。密切注意二极管和电容器的极性。用AutoCAD绘制。制造工艺