{"id":478,"date":"2023-02-28T09:00:59","date_gmt":"2023-02-28T08:00:59","guid":{"rendered":"https:\/\/68600.fr\/D6D\/?p=478"},"modified":"2023-02-28T09:00:59","modified_gmt":"2023-02-28T08:00:59","slug":"timelapse-pendant-une-impression-3d-sans-octoprint-pour-0-euros","status":"publish","type":"post","link":"https:\/\/68600.fr\/D6D\/timelapse-pendant-une-impression-3d-sans-octoprint-pour-0-euros\/","title":{"rendered":"Timelapse pendant une impression 3D sans Octoprint pour 0 euros !"},"content":{"rendered":"\n<p>Amis lecteurs, voici un tutoriel plus technique que les pr\u00e9c\u00e9dents, et il sera ici question de la mise en place d&rsquo;un outil permettant de faire des timelapse sans y d\u00e9dier un ordinateur (m\u00eame si ce n&rsquo;est qu&rsquo;un Raspberry Pi) \u00e0 ce r\u00f4le. <\/p>\n\n\n\n<p>De mon cot\u00e9, j&rsquo;ai d\u00e9j\u00e0 un ordinateur pour effectuer des Timelapse, je me suis donc demand\u00e9, comment mutualiser ce besoin sans associer davantage de resources mais surtout comment partager l&rsquo;\u00e9tat d&rsquo;avancement si internet est accessible \ud83d\ude09 <\/p>\n\n\n\n<p><strong>Info <\/strong>: Le timelapse, c&rsquo;est une technique permettant la prise de photos \u00e0 intervalles de temps d\u00e9finies dans l&rsquo;id\u00e9e d&rsquo;en faire un film \u00e0 effet &lsquo;rapide&rsquo;. J&rsquo;ai d\u00e9j\u00e0 fait un article dessus <a href=\"https:\/\/68600.fr\/D6D\/location-de-camera-timelapse\/\">ici<\/a>. <\/p>\n\n\n\n<p><strong>But <\/strong>: Via un script python, via le contact d&rsquo;un port GPIO, effectuer une capture d&rsquo;image via l&rsquo;appareil photo et envoyer des notifications sur l&rsquo;avancement. Il est important de rentre le Raspberry pi amovible, tout comme la rapidit\u00e9 d&rsquo;installation, cruciale.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Le temps d&rsquo;installation \/ pr\u00e9paration d\u00e9pendra de vos comp\u00e9tences mais ne devrait pas exc\u00e9der 10 minutes ! <\/strong><\/p>\n\n\n\n<p><em>Octoprint via Octolapse fait cela tr\u00e8s bien mais demande l&rsquo;utilisation d&rsquo;un Raspberry Pi d\u00e9di\u00e9 \u00e0 l&rsquo;impression.  Octoprint permet de g\u00e9rer l&rsquo;imprimante \u00e0 distance, mais, je n&rsquo;ai pas besoin de tout cela.. et je n&rsquo;ai qu&rsquo;un pi z\u00e9ro dispo de toutes fa\u00e7ons, ne permettant pas l&rsquo;ex\u00e9cution d&rsquo;Octoprint+Octolapse.  <\/em><\/p>\n\n\n\n<p><strong>Pr\u00e9 requis : <\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>un raspberry Pi avec un OS install\u00e9<\/li>\n\n\n\n<li>une Pi cam\u00e9ra connect\u00e9e au Pi<\/li>\n\n\n\n<li>une imprimante 3D, Cura comme slicer<\/li>\n\n\n\n<li>une paire de cables <\/li>\n\n\n\n<li>un fer \u00e0 souder<\/li>\n<\/ul>\n\n\n\n<p><strong>1- Imprimante 3D<\/strong> :<\/p>\n\n\n\n<p>Pour de se d\u00e9placer dans un volume, toutes les imprimantes 3D sont initialis\u00e9es via des capteurs de fin (d\u00e9but) de course. C&rsquo;est douvent un interrupteur, \u00e0 contact sec d\u00e9finissant l&rsquo;origine est x=0, y=0, z=0. <\/p>\n\n\n\n<p>Sur ces capteurs, la plupart du temps, il y a 3 bornes, la masse, et contacts NO \/ NC (normalement ouvert ou normalement ferm\u00e9). <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/interrupteur-1024x1024.jpg\" alt=\"interrupteur\" class=\"wp-image-479\" width=\"460\" height=\"460\" srcset=\"https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/interrupteur-1024x1024.jpg 1024w, https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/interrupteur-300x300.jpg 300w, https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/interrupteur-150x150.jpg 150w, https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/interrupteur-768x768.jpg 768w, https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/interrupteur.jpg 1200w\" sizes=\"auto, (max-width: 460px) 100vw, 460px\" \/><figcaption class=\"wp-element-caption\"><em>Exemple d&rsquo;interrupteur de fin de course<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<p>L&rsquo;imprimante utilise le moment ou la t\u00eate d&rsquo;impression appuie sur l&rsquo;interrupteur pour s&rsquo;initialiser. Cela fait un contact entre deux des pattes et le signale (normalement ouvert devient ferm\u00e9). Pour ce projet de 3dlapse, et initialiser l&rsquo;ordre de prise de photo, nous allons donc, pour ne pas embetter l&rsquo;imprimante ni le Pi dans les contacts, utiliser le m\u00eame interrupteur, mais contact inverse (normalement ouvert, qui envoie un signal quand le contact se d\u00e9fait). <\/p>\n\n\n\n<p>Apr\u00e8s avoir test\u00e9 avec un multim\u00e9tre quels contacts utiliser, voici la soudure de deux cables sur l&rsquo;interrupteur de fin de course de X. Utilisant des connecteur Dupont sur le Pi, j&rsquo;ai laiss\u00e9 une fiche male au bout du cable de chaque cot\u00e9. C&rsquo;est tout.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"652\" height=\"653\" src=\"https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/capteur.png\" alt=\"\" class=\"wp-image-506\" srcset=\"https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/capteur.png 652w, https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/capteur-300x300.png 300w, https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/capteur-150x150.png 150w\" sizes=\"auto, (max-width: 652px) 100vw, 652px\" \/><figcaption class=\"wp-element-caption\"><em>Capteur de fin de course est reli\u00e9 \u00e0 la carte m\u00e8re (c\u00e2bles noirs) et \u00e0 la camera Timelapse (c\u00e2bles rouge+noir)<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<p><strong>2- Sur le Raspberry Pi :<\/strong><\/p>\n\n\n\n<p>Voici <a href=\"https:\/\/github.com\/apicole\/Python-TImelapse\/blob\/main\/Timelapse.py\" data-type=\"URL\" data-id=\"https:\/\/github.com\/apicole\/Python-TImelapse\/blob\/main\/Timelapse.py\">le script <\/a>de Timelapse\/ 3dlapse. Ce script de 120 lignes, est partag\u00e9 sur mon Github et je ne vais pas le d\u00e9tailler, \u00e9tant donn\u00e9 qu&rsquo;il est d\u00e9j\u00e0 extr\u00e9mement comment\u00e9. Si vous y voyez des soucis, je suis preneur de commentaires cependant.<\/p>\n\n\n\n<p>Copier le script Timelapse.py sur le Pi, dans le dossier &lsquo;home&rsquo; via l&rsquo;outil de votre choix (j&rsquo;utilise FileZilla)<\/p>\n\n\n\n<p>Ex\u00e9cution : Ce script une fois lanc\u00e9 en fonction de l&rsquo;\u00e9tat du GPIO 27, arbitrairement choisi (borne 13&amp;14), va d\u00e9marrer en mode Timelapse (photo toutes les 3 secondes) ou 3dlapse (photo lors d&rsquo;un contact GPIO27)<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/gpio27-1024x576.png\" alt=\"\" class=\"wp-image-480\" srcset=\"https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/gpio27-1024x576.png 1024w, https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/gpio27-300x169.png 300w, https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/gpio27-768x432.png 768w, https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/gpio27.png 1243w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><em>Bornes GPIO pour Raspberry P<\/em>i<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Le Raspberry Pi Zero dans sa splandeur :<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"576\" height=\"1024\" src=\"https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/WhatsApp-Image-2023-02-04-at-5.50.12-PM-576x1024.jpeg\" alt=\"\" class=\"wp-image-503\" srcset=\"https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/WhatsApp-Image-2023-02-04-at-5.50.12-PM-576x1024.jpeg 576w, https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/WhatsApp-Image-2023-02-04-at-5.50.12-PM-169x300.jpeg 169w, https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/WhatsApp-Image-2023-02-04-at-5.50.12-PM-768x1365.jpeg 768w, https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/WhatsApp-Image-2023-02-04-at-5.50.12-PM-864x1536.jpeg 864w, https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/WhatsApp-Image-2023-02-04-at-5.50.12-PM.jpeg 1134w\" sizes=\"auto, (max-width: 576px) 100vw, 576px\" \/><figcaption class=\"wp-element-caption\"><em>Pi Zero avec port GPIO 27 pour Timelapse \/ 3dlapse &#8211; Coque sur mesure design\u00e9e par mes soins !<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<p>Lancer et tester pour valider que les d\u00e9pendances sont pr\u00e9sentes (<em>keyboard, requests, socket, RPi.GPIO, gpiozero, Picamera2<\/em>)<\/p>\n\n\n\n<p>Chaque nouveau lancement cr\u00e9e un nouveau dossier, incr\u00e9mentalement, dans \/home\/pi\/pictures et y enregistre les clich\u00e9s, ainsi qu&rsquo;un fichier de log.<\/p>\n\n\n\n<p>Pour tester chaque option, vous pouvez commuter la borne GPIO27, aussi le lancer avec l&rsquo;argument \u00ab\u00a03d\u00a0\u00bb \/ \u00ab\u00a03dlapse\u00a0\u00bb ou \u00ab\u00a0tl\u00a0\u00bb \/ \u00ab\u00a0timelapse\u00a0\u00bb. <\/p>\n\n\n\n<p>Exemple : Python3 Timelapse.py 3dlapse<\/p>\n\n\n\n<p>Note: Vous pourrez constater que j&rsquo;ai utilis\u00e9 sur ce projet une camera \u00e0 AutoFocus, et d\u00e9fini sa position en &lsquo;automatique&rsquo; pour la partie Timelapse (ligne 99), et focale fixe pour la partie 3dlapse (ligne 102). Dans le cas ou vous souhaiteriez tester le focus \u00e0 diff\u00e9rentes ouvertures, manipulez le script pour utiliser la fonction &lsquo;testFocus&rsquo; )<\/p>\n\n\n\n<p>Libre \u00e0 vous de changer l&rsquo;ID notify (lignes 28\/39\/40) si vous souhaitez l&rsquo;utiliser mais aussi recevoir les photos \u00e0 chaque centaine, ou les notifications sur l&rsquo;espace disque restant.<\/p>\n\n\n\n<p><span style=\"text-decoration: underline;\">Option <\/span>: lancer le script automatiquement au d\u00e9marrage <\/p>\n\n\n\n<p>Faire en sorte que le raspberry pi d\u00e9marre en mode ligne de commande avec ouverture de session automatique, ajouter en derni\u00e8re ligne du fichier \/home\/pi\/.bashrc la commande de lancement du script Python \u00ab\u00a0Python3 Timelapse.py\u00a0\u00bb<\/p>\n\n\n\n<p><strong>3- Derni\u00e8re partie : le Slicer (Cura)<\/strong><\/p>\n\n\n\n<p>Cura dispose de modules pour modifier les impressions. En l&rsquo;occurence nous allons installer le module Timelapse, qui permet le staitonnement de la t\u00eate \u00e0 chaque niveau d&rsquo;impression pendant une dur\u00e9e d\u00e9finie.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Menu Extensions -&gt; Post Processing -&gt; Modifier G-Code<\/li>\n\n\n\n<li>\u201cAjouter un script\u201d<\/li>\n\n\n\n<li>Selectionner \u00ab\u00a0Time Lapse\u00a0\u00bb<\/li>\n<\/ol>\n\n\n\n<p>Avant de lancer la cr\u00e9ation du G-code valider les param\u00e8tres du script, voici les miens : <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"704\" height=\"537\" src=\"https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/add-a-script-timelapse-1.jpg\" alt=\"\" class=\"wp-image-492\" srcset=\"https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/add-a-script-timelapse-1.jpg 704w, https:\/\/68600.fr\/D6D\/wp-content\/uploads\/2023\/02\/add-a-script-timelapse-1-300x229.jpg 300w\" sizes=\"auto, (max-width: 704px) 100vw, 704px\" \/><figcaption class=\"wp-element-caption\"><em>Configuration Cura<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<p><strong>Note<\/strong>: Le &lsquo;park print head&rsquo; va demander \u00e0 aller au point donn\u00e9 X\/Y, mais comme nous avons utilis\u00e9 un capteur NC (normallement ferm\u00e9), il faut d\u00e9caller la t\u00eate d&rsquo;impression au del\u00e0 du capteur, et donc, modifier le script de Cura (pour Windows, dans le dossier C:\\Program Files\\Ultimaker Cura 5.<em>VERSION<\/em>\\share\\cura\\plugins\\PostProcessingPlugin\\scripts). Voici <a href=\"https:\/\/github.com\/apicole\/Python-TImelapse\/blob\/main\/TimeLapse.py\" data-type=\"URL\" data-id=\"https:\/\/github.com\/apicole\/Python-TImelapse\/blob\/main\/TimeLapse.py\">ma version<\/a> modifi\u00e9e: <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Le changement est un ajout des lignes 107&amp;108 pour lib\u00e9rer le capteur et attendre que l&rsquo;op\u00e9ration se finisse.<\/li>\n<\/ul>\n\n\n\n<p>Pour finir, cet ajout de prise photos, va n\u00e9c\u00e9ssairement rajouter du temps d&rsquo;impression, quelques secondes par niveau, et risque de provoquer du &lsquo;stringing&rsquo;. Pour contrer cela, il est n\u00e9c\u00e9ssaire de comprendre la r\u00e9tractation \ud83d\ude09<\/p>\n\n\n\n<p>Voil\u00e0, une fois que le Pi \u00e0 trouv\u00e9 sa place sur l&rsquo;imprimante, et que le focus \u00e0 \u00e9t\u00e9 ajust\u00e9 correctement, il suffit juste de le brancher et alimenter pour qu&rsquo;il d\u00e9marre.. et prenne les photos, alternativement, d\u00e9marr\u00e9 avec un powerbank en direction d&rsquo;un coucher de soleil, il pendra tranquillement en photo une fin de journ\u00e9e et ca, un appareil pour deux utilisations, c&rsquo;est la cerise sur le g\u00e2teau  !!!<\/p>\n\n\n\n<p>J&rsquo;esp\u00e8re que cette partie un peu plus technique aura apport\u00e9 un peu de lumi\u00e8re sur cette solution, portable, pratique et rapide \u00e0 mettre en place pour immortaliser vos impressions; Dans tous les cas, n&rsquo;h\u00e9sitez pas \u00e0 me <a href=\"https:\/\/68600.fr\/D6D\/contact\/\" data-type=\"URL\" data-id=\"https:\/\/68600.fr\/D6D\/contact\/\">contacter <\/a>pour tout commentaire, ou toute id\u00e9e !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Amis lecteurs, voici un tutoriel plus technique que les pr\u00e9c\u00e9dents, et il sera ici question de la mise en place d&rsquo;un outil permettant de faire des timelapse sans y d\u00e9dier un ordinateur (m\u00eame si ce n&rsquo;est qu&rsquo;un Raspberry Pi) \u00e0 ce r\u00f4le. De mon cot\u00e9, j&rsquo;ai d\u00e9j\u00e0 un ordinateur pour effectuer des Timelapse, je me [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":479,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21,47,32],"tags":[48,50,51,43],"class_list":["post-478","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hors-sujet","category-impression-3d","category-informatique","tag-impression-3d","tag-octoprint","tag-python","tag-timelapse"],"_links":{"self":[{"href":"https:\/\/68600.fr\/D6D\/wp-json\/wp\/v2\/posts\/478","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/68600.fr\/D6D\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/68600.fr\/D6D\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/68600.fr\/D6D\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/68600.fr\/D6D\/wp-json\/wp\/v2\/comments?post=478"}],"version-history":[{"count":11,"href":"https:\/\/68600.fr\/D6D\/wp-json\/wp\/v2\/posts\/478\/revisions"}],"predecessor-version":[{"id":508,"href":"https:\/\/68600.fr\/D6D\/wp-json\/wp\/v2\/posts\/478\/revisions\/508"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/68600.fr\/D6D\/wp-json\/wp\/v2\/media\/479"}],"wp:attachment":[{"href":"https:\/\/68600.fr\/D6D\/wp-json\/wp\/v2\/media?parent=478"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/68600.fr\/D6D\/wp-json\/wp\/v2\/categories?post=478"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/68600.fr\/D6D\/wp-json\/wp\/v2\/tags?post=478"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}