Outils pour utilisateurs

Outils du site


machine_a_peindre

Ceci est une ancienne révision du document !


Machine à peindre

Inspirations

“Non, la peinture n’est pas faite pour décorer les appartements. C’est un instrument de guerre offensive et défensive contre l’ennemi.”

Pablo Picasso

Réalisation

JOUR 1

09/11/2108

Base une lyre Robe Spot 250xt hors d'usage. La voici démontée :

Les deux moteurs pas-à-pas qui réalisent le pan et le tilt ont comme référence : 23HS0001-02

Les connecteurs de moteur JST :

Boitier - Code commande : RS 820-1523 / Référence fabricant : XHP-11 / Fabricant : JST

Cosse - Code commande RS : 820-1529 / Référence fabricant : BXH-001T-P0.6 / Fabricant : JST

Commutateur optique manquant : Code commande RS 708-5538 Référence fabricant TCST1103 Fabricant Vishay

JOUR 2

22/11/2108 Objectif : Réalisation du capteur optique manquant sur la roue codeuse du pan :

J'ai pris modèle sur le capteur du tilt. La surprise a été de constater que deux encodeurs optique étaient positionnés côte à côte.

JOUR 3

13/12/2108

Objectif : Compter le nombre de pas du pan avec l'encodeur optique. Résultat : ~2470

Code Arduino :

byte c2, c3;
 
void setup() {
  Serial.begin(115200); 
  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  c2 = digitalRead(2);
  c3 = digitalRead(3);
}
 
void loop() {
  if (c2 != digitalRead(2)) {
    c2 = digitalRead(2);
    byte b = c2 + (digitalRead(3) << 1);
    Serial.write(b);
  }
  if (c3 != digitalRead(3)) {
    c3 = digitalRead(3);
    byte b = digitalRead(2) + (c3 << 1);
    Serial.write(b);
  }
}

Code Processing :

import processing.serial.*;
 
Serial arduino;
int val = 0;
 
void setup() {
  String portArduino = Serial.list()[4];
  arduino = new Serial(this, portArduino, 115200);
}
 
void draw() {
}
 
void serialEvent(Serial port) {
  val++;
}
 
void keyPressed() {
  switch(key) {
  case ' ' : 
    println(val); 
    break;
  case 'a' : 
    val = 0;
    break;
  }
}

JOUR 4

14/12/2108

Objectif : Faire fonctionner les capteurs à effet Hall du pan

J'ai repris le code Arduino de l'étape précédente. Pour la visualisation des capteurs, voici le code Processing :

import processing.serial.*;
 
Serial arduino;
byte lecture = 3;
 
void setup() {
  size(500, 300);
  String portArduino = Serial.list()[4];
  arduino = new Serial(this, portArduino, 115200);
}
 
void draw() {
  background(255);
  if ((lecture & 1) != 0) {
    fill(255);
  } else {
    fill(255, 0, 0);
  }
  rect(100, 100, 100, 100);
  if ((lecture & 2) != 0) {
    fill(255);
  } else {
    fill(255, 0, 0);
  }
  rect(300, 100, 100, 100);
}
 
void serialEvent(Serial port) {
  lecture = (byte)arduino.read();
}

Driver des moteurs pas à pas : NJM2670D2 fabricant JRC

Jours ...

QttNom Valeur Référence Fabricant Fabricant Réf. FournisseurFournisseur
2 Driver moteur 4A L298N STMicroelectronics 636-384 RS
2 Dissipateur 8.5°C/W ML33 AAVID THERMALLOY 712-4263 RS
1 Embase IDC 40 contactsAWHW 40G-0202-T ASSMANN WSW 674-1252 RS
2 Connecteur IDC F 40 contacts09185406813 Harting 409-8720 RS.
2 Connecteur XHP 11 contactsXHP-11 JST 820-1523 RS
8 Cosse à sertir JST BXH-001T-P0.6 JST 820-1529 RS
6 Embase KK 4 Contacts 22-27-2041 Molex 483-8483 RS
2 Embase KK 2 Contacts 22-27-2021 Molex 483-8461 RS
17 Diode 2A 100V HER202G R0 Taiwan Semiconductor 688-1940 RS
2 Résistance 22 ohm. MRS25000C2209FCT00 Vishay 683-3336 RS
1 Résistance 10k ohm
8 Résistance 1 ohm CFR25J1R0 TE Connectivity 135-550 RS
1 Condensateur 470uF 711-1129 RS Pro 711-1129 RS
1 Condensateur 100nF USR1H0R1MDD Nichicon 475-8961 RS
1 MOSFET canal N 30A 60VA STP36NF06L STMicroelectronics 486-5671 RS

