Imprimante Dotwork bon marché maison



Parfois, la lumière de l'inventeur s'illumine en moi, et je m'assois pendant des heures et je soudais / voyais quelque chose. C'est arrivé cette fois. J'ai eu l'idée de créer ma propre imprimante. Le thème de la création d'une imprimante 3D a déjà été battu et coûte cher. Après une petite réflexion, j'ai décidé de faire une version économique de l'imprimante, qui pourrait dessiner avec un crayon / stylo / feutre. Et rappelant mes tentatives pour dessiner quelque chose dans le style Dotwork, j'ai opté pour une imprimante qui automatise ce processus.Au total, les exigences d'imprimante suivantes ont été générées:

  • pas cher
  • des outils improvisés sont utilisés pour dessiner
  • le résultat est des dessins dans le style de Dotwork

Et quand il s'est avéré que ce projet pouvait être promu comme papier à terme, il a finalement été décidé: être un imprimeur. Pour que le motif ne soit pas trop grand, la taille de la zone imprimable a été prise comme A5.

À propos de dotwork
(Dotwork) – , . - . , , . , . - , . , .

Cadre


Le processus a commencé par la recherche d'un cadre pour les bases. Le choix s'est porté sur le H-bot, car il est facile à mettre en œuvre, peu coûteux et, contrairement à CoreXY, il n'a pas besoin de couper une ceinture. Comme le montre le schéma, vous aurez besoin de 2 moteurs pas à pas, 4 axes et 1 courroie.




Pour la base, des barres d'une section de 20 * 40 ont été utilisées. Bien sûr, il est préférable d'utiliser du contreplaqué et de découper les trous nécessaires dessus, alors la conception serait plus uniforme et présentable, mais en raison du fait qu'il est plus difficile de transporter et de traiter un morceau de contreplaqué, les barres ont été sélectionnées.

Des supports et roulements de rail ont été achetés en Chine. Ils sont conçus pour des guides d'un diamètre de 8 mm. Après une courte recherche, il a été décidé de faire l'axe des aiguilles à tricoter. Pas cher, juste la bonne longueur, facile à couper. De plus, il s'est avéré que les rainures sont bien extrudées sur les aiguilles à tricoter avec des roulements. Cette propriété a permis à la structure de se déplacer librement le long des guides, malgré l'absence de parallélisme.

Comme il s'agit toujours d'un prototype, les roulements linéaires ont été fixés avec du fil. Solide, fiable et si vous pouvez le retirer rapidement.



Le moteur a été acheté par incréments de 0,9 degré pour une précision maximale. Quand j'ai mis les moteurs, un nouveau problème a été découvert: les bouchons des moteurs ne correspondaient pas à la courroie - le glissement s'est produit à pleine vitesse. Les premières tentatives d'enlèvement ont échoué, le chauffage / refroidissement n'a aidé en aucune façon, donc une décision brutale mais efficace a été prise:



pour que la ceinture ne s'envole pas, tout le chemin le long de la plate-forme devrait être au même niveau. À cet égard, il était nécessaire de placer des morceaux de bois sous les roulements afin d'ajuster leur hauteur. Mais cela n'a pas sauvé d'un rallye de ceinture. Et encore une fois, le fil est venu à la rescousse:



Pour contrôler les moteurs a été utilisé Arduino Uno, ou plutôt sa copie chinoise. Il s'est avéré que l'Arduino mini aurait suffi. Il n'y avait pas assez de puissance de l'arduino pour les moteurs, et donc le MOTOR SHIELD L293D a été commandé. En tant qu'alimentation, l'alimentation de l'ancien modem a été utilisée, de tout ce qui se trouvait à portée de main, elle a donné la tension la plus élevée - 9V (les moteurs sont conçus pour 5-12V). Pour faciliter la connexion, l'entrée a été coupée du modem, 2 fils ont été soudés et tout cela a été connecté au blindage. Bouclier monté sur un arduino.



Initialement, il était prévu d'utiliser un système de 2 roues pour contrôler le feutre, comme dans les machines à rouler, mais, pour la rapidité d'exécution, la fixation se faisait immédiatement sur le servo variateur. Il s'avère que les points ne sont pas fixés par la pointe du stylo-feutre, mais latéralement. Il est prévu de revenir à l'idée initiale dans la prochaine version de l'imprimante. Le servo est également connecté au blindage.



Remplissage de code


Pour Arduino, un code a été écrit qui reçoit une commande d'un PC via le port série sous la forme d'une chaîne de 9 caractères. Le premier caractère est le code de commande, suivi de 4 caractères pour les coordonnées X et Y. Un lien vers le code côté PC sera à la fin de l'article.

Code pour 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);
}

L'application côté PC vous permet de télécharger une image, de la traduire en noir et blanc et de générer un ensemble de points.

Le principe de génération de points
- 256 int. N RGB(N,N,N). , «Num points» «fuction» . , , 0. :

  • X Y
  • 0, :

    1. 1

Voici à quoi ressemble la fenêtre de l'application:



Il s'est avéré que si les moteurs ne perdent pas de puissance après chaque mouvement, ils défilent en arrière et s'ils sont laissés, ils chauffent. Et le bouclier se réchauffe encore plus, de sorte que l'ancien refroidisseur a été déterré et fixé sur les microcircuits. Il est alimenté directement par la même alimentation afin de ne pas occuper les connecteurs du blindage. Après un test de deux heures, rien n'a brûlé. Une boîte a également été ajoutée pour protéger la structure.



Puisqu'il n'y avait pas de table pour lui, afin que la feuille ne titube pas lors de l'impression, une feuille au format A3 a été prise. La plate-forme se tient sur la feuille et la presse. Et pour que toute la structure ne glisse pas, un haltère ou un pot de confiture est placé dessus. Il imprime assez lentement, il faut en moyenne 0,7 seconde pour un point. Et voici la sortie:



Conclusion


L'imprimante s'est avérée lente, non représentable, nécessitant des améliorations, mais imprimant dans le bon style. Le début a été fait et de nombreuses conclusions ont été tirées, tant dans la conception que dans le code, et si vous avez encore la patience pour la deuxième version de cet appareil, tout sera pris en compte et mieux fait.

Des fonds dépensés (approximativement):

  • 3 $ pour les aiguilles à tricoter
  • 17 $ moteurs 2pcs. (bien que vous puissiez prendre moins de précision)
  • 3 $ arduino Uno (mais assez pour Nano)
  • 5,5 $ Roulements linéaires 8 * 15 * 24 mm, 10 pcs. (il a fallu 8 pièces.)
  • 2,5 $ MOTOR SHIELD L293D (vous pouvez acheter 2 microcircuits L293D séparément, et le servo variateur est alimenté par Arduino)
  • 2 $ Roulements conventionnels 8 * 22 * ​​7mm, 6pcs.
  • 8 $ Supports pour guides 8 mm, 8 pièces.
  • 4 $ Ceinture 20-GT2-6 (2m) + 2 rouleaux
  • 2 $ Servo Sg90 9G
  • ~ 10 $ pour un cadre, des boulons, des clous, du fil (ici, vous pouvez économiser de l'argent si vous en avez déjà beaucoup à la maison)

Gratuit: ventilateur, alimentation.

Total environ 57 $, bien que cela puisse être fait encore moins cher.

Code pour PC.

Courte vidéo de fonctionnement de l'imprimante:

Source: https://habr.com/ru/post/fr388587/


All Articles