Browse Source

ajout de l'étalonnage en vitesse

Jackbot 3 years ago
parent
commit
27311f0366
1 changed files with 198 additions and 0 deletions
  1. 198 0
      etalonnage/vitesse.sh

+ 198 - 0
etalonnage/vitesse.sh

@@ -0,0 +1,198 @@
+#!/bin/bash
+
+#fonction appelée en cas de paramètres non valide ou de l'option -h
+usage()
+{
+	# "$(basename "${0}") pour gérer les espaces
+	echo "$(basename "${0}") description"
+	echo ''
+	echo "Ce script permet de générer un fichier gcode"
+	echo "Pour permettre de déterminer la vitesse maximale pour laquelle"
+	echo "le rendu des noirs est vraiment noir"
+	echo ""
+	echo "Le fichier gcode en sortie utilisera des coordonées relatives."
+	echo ""
+	echo "La procédure est la suivante :"
+	echo "-connaitre la distance focale"
+	echo "-connaitre le diamètre du laser"
+	echo "-exécuter le fichier gcode"
+	echo ""
+	echo "Détail des options"
+	echo -e "-f\tfocale du laser en mm"
+	echo -e "-d\tdiamètre du laser en mm"
+	echo -e "-v\tvitesse de gravure minimale en mm/min"
+	echo -e "-V\tvitesse de gravure maximale mm/min"
+	echo -e "-p\tpas entre deux vitesses"
+	echo -e "-l\tlargeur de la mire"
+}
+
+readonly VERSION='1.0'
+
+#affiche la version du script
+version()
+{
+	echo "$(basename "${0}") : ${VERSION}"
+	echo ''
+}
+
+verification()
+{
+	if [ -z  $1  ]
+	then
+		echo "la variable $2 n'a pas été précisée, la valeur par défaut est $3"
+		VALEUR=$3
+	else
+		re='^[0-9]+([.][0-9]+)?$'
+		if ! [[ $1 =~ $re ]]
+		then
+			echo "l'argument $2 n'est pas un nombre"
+			usage
+			exit 25
+		else
+			VALEUR=$1
+		fi
+	fi
+}
+
+#boucle pour la gestion des options
+#s: signifie qu'un paramètre est attendu
+#hV signifie que ces options existent mais ne prennent pas de paramètre
+while getopts "f:d:v:V:p:hV" OPT
+do
+	case "$OPT" in
+		h)
+			usage
+			exit 0
+			;;
+		V)
+			version
+			exit 0
+			;;
+		f)
+			#afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
+			FOCALE=${OPTARG}
+			;;
+		d)
+			#afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
+			DIAMETRE=${OPTARG}
+			;;
+		v)
+			#afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
+			VITESSE_MIN=${OPTARG}
+			;;
+		v)
+			#afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
+			VITESSE_MAX=${OPTARG}
+			;;
+		p)
+			#afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
+			PAS=${OPTARG}
+			;;
+		L)
+			#afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
+			LARGEUR=${OPTARG}
+			;;
+		*)
+			#ce point est atteint lorsqu'une option inexistante est demandée
+			echo "parametres non valide"
+			usage
+			exit 1
+			;;
+	esac
+done
+
+verification "$FOCALE" "focale" 5
+FOCALE=$VALEUR
+echo -e "focale=$FOCALE"
+
+verification "$DIAMETRE" "diamètre" 0.2
+DIAMETRE=$VALEUR
+echo -e "diamètre=$DIAMETRE"
+
+verification "$VITESSE_MIN" "vitesse_min" 500
+VITESSE_MIN=$VALEUR
+echo -e "vitesse_min=$VITESSE_MIN"
+
+verification "$VITESSE_MAX" "vitesse_max" 2000
+VITESSE_MAX=$VALEUR
+echo -e "vitesse_max=$VITESSE_MAX"
+
+verification "$PAS" "taille" 100
+PAS=$VALEUR
+echo -e "taille=$PAS"
+
+verification "$LARGEUR" "largeur" 100
+LARGEUR=$VALEUR
+echo -e "largeur=$LARGEUR"
+
+#la mire est constitué de carrés formant un dégradé
+#sur chaque ligne on gravera des carré de plus en plus foncés
+#16 carrés de 0 à 255
+
+largeur_carre=$(echo "scale=1; $LARGEUR/16.0" | bc)
+demi_largeur_carre=$(echo "scale=1; $LARGEUR/32.0" | bc)
+hauteur_reelle=0
+
+#création du fichier openscad
+echo "\$fn = 30;valeur=\"0\";translate([-1, -1, 0]){text(valeur, size=3, valign=\"top\", halign=\"right\");}" > temp.scad
+
+echo -e "G91\nG21\nG0 Z $FOCALE" > sortie.gcode
+for vitesse in `seq $VITESSE_MIN $PAS $VITESSE_MAX`
+do
+	echo -e "G1 F$vitesse\n" >> sortie.gcode
+
+	#génération du GCode pour noter la vitesse
+	openscad -o temp.dxf -D 'valeur="'$vitesse'"' temp.scad
+	dxf2gcode temp.dxf -q -e "${vitesse}.gcode"
+	
+	echo -e "\n;écriture de la vitesse : $vitesse\n"
+	cat $vitesse.gcode >> sortie.gcode
+	
+	rm $vitesse.gcode
+	
+	for hauteur in `seq 0 $DIAMETRE $demi_largeur_carre`
+	do
+		#on trace une ligne de $DIAMETRE d'épaisseur en faisant varier la puissance
+		for puissance in `seq 15 15 255`
+		do
+			echo -e "M106 P1 S$puissance\nG1 X$largeur_carre" >> sortie.gcode
+		done
+
+		#une fois qu'on a tracé une ligne on se décalle d'abord sur Y
+		echo -e "\n;Nouvelle ligne\nM400\nG1 X0 Y-$DIAMETRE" >> sortie.gcode
+		hauteur_reelle=$(echo "scale=1; $hauteur_reelle + $DIAMETRE" | bc)
+
+		#puis on repart dans l'autre sens
+		for puissance in `seq 255 -15 15`
+		do
+			echo -e "M106 P1 S$puissance\nG1 X-$largeur_carre" >> sortie.gcode
+		done
+
+		echo -e "\n;Nouvelle ligne\nM400\nG1 X0 Y-$DIAMETRE" >> sortie.gcode
+		hauteur_reelle=$(echo "scale=1; $hauteur_reelle + $DIAMETRE" | bc)
+	done
+	#à ce moment là on vient de finir une ligne de carrés
+	#on place donc une délimitation avant de continuer
+	echo -e "\nM106 P1 S255" >> sortie.gcode
+	echo -e "G1 X$TAILLE" >> sortie.gcode
+	echo -e "G1 X-$TAILLE" >> sortie.gcode
+	echo -e "G1 X0 Y-$DIAMETRE" >> sortie.gcode
+	hauteur_reelle=$(echo "scale=1; $hauteur_reelle + $DIAMETRE" | bc)
+
+	echo -e "\nM106 P1 S0\nM400" >> sortie.gcode
+done
+
+#une fois fini on trace les délimitation verticales
+echo -e "\n;grille\nM106 P1 S255" >> sortie.gcode
+for colonne in `seq 1 8`
+do
+	echo -e "G1 X0 Y$hauteur_reelle" >> sortie.gcode
+	echo -e "G1 X$largeur_carre" >> sortie.gcode
+	echo -e "G1 X0 Y-$hauteur_reelle" >> sortie.gcode
+	echo -e "G1 X$largeur_carre" >> sortie.gcode
+done
+
+#on coupe le laser
+echo -e "\nM106 P1 S0" >> sortie.gcode
+
+exit 0