JOUR 5

21/10/2019

Finition du PCB avec génération des fichiers Gerber. J'ai commandé le PCB chez Seed Studio :

JOUR 6

29/10/2019

Réalisation du gabarit pour fixer le support du “pinceau” sur le plaque emboutie soutenant le projecteur. Voici le fichier le code OpenSCAD :

$fn=40;
 
Plaque();
 
module Plaque() {
    difference() {
        translate([-122, 0]) square([244, 100]);
        translate([-110, 10]) circle(d = 4);
        translate([110, 10]) circle(d = 4);
        translate([-110, 89]) circle(d = 4);
        translate([110, 89]) circle(d = 4);
    }
}

JOUR 7

31/10/2019

Fraisage du plateau avec le code ci-dessous :

Plateau

module Plateau() {
    difference() {
        hull() { // Forme
            translate([-10, 132]) circle(r=30);
            translate([10, 132]) circle(r=30);
            translate([91, 55]) circle(r=30);
            translate([91, -42]) circle(r=30);
            translate([10, -126]) circle(r=30);
            translate([-10, -126]) circle(r=30);
            translate([-91, 55]) circle(r=30);
            translate([-91, -42]) circle(r=30);
        }
        translate([0, -7.2]) { // Décalage pour que l'axe X soit l'axe dde rotation
                translate([-110, -39.5]) circle(d = 4.1); // Bas Gauche
                translate([110, -39.5]) circle(d = 4.1); // Bas Droite
                translate([-110, 39.5]) circle(d = 4.1); // Haut Gauche
                translate([110, 39.5]) circle(d = 4.1); // Haut Droite
 
                translate([-110, -39.5]) translate([65, 6])  circle(d = 4.1); // Bas Centre Gauche
                translate([-110, 39.5])  translate([65, 1])  circle(d = 4.1); // Haut Centre Gauche
                translate([110, -39.5])  translate([-65, 6]) circle(d = 4.1); // Bas Centre Droite
                translate([110, 39.5])   translate([-65, 1]) circle(d = 4.1); // Haut Centre Droite
 
        }
        translate([-10, -116]) square([20, 238]); // Emplacement marqueur
        translate([38, 48.3]) square([64, 4]); // Rainure renfort
        translate([-102, 48.3]) square([64, 4]); // // Rainure renfort
        translate([0, -4]) circle(d=26); // Sécurité
        // -103.3 Vis arrière
        // 90.7 Vis avant
        // 194 Distance entre deux vis
 
        // Support marqueur arrière
        translate([-20, -83.3]) circle(d = 4.1);
        translate([-20, -123.3]) circle(d = 4.1);
        translate([20, -83.3]) circle(d = 4.1);
        translate([20, -123.3]) circle(d = 4.1);
 
        // Support marqueur avant
        translate([-20, 110.7]) circle(d = 4.1);
        translate([-20, 70.7]) circle(d = 4.1);
        translate([20, 110.7]) circle(d = 4.1);
        translate([20, 70.7]) circle(d = 4.1);
 
        // Fixation Solénoïde
        translate([15, 25]) circle(d=3);
        translate([35, 25]) circle(d=3);
        translate([15, 55]) circle(d=3);
        translate([35, 55]) circle(d=3);        
    }
}

JOUR 8

01/11/2019

Conception du support de l'embout du marqueur :

