如何在3D打印机打印完成后发出“我打完了”的信号

硬件:配备了RAMPS+LCD的熔普三维出品的3D打印机。(蜂鸣器在LCD屏所在的那块电路板上。)

软件:Repetier-Host, UE, Arduino

昨天开始给一位客户打印零件,两种,每种60个。一个大约7立方厘米,一个大约3立方厘米,比较小。可是形状比较特殊,不太适合一次打很多。问题来了,大的那个,大概半个小时就得去取下打印好的零件,让它继续打印。可是我手上事情比较多,不能一直守着机器看。想了一下,让他打印完了就蜂鸣器猛叫,再过去搞。第一个念头就是,加个GCODE指令,例如G33,打印完了就让蜂鸣器叫。结果查了一下Marlin的代码,里面有个M300的指令,代码如下:

// M300 – Play beep sound S<frequency Hz> P<duration ms>

case 300: // M300
{
int beepS = code_seen(‘S’) ? code_value() : 110;
int beepP = code_seen(‘P’) ? code_value() : 1000;
if (beepS > 0)
{
#if BEEPER > 0
tone(BEEPER, beepS);
delay(beepP);
noTone(BEEPER);
#elif defined(ULTRALCD)
lcd_buzz(beepS, beepP);
#elif defined(LCD_USE_I2C_BUZZER)
lcd_buzz(beepP, beepS);
#endif
}
else
{
delay(beepP);
}
}
break;
#endif // M300

 

这下简单了。在Gcode结尾加上M300命令即可。实测蜂鸣器频率4K Hz的时候,声音听起来最大声也最舒服。int型变量,最大也就32767。测试了一下

M300 S4000 P60000

这样就可以一直响了。为什么是60000?因为我一开始忘了int的范围,想着可以响一分钟,然后多复制粘贴几行,就可以一直响了。结果一测试,它是一直响的。那就更好,一行就搞定。唯一美中不足的是,每次都要重启一下机器,才能打下一个。不过这个问题也不算个事,反正要跑过去取下打印好的物体。

扩展话题:以后,可以加上自动取零件的设施。以前买了并组装过Makerbot的ABP(Auto Build Platform)。它用的是个传送带,我觉得不太好用。因为加上以后,打印ABS很容易粘不牢。