Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/11/2020, à 21:46

sylvainmahe2

Conversion d'une image bitmap vers une sérigraphie KiCad

Bonjour wink

Avec cette routine de conversion d'images vous allez pouvoir importer des logos (et autres graphismes) dans vos dessins KiCad en vue PCB sur le calque de sérigraphie de la face avant (F.SilkS).

Il existe un outil par défaut dans cette suite KiCad nommé Bitmap2Component qui est censé remplir cette fonction, mais notamment dépendant de la résolution (hauteur/largeur) de l'image d'origine, il ne permet pas le redimensionnement, est basé sur un principe de conversion vectorielle qui détruit l'information, et au final fait apparaître pour certains dessins de petites tailles des lignes courbes là où il y a des droites parfaites, et plus une bouillie de pixels qu'une sérigraphie de qualité...

Ainsi cet outil proposé par défaut est pour moi inutilisable lorsque l'on souhaite un rendu exact par rapport à notre image noir et blanc initiale.

À l'instar de Bitmap2Component, ma routine d'automatisation prend en entrée une image qui doit être initialement en noir et blanc (monochrome) afin que les pixels blancs soient utilisés dans le traitement :

Ce que je vous propose ici permettra qu'un pixel blanc dans votre image d'origine sera très exactement un carré de sérigraphie (de la taille souhaitée) dans votre dessin en vue PCB.

Ci-dessous, la routine (.sh) permettant la conversion d'images bitmap (.bmp) vers KiCad (.mod) :

#!/bin/bash

echo "Pixel size in mil ?"
read sizeRaw

clear

rm tmp -r -f
mkdir tmp

size=$(echo $sizeRaw"*10" | bc -l)

for file in *.bmp
do
	if [ -f "$file" ]
	then
		echo $file" to "${file%%.*}.mod
		
		convert "$file" tmp/tmp.txt
		
		grep "white" tmp/tmp.txt > tmp/tmp
		grep -o ".*:" tmp/tmp > tmp/tmpxy
		grep -o ".*," tmp/tmpxy > tmp/x
		sed -i tmp/x -e "s/,//"
		grep -o ",.*:" tmp/tmpxy > tmp/y
		sed -i tmp/y -e "s/,//" -e "s/://"
		
		countList=0
		
		while read x
		do
			xList[countList]=$(echo $x"*"$size | bc -l)
			((countList++))
		done < tmp/x
		
		countList=0
		
		while read y
		do
			yList[countList]=$(echo $y"*"$size | bc -l)
			((countList++))
		done < tmp/y
		
		echo "PCBNEW-LibModule-V1" > tmp/tmp.mod
		echo "\$INDEX" >> tmp/tmp.mod
		echo ${file%%.*} >> tmp/tmp.mod
		echo "\$EndINDEX" >> tmp/tmp.mod
		echo "\$MODULE "${file%%.*} >> tmp/tmp.mod
		echo "Li "${file%%.*} >> tmp/tmp.mod
		
		for ((iterationList=0; iterationList < countList; iterationList++))
		do
			echo "DP 0 0 0 0 4 0 200" >> tmp/tmp.mod
			echo "Dl "${xList[iterationList]}" "${yList[iterationList]} >> tmp/tmp.mod
			echo "Dl "$(echo ${xList[iterationList]}"+"$size | bc -l)" "${yList[iterationList]} >> tmp/tmp.mod
			echo "Dl "$(echo ${xList[iterationList]}"+"$size | bc -l)" "$(echo ${yList[iterationList]}"+"$size | bc -l) >> tmp/tmp.mod
			echo "Dl "${xList[iterationList]}" "$(echo ${yList[iterationList]}"+"$size | bc -l) >> tmp/tmp.mod
		done
		
		echo "\$EndMODULE "${file%%.*} >> tmp/tmp.mod
		echo "\$EndLIBRARY" >> tmp/tmp.mod
		
		mv tmp/tmp.mod "${file%%.*}".mod
	fi
done

rm tmp -r -f

exit 0

La routine présentée ci-dessus utilise le programme (ou paquet) imagemagick pour extraire les valeurs matricielles des images traitées.

Il vous faut donc l'installer à l'aide de la ligne de commande suivante (à écrire dans le terminal de Linux) :

sudo apt-get install imagemagick -y

Une fois cette installation effectuée, lorsque vous exécutez la routine (.sh) se propose à vous une question "Pixel size in mil ?", il vous faut alors renseigner la taille souhaitée en millième de pouce que fera un pixel dans votre dessin KiCad (cohérent lorsque les unités de mesures sont indiquées en pouces et non pas en millimètres) :

Par exemple si vous indiquez en taille de pixel le nombre 25, avec une grille dans votre dessin KiCad réglée sur 25 (et des unités de mesures en pouces) vous verrez que le pas des pixels de votre graphisme en vue PCB fera très exactement le même pas que la grille.

Après avoir validé le choix de la taille des pixels, toutes les images ayant l'extension .bmp (bitmap) dans le répertoire courant sont converties successivement en fichiers .mod (footprint) que vous pouvez ajouter à vos projets KiCad par l'intermédiaire du menu d'ajout de bibliothèques (Preferences > Library) en vue PCB.

Si vous apercevez le crénelage des pixels de votre graphisme sérigraphié une fois votre circuit réalisé, je vous conseille d'utiliser une image bitmap (.bmp) initiale de plus grande résolution, et d'indiquer une taille de pixel (lors de la conversion avec la routine) d'autant plus faible, par exemple 2.5 (attention cependant, les temps de traitement peuvent s'avérer assez longs avec des résolutions d'images trop grandes).

Libre à vous de faire une utilisation de ce petit programme de conversion d'image, qui vous permettra aisément d'apposer vos logos et divers graphismes sur vos circuits imprimés avec une parfaite exactitude de conversion (1 pixel bitmap vers 1 pixel sérigraphié).

Ci-dessous un exemple de code matriciel (QR Code) sérigraphié avec mon outil :

dsc08204.jpgdsc07963.jpg

Dernière modification par sylvainmahe2 (Le 25/11/2020, à 22:33)

Hors ligne