module SupportEmbout() {
    difference() {
        union() {
            resize([43.3012702, 0, 0]) cylinder(d = 25, h = 55); // Cylindre principal
            hull() { // Platine de fixation
                translate([-30, 0, 0]) cylinder(d = 25, h = 6);
                translate([30, 0, 0]) cylinder(d = 25, h = 6);
            }
        }
        translate([-3, 0, 31.6492]) rotate([0, 30, 0]) 
        union() {
            translate([0, 0, 22]) cube([60, 30, 30], center = true); // Cube pour le biseau
            resize([44.8, 0, 0]) cylinder(d = 18, h = 7); // Ellipse intérieure
            translate([0, 0, -32]) cylinder(d = 6, h = 100); // Axe de la vis de 40
            translate([0, 0, -25]) { // Trou ecrou
                cylinder(d = 12, h = 5.5, $fn = 6);
                translate([-40, -5.2, 0]) cube([40, 10.4, 5.5]);
            }
        }
        // Trous de fixation
        translate([-30, 0, 0]) cylinder(d = 4.2, h = 6);
        translate([30, 0, 0]) cylinder(d = 4.2, h = 6);
    }
 
}

JOUR 9

02/11/2019

Conception des supports de l'applicateur :

La distance entre le dessus du plateau en bois et l'axe de rotation est de 35,7mm.

Support Marqueur

module SupportMarqueur() {
    taille = 20;
    hauteur = 14.25;
    difference() {
        hull() {
            translate([0, 0, hauteur]) rotate([90, 0, 0]) cylinder(d = 20, h = taille);
            hull() {
                translate([20, -taille / 2, 0]) cylinder(d = taille, h = 0.1);
                translate([-20, -taille / 2, 0]) cylinder(d = taille, h = 0.1);
            }
        }
        translate([0, 0, hauteur]) rotate([90, 0, 0]) cylinder(d = 4, h = taille); // Trou de l'axe
        // Trous de vis
        translate([20, -taille / 2, 0]) cylinder(d = 4.2, h = 20);
        translate([-20, -taille / 2, 0]) cylinder(d = 4.2, h = 20);
        // Trous tête de vis
        translate([20, -taille / 2, 4]) cylinder(d = 8, h = 20);
        translate([-20, -taille / 2, 4]) cylinder(d = 8, h = 20);
        // Forme du cylindre
        translate([0, 10, hauteur]) rotate([0, 90, 0]) cylinder(d = 25.5, h = 200, center = true);
        translate([0, 10, 0]) cube([200, 20, 60], center = true);
    }
}

JOUR 10

08/12/2019

Impression du support du S. Echec cuisant, j'ai retournée la pièce pour l'impression et oublié de mettre l'encoche de l'autre côté.

JOUR 11

09/12/2019

J'ai rectifié l'erreur d'hier et j'en ai profité pour peaufiner le tout :

module SupportSolenoide() {
    difference() {
        union() {
            hull() {
                translate([80, 47, 0]) cylinder(d = 14, h = 5);
                translate([80, 7, 0]) cylinder(d = 14, h = 5);
                translate([7, 47, 0]) cylinder(d = 14, h = 5);
                translate([7, 7, 0]) cylinder(d = 14, h = 5);
            }
            //Patte
            hull() {
                translate([77, -4, 0]) cylinder(d = 20, h = 5);
                translate([77, 58, 0]) cylinder(d = 20, h = 5);
            }
            // Extension solénoïde
            hull() {
                translate([91, 42, 0]) cylinder(d = 10, h = 7.5);
                translate([91, 12, 0]) cylinder(d = 10, h = 7.5);
                translate([49, 42, 0]) cylinder(d = 10, h = 7.5);
                translate([49, 12, 0]) cylinder(d = 10, h = 7.5);
            }
        }
 
        // Trous solénoïde
        translate([88, 38, 0]) cylinder(d = 3.2, h = 7.5);
        translate([88, 16, 0]) cylinder(d = 3.2, h = 7.5);
        translate([58, 38, 0]) cylinder(d = 3.2, h = 7.5);
        translate([58, 16, 0]) cylinder(d = 3.2, h = 7.5);
        // Tête de vis
        translate([88, 38, 0]) cylinder(d1 = 6.3, d2 = 3.2, h = 1.7);
        translate([88, 16, 0]) cylinder(d1 = 6.3, d2 = 3.2, h = 1.7);
        translate([58, 38, 0]) cylinder(d1 = 6.3, d2 = 3.2, h = 1.7);
        translate([58, 16, 0]) cylinder(d1 = 6.3, d2 = 3.2, h = 1.7);
        // Fixation
        translate([7, 7, 0]) cylinder(d = diamtreFixation, h = 6);
        translate([7, 47, 0]) cylinder(d = diamtreFixation, h = 6);
        // Passage écrou
        translate([41.5, 47, 0]) cube([11, 7, 7.5]);
        translate([47, 47, 0]) cylinder(d = 11, h = 7.5); 
        //pattes
        translate([77, 58, 0]) cylinder(d = diamtreFixation, h = 6);
        translate([77, -4, 0]) cylinder(d = diamtreFixation, h = 6);
        // Passage marqueur
        translate([0, 17, 0]) cube([16, 20, 7]);
        translate([0, 17, 0]) cube([40, 20, 3]);
    }
}

