Script python pour trouver le centre d'une pièce

Le logiciel le plus complet pour piloter GRBL
Avatar du membre
scalaire00
Pied Tendre Actif
Messages : 15
Enregistré le : 08 nov. 2019, 20:12
Localisation : Nord du 77
A été remercié : 1 fois
Contact :

Script python pour trouver le centre d'une pièce

Message non lu par scalaire00 » 08 nov. 2019, 22:53

Salut,
j’essaie de programmer un script pour trouver le centre d'une pièce. J'arrive à palper le Z puis le bord droit du Y et le bord gauche du Y mais je sais pas mettre les valeurs du palpage dans une variable. Quelqu'un as une piste?

@++ Jean Claude
Avatar du membre
DranerB
Administrateur
Messages : 1578
Enregistré le : 31 janv. 2019, 11:56
Localisation : Bourbon-Lancy, France
A remercié : 97 fois
A été remercié : 190 fois
Contact :

Re: Script python

Message non lu par DranerB » 09 nov. 2019, 00:13

scalaire00 a écrit :
08 nov. 2019, 22:53
Salut,
j’essaie de programmer un script pour trouver le centre d'une pièce. J'arrive à palper le Z puis le bord droit du Y et le bord gauche du Y mais je sais pas mettre les valeurs du palpage dans une variable. Quelqu'un as une piste?

@++ Jean Claude
Heuh... Dans quel contexte? Je veux dire, script Python où? bCNC?
Bien Cordialement,
Bernard
Image
Avatar du membre
scalaire00
Pied Tendre Actif
Messages : 15
Enregistré le : 08 nov. 2019, 20:12
Localisation : Nord du 77
A été remercié : 1 fois
Contact :

Re: Script python

Message non lu par scalaire00 » 09 nov. 2019, 01:29

Dans bCNC pour programmer les boutons.
Avatar du membre
scalaire00
Pied Tendre Actif
Messages : 15
Enregistré le : 08 nov. 2019, 20:12
Localisation : Nord du 77
A été remercié : 1 fois
Contact :

Re: Script python

Message non lu par scalaire00 » 09 nov. 2019, 10:18

Image

Voici ce que j'ai trouvé comme solution.
Je me place approximativement au centre de ma pièce puis je sonde le Z.
je me déplace à l’extérieur de la pièce plonge à Z-2mm.
Je palpe le bord droit de la pièce par exemple.
Idem pour le bord gauche.
Le centre est au milieu des deux palpages.

Ce que je n'arrive pas à faire c'est mettre dans des variables le résultat du palpage des bords de la pièce.
Avatar du membre
DranerB
Administrateur
Messages : 1578
Enregistré le : 31 janv. 2019, 11:56
Localisation : Bourbon-Lancy, France
A remercié : 97 fois
A été remercié : 190 fois
Contact :

Re: Script python

Message non lu par DranerB » 09 nov. 2019, 12:57

scalaire00 a écrit :
09 nov. 2019, 10:18
Image

Voici ce que j'ai trouvé comme solution.
Je me place approximativement au centre de ma pièce puis je sonde le Z.
je me déplace à l’extérieur de la pièce plonge à Z-2mm.
Je palpe le bord droit de la pièce par exemple.
Idem pour le bord gauche.
Le centre est au milieu des deux palpages.

Ce que je n'arrive pas à faire c'est mettre dans des variables le résultat du palpage des bords de la pièce.
Quand tu dis "palpage", tu palpe comment?

Si tu cherche à determiner la position origine dans un coin, avec une sonde "XYZ", j'ai une macro dans bCNC que je peux te passer si tu veux.

Maintenant, pour déterminer le centre, ça va effectivement être un peu plus compliqué:

Tout d'abord, je pense que ce n'est pas très futé de partir de dimension "fixe" d'un bloc. Il faut demander à l'utilisateur la longueur et la largeur, même si elles ne sont pas parfaitement exactes. Ensuite, il y a des variables internes à bCNC qui sont utilisables dans un script, documentées ici: https://github.com/vlachoudis/bCNC/issues/1135

Tu devrais pouvoir t'inspirer de quelque chose comme ça:

Code : Tout sélectionner

