国产廉价网点打印机



有时候,发明人的光芒在我身上点亮,我坐了几个小时,焊接/看见了一些东西。这次发生了。我想到了创建自己的打印机的想法。创建3d打印机的主题已经被击败,并且在财务上非常昂贵。经过一番思考,我决定制作一个预算版的打印机,可以用铅笔/钢笔/毡尖笔进行绘图。回想起我尝试以Dotwork风格绘制东西的过程,我选择了使该过程自动化的打印机。总共产生了以下打印机要求:

  • 便宜的
  • 简易工具用于绘图
  • 结果是采用Dotwork风格的图纸

当事实证明该项目可以推广为学期论文时,最终决定:成为一名打印机。为了使设计不会太大,将可打印区域的大小设为A5。

关于dotwork
(Dotwork) – , . - . , , . , . - , . , .

车架


该过程从寻找基础框架开始。这种选择落在了H机器人上,因为它易于实施,价格便宜,并且与CoreXY不同,它不需要割伤皮带。从图中可以看出,您将需要2个步进电机,4个轴和1个皮带。




对于底部,使用截面为20 * 40的钢筋。当然,最好使用胶合板并在其上切出必要的孔,这样设计会更加均匀和美观,但由于运输和加工一块胶合板比较困难,所以选择了这些棒。

导轨安装座和轴承在中国购买。它们设计用于直径为8mm的导轨。短暂搜索后,决定制作编织针的轴线。价格便宜,长度合适,易于切割。此外,事实证明,带有轴承的编织针上的凹槽很好。尽管缺乏并行性,但此属性使结构可以沿导轨自由移动。

由于这仍然是原型,因此直线轴承通过线固定。坚固,可靠,如果有的话,您可以快速移除。



为了最大精度,以0.9度为增量购买了发动机。当我放上发动机时,发现了一个新问题:发动机上的盖不适合皮带-全速打滑。最初的拆除尝试没有成功,加热/冷却没有任何帮助,因此做出了一个残酷而有效的决定:



为了使皮带不飞走,沿着平台的整个路径应在同一水平线上。在这方面,有必要将木头放在轴承下面,以调节其高度。但这并没有从腰带集会中拯救出来。电线再次救援:



为了控制引擎,使用了Arduino Uno或它的中文版本。事实证明,Arduino mini已经足够了。 Arduino的动力不足,无法提供发动机,因此订购了MOTOR SHIELD L293D。作为电源,使用了旧调制解调器的电源,从手头发现的所有东西中,它都提供了最高的电压-9V(电机设计为5-12V)。为了便于连接,将输入从调制解调器断开,将2根导线焊接到其上,并将所有这些都连接到屏蔽层。盾牌安装在arduino上。



最初,计划像滚动机一样使用2个轮子的系统来控制毡尖笔,但为了提高执行速度,立即在伺服驱动器上进行了紧固。事实证明,这些点不是由毡尖笔的笔尖设置的,而是由侧面设置的。计划在下一版打印机中恢复到最初的想法。伺服也连接到屏蔽层。



代码填充


对于arduino,编写了一个代码,该代码通过9个字符的字符串通过串行端口从PC接收命令。第一个字符是命令代码,后跟四个用于X和Y坐标的字符,指向PC端代码的链接将在本文的结尾。

Arduino的代码
#include <AFMotor.h> 
#include <Servo.h> 

AF_Stepper motor(2048, 1);
AF_Stepper motor2(2048, 2);
Servo servo1;

int x0 = 0;
int y0 = 0;
int K = 1;

void setup() {
  motor.setSpeed(15);
  motor2.setSpeed(15);  
  servo1.attach(10);
  servo1.write(65);
  Serial.begin(9600);
}

void OneTouch(){
  servo1.write(60);
  delay(50);
  servo1.write(65);
}

void MoveRight(int h){
  motor.step(h, FORWARD, SINGLE);    
  motor2.step(h, FORWARD, SINGLE);    
}

void MoveDown(int h){
  motor.step(h, BACKWARD, SINGLE);   
  motor2.step(h, FORWARD, SINGLE);    
}

void MoveUp(int h){
  motor.step(h, FORWARD, SINGLE);    
  motor2.step(h, BACKWARD, SINGLE);   
}

void MoveLeft(int h){
  motor.step(h, BACKWARD, SINGLE);     
  motor2.step(h, BACKWARD, SINGLE);    
}