JOUR 12

10/12/2019

L'embout précédent s'est cassé au serrage de la courroie. J'ai modifié la position pour l'impression. De ce fait la fibre de PLA est perpendiculaire à l'effort. J'ai aussi augmenté l'épaisseur des pattes de serrage. L'ensemble des éléments du plateau sont imprimés. Il reste à équilibrer le plateau afin de diminuer les efforts sur le moteur de tilt.

module EmboutSolenoide() {
    largeurCourroie = 6;
    largeurEmbout = 50;
    profondeur = 18;
    longueurVis = 17;
    largeurCote = 10;
    difference() {
        union() {
            // Base
            hull() {
                translate([4, 0, 4]) rotate([-90, 0, 0]) cylinder(d = 8, h = profondeur);
                translate([largeurEmbout - 4, 0, 4]) rotate([-90, 0, 0]) cylinder(d = 8, h = profondeur);
            }
            // Côté gauche
            translate([0, 0, 4]) cube([largeurCote, profondeur,  13 + largeurCourroie / 2]);
            translate([0, profondeur / 2, 17 + largeurCourroie / 2]) rotate([0, 90, 0]) cylinder(d = profondeur, h = largeurCote);
            translate([-4, 0, 14 - largeurCourroie / 2]) cube([4, profondeur, largeurCourroie + 2]); // Passage courroie
            translate([-4, 0, 11]) rotate([0, 180, -90]) prisme(profondeur, 4, 4);
            // Côté droit
            translate([largeurEmbout - largeurCote, 0, 4]) cube([largeurCote, profondeur,  13 + largeurCourroie / 2]);
            translate([largeurEmbout - largeurCote, profondeur / 2, 17 + largeurCourroie / 2]) rotate([0, 90, 0]) cylinder(d = profondeur, h = largeurCote);
            translate([largeurEmbout, 0, 14 - largeurCourroie / 2]) cube([4, profondeur, largeurCourroie + 2]); // Passage courroie
            translate([largeurEmbout + 4, profondeur, 11]) rotate([0, 180, 90]) prisme(profondeur, 4, 4);
            // Partie centrale
            hull() {
                translate([largeurEmbout / 2, 0, 15]) rotate([-90, 0, 0]) cylinder(d = 22, h = profondeur);
                translate([largeurCote, 0, 8]) cube([largeurEmbout - 2 * largeurCote, profondeur, 0.1]);
            }
        }
        // Axe solénoïde
        translate([largeurEmbout / 2, 0, 15]) rotate([-90, 0, 0]) cylinder(d = 12.1, h = 13);
        // Encoches
        translate([largeurCote / 2, 0, 5]) Trapeze(0.5, 1.5, profondeur, 30);
        translate([largeurEmbout - largeurCote / 2, 0, 5]) Trapeze(0.5, 1.5, profondeur, 30);
        // Vis
        translate([0, profondeur / 2, 17 + largeurCourroie / 2]) rotate([0, 90, 0]) cylinder(d = 4, h = longueurVis);
        translate([largeurEmbout - longueurVis, profondeur / 2, 17 + largeurCourroie / 2]) rotate([0, 90, 0]) cylinder(d = 4, h = longueurVis);
        // Tête de vis
        translate([-4, profondeur / 2, 17 + largeurCourroie / 2]) rotate([0, 90, 0]) cylinder(d = 7, h = 4);
        translate([largeurEmbout, profondeur / 2, 17 + largeurCourroie / 2]) rotate([0, 90, 0]) cylinder(d = 7, h = 4);
        // Ecrou
        translate([largeurCote, profondeur / 2, 17 + largeurCourroie / 2]) rotate([0, 90, 0]) cylinder(d = 8, h = 5.6);
        translate([largeurEmbout - largeurCote -5.6, profondeur / 2, 17 + largeurCourroie / 2]) rotate([0, 90, 0]) cylinder(d = 
        8, h = 5.6);
 
        // Fixation sur solenoide
        translate([largeurEmbout / 2, 7, 10]) cylinder(d = 3.3, h = 20); 
        translate([largeurEmbout / 2, 7, 1]) cylinder(d = 3.1, h = 15);
 
        // Arrondisseur
        translate([0, 4, 0]) rotate([0, 0, 180]) arrondisseurAngle(4, 30);
        translate([largeurEmbout, 4, 0]) rotate([0, 0, -90]) arrondisseurAngle(4, 30);
    }
}
 
