diametre_laser.sh 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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 le diamètre du point focal du laser"
  10. echo "un ensemble de traits seront tracés de plus en plus espacés"
  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 "-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 "-d\tdiamètre minimal en mm"
  21. echo -e "-D\tdiamètre maximal en mm"
  22. echo -e "-p\tpas entre deux espacement en mm"
  23. echo -e "-f\tla distance focale du laser en mm"
  24. }
  25. readonly VERSION='1.0'
  26. #affiche la version du script
  27. version()
  28. {
  29. echo "$(basename "${0}") : ${VERSION}"
  30. echo ''
  31. }
  32. #boucle pour la gestion des options
  33. #s: signifie qu'un paramètre est attendu
  34. #hV signifie que ces options existent mais ne prennent pas de paramètre
  35. while getopts "d:D:p:f:hV" OPT
  36. do
  37. case "$OPT" in
  38. h)
  39. usage
  40. exit 0
  41. ;;
  42. V)
  43. version
  44. exit 0
  45. ;;
  46. d)
  47. D_MIN=${OPTARG}
  48. ;;
  49. D)
  50. D_MAX=${OPTARG}
  51. ;;
  52. p)
  53. PAS=${OPTARG}
  54. ;;
  55. f)
  56. FOCALE=${OPTARG}
  57. ;;
  58. *)
  59. #ce point est atteint lorsqu'une option inexistante est demandée
  60. echo "parametres non valide"
  61. usage
  62. exit 1
  63. ;;
  64. esac
  65. done
  66. verification "$D_MIN" "diamètre minimal" 0.1
  67. D_MIN=$VALEUR
  68. echo -e "diamètre minimal=$D_MIN"
  69. verification "$D_MAX" "diamètre maximal" 0.4
  70. D_MAX=$VALEUR
  71. echo -e "diamètre maximal=$D_MAX"
  72. verification "$PAS" "pas" 0.1
  73. PAS=$VALEUR
  74. echo -e "pas=$PAS"
  75. verification "$FOCALE" "focale" 5
  76. FOCALE=$VALEUR
  77. echo -e "focale=$FOCALE"
  78. echo "\$fn = 30;valeur=\"0\";translate([-1, 0, 0]){text(valeur, size=3, halign=\"right\");}" > temp.scad
  79. echo -e "G91" > sortie.gcode
  80. echo -e "G0 Z $FOCALE" >> sortie.gcode
  81. echo -e "G1 F2000\n" >> sortie.gcode
  82. #Pour que seq renvoie des nombre avec '.' et non ',' il faut :
  83. LANG=en_US
  84. for i in `seq $L_MIN $PAS $L_MAX`
  85. do
  86. openscad -o temp.dxf -D 'valeur="'$i'"' temp.scad
  87. dxf2gcode temp.dxf -q -e "${i}.gcode"
  88. #numérotation de la ligne
  89. cat $i.gcode >> sortie.gcode
  90. #On trace un paquet de lignes sur une hauteur de 3mm
  91. echo -e "\nM400\nM106 P1 S255" >> sortie.gcode
  92. DELTA=$(echo "2*$i" | bc)
  93. deplacement_y=0
  94. for j in `seq $i $DELTA 3`
  95. do
  96. #Une fois la première ligne tracée on fait des aller-retour sur 10mm
  97. echo -e "M400\nG1 X 10" >> sortie.gcode
  98. echo -e ";changement de ligne\nG1 X 0 Y $i" >> sortie.gcode
  99. echo -e "M400\nG1 X -10" >> sortie.gcode
  100. echo -e ";changement de ligne\nG1 X 0 Y $i" >> sortie.gcode
  101. deplacement_y=$(echo "$deplacement_y + 2*$i" | bc)
  102. done
  103. #pour la dernière étape on se déplace une dernière fois de $PAS sur l'axe Y et on revient au début sur X
  104. echo -e ";changement de ligne\nM400\nM106 P1 S0" >> sortie.gcode
  105. echo -e "G1 X 0 Y -$deplacement_y\n" >> sortie.gcode
  106. rm $i.gcode
  107. done
  108. rm temp.scad
  109. rm temp.dxf
  110. exit 0