%_long = app.entry("Entrez la longueur de la pièce:");
%_larg = app.entry("Entrez la largeur de la pièce:");
%_posXmoins = float(0.0);
%_posXplus = float(0.0);
%_posXmi = float(0.0);
%_posYmoins = float(0.0);
%_posYplus = float(0.0);
%_posYmi = float(0.0);
%msg Debut de Sondage
G38.2 Z-45 F100; (Sonde en Z de 45 mm maximum a 100 mm/min)
G10 L20 P1 Z0 (stocke ce qui a été trouvé comme position Z0)
G38.4 Z1 F20 (Remonte de 1mm a vitesse lente, déclenche lorsque le contact est perdu. Devrait aider a améliorer la precision)
G10 L20 P1 Z0 (store la valeur trouvée dans G54)
G91 G0 Z3 (remonte de 3mm rapidement)
G91 G0 X-[str(float(_long/2+20))] (Recule en X rapidement de la moitié de la longueur + 20 mm)
G91 G0 Z-6 (descend de 6mm rapidement, en preparation du sondage en X)
G38.2 X[str(float(_long/2+20))] F100 (Avance d'autant qu'on a reculé- On doit forcemment trouver, puisque c'est de la qu'on vient)
G38.4 X-1 F20 (Ecarte de 1mm a vitesse lente, declenche lorsque le contact est perdu. Devrait aider a améliorer la precision)
%_posXmoins = float(wx)
(Maintenant, on répète la même suite d'opération, mais en x+
G91 G0 Z6 (remonte de 6mm rapidement)
G91 G0 X[str(float(_long+20))] (Avance en X rapidement de toute la longueur + 20 mm)
G91 G0 Z-6 (descend de 6mm rapidement, en preparation du sondage en X)
G38.2 X-[str(float(_long/2+20))] F100 (Avance de la moitié de la longueur - On doit forcemment trouver, puisque c'est de la qu'on vient)
G38.4 X1 F20 (Ecarte de 1mm a vitesse lente, declenche lorsque le contact est perdu. Devrait aider a améliorer la precision)
%_posXplus = float(wx)
%_posXmi = _posXplus - _posXmoins
G10 L20 P1 X[str(_posXmi)] (store la valeur trouvee pour être X0)
Faire la même chose pour Y. Il y a certainement des bugs, mais ça devrait te mettre sur la piste.
Bien Cordialement,
Bernard
Image
Avatar du membre
scalaire00
Pied Tendre Actif
Messages : 15
Enregistré le : 08 nov. 2019, 20:12
Localisation : Nord du 77
A été remercié : 1 fois
Contact :

Re: Script python

Message non lu par scalaire00 » 09 nov. 2019, 14:27

Salut,
Quand tu dis "palpage", tu palpe comment?
Je palpe avec un G38.2 Zxxxx est un câble avec la masse branchée sur l'outil et un câble branché sur la pièce reliée au pin CLS du shield Cnc ( ou la pin A5 d'un arduino avec GRBL de tests sans la cnc connecté).
Si tu cherche à déterminer la position origine dans un coin, avec une sonde "XYZ", j'ai une macro dans bCNC que je peux te passer si tu veux.
Oui volontier.
Maintenant, pour déterminer le centre, ça va effectivement être un peu plus compliqué:
Oui je pense fortement.
Tout d'abord, je pense que ce n'est pas très futé de partir de dimension "fixe" d'un bloc. Il faut demander à l'utilisateur la longueur et la largeur, même si elles ne sont pas parfaitement exactes.
Oui j'ai pensé un mettre un boite de dialogue pour le diamètre de l'outil & les dimensions de la pièce. Je suis en phase de test.
Ensuite, il y a des variables internes à bCNC qui sont utilisables dans un script, documentées ici: https://github.com/vlachoudis/bCNC/issues/1135
Merci pour le lien et le code.

Je vais étudier le code.

Les pièces que je veux usiner feront 5 mm d'épaisseur et une largeur variable. Je veux percer une série de trous de 1.1 mm sur une face puis retournée la pièce et refaire une série de perçages et les trous devront se rejoindre.

@++ Jean Claude
Avatar du membre
DranerB
Administrateur
Messages : 1578
Enregistré le : 31 janv. 2019, 11:56
Localisation : Bourbon-Lancy, France
A remercié : 97 fois
A été remercié : 190 fois
Contact :

Re: Script python