void OnePointer(int x, int y){
  int stepX = x - x0;
  int stepY = y - y0;
  
  if (stepX > 0)
    MoveRight(stepX);
  else
    MoveLeft(-stepX);
    
  if (stepY > 0)
    MoveDown(stepY);
  else
    MoveUp(-stepY);
   
  x0 = x;
  y0 = y;
  
  OneTouch();
}

void Move(int x, int y){
  int stepX = x - x0;
  int stepY = y - y0;
  int kX, kY;
    
      
  while ((stepX != 0) || (stepY != 0)){
    kX=K;
    kY=K;
    if (kX> abs(stepX))
      kX = abs(stepX);
    if (kY> abs(stepY))
      kY = abs(stepY);
  
    if (stepX > 0){
      MoveRight(kX);
      stepX-=kX;
    }
    if (stepX < 0){
      MoveLeft(kX);
      stepX+=kX;
    }
    if (stepY > 0){
      MoveDown(kY);
      stepY-=kY;
    }
    if (stepY < 0){
      MoveUp(kY);
      stepY+=kY;
    }
  }
  
  x0 = x;
  y0 = y;
  
  OneTouch();
}

void loop() {
  while (Serial.available() == 0);
     String buffer ="";
     int i = 0;
     delay(100);
      
     while(i < 9) {
        buffer += Serial.read();
        i++;
     }
     
     String code =  buffer.substring(0,1);
     code.trim();
     int cod = code.toInt(); 
     
     String first =  buffer.substring(0,5);
     first.trim();
     int x = first.toInt() - cod*10; 

     String second =  buffer.substring(0,9);
     second.trim();
     int y = second.toInt() - x*10000 - cod * 100000;   
     
     switch (cod){
       case 0:
         Move(x,y);
         OneTouch();
       break;
       case 1:
         servo1.write(65);
         delay(50);
         Move(x,y);
       break;
       case 2:
         servo1.write(60);
         delay(50);
         Move(x,y);
         servo1.write(65);
       break;
       case 3:
         servo1.write(65);
         delay(50);
       break;
       case 4:
         servo1.write(60);
         delay(50);
         break;
       case 5:
         Move(x,y);
         break;
       case 6:
         Move(0,0);
         motor.release();
         motor2.release();
         break;
       case 7:
         K=x;
         break;
     }
     
     Serial.print(1);
}

PC端的应用程序允许您下载图像,将其翻译成黑白图像并生成一组点。

产生积分的原理
- 256 int. N RGB(N,N,N). , «Num points» «fuction» . , , 0. :

  • X Y
  • 0, :

    1. 1

这是应用程序窗口的样子:



事实证明,如果引擎在每次运动后都没有动力,那么它们会向后滚动,如果离开,它们会变热。而且屏蔽层的温度甚至更高,因此挖出了旧的冷却器并固定在微电路上。他直接从同一电源获取电源,以免占用屏蔽板上的连接器。经过两个小时的测试,没有任何东西耗尽。还添加了一个盒子来保护结构。



由于没有供他使用的桌子,因此打印时纸张不会错开,因此采用了A3格式的纸张。平台站在纸张上并按下。为了使整个结构不打滑,可以在其上放置一个哑铃或一罐果酱。打印速度相当慢,平均一个点需要0.7秒。这是输出:



结论


事实证明,打印机速度慢,无法表现出来,需要改进,但打印样式正确。在设计和代码上都已经开始并且已经得出许多结论,如果您仍然对本单元的第二版有足够的耐心,那么所有内容都将得到考虑并做得更好。

花费在其上的资金(大约):

  • 织针3美元
  • $ 17发动机2个。(尽管您可能不太准确)
  • 3 $ arduino Uno(但足以容纳Nano)
  • $ 5.5线性轴承8 * 15 * 24mm,10个 (花了8个。)
  • $ 2.5 MOTOR SHIELD L293D(您可以单独购买2个L293D微电路,并且伺服驱动器由arduino驱动)
  • 2 $常规轴承8 * 22 * 7mm,6个
  • $ 8导轨安装座8mm,8个。
  • $ 4皮带20-GT2-6(2m)+ 2个滚筒
  • 2 $伺服Sg90 9G
  • 约10美元的框架,螺栓,钉子,电线(如果您已经有很多家,可以在这里省钱)

免费:风扇,电源。

总计约57美元,尽管可以做得更便宜。

PC代码。

打印机操作的简短视频:

Source: https://habr.com/ru/post/zh-CN388587/


All Articles