module arrondisseurAngle(rayon, hauteur)  {
    difference() {
        cube([rayon, rayon, hauteur]);
        cylinder(r = rayon, h = hauteur);
    }
}
 
module Trapeze(b1, b2, p, h) {
    CubePoints = [
  [ -b1 / 2,  0,  0 ],  //0
  [ b1 / 2,  0,  0 ],  //1
  [ b1 / 2,  p,  0 ],  //2
  [ -b1 / 2,  p,  0 ],  //3
  [ -b2 / 2,  0,  h ],  //4
  [ b2 / 2,  0,  h ],  //5
  [ b2 / 2,  p,  h ],  //6
  [ -b2 / 2,  p,  h ]]; //7
 
    CubeFaces = [
  [0,1,2,3],  // Base
  [4,5,1,0],  // Face
  [7,6,5,4],  // Haut
  [5,6,2,1],  // Droite
  [6,7,3,2],  // Arrière
  [7,4,0,3]]; // Gauche
 
    polyhedron( CubePoints, CubeFaces ); 
}

JOUR 13

24/12/2019

Echec lamentable d'impression des outils pour centrer le dispositif de peinture.

JOUR 14

25/12/2019

Passage par la fraiseuse numérique avec l'utilisation d'un conte-plaqué de 5mm afin d'obtenir ceci :

Centre

$fn = 50;
 
Decalage();
 
module Decalage() {
    difference() {
        // Base
        hull() {
            circle(d  = 60);
            translate([25, 0, 0]) circle(d  = 60);
        }
        for (i = [-26: 5 : 50]) {
            translate([i, 0]) circle(d = 3); // Trou de l'axe
        }
        translate([-50, 22.63]) square([100, 100]);
        for (i = [0 : 3]) {  
            for (j = [0 : 6: 24]) {
            translate([j, 0]) rotate(90 * i) translate([18, 18]) circle(d = 4.2); // Trous de fixations 1
            }
        }
    }
}

JOUR 15

26/12/2019

La fraiseuse numérique à encore travailler. Aujourd'hui réalisation du plateau avec les corrections faites au fil du temps :

