vitesse.sh 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  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. echo -e "G1 F$vitesse\n" >> sortie.gcode
  124. #génération du GCode pour noter la vitesse
  125. openscad -o temp.dxf -D 'valeur="'$vitesse'"' temp.scad
  126. dxf2gcode temp.dxf -q -e "${vitesse}.gcode"
  127. echo -e "\n;écriture de la vitesse : $vitesse\n" >> sortie.gcode
  128. cat $vitesse.gcode >> sortie.gcode
  129. rm $vitesse.gcode
  130. echo -e "G1 F$vitesse\n" >> sortie.gcode
  131. for hauteur in `seq 0 $DIAMETRE $demi_largeur_carre`
  132. do
  133. #on trace une ligne de $DIAMETRE d'épaisseur en faisant varier la puissance
  134. for puissance in `seq 15 15 255`
  135. do
  136. echo -e "M106 P1 S$puissance\nG1 X$largeur_carre" >> sortie.gcode
  137. done
  138. #une fois qu'on a tracé une ligne on se décalle d'abord sur Y
  139. echo -e "\n;Nouvelle ligne\nM400\nG1 X0 Y-$DIAMETRE" >> sortie.gcode
  140. hauteur_reelle=$(echo "scale=1; $hauteur_reelle + $DIAMETRE" | bc)
  141. #puis on repart dans l'autre sens
  142. for puissance in `seq 255 -15 15`
  143. do
  144. echo -e "M106 P1 S$puissance\nG1 X-$largeur_carre" >> sortie.gcode
  145. done
  146. echo -e "\n;Nouvelle ligne\nM400\nG1 X0 Y-$DIAMETRE" >> sortie.gcode
  147. hauteur_reelle=$(echo "scale=1; $hauteur_reelle + $DIAMETRE" | bc)
  148. done
  149. #à ce moment là on vient de finir une ligne de carrés
  150. #on place donc une délimitation avant de continuer
  151. echo -e "\nM106 P1 S255" >> sortie.gcode
  152. echo -e "G1 X$TAILLE" >> sortie.gcode
  153. echo -e "G1 X-$TAILLE" >> sortie.gcode
  154. echo -e "G1 X0 Y-$DIAMETRE" >> sortie.gcode
  155. hauteur_reelle=$(echo "scale=1; $hauteur_reelle + $DIAMETRE" | bc)
  156. echo -e "\nM106 P1 S0\nM400" >> sortie.gcode
  157. done
  158. #suppression des fichiers temporaires
  159. rm temp.dxf
  160. rm temp.scad
  161. #une fois fini on trace les délimitation verticales
  162. echo -e "\n;grille\nM106 P1 S255" >> sortie.gcode
  163. for colonne in `seq 1 8`
  164. do
  165. echo -e "G1 X0 Y$hauteur_reelle" >> sortie.gcode
  166. echo -e "G1 X$largeur_carre" >> sortie.gcode
  167. echo -e "G1 X0 Y-$hauteur_reelle" >> sortie.gcode
  168. echo -e "G1 X$largeur_carre" >> sortie.gcode
  169. done
  170. #on coupe le laser
  171. echo -e "\nM106 P1 S0" >> sortie.gcode
  172. echo -e "\nhauteur de la mire : $hauteur_reelle\n"
  173. exit 0