Message non lu par DranerB » 09 nov. 2019, 15:56

scalaire00 a écrit :
09 nov. 2019, 14:27
Salut,
Quand tu dis "palpage", tu palpe comment?
Je palpe avec un G38.2 Zxxxx est un câble avec la masse branchée sur l'outil et un câble branché sur la pièce reliée au pin CLS du shield Cnc ( ou la pin A5 d'un arduino avec GRBL de tests sans la cnc connecté).
Donc ta pièce est métallique, c'est ce que je me demandais
scalaire00 a écrit :
09 nov. 2019, 14:27
Si tu cherche à déterminer la position origine dans un coin, avec une sonde "XYZ", j'ai une macro dans bCNC que je peux te passer si tu veux.
Oui volontier.
le voici:

Code : Tout sélectionner

%_mydia=app.entry("Entrez le diametre:");
%_demidia=float(_mydia)/2;
%_epZ = float(0); (4.5)
%_epX = float(0); (12.5)
%_epY = float(0); (11.5)
%_correctZ = str(_epZ);
%_correctX = str(_demidia + _epX);
%_correctY = str(_demidia + _epY);
%msg Debut de Sondage
(G92.2) (Suppression de toutes les valeurs d'offset existantes)
G38.2 Z-45 F100 (Sonde en Z de 45 mm maximum a 100 mm/min)
G10 L20 P1 Z[_correctZ]
G38.4 Z(str(_epZ + float(1.0))) F20 ([str(_epZ + float(1.0)] F20 )(Remonte de 1mm a vitesse lente, declenche lorsque le contact est perdu. Devrait aider a ameliorer la precision)
G10 L20 P1 Z[_correctZ] (store la valeur trouvee + 0.1 mm-essai feuille alu)
G91 G0 Z3  ([str(float(3.0) + _epZ)]) (remonte de 3mm rapidement)
G91 G0 X-30 (Recule rapidement en X de 50 mm)
G91 G0 Z-[str(_epZ + float(4.0))] (descend a Z-8 rapidement, en preparation du sondage en X)
G38.2 X30 F100 (sonde en X de 50mm - On doit forcemment trouver, puisque c'est de la qu'on vient)
G38.4 X-[str(_epX + float(1.0))] F20 (Ecarte de 1mm a vitesse lente, declenche lorsque le contact est perdu. Devrait aider a ameliorer la precision)
G10 L20 P1 X-[_correctX] (store la valeur trouvee + correction)
G91 G0 X-3 ([str(_epY + float(3.0)]) (recule de 3mm en Z)
G91 G0 Y-30 (Recule rapidement en Y de 25 mm)
G91 G0 X30
G38.2 Y30 F100 (sonde en y de 100mm - On doit forcemment trouver, puisque c'est de la qu'on vient)
G38.4 Y-[str(_epY + float(1.0))] F20 (Ecarte de 1mm a vitesse lente, declenche lorsque le contact est perdu. Devrait aider a ameliorer la precision)
G10 L20 P1 Y-[_correctY] (store la valeur trouvee + correction)
G91 G0 Y-3 ([str(float(_correctY) + float(3.0)])  (recule de 3mm en Y)
G91 G0 Z20 (remonte de 20mm)
G90 G0 X0 Y0 (on se postionne sur les valeurs trouvées en X et en Y)
G90 G1 Z0 F100 (on descend à la valeur trouvée en Z)
G54 X0 Y0 Z0
%wait
%msg Sondage Termine
A bientôt. Partage tes progrés (et/où problémes... :-) )
Bien Cordialement,
Bernard
Image
Avatar du membre
scalaire00
Pied Tendre Actif
Messages : 15
Enregistré le : 08 nov. 2019, 20:12
Localisation : Nord du 77
A été remercié : 1 fois
Contact :

Re: Script python

Message non lu par scalaire00 » 09 nov. 2019, 16:18

Oui j'ai oublié de préciser que c’était du laiton.

Pour info: Laiton d'horlogerie 2e titre cuzn39pb3 ( le 3% de plomb sert de lubrifiant à sec pour un usinage sans arrosage ). C'est mieux sans arrosage avec une CNC en MDF :D

Merci pour le code ça va m'aider.

@++ Jean Claude
Avatar du membre
DranerB
Administrateur
Messages : 1578
Enregistré le : 31 janv. 2019, 11:56
Localisation : Bourbon-Lancy, France
A remercié : 97 fois
A été remercié : 190 fois
Contact :

Re: Script python

Message non lu par DranerB » 09 nov. 2019, 18:20

scalaire00 a écrit :
09 nov. 2019, 16:18
C'est mieux sans arrosage avec une CNC en MDF :D
Oui, et j'en sais quelque chose....

PS: Le code pour la sonde XYZ est pour le coin en bas, à droite (X-, Y-), mais je pense que tu l'as déjà compris.
Bien Cordialement,
Bernard
Image
Avatar du membre
scalaire00
Pied Tendre Actif
Messages : 15
Enregistré le : 08 nov. 2019, 20:12
Localisation : Nord du 77
A été remercié : 1 fois
Contact :

Re: Script python

Message non lu par scalaire00 » 12 nov. 2019, 12:09

Salut à tous,

j'ai un peu avancé. j'arrive à palper le X, je fais le zéro X sur une face puis palpe l'autre face mais impossible de récupérer la valeur.
Alors j'ai:
- un bouton qui trouve la largeur.

Code : Tout sélectionner

%_DiaOutil = app.entry("Entrez diametre de l'outils:");
%_long = app.entry("Entrez la longueur de la piece:");
(# %_larg = app.entry("Entrez la largeur de la piece:"); )
%_posXmoins = float();
%_posXplus = float();
%_posXmi = float();
%_posYmoins = float();
%_posYplus = float();
%_posYmi = float();
%msg Debut de Sondage
(=======  Z  =========)
G92 x0 y0 z0 		(# Reset des offsets )
G38.2 Z-45 F100; 	(# Sonde en Z de 45 mm maximum a 100 mm/min)
G10 L20 P1 Z0 	(# stocke ce qui a ete trouve comme position Z0)
( G38.4 Z1 F20 )	(# Remonte de 1mm a vitesse lente, declenche lorsque le )
					(# contact est perdu. Devrait aider a ameliorer la precision)
G10 L20 P1 Z0 		(# stock la valeur trouvee dans G54)
G91 G0 Z3 			(# remonte de 3mm rapidement)
(# =======  palpage X nega =========)
(# G91 G0 X-[float(_long) / 2 + (float(_DiaOutil) * 2) ] Recule en X rapidement de )
(#la moitie de la longueur + 2 x diametre outil )
G91 G0 X-[float(_long)/2 + 10] 	(# Recule en X rapidement de la moitie de la longueur + 10 mm )
G91 G0 Z-5 					(# descend de 5 mm rapidement, en preparation du sondage en X)
G38.2 X20 F50 				(# Sonde en x de 20 mm maximum a 50 mm/min)
G92 x0 						(# reset offset Axe X)
%_posXmi = float(wx)/2			(# stock la valeur trouvee dans la variable _posXmi )	
(# G38.4 x-1 F20 )				(# Remonte de 1mm a vitesse lente, declenche lorsque le )
							(# contact est perdu. Devrait aider a ameliorer la precision)
G91 G0 Z5 					(# remonte de 5mm rapidement)
(# =======  palpage X posi =========)
G91 G0 X[str(float(_long) + 11) ]  	(# deplacement rapide vers l'autre face de la piece)
G91 G0 Z-5 					(# descend de 5mm rapidement, en preparation du sondage en X)
G38.2 X-20 F50 				(# Sonde en x de 20 mm maximum a 50 mm/min)
G91 G0 Z5 					(# remonte de 5mm rapidement)
(# G92 X[str(_posXmi)]) 			(# stock la valeur de _poXmi dans offset X )
(# G4 P2)
(# G92 X[wx / 2])
G4 P2						(# Pause de 2s)
(# G90 x[_dist] )
(# =======  palpage Y posi =========)
(# =======  palpage Y nega =========)
%wait
%msg Sondage Termine
- Un autre bouton qui divise la valeur de x en deux ( donc le centre ).

Code : Tout sélectionner

%_posi = float(wx);
%_demi = _posi / 2;
G90 x[_demi]
je n'arrive pas à le faire en un seul script mais ça a l'aire de fonctionner (tester sur un arduino de test + un bouton sur la pin A5 sans la cnc).

@++ Jean Claude
Répondre