vitesse.sh 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  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:hV" OPT
  56. do
  57. case "$OPT" in
  58. h)
  59. usage
  60. exit 0
  61. ;;
  62. V)
  63. version
  64. exit 0
  65. ;;
  66. f)
  67. #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
  68. FOCALE=${OPTARG}
  69. ;;
  70. d)
  71. #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
  72. DIAMETRE=${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_MIN=${OPTARG}
  77. ;;
  78. v)
  79. #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
  80. VITESSE_MAX=${OPTARG}
  81. ;;
  82. p)
  83. #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
  84. PAS=${OPTARG}
  85. ;;
  86. L)
  87. #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
  88. LARGEUR=${OPTARG}
  89. ;;
  90. *)
  91. #ce point est atteint lorsqu'une option inexistante est demandée
  92. echo "parametres non valide"
  93. usage
  94. exit 1
  95. ;;
  96. esac
  97. done
  98. verification "$FOCALE" "focale" 5
  99. FOCALE=$VALEUR
  100. echo -e "focale=$FOCALE"
  101. verification "$DIAMETRE" "diamètre" 0.2
  102. DIAMETRE=$VALEUR
  103. echo -e "diamètre=$DIAMETRE"
  104. verification "$VITESSE_MIN" "vitesse_min" 500
  105. VITESSE_MIN=$VALEUR
  106. echo -e "vitesse_min=$VITESSE_MIN"
  107. verification "$VITESSE_MAX" "vitesse_max" 2000
  108. VITESSE_MAX=$VALEUR
  109. echo -e "vitesse_max=$VITESSE_MAX"
  110. verification "$PAS" "taille" 100
  111. PAS=$VALEUR
  112. echo -e "taille=$PAS"
  113. verification "$LARGEUR" "largeur" 100
  114. LARGEUR=$VALEUR
  115. echo -e "largeur=$LARGEUR"
  116. #la mire est constitué de carrés formant un dégradé
  117. #sur chaque ligne on gravera des carré de plus en plus foncés
  118. #16 carrés de 0 à 255
  119. largeur_carre=$(echo "scale=1; $LARGEUR/16.0" | bc)
  120. demi_largeur_carre=$(echo "scale=1; $LARGEUR/32.0" | bc)
  121. hauteur_reelle=0
  122. #création du fichier openscad
  123. echo "\$fn = 30;valeur=\"0\";translate([-1, -1, 0]){text(valeur, size=3, valign=\"top\", halign=\"right\");}" > temp.scad
  124. echo -e "G91\nG21\nG0 Z $FOCALE" > sortie.gcode
  125. for vitesse in `seq $VITESSE_MIN $PAS $VITESSE_MAX`
  126. do
  127. echo -e "G1 F$vitesse\n" >> sortie.gcode
  128. #génération du GCode pour noter la vitesse
  129. openscad -o temp.dxf -D 'valeur="'$vitesse'"' temp.scad
  130. dxf2gcode temp.dxf -q -e "${vitesse}.gcode"
  131. echo -e "\n;écriture de la vitesse : $vitesse\n"
  132. cat $vitesse.gcode >> sortie.gcode
  133. rm $vitesse.gcode
  134. for hauteur in `seq 0 $DIAMETRE $demi_largeur_carre`
  135. do
  136. #on trace une ligne de $DIAMETRE d'épaisseur en faisant varier la puissance
  137. for puissance in `seq 15 15 255`
  138. do
  139. echo -e "M106 P1 S$puissance\nG1 X$largeur_carre" >> sortie.gcode
  140. done
  141. #une fois qu'on a tracé une ligne on se décalle d'abord sur Y
  142. echo -e "\n;Nouvelle ligne\nM400\nG1 X0 Y-$DIAMETRE" >> sortie.gcode
  143. hauteur_reelle=$(echo "scale=1; $hauteur_reelle + $DIAMETRE" | bc)
  144. #puis on repart dans l'autre sens
  145. for puissance in `seq 255 -15 15`
  146. do
  147. echo -e "M106 P1 S$puissance\nG1 X-$largeur_carre" >> sortie.gcode
  148. done
  149. echo -e "\n;Nouvelle ligne\nM400\nG1 X0 Y-$DIAMETRE" >> sortie.gcode
  150. hauteur_reelle=$(echo "scale=1; $hauteur_reelle + $DIAMETRE" | bc)
  151. done
  152. #à ce moment là on vient de finir une ligne de carrés
  153. #on place donc une délimitation avant de continuer
  154. echo -e "\nM106 P1 S255" >> sortie.gcode
  155. echo -e "G1 X$TAILLE" >> sortie.gcode
  156. echo -e "G1 X-$TAILLE" >> sortie.gcode
  157. echo -e "G1 X0 Y-$DIAMETRE" >> sortie.gcode
  158. hauteur_reelle=$(echo "scale=1; $hauteur_reelle + $DIAMETRE" | bc)
  159. echo -e "\nM106 P1 S0\nM400" >> sortie.gcode
  160. done
  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. exit 0