vitesse.sh 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. #!/bin/bash
  2. #fonction appelée en cas de paramètres non valide ou de l'option -h
  3. usage()
  4. {
  5. # "$(basename "${0}") pour gérer les espaces
  6. echo "$(basename "${0}") description"
  7. echo ''
  8. echo "Ce script permet de générer un fichier gcode"
  9. echo "Pour permettre de déterminer la vitesse maximale pour laquelle"
  10. echo "le rendu des noirs est vraiment noir"
  11. echo ""
  12. echo "Le fichier gcode en sortie utilisera des coordonées relatives."
  13. echo ""
  14. echo "La procédure est la suivante :"
  15. echo "-connaitre la distance focale"
  16. echo "-connaitre le diamètre du laser"
  17. echo "-exécuter le fichier gcode"
  18. echo ""
  19. echo "Détail des options"
  20. echo -e "-f\tfocale du laser en mm"
  21. echo -e "-d\tdiamètre du laser en mm"
  22. echo -e "-v\tvitesse de gravure minimale en mm/min"
  23. echo -e "-V\tvitesse de gravure maximale mm/min"
  24. echo -e "-p\tpas entre deux vitesses"
  25. echo -e "-l\tlargeur de la mire"
  26. }
  27. readonly VERSION='1.0'
  28. #affiche la version du script
  29. version()
  30. {
  31. echo "$(basename "${0}") : ${VERSION}"
  32. echo ''
  33. }
  34. verification()
  35. {
  36. if [ -z $1 ]
  37. then
  38. echo "la variable $2 n'a pas été précisée, la valeur par défaut est $3"
  39. VALEUR=$3
  40. else
  41. re='^[0-9]+([.][0-9]+)?$'
  42. if ! [[ $1 =~ $re ]]
  43. then
  44. echo "l'argument $2 n'est pas un nombre"
  45. usage
  46. exit 25
  47. else
  48. VALEUR=$1
  49. fi
  50. fi
  51. }
  52. #boucle pour la gestion des options
  53. #s: signifie qu'un paramètre est attendu
  54. #hV signifie que ces options existent mais ne prennent pas de paramètre
  55. while getopts "f:d:v:V:p:l:h" OPT
  56. do
  57. case "$OPT" in
  58. h)
  59. usage
  60. exit 0
  61. ;;
  62. f)
  63. #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
  64. FOCALE=${OPTARG}
  65. ;;
  66. d)
  67. #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
  68. DIAMETRE=${OPTARG}
  69. ;;
  70. v)
  71. #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
  72. VITESSE_MIN=${OPTARG}
  73. ;;
  74. V)
  75. #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
  76. VITESSE_MAX=${OPTARG}
  77. ;;
  78. p)
  79. #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
  80. PAS=${OPTARG}
  81. ;;
  82. l)
  83. #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
  84. LARGEUR=${OPTARG}
  85. ;;
  86. *)
  87. #ce point est atteint lorsqu'une option inexistante est demandée
  88. echo "parametres non valide"
  89. usage
  90. exit 1
  91. ;;
  92. esac
  93. done
  94. verification "$FOCALE" "focale" 5
  95. FOCALE=$VALEUR
  96. echo -e "focale=$FOCALE"
  97. verification "$DIAMETRE" "diamètre" 0.2
  98. DIAMETRE=$VALEUR
  99. echo -e "diamètre=$DIAMETRE"
  100. verification "$VITESSE_MIN" "vitesse_min" 500
  101. VITESSE_MIN=$VALEUR
  102. echo -e "vitesse_min=$VITESSE_MIN"
  103. verification "$VITESSE_MAX" "vitesse_max" 2000
  104. VITESSE_MAX=$VALEUR
  105. echo -e "vitesse_max=$VITESSE_MAX"
  106. verification "$PAS" "taille" 100
  107. PAS=$VALEUR
  108. echo -e "taille=$PAS"
  109. verification "$LARGEUR" "largeur" 100
  110. LARGEUR=$VALEUR
  111. echo -e "largeur=$LARGEUR"
  112. #la mire est constitué de carrés formant un dégradé
  113. #sur chaque ligne on gravera des carré de plus en plus foncés
  114. #16 carrés de 0 à 255
  115. largeur_carre=$(echo "scale=1; $LARGEUR/16.0" | bc)
  116. demi_largeur_carre=$(echo "scale=1; $LARGEUR/32.0" | bc)
  117. hauteur_reelle=0
  118. #création du fichier openscad
  119. echo "\$fn = 30;valeur=\"0\";translate([-1, -1, 0]){text(valeur, size=3, valign=\"top\", halign=\"right\");}" > temp.scad
  120. echo -e "G91\nG21\nG0 Z $FOCALE" > sortie.gcode
  121. for vitesse in `seq $VITESSE_MIN $PAS $VITESSE_MAX`
  122. do
  123. #génération du GCode pour noter la vitesse
  124. openscad -o temp.dxf -D 'valeur="'$vitesse'"' temp.scad
  125. dxf2gcode temp.dxf -q -e "${vitesse}.gcode"
  126. echo -e "\n;écriture de la vitesse : $vitesse\n" >> sortie.gcode
  127. cat $vitesse.gcode >> sortie.gcode
  128. rm $vitesse.gcode
  129. echo -e "G1 F$vitesse\n" >> sortie.gcode
  130. for hauteur in `seq 0 $DIAMETRE $demi_largeur_carre`
  131. do
  132. #on trace une ligne de $DIAMETRE d'épaisseur en faisant varier la puissance
  133. for puissance in `seq 15 15 255`
  134. do
  135. echo -e "M106 P1 S$puissance\nG1 X$largeur_carre" >> sortie.gcode
  136. done
  137. #une fois qu'on a tracé une ligne on se décalle d'abord sur Y
  138. echo -e "\n;Nouvelle ligne\nM400\nG1 X0 Y-$DIAMETRE" >> sortie.gcode
  139. hauteur_reelle=$(echo "scale=1; $hauteur_reelle + $DIAMETRE" | bc)
  140. #puis on repart dans l'autre sens
  141. for puissance in `seq 255 -15 15`
  142. do
  143. echo -e "M106 P1 S$puissance\nG1 X-$largeur_carre" >> sortie.gcode
  144. done
  145. echo -e "\n;Nouvelle ligne\nM400\nG1 X0 Y-$DIAMETRE" >> sortie.gcode
  146. hauteur_reelle=$(echo "scale=1; $hauteur_reelle + $DIAMETRE" | bc)
  147. done
  148. #à ce moment là on vient de finir une ligne de carrés
  149. #on place donc une délimitation avant de continuer
  150. echo -e "\nM106 P1 S255" >> sortie.gcode
  151. echo -e "G1 X$TAILLE" >> sortie.gcode
  152. echo -e "G1 X-$TAILLE" >> sortie.gcode
  153. echo -e "G1 X0 Y-$DIAMETRE" >> sortie.gcode
  154. hauteur_reelle=$(echo "scale=1; $hauteur_reelle + $DIAMETRE" | bc)
  155. echo -e "\nM106 P1 S0\nM400" >> sortie.gcode
  156. done
  157. #suppression des fichiers temporaires
  158. rm temp.dxf
  159. rm temp.scad
  160. #une fois fini on trace les délimitation verticales
  161. echo -e "\n;grille\nM106 P1 S255" >> sortie.gcode
  162. for colonne in `seq 1 8`
  163. do
  164. echo -e "G1 X0 Y$hauteur_reelle" >> sortie.gcode
  165. echo -e "G1 X$largeur_carre" >> sortie.gcode
  166. echo -e "G1 X0 Y-$hauteur_reelle" >> sortie.gcode
  167. echo -e "G1 X$largeur_carre" >> sortie.gcode
  168. done
  169. #on coupe le laser
  170. echo -e "\nM106 P1 S0" >> sortie.gcode
  171. echo -e "\nhauteur de la mire : $hauteur_reelle\n"
  172. exit 0