Convertir un PDF ou JPEG en bit par bit avec arduino

Bonjour a tous,

Présentation :

Je suis entrain de réaliser comme projet de fin d’année une découpeuse / graveuse laser piloter avec un arduino teensy LC et je dois pouvoir un découper ou graveuse un motif que je possède sur une carte SD
que je vais mettre dans un module de lecture de carte SD.

Problème :

Le problème c’est que j’ai un niveau en programmation basique et que j’ai aucune idée de comment faire pour convertir un PDF ou un JPEG en bit par bit grâce a un code pour que l’arduino puisse le lire en lancer la gravure. Et ca serait la dernière étape pour terminer mon projet car j’arrive déjà a le piloter par bluetooth.

Merci à tous et n’hésitez pas à me dire si j’aurais dû poster ces questions ailleurs/autrement/ … ( car j’utilise ce forum pour la première fois )

Ton projet m'intéresse fortement, j'ai bien envie de m'y frotter aussi.

La taille du code est assez limité, en conséquence les gens que je connais qui font de la gravure mécanique, préparent le travail sur un ordi, puis donne à l'arduino ce qui est déjà mâché.

C'est ce qui est fait pour certaines imprimantes 3D, on fait le dessin de ce qu'on veut avec un logiciel et le slicer transforme le fichier du dessin en un gcode contenant les ordres élémentaires. J'ai aussi vu ça pour des fraiseuses à commande numériques.

En traduisant: serait-ce une solution que de faire la transformation sur l'ordi de ce que tu veux imprimer dans un format plus digérable pour un arduino. Je pense particulièrement au format bmp non compressé. Je sais qu'il est utilisé pour les librairies graphiques.

L'arduino est trop petit pour convertir un fichier PDF (polices de caractères absentes...)
Les données doivent être préparées en amont sur ordi, vers un format simple à comprendre pour Arduino.

Tu sembles te satisfaire d'un format de type image bitmap.
Est-ce que ça te suffit pour commander ta machine ?
Comment vas-tu faire pour passer de pixels allumés/éteints à des ordres de coupe ?
Ca me parait un problème très compliqué (en plus pour un Arduino avec si peu de mémoire).

Un format vectoriel paraît mieux adapté, mais même avec ça y'a encore du boulot.

Tu devrais d'abord étudier ce qui existe et qui marche, ne part pas de zéro.

Je suis entrain de réaliser comme projet de fin d’année une découpeuse / graveuse laser

Il y a deux fonctionnalités décrites ci dessus, et c’est celle qui sont décrites dans les découpeuse / graveuse laser vendues:

  • la gravure, ou il s’agit de brûler la surface plus ou moins fort pour obtenir une image. Dans les pubs que j’ai vues, le faisceau se ballade en double boucle
    for (y=0; y<maxY; y++) for (x=0; x<maxX; x++) bruleLePoint(x,y);
    Dans ce mode, on peut graver du papier, du carton, du bois, du cuir… Il ne s’agit pas de passer au travers du support. Le format bitmap est intéressant. La graveuses vendues utilisent le format BMP qui bien que trop complexe, dispose de pleins de programmes qui le gère. Le problème du BMP, est qu’il existe des modes compressés, et d’autres choses, même si je ne suis quasi sûr que les programmes usuels ne peuvent pas écrire du BMP compressé.

  • la découpe, ou il s’agit au contraire de passer au travers du support, en suivant des trajectoires. Dans ce cas, il faut effectivement un format vectoriel. C’est un problème typique de commande numérique et utilise du gcode, soit respectant une norme, soit de fabrication maison.


L’arduino est trop petit pour convertir un fichier PDF (polices de caractères absentes…)

Je préfère dire ce n’est pas le bon outil. Pour le fun, un jour j’écrirais un QCM sur un arduino, mais le bon outil pour le faire c’est mon ordi. Pour piloter les ordres d’une graveuse, le bon outil c’est un microcontrôleur.

Pour la police de caractères absente, je fais simplement remarquer que c’est un problème de librairie, un arduino à poil ne sait pas lire un bouton, faire tourner un poteur pas à pas, piloter un afficheur, dialoguer en WIFI… Si on veut une ou plusieurs polices, c’est possible, il suffit d’écrire le logiciel. Personnellement j’utilise une fonte de caractères vectorielle sur mon UNO, en partie parce que j’ai le projet pour ma fin de vie d’écrire du texte avec une graveuse laser sur du papier.

Les données doivent être préparées en amont sur ordi, vers un format simple à comprendre pour Arduino.

100% d’accord. Pour moi, il y a transformation au format bitmap (équivalent BMP) si je dois faire de la gravure d’images, et la transformation au format vectoriel (équivalent gcode) pour la découpe, ou l’écriture de texte.

Tu devrais d’abord étudier ce qui existe et qui marche, ne part pas de zéro.

C’est ce que je fais, je fais de la “copie industrielle”, sauf quand ce qui est fait ailleurs ne me convient pas du tout. Les graveuses découpeuses pour amateurs vendues en Kit ont ces deux formats BMP et gcode.

Maintenant, aucune à ma connaissance, ne propose le texte. Et si sur mon afficheur j’utilise ma propre fonte, c’est parce que ce qui existe ne me convenait pas.

Et pourquoi ne pas s'inspirer du format utilisé dans les imprimantes 3D ?
Il faudra passer par un format vectoriel intermédiaire (Inkscape est un bon logiciel vectoriel).
Il existe des passerelles pour passer du svg au format des imprimantes 3D (un truc comme grbl,).

On sait qu'un micro avr 8 bit sait gérer le format utilisé dans les imprimantes 3 D, beaucoup d'imprimante 3D utilisant des cartes Mega.