module Plateau() {
    difference() {
        hull() { // Forme
            translate([-20, 132]) circle(r=30);
            translate([111, 152]) circle(r=10);
            translate([111, -162]) circle(r=10);
            translate([-20, -142]) circle(r=30);
            translate([-91, 45]) circle(r=30);
            translate([-91, -52]) circle(r=30);
        }
        // Vis support lyre
        translate([-110, -42]) circle(d = 4); // Bas Gauche
        translate([110, -42]) circle(d = 4); // Bas Droite
        translate([-110, 22]) circle(d = 4); // Haut Gauche
        translate([110, 22]) circle(d = 4); // Haut Droite
 
        translate([-45, -36])  circle(d = 4); // Bas Centre Gauche
        translate([-45, 23])  circle(d = 4); // Haut Centre Gauche
        translate([45, -36]) circle(d = 4); // Bas Centre Droite
        translate([45, 23]) circle(d = 4); // Haut Centre Droite
 
        translate([-10, -116]) square([20, 155]); // Emplacement marqueur
        // Passage embout
        translate([0, 109]) circle(d = 26);
        translate([-10, 77]) square([20, 32]);
 
        translate([-10, 39.1]) square([20, 37.8]); // Poche de 1mm de profondeur
 
        translate([38, 37]) square([64, 5]); // Rainure renfort droite
        translate([-102, 37]) square([64, 5]); // // Rainure renfort gauche
 
        translate([0, -4]) circle(d=26); // Sécurité
        // -103.3 Vis arrière
        // 90.7 Vis avant
        // 194 Distance entre deux vis
 
        // Support marqueur arrière
        translate([-20, -83]) circle(d = 4.1);
        translate([-20, -123]) circle(d = 4.1);
        translate([20, -83]) circle(d = 4.1);
        //translate([20, -123]) circle(d = 4.1);
 
        // Support marqueur avant
        translate([-20, 111]) circle(d = 4.1);
        translate([-20, 71]) circle(d = 4.1);
        translate([20, 111]) circle(d = 4.1);
        translate([20, 71]) circle(d = 4.1);
 
        // Support Bouteille
        translate([31, -153]) circle(d = 4.1);
        translate([111, -153]) circle(d = 4.1);
        translate([111, -103]) circle(d = 4.1);
 
        // Support Solénoïde
        translate([-31, -153]) circle(d = 4.1);
 
        // Support Embout Bouteille
        translate([41, 154]) circle(d = 4.1);
        translate([101, 154]) circle(d = 4.1);
        translate([41, 126]) circle(d = 4.1);
        translate([101, 126]) circle(d = 4.1);
    }
}

Une erreur existe encore, mais je la corrigerais peut-être plus tard. Il reste encore à vérifier que le plateau soit bien équilibré par rapport à 'axe de rotation.

JOUR 16

27/12/2019

Mise au point du test logiciel pour la rotation des différents axes. Réussite absolue comme cette vidéo en témoigne : Rotations

Matériel

Visserie

Qtt Nom Diamètre Taille Référence Remarques
20 Vis TCHC acier 8.8 noir EF DIN 912 4 20 TCHC04/020A8NOEF FIXNVIS
20 Vis TCHC acier 8.8 noir EF DIN 912 4 30 TCHC04/030A8NOEF FIXNVIS
1 Ecrou carré DIN 557 5 8x8x4 ECRCAR05/08/08/4ZN FIXNVIS
1 Ecrou nylstop acier zingué blanc DIN 985 4 ECRNYL04ZN FIXNVIS
1 Rondelle acier zingué blanc NFE 25513 4 M RONM04ZN FIXNVIS
Qtt Nom Diamètre Taille Référence Remarques
4 Vis tête cylindrique hexagonale creuse UNF 10-32 1'' eBay
1 Vis TCHC acier 8.8 noir EF DIN 912 3 20 TCHC03/020A8NOEF FIXNVIS
2 Vis TCHC acier 8.8 noir EF DIN 912 4 16 TCHC04/016A8NOEF FIXNVIS
1 Vis TCHC acier 8.8 noir EF DIN 912 5 40 TCHC05/040A8NOEF FIXNVIS
4 Vis TFHC acier 10.9 noir EF DIN 7991 3 12 TFHC03/012A10NOEF FIXNVIS

Alimentation

Boîtier SFX ou TFX

Contrôleur de moteur pas à pas:

A3982

Consommables

Liens

machine_a_peindre.1577479777.txt.gz · Dernière modification: 2019/12/27 21:49 par Mushussu