calibration_focale.sh 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  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 "afin de trouver la bonne distance focale du laser"
  10. echo "ce script n'est utile que sur les imprimantes 3D puisqu'on joue sur l'axe Z"
  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 grossièrement la distance focale"
  16. echo "-placer la tête de l'imprimante 3D en buté sur l'objet à graver"
  17. echo "-exécuter le fichier gcode"
  18. echo ""
  19. echo "Détail des options"
  20. echo -e "-m\thauteur relative minimale en mm"
  21. echo -e "-M\thauteur relative maximale en mm"
  22. echo -e "-p\tpas entre deux hauteurs en mm"
  23. }
  24. readonly VERSION='1.0'
  25. #affiche la version du script
  26. version()
  27. {
  28. echo "$(basename "${0}") : ${VERSION}"
  29. echo ''
  30. }
  31. verification()
  32. {
  33. if [ -z $1 ]
  34. then
  35. echo "la variable $2 n'a pas été précisée, la valeur par défaut est $3"
  36. VALEUR=$3
  37. else
  38. re='^[0-9]+([.][0-9]+)?$'
  39. if ! [[ $1 =~ $re ]]
  40. then
  41. echo "l'argument $2 n'est pas un nombre"
  42. usage
  43. exit 25
  44. else
  45. VALEUR=$1
  46. fi
  47. fi
  48. }
  49. #boucle pour la gestion des options
  50. #s: signifie qu'un paramètre est attendu
  51. #hV signifie que ces options existent mais ne prennent pas de paramètre
  52. while getopts "m:M:p:hV" OPT
  53. do
  54. case "$OPT" in
  55. h)
  56. usage
  57. exit 0
  58. ;;
  59. V)
  60. version
  61. exit 0
  62. ;;
  63. m)
  64. H_MIN=${OPTARG}
  65. ;;
  66. M)
  67. H_MAX=${OPTARG}
  68. ;;
  69. p)
  70. PAS=${OPTARG}
  71. ;;
  72. *)
  73. #ce point est atteint lorsqu'une option inexistante est demandée
  74. echo "parametres non valide"
  75. usage
  76. exit 1
  77. ;;
  78. esac
  79. done
  80. verification "$H_MIN" "hauteur minimale" 2
  81. H_MIN=$VALEUR
  82. echo -e "hauteur minimale=$H_MIN"
  83. verification "$H_MAX" "hauteur maximale" 7
  84. H_MAX=$VALEUR
  85. echo -e "hauteur maximale=$H_MAX"
  86. verification "$PAS" "pas" 0.1
  87. PAS=$VALEUR
  88. echo -e "pas=$PAS"
  89. echo "\$fn = 30;valeur=\"0\";translate([-1, 0, 0]){text(valeur, size=3, halign=\"right\");}" > temp.scad
  90. echo -e "G91\nG21\nG0 Z $H_MIN" > sortie.gcode
  91. echo -e "G1 F1300\n" >> sortie.gcode
  92. for hauteur in `seq $H_MIN $PAS $H_MAX`
  93. do
  94. openscad -o temp.dxf -D 'valeur="'$hauteur'"' temp.scad
  95. dxf2gcode temp.dxf -q -e "${hauteur}.gcode"
  96. #numérotation de la ligne
  97. cat $hauteur.gcode >> sortie.gcode
  98. #traçage d'une grille
  99. echo -e "\nM400\nM106 P1 S255\n" >> sortie.gcode
  100. for i in `seq 0 3`
  101. do
  102. if [ $(($i % 2)) = 0 ]
  103. then
  104. echo -e "G1 X 0 Y 4" >> sortie.gcode
  105. else
  106. echo -e "G1 X 0 Y -4" >> sortie.gcode
  107. fi
  108. echo -e "G1 X 1" >> sortie.gcode
  109. done
  110. echo -e "G1 X 0 Y 4" >> sortie.gcode
  111. for i in `seq 0 3`
  112. do
  113. if [ $(($i % 2)) = 0 ]
  114. then
  115. echo -e "G1 X -4" >> sortie.gcode
  116. else
  117. echo -e "G1 X 4" >> sortie.gcode
  118. fi
  119. echo -e "G1 X 0 Y -1" >> sortie.gcode
  120. done
  121. echo -e "G1 X -4" >> sortie.gcode
  122. #déplacement pour la nouvelle hauteur
  123. echo -e ";changement de hauteur\nG1 X 0 Y -5 Z $PAS\n" >> sortie.gcode
  124. rm $hauteur.gcode
  125. done
  126. #arrêt du laser
  127. echo -e "\n;arret du laser\nM400\nM106 P1 S0\n" >> sortie.gcode
  128. rm temp.scad
  129. rm temp.dxf
  130. exit 0