Forum Électro-Bidouilleur

Merci de vous connecter ou de vous inscrire.

Connexion avec identifiant, mot de passe et durée de la session
Recherche avancée  

Nouvelles:

Le Forum est maintenant chiffré (préambule https). Bien sûr, des liens externes insérés dans les sujets vont demeurer inchangés. Mais la composition des pages du Forum est désormais sécurisée. Si des problèmes d'affichage surviennent, veillez à vider votre cache pour ce site.

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.

Messages - sylvainmahe

Pages: 1 ... 12 13 [14]
196
Bonjour à  vous :)

Citer
Ce que je souhaite partager avec vous : Conversion d'images bitmap vers une sérigraphie KiCad via une routine bash (.sh)

Avec cette routine de conversion d'images (pour le système d'exploitation Linux), 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 :

Citer
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 :


197
Vos projets et Montages d'Électronique / Re : Les livres de sauvegarde
« le: Novembre 24, 2020, 09:16:35 am »
Bonjour, merci pour vos messages d'encouragement :)

Effectivement je persévère en tant que poisson qui nage à  contre courant, mais l'important dans cette histoire c'est de partager avec vous des projets libres dans la gratuité et la volonté que vous puissiez éventuellement en trouver un intérêt.

Tout à  fait rikigeek, c'est surtout orienté code et texte "brut", du moment que les caractères du texte en question se trouvent dans la norme UTF-8 (choix arbitraire de ma part mais réfléchi au vue du grand nombre de personnes à  utiliser ce format).

C'est une bonne question pour les .odt et .docx. Je n'ai pas mon pc avec linux ubuntu cette semaine, je pourrais vous en dire plus samedi quand je serais à  mon atelier, mais dans l'idée même si la base semble être du xml d'après ce que j'ai lu, après avoir ouvert un .odt (sous windows) je pense que ça ne fonctionnera pas.

J'ai écrit simplement dans un odt :
Test
é »(‘(è-è_è_i*/-+

fghfhrty’(-

Et voici le contenu que je vois dans notepad++ :
PK    à…HxQ^à†2 '   '      mimetypeapplication/vnd.oasis.opendocument.textPK    à…HxQ               Configurations2/progressbar/PK    à…HxQ               Configurations2/menubar/PK    à…HxQ               Configurations2/popupmenu/PK    à…HxQ               Configurations2/statusbar/PK    à…HxQ               Configurations2/toolbar/PK    à…HxQ               Configurations2/accelerator/PK    à…HxQ               Configurations2/floater/PK    à…HxQ               Configurations2/toolpanel/PK    à…HxQ               Configurations2/images/Bitmaps/PK  à…HxQ               manifest.rdfàâ€œànÆ’0„ï<!eàŽà˜@/r(àŠÂ¹jŸÀ5†X/à²Å¡àžÂ¾Å½â€œVQ¤ªêŸà”à£Â®F3àŸÅ½Â´â€ºà­aàˆâ€¹Â²Â¨àT4c)%àŠHhµé+:».¹¥à›:àšà˜Â¶+Å¡à±jƒ¥Ÿ*ºwn*9_–!-7 làÂ³Â¢(xÅ¡à³<O¼"àà•8qH à†Â´Å½ Biàµà¤|9àŽâ fWQtૠyà· =‹à:© ²
a¶R½‡¶ ‘@ LàŠâ€žtÆ’ºNKà…3–à³Q9àÂ¡à­âÇ`½à“Ģ<`à°+Žàà˜àžË† ¦à¥^à Â½Â°î\Æ’àŸ|•hzîczuà“à…à±àŸ#”`oe2îOê»;yà¿çà¾.àà¿⯴vDl@àŽÂ£gàºÂç´à²UG¯PK´à·hà’  Æ’  PK  à…HxQ           
   styles.xmlà­Koà›6à¸Â¾_ahà˜n´,;ic¯é†
h;`é;´DY\)Q )?àºà«à·â€˜%J–5i7 sàŒïà½à¤GR¯~<à¦l¶'BR^àœà‘|àŒHà³â€ž»ûà Âà·?£»à Çà—àŸÂ¼âiJc²Ix\à¥Â¤PHª#rà„!àœà¤Dà¡û à…†cIà¥Â¦À9‘oxI
G²iq7FÅ’à½mO¥®à•à°èS>•à¶(J9Å y^bE·¬àƒâ€ sà â€œ)Unà‚Pà“ZAs.và¡r±¸ à­o‡}d´à¸à˜à ‡ùaep£àµz¨CM⯬3XIF´j2Å’à¦QèpS§šc}9ª©à„à—§M>LÂ¥à•Â¸Â]à²U2|•à¸Â´r¿›là²~7¾8àƒb²à±à™Â§¥ºà¼à›P’ à•à¸o§GÉ û²Š*àŸ1à™YXà¡Â³@C®.&à«APE„‡_D1‹à›roe^Å  à“²à£â€à‹E´
R2àšf¬à˜5½%à¥UvC?ªà¥â€œcIà• àŒ à™Â¦àƒÂ¡Å¸Çµˆ¡à†qà¸Å’?A!º y:
‰à¦Å Â¡â€˜>àˆâ€ s”KD ˆ/7µà.Ç*é4wà¡[ Å¡oàŸÂ´à½Pà¤SC¨q;Â¥ ZN.#‹àà±>àâ€¡T!à˜G!` ²à—-¯i¢™àŠà™xà•P‡ºI2ˆ
¬W!4T(´§à¤à°m“]R®à”à…ûàŸC
Cº†àMè±ôu{@Roà“\¯àâ„¢rà˜S”˜Éà—¯lù6à‹3û[;à¶>xSà…4àÂ³\àˆ(ËœA{sx9e§ûà {\rùƒ‡d‚Y‡§à†E;R@fAà‹•2‘K¡â„¢à¼Å¾= Y:.»‡8Aàs\t0Jªbàˆà¡=à”4€àPlž¤à›çà¸à¦9ªµ¡à¸Rà¡:IEà²çèô–à†â€šKžªà™Å¸à¸BGàµêà¡à½#º½{ ùCU èà”Bž+?+¼zàNªNàâ€žÂ¤Â¸bàµà¼ê8à—:à­.3·à¾ÂJhàD(
à³Â®Â¶C*à?D‡}à¼à›à•àâ€¹[|àŒô¶à­â€ºÂ±à²r¹Nc¨­”oÀ
à±Râ„¢~Qp¤à—$2àƒ ? àV!Žà·àb¾Šà³Aà Â©T0Ç 6 ’%Ža&Côà—à›â€¹F]àž]Dàžk£âsTèôS¹ž¡à°Â¬ÂàŒÀŽU²sjÅ â„¢ôà²Â§à„w¼m@à¡Jq-’Š&„[TàŒàŠ ;F­ s•ƒèqHà«â€“à³àˆâ„¢@jà›I*Z$Dooàº\à£à£â€t:à‚à¸yàƒK©³n\à­]à«}fM% ¸¡àQ5à‚à«dQ¢‚à…\‹W:à˜àŸuôà«àÂ_.é'€Gà‹Râ„¢5†‹]!w°”
³àƒT£à°à½ùà·à†iDàô>Qƒ­=â„¢F\ à—¬–éà à‘b~[6^wâôSঠµà°à“»s‰zàŠgà¤à˜ï¸=¹
–µ¹'·f´/¹à½àº.hÆ’à™é
SFà½à bÆ’à«Â¹€L-à¤}°´ୀBà¼â€º_à™Â©àŒHaBÅ NˆQà”t
Fsàšà˜6±àŠÂªË†UeêN. §@€¯—à£(¡à1
-¦à¼à›Â¨-à¤n5•à é¶Š¯)à¿Å¸Hy?éˆà«rà½L$Ç´@àºÂ°à¬à’à±<]à‹Jf}Q à’8à†Â¥ôÅ¡à¾S+àŽÅ¾ ½†àŒË†Å¸oà¶Â´Â½à¥Bà—NPà˜â€¡ à›à—à™à¿\àHà°CO8¬ôJà½#!%R|GT¦àùºZଠ´࿠µ—`‘£Ç!—a Žà•!à—–à¡9¿_N¼àºe àà­VÂ¥à5î#¼‡!à‹à…‡-ONCj=à–s, 7à‹J=4àœ,àààÂ®o¹Ràº\ à³D´là›P %àœ+àŒàºà›u3mfàšÀ଀Oà²Â±F5à’rL!ºŽà³àµà à½à¦và“àºY:à¾à$à—ËœO;8ê±Qàœà[à¥Çॠà¶Â¼Z›ïà³ÂX-à­Â¨

à†Â¸mà›à•v´à¥à¼H•l¬%àƒ'¯xf>à¸9Â¥ùà¤Âª­¸›—S+àŽÅ’¡» àŠ-Å n¿›îÂ¥70j<à…༠‡i–Š½“¢à‹Â©)}½u·7à“<à·6GàŠ/Ëœ;à *?³eà—}ù9-à›Â¼Gà˜Â«qs“]ˆI.ws¾oà£#c¡]à“02àƒ)àŽà¸â€œâ€œÀàºÂ¬â€ à¿kI2m4ôlhà Âµ“³à¬W8¿`ŽQàƒïbŽ}¡|à¸ïUº1WàŠàžCoe!â7 zˆŒଠ«à‘­ƒôàš mUŽôm?†à¦àœx^7Éš´ïzà„%5S<à„à’à”-q)x `HÂ¥]¡_†à˜à¶Pjàžf1!±oeH‚¶'à›Â®ažà¶àœ1¨@ÇàŒÅ¾èà¥à•!]‡¬®é:à¤à¦ê®Cn¯é:à¤à…à•!]‡¼¼:¤à«ÂÂ»Â«CºY_à’àŒà¿#tA¾›
®ˆ„™¸H鮪ïà‘ ª )çJà¿à²XTà¬à«à¦³Šè]t„²à±Tà½^à¡à“à˜S„~ààà¼àœ'.àšàžé’"S+èà˜k´ ‰=à™7aseº^·‡à¬!ïà”LZ/0’ªF‹XËœOàµNï=§nà­+º¾à†žp‚q wzà›A´ౠ¢à›à½*¡àŒÂ£` ©wZ7Mô7Nà‹h¾XDàµM‚¸à«Â¤à¥zà¾rà”à‚Z8P!.¨à¾Â¶Âª5J`ª‚à¾Âà…àˆmEoYûèlQà”
=‡àµ—mà¾Â¡[ô][ûà‘D Iéà˜Y_,à¦â€¹è®âà£àâ€“€à¥_à£D‹h §àº}k¥­?8rF›ƒ9Nà¾ÂªÂ¤Â²Y`sàƒÂ® (bà›à¦eàŽ}àŸÂ°0à¿>ggmF°~–1?BàŸàžâ9£6#àS°à¤X6<iàµÂ¢à¦tà±eà…à—à™K]¯zà¬àƒà¡O¡_à¿
PKçc±  J-  PK  à…HxQ               meta.xml“à‹Å½à› †à·}
‹vk¾9ž]W•Z©©àš]Dà à„¡uÀà‚d<}û_2â„¢IàµÅ½à¿|?ç†à«Â§â€”S<Æ’”à‘D#‚àà‚HÂ¥à›
àºÂ±à½–è©ùP›àƒA `à’ˆೠ´ Oà xà Â­z`Â­â€¢Â²à› Â£s=àƒxÇhL"c[’à Kîxà¸Â¬`à¼Ë†Çà…¼Ag«™à¡Æ’Ëœà¦'ËœàŒô à—à¬â€¢eSYà³y.à¤àKà™Â·~c®µ^ 3±à–›âù¼à’/à’àµFǻà‚StE¥¸rà½à™v%†.ൠ˜F£`)èfà  jà–é^zmê©ca;O„~zàà„$&!Â¥aoen)a$cI•YF¦¯à†µà¬â€˜5g”DY^­à–›³‚TàŽ/>”g;àà•|à›&à±à·%à]à°Â­Gà¼
}G/à²àŒ^Ÿàà à¼Æ’S"ËœtÇà·„à‚oeÂµà› Â¿ÂªIT'àžàžâ€°fà¿„{¯à¶7$½j–·–à·Ç5,à‘X¹j颉£§!{!à£%¢à½DÇ£r0ô\à¸$w Exé®
~4à†6_à”àžà‚à—i©¸ˆH”Dôà“Oà¥ç8à¬~•ù.OÆ’dà—[sé
à‹"K‹2+%¡©Là…!¯àŠÂ¢â€{ZT2‰à³Æ’Hà’2Rà†à‹Ë†_à³à•à¸à à‚à¾à–à¦PKà—%®àºà  à«  PK  à…HxQ               settings.xmlµZQsâ8 ~¿_à‘à¡Â½Kà™à¶z-à“v'àÂ²à‹-- àà­àœÂ¾â„¢D@®Ž•±à¿à¾dà˜!–%à‘S§à„‘,YàºôIàŽà•â€”y"^@›à•uÂ¥à¶é¤r*à„(V“à«àŠà£Â°u|Qùrà³ÇŽÇqàµàƒ,e
XKKàŒ½®L}ùà¸Âºâ€™iUGabSW"S·aSP«à—ê¯Wà—½²à¼à„à«àŠà”àšÂ´^­º–+>¡žT?ŸoeoeU—à¿Â¯Vàe¬žà—à«g³à™Â§à™Â©_[»¼¼¬àºÂ§Â«Â¥!ªq<à™wcà‹à•à‹Âà¥â€º|à¥Å¡à“àŠààŠ+à³o®à²W–Žc ‰à³àQà¾Â³Sv]!à«ê/1àŒà–^«l{ïà¿ï༠àµÂ1à„´²zb)=Ԭ&•›“«ê[û‹à­Àà˜ràˆ}Å #;à*à¸à¬à²à¤âs1à¡àŸ žL·oûs­V;?Làº`Š³>D5àoe
5³¡a„(A¨àŠÂà•¦£­gî1‚]à’ÇBš½à…'"=ŽUsˆàž:k{€ùw(à˜àµb?—·£­«cçlà‹Žrgà¬à•à¾Âºà¸Â³€àœ]©rzy~°T$”Ÿ,^lé©à­Â¥à¶wà¦Ë†à‹Àb²h-&;à°à¬0à¡?“!‰àšÅ’¶)j[:b™m¢àŒµ™à”¹ôZQé
à„çà’²àºÂ­_Z"´¨wà¬à½à¤@àŸÂ´à $„¢–¦¶¨à¶à‘à¦Â¶K%t,‘à’~"à‚à…àŠÂ¶à¼à¸àŠv=àŽà‘qûªà„ûà—îà¥â„¢–˜Àïà±Å¾FK~n¡àžLÅ¡2oeàœ#4¶ àžaà”à•Âeàœ%#ˆ"ˆn!#a °f¦5àŠJ–û;ÀL‡‡Kକ{L#a·UàŽb)DQOh1„kÆ’T„´£À¬àâ€ºà YBùoIà–:MËœ=‰àŸÀQà±à°Â¨FD’ž½šŒàŽUû(-_O+â„¢à…à¥É”ï.:Å¡ m
éª;Sà’qËœà’à¡à³Dc¦|,8¤ºà•bà†à¤Â·-W¾ïˆà‚jà‹y8Iàžà„$jSàœ#àƒs€à6à™Â~à–ˆ•àâ€¹}D2ž(à²îÀbàšC;´.àŸà¾|àƒ=‘‚niL¶î¼„hi›ï U`b¡zâ„¢
m&àžÂ³Â§€"1à„2@à“Q¦Å’kwK§cAÅ¡àŠà…£¡à¼Â¢Â¸)à¿Pnà±à­àŸâ„¢Â±à±xA5àŒSl§à·BeB6&2¸m ^`8%oeU"–à¥[à¤à„•8à²6ŸQ¸ZàˆKÆ’DHà™©é•jeà…àŽà9âl+pl‰4àŠÂ¯Æ’à£àŒÂ¹à­Çrdà“UM‰†ƒà.¡à•%à¿’T²À¬h:›ip5©;àºà—tUâ€¡àƒ Ž£‚&-à„WWà ùN*J[$[à‚àŸ8âˆhOj CZ¨XˆC^àšà”c¸1¢KOàŸL©)?&lÂ¥Và”9à¶àÅ à#Xà£Ca&\¤à¡nNŽSBv@D,èàž<¡Ž\5»•«à‹Â¹acà‘’‡´Ÿ{$OWFkà†à ¡›Y7à¬À àˆù6oeàš<à²ôÀ±à•ÀZmH£à‹%¢3Q¨¡kà£J´}6µ§‰”8à³)Là”*†
¾Ugà•|¿xW‘+¢o/Å¡ %àƒ;à—àµàŠ ^}kº9à’“iàŠà£àƒ|à¼Å¸Âk ¿àƒ¤à¸àf¤‰àŠà„à‘¯wà•V*¬ »à·'àÇà™w ŽF„à„›>à‹â€°â€°à°â2=nH<
8]ŠRà—¥£w‘à–2àŒ$Wà·à“§Sê#nZà¤9hà­ââô¬và àAEà”§‡Š¥ê4eoefàÂ»Â­®Oš–j*t¾Žà³Lâ„¢à¦t0!།TàŠ?¨â!à«jN´î˜Tàˆâ€=u7<à‹àˆ&à›à„M(e§¦Môàpà”<uÂ¥Gàœ/àž3à”à”“à’©,à³Ë†aà¿à·à‚N„ˆ5à½à˜à¥=BZà¤àšô´mU ù*h¥¤à¶î’à”.\%sP¾1h««†q]H0x c‘IŽu€â€œBà”‹Cà—’²µm\
›àžU~à…«¤CÂ¥J
B§à¶]=‡¶Wà£'Æ’àŒj(nG~àœà¿ÂÂ¸Å’à¡É oC- sV{಼à·0•DÆ’àˆà‹;g?z Å’àšÂ°M!3à­Â¯/V4à“à³8º 7¿]Frà¡Â³#à¦à‚‘³O#Bž¾j6Sà­f à«V‘F³‘u„Š”YQªÀà¿Çà‘hÇà†1à·îxà¬"„wèà–¤”ŠU†™¹S‘¢6‡g(à¦û'à·IDBà‚¨à‚c‡à¼oDgà—\£î³aà¬{ÀWtˆ(:àŸàà¬Â¾â>pîà¥u ûu.xF3|f²:nî„à‹—9à†^¼Gà¿àµ53“à¿=: ˜¢¤à¸à¥:Š.Ç ZA$Æ’Z0g —&%à¼à â€™ïG1l‘”o¾?à¬pà­Â¿î{gà˜¦!à¥Â»A<g2·à„¼à'LyàŠ2àŸà­{-ž^苝Ÿ´UàŸ| ^ààµéà¾àPKàšà¾/ià—  à¼/  PK  à…HxQ               content.xml½WMnà£6àžà·‚
A †Q<&jà¬à™Æ’HŠ¢NvUà$%Â¥D•¤,{7Çhw]àŽoeav“›àŒIàºHYŽà¥hê¢@à X|àŸûï}ûj›É`àƒÂµ*Ÿ‡à‘à¥Uà°oe*&à²tà¾à¼à°½ _->»UI"(™¢eà†sܬàŠ-à¼@;7qà†-™‡¥àŽcEÅ’0qN2nbKcUà°Â¼à‘‰;là¬à½à”àÂµà¥Â©àšû8zàºâ€°Å¡ÂªÂ»5%
Bà
bà…JàŒ(và–à–1à†N·vt©tŠ¯¯®^à àºÂ¹AoÂ¥àˆoà±UU]V3nnn°—6PF[\QjéQÅ’b.¹ àà è2à‚
à–à˜Âoe\
î§`ùà–NUvà˜Â¾.à“¤šªà«Â°0C൛®>c}]³I'§¼IGàšGà—DONàžÆ’ûàšÂºÂ°'Å¡à¿5à–¼PàšÂ¶u&«é]à²à Â¾Â¯Â¼àŒV\O.±à¤I£aV«“àƒZia¹îàéI8%’và«8}!¦à«AQN/à‘
ච¶eà Âµâ€ºX¶à¤â€™Â¨2‡¼à¶à¾ù¶à Z8‘^-X8oeà£â€œQDWà˜a¼Tà¿"„= àµ, Ipà™,Cà«à½Â¨Â¥Pf &à•ÂªË†{àš}s±à«¦y‰ïAè?îï:>à”à™à”:à¬`©à…à¤5ªà‘Æ’ê«à¬X¨àûà±ÂÂ£Â¼â€“D{3¢pkq 6là”ô/à·wKºà¦éÀây0àžX’w¤îà¼m§5àŽ%£Xrà˜Â»Æ’rnà—6“à£o 'm ©fà¬(bžaxc  à à•çà­àº3³Ç4~à‚N†à…à£n­]2àà­gà³â€™à›Â§àžÂ»àŒà‚Es¨à›np{À] %„rà„8•fq[V{à”àÂ®Âà³à°Â®Â¤â€šâ€˜`Ir!zÆ’à‹â€žàœààƒ/H¡àŒ7=P}›‹RžCK€à™L%Å’ à±3~°®àŸè` jɸïà â€ž ´àŠH>@à‚Rà˜àš
à‘à‚Sàž'9OÅ à­SjsNh]+à¾Â«và­Å’à¥à™91à Âªâ€¢Q‰
~%àŸq1à—î‰à­â€¡Â¥àˆâ€“e~$¦Nr®<¶xûsRZËœH+(à²vàšÂôŸƒhÅ’Z_û( ¢IªI±npà .à¼à¾à•ZK MF4 àƒÅ½jPDàˆÂµàœ-à›à„@ Àà›À»tà…¢aOà’:B—`/àž.àÂ§ià­+à…và­Æ’‹eqà«ï·†à¿Qà‚™¶<Oà„„)$à™!UZ¸¹s$à¡=d <îà…uà’àŸKY[oŸ‹à±,cM+àÂ³_à6à²m}›?à›àŽk‘–ºàà±âµFËœ`àœà˜Â½Zqùà¸îàƒàŸàž_||à³çà…à£[ôà¸à¶7à¸_bôà•$u|àšx’®“µ¶»oà¾Âº@A<Ëœ,<:<à²àƒxà±PK!à•çà¡à  Y  PK    à…HxQà²Âª@Aâ  â     Thumbnails/thumbnail.png‰PNG

   
IHDR   Âµ      à‚à½Çé   PLTEYbkd\Ywyty}vˆv‚‹}“ªŽŽ!Ž˜–‘Œoe‘‡™”Ž————–›oe–•‰“¨oe¤ž žž¤¬–¡±Ÿ¦³ª“¬¦—¨¡Ÿ¤£¤¢¥ª©§¦ª«©³©¦´®ª²³µ´¹¹½½½«µàÂ©Â·É¯¾ÉºàƒàÂ¿à„ɶàŠàœÂ»à‘à¦àÂ¬Â£àƒÂºÂ®à‚¿¼É¿±à“¿­à‚à‚¿àŠàÂµà“ɵà„àƒàƒà‚à…àŠàŠà†ÀàŒàààà‹à—àà”à™à‘à†àà‘àŒà†à“à“à“àžà™à’àšàšàœàà‘à¡àŽà—à¡Éà™çàà¡à¬àžïà±à¤à”Éà¬à™àƒâàœà–à¤àŸàžà¦à¡àœà²éàžà¿éà“à£à¤à¤à¡à¦à¬à¤éïïéà¤à­à­à­à¬à±à¶îôàºà«àºà¿à¼à²à¥ùôïà¿ùïà±à±à±ôùà¿à¼à¶à±à¿àºàµà¾à¿à¾   à¿à¿à¿3làŒI  ’IDATxàšà­à•ÉJQàvžgÆ’Å cˆ8à„€â€°Â­â€™ç)NQ1±à¾à¿SÅ’[wn4
çnê-[TyLBMMMMMMMMMMMà½#à—Cµˆ·fàžà¾z¦’ônçM=v\àš]à˜à–à«Â¿PwjiàµÂ¶Q‹»à“ˆjD=[º‰htµº’¼à¬à‹â€¢dsd àžz¶b1›Mêà£ànV_–"à‹Å Â±àœâ„¢à¥Â£x_jà…êKoeD|t¯O¢à½àŸà¥Zo4m#5àµà¿Â¨Â³Â¸iµ«­ïgûà±9'ê«à¡à…àÂ¹Éà‚àœza>­¯oeà¥D}?1½·6µ¿6X9ïoà­\à”à²Â¡~*ôà“jZ/?otnàºÂ¡m¤¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦à¾e¾ K?¼)à¡â€“à9    IEND®B`‚PK  à…HxQ               META-INF/manifest.xml­“Mjàƒ0Fà·9!à‘¶XJà›Mq²(ôéT{ठH#¡ŸàœÂ¾Â²â€°—ˆ!;É¿à·àà˜àšà¬Nà–TG5à¬â€¢Â¯Yà”º©oà˜à·à¾Â«à¾`»à­jc¡†˜à¤Â´Â¨àŠ{¯à›â€ à¥@à’©ˆQ’²ejÂ¥à³@k³Jà²o½Mà—à,À;» ƒà“à„
½oe@àšeêT*à•oe<Ž”‘NklAàŽ£iȻn-h4P—à²p¾àà™ËœàšÂ«th˜¸›à«6èPà•éà¬Â¡aàŠ{Æ’à­H©à£à£ à¸Â¼užJ &–dà¸t¤±àaà„à†7à± ;fâÂ¥už‘·sà‚2ùôŒ‡N? .U/EºàŒà“à™@à‚àž1 3‹±’z:4BJà¥:<?mùFià¸?žàà²à½!!&Å 4-¹§à¾Å½­êA çà…²à¿Â®àºà¶PKT´O.  %  PK     à…HxQ^à†2 '   '                    mimetypePK     à…HxQ                         M   Configurations2/progressbar/PK     à…HxQ                         â€¡   Configurations2/menubar/PK     à…HxQ                         Â½   Configurations2/popupmenu/PK     à…HxQ                         àµ   Configurations2/statusbar/PK     à…HxQ                         -  Configurations2/toolbar/PK     à…HxQ                         c  Configurations2/accelerator/PK     à…HxQ                         Â  Configurations2/floater/PK     à…HxQ                         à“  Configurations2/toolpanel/PK     à…HxQ                            Configurations2/images/Bitmaps/PK   à…HxQ´à·hà’  Æ’               H  manifest.rdfPK   à…HxQçc±  J- 
             â€¡  styles.xmlPK   à…HxQà—%®àºà  à«               à   meta.xmlPK   à…HxQàšà¾/ià—  à¼/               à”
  settings.xmlPK   à…HxQ!à•çà¡à  Y               à¥  content.xmlPK     à…HxQà²Âª@Aâ  â               î  Thumbnails/thumbnail.pngPK   à…HxQT´O.  %                 META-INF/manifest.xmlPK      e  w   

(ce que vous voyez ci-dessus n'est pas exact et est converti par le php du forum)

Sinon il me semble qu'il y a possibilité d'enregistrer ou de convertir un odt en pure xml, à  réfléchir :)

198
Vos projets et Montages d'Électronique / Les livres de sauvegarde
« le: Novembre 21, 2020, 06:14:36 pm »
Bonjour ;)

Je me permets de partager avec vous une idée que j'ai titré "Les livres de sauvegarde" :

Citer
Face à  l'obsolescence progressive, mais bien réelle, des systèmes analogiques et numériques dans le paysage informatique complexe actuel (multitude de technologies matérielles et logicielles plus ou moins hétérogènes), nul ne sait si un matériel de sauvegarde standard considéré de nos jours pourra encore être lu (ouvert en lecture) dans les décennies à  venir, et ce malgré le soin apporté à  la propagation dans le temps des normes de standardisation de l'analogique et du numérique dans leur ensemble.

Le support imprimé comme le papier relié sous la forme d'un livre peut, dans de bonnes conditions de conservation, rester lisible après plusieurs siècles, voir millénaires. Contrairement aux mémoires non volatiles analogiques ou numériques qui peuvent faire office de supports de sauvegarde (rubans perforés, bandes magnétiques, mémoires à  base de semi-conducteurs, etc...), la lecture du papier imprimé s'affranchit d'utiliser un matériel spécifique pour être compréhensible ou décodable, ce qui en fait un candidat relativement pérenne afin d'archiver et de transmettre des informations aux générations futures, en considération de la dépréciation et de l'évolution continue et accélérée respectivement des anciennes et des nouvelles technologies. De surcroît, la grande accessibilité du livre en lecture/écriture est fonction des caractéristiques rudimentaires propres aux techniques de l'imprimerie. La rusticité du support d'impression et de fait, son fonctionnement et sa mise en oeuvre minimaliste (sans source d'énergie et dépourvu de composants complexes), participent grandement à  sa relative robustesse eu égard les aléas et la sensibilité électromagnétique à  l'environnement extérieur des technologies de rétention informatiques analogiques et numériques conventionnelles.

C'est pourquoi je pense être utile l'existence de ce présent dispositif particulièrement dans des contextes critiques, c'est-à -dire en cas d'obsolescence des techniques informatiques dites modernes à  l'échéance de périodes dépréciatives et évolutives, de crash d'un ou de plusieurs systèmes redondants à  différents lieux géographiques, de suppression intentionnelle de données à  l'aide des techniques de piratage sur des machines particulières ou des serveurs connectés à  internet, ceci conjointement à  des situations éventuelles de crises systémiques, de conflits armés de types multiples, ou plus largement d'effondrement civilisationnel favorisant la dispersion et l'élimination d'informations importantes.




Le contenu de chacun de mes livres a pour origine un seul fichier PDF généré automatiquement via une routine que j'ai développé. En effet cette routine explore l'arborescence de fichiers que vous souhaitez sauvegarder, en extrait le contenu UTF-8, et compile le tout en un fichier PDF que vous pouvez directement envoyer à  un imprimeur (voir plus bas).



Cette routine (pour le système d'exploitation Linux que j'utilise) permet de générer automatiquement le contenu d'un livre complet sous la forme d'un seul fichier PDF via une arborescence de fichiers (organisation hiérarchique des fichiers dans des répertoires) dont le contenu UTF-8 est extrait :
Citer
C'est le contenu UTF-8 (pour "Unicode Transformation Format 8" ou format de transformation Unicode sur 8 bits) de vos fichiers à  sauvegarder qui est utilisé afin de générer un fichier unique PDF imprimable (book content.pdf), contenu prenant ainsi la forme de caractères normalisés qui peut être issu de divers langages, soit par exemple du binaire, de l'hexadécimal, du C++, ou tout autre caractère UTF-8 imprimable. Attention cependant, si des caractères dans vos fichiers ne font pas partie de la norme UTF-8, il ne pourront pas être traités correctement.

Ainsi ce que je propose ici est un outil qui, bien utilisé, vous permettra de sauvegarder vos fichiers sur des supports imprimés (livres, documents divers), via la simple génération d'un seul fichier .pdf (pour "Portable Document Format" ou format de document portable), un format de fichier pris en charge par tous les imprimeurs.

Ma routine d'automatisation prend donc en entrée une arborescence de fichiers, elle permet de choisir les dimensions des pages du livre, les dimensions des marges générales, la dimension de la marge de reliure qui servira à  positionner le texte en retrait par rapport à  la reliure du livre (ceci afin de faciliter l'ergonomie de lecture), la taille des caractères du texte qui sera imprimé, la police de caractère utilisée, et les dimensions du fond perdu (soit la marge qui sera rognée par la machine de coupe). Si besoin, il est possible également de trier manuellement l'ordre d'apparition des fichiers dans le livre, ce qui peut être intéressant si le tri alphanumérique par défaut n'est pas souhaité.

Une fois ces choix effectués, un fichier nommé book content.pdf est créé. Ce fichier répertorie tout le contenu des fichiers de l'arborescence, avec la pagination, la numérotation des lignes, la numérotation des pages (paires et impaires), et la table des fichiers en toute fin du livre. Ci dessous, la routine (.sh) permettant la création automatique du contenu d'un livre PDF (.pdf) à  partir d'une arborescence de fichiers :

#!/bin/bash

echo "Page width in mm ?"
read widthPage

echo -e "\nPage height in mm ?"
read heightPage

echo -e "\nPage margin in mm ?"
read marginPage

echo -e "\nGutter margin in mm ?"
read marginGutter

echo -e "\nFont size in mm ?"
read fontSize

echo -e "\nFont name ?"
read fontName

echo -e "\nCutter margin in mm ?"
read marginCutter

echo ""

next=false

while [ $next == false ]
do
echo "Sort option ?"
echo "a = Alphanumeric sort"
echo "m = Manual sort"

read menuOptionSort

if [ $menuOptionSort == "a" ] || [ $menuOptionSort == "m" ]
then
next=true
fi

clear
done

rm tmp -r -f
rm "book content.pdf" -f

nameBash=$(basename "$0")
nameLink=$(basename "$1")
countTable=0

shopt -s globstar

for file in **/*
do
if [ -f "$file" ] && [ "$file" != "$nameBash" ] && [ "$file" != "$nameLink" ]
then
fileTable[countTable]=$file
((countTable++))
fi
done

if [ $countTable == 0 ]
then
echo "No file detected"
else
iterationTable=0

if [ $menuOptionSort == "m" ]
then
next=false

while [ $next == false ]
do
echo "Manual sort :"
echo "e = Exit"
echo "s = Save file tree (file.tree)"
echo "l = Load file tree (file.tree)"
echo "d = Delete file tree (file.tree)"
echo ""
echo "File tree :"

for ((iterationTableDisplay=0; iterationTableDisplay < countTable; iterationTableDisplay++))
do
if [ $iterationTableDisplay == $iterationTable ]
then
echo $((iterationTableDisplay+1))" = "${fileTable[iterationTableDisplay]}" <"
else
echo $((iterationTableDisplay+1))" = "${fileTable[iterationTableDisplay]}
fi
done

read menuManualSort

if [ $menuManualSort == "e" ]
then
next=true
elif [ $menuManualSort == "s" ]
then
rm file.tree -f

for ((iterationTableForWriting=0; iterationTableForWriting < countTable; iterationTableForWriting++))
do
echo ${fileTable[iterationTableForWriting]} >> file.tree
done
elif [ $menuManualSort == "l" ]
then
countTable=0

while read line
do
fileTable[$countTable]=$line
((countTable++))
done < file.tree
elif [ $menuManualSort == "d" ]
then
rm file.tree -f
elif (($menuManualSort >= 1 && $menuManualSort <= $countTable))
then
saveTable=${fileTable[$iterationTable]}

fileTable[$iterationTable]=${fileTable[$((menuManualSort-1))]}
fileTable[$((menuManualSort-1))]=$saveTable
fi

clear

if (($iterationTable == $countTable - 1))
then
iterationTable=0
else
((iterationTable++))
fi
done
fi

echo "Progress = 0.0%"

rm tmp -r -f
mkdir tmp

bashString="__BASH_"
countLineTotal=0

characterMeasure=""

for ((iterationCharacter=0; iterationCharacter < 1000; iterationCharacter++))
do
characterMeasure=$characterMeasure"_"
done

ratioFontSize=$(inkscape --without-gui -W <(echo "<svg><text font-family=\""$fontName"\" font-size=\""$fontSize"\">"$characterMeasure"</text></svg>") 2>/dev/null)
countCharacterPerLine=$(echo "("$widthPage"-(("$marginPage"*2)+"$marginGutter"))/("$ratioFontSize"/1000)" | bc -l)
countCharacterPerLineDisplay=$(echo "scale=0;("$countCharacterPerLine"*10)/10" | bc -l)

countLinePerPage=$(echo "("$heightPage"-(("$marginPage"*2)+("$fontSize"/3)))/"$fontSize | bc -l)
countLinePerPageDisplay=$(echo "scale=0;("$countLinePerPage"*10)/10" | bc -l)

for ((iterationTable=0; iterationTable < countTable; iterationTable++))
do
clear

progress=$(echo "25/("$countTable"/("$iterationTable"+1))" | bc -l)
progressDisplay=$(echo "scale=1;(("$progress"+0.05)*10)/10" | bc -l)

if ((${#progressDisplay} == 2))
then
echo "Progress = 0"$progressDisplay"%"
else
echo "Progress = "$progressDisplay"%"
fi

sizeRaw=$(stat -c "%s" "${fileTable[iterationTable]}")

if [ $sizeRaw == 0 ]
then
size="(0 octet)"
elif [ $sizeRaw == 1 ]
then
size="(1 octet)"
elif (($sizeRaw < 1024))
then
size="("$sizeRaw" octets)"
elif (($sizeRaw < 1048576))
then
sizeInteger=$((sizeRaw/1024))
sizeDecimal=$(echo "("$sizeRaw"/1024)-"$((sizeRaw/1024)) | bc -l)
sizeDecimalDisplay=$(echo "scale=1;("$sizeDecimal"*10)/10" | bc -l)
sizeNumber=$(echo $sizeRaw"/1024" | bc -l)
sizeNumberDisplay=$(echo "scale=1;("$sizeNumber"*10)/10" | bc -l)

if [ $sizeDecimalDisplay == 0 ]
then
if (($(echo $sizeNumberDisplay" == "$sizeNumber | bc -l)))
then
size="("$sizeRaw" octets = "$sizeInteger"Kio)"
else
size="("$sizeRaw" octets ≈ "$sizeInteger"Kio)"
fi
else
if (($(echo $sizeNumberDisplay" == "$sizeNumber | bc -l)))
then
size="("$sizeRaw" octets = "$sizeNumberDisplay"Kio)"
else
size="("$sizeRaw" octets ≈ "$sizeNumberDisplay"Kio)"
fi
fi
elif (($sizeRaw < 1073741824))
then
sizeInteger=$((sizeRaw/1048576))
sizeDecimal=$(echo "("$sizeRaw"/1048576)-"$((sizeRaw/1048576)) | bc -l)
sizeDecimalDisplay=$(echo "scale=1;("$sizeDecimal"*10)/10" | bc -l)
sizeNumber=$(echo $sizeRaw"/1048576" | bc -l)
sizeNumberDisplay=$(echo "scale=1;("$sizeNumber"*10)/10" | bc -l)

if [ $sizeDecimalDisplay == 0 ]
then
if (($(echo $sizeNumberDisplay" == "$sizeNumber | bc -l)))
then
size="("$sizeRaw" octets = "$sizeInteger"Mio)"
else
size="("$sizeRaw" octets ≈ "$sizeInteger"Mio)"
fi
else
if (($(echo $sizeNumberDisplay" == "$sizeNumber | bc -l)))
then
size="("$sizeRaw" octets = "$sizeNumberDisplay"Mio)"
else
size="("$sizeRaw" octets ≈ "$sizeNumberDisplay"Mio)"
fi
fi
fi

echo -e "Fichier "${fileTable[iterationTable]}" "$size"\u00a0:\n" | fold -s -w$countCharacterPerLineDisplay >> tmp/tmp3

cp "${fileTable[iterationTable]}" tmp/tmp2
sed -i tmp/tmp2 -e "s/ /"$bashString"SPACE/g" -e "s/\t/"$bashString"TABULATION/g" -e "s/*/"$bashString"STAR/g" -e "s/\\\/"$bashString"BACKSLASH/g"

countTmpLine=$(wc -l < tmp/tmp2)
iterationTmpLine=1

while read line
do
spacePrefixLine=""

for ((iterationSpace=0; iterationSpace < ${#countTmpLine} - ${#iterationTmpLine}; iterationSpace++))
do
spacePrefixLine=$spacePrefixLine$bashString"SPACE"
done

spacePrefixSubline=""

for ((iterationSpace=0; iterationSpace < ${#countTmpLine}; iterationSpace++))
do
spacePrefixSubline=$spacePrefixSubline$bashString"SPACE"
done

echo $line | sed -e "s/"$bashString"SPACE/ /g" -e "s/"$bashString"TABULATION/   /g" -e "s/"$bashString"STAR/*/g" -e "s/"$bashString"BACKSLASH/\\\/g" | fold -s -w$((countCharacterPerLineDisplay-(${#countTmpLine}+3))) | sed -e "s/ /"$bashString"SPACE/g" -e "s/*/"$bashString"STAR/g" -e "s/\\\/"$bashString"BACKSLASH/g" > tmp/tmp1

iterationTmpSubline=1

while read subline
do
if [ $iterationTmpSubline == 1 ]
then
echo $spacePrefixLine$iterationTmpLine" : "$subline | sed -e "s/"$bashString"SPACE/ /g" -e "s/"$bashString"STAR/*/g" -e "s/"$bashString"BACKSLASH/\\\/g" >> tmp/tmp3
else
echo $spacePrefixSubline" : "$subline | sed -e "s/"$bashString"SPACE/ /g" -e "s/"$bashString"STAR/*/g" -e "s/"$bashString"BACKSLASH/\\\/g" >> tmp/tmp3
fi

((iterationTmpSubline++))
done < tmp/tmp1

((iterationTmpLine++))
done < tmp/tmp2

countLine=$(wc -l < tmp/tmp3)
iterationLinePerPage=0
fillPage=$((countLinePerPageDisplay-2))

for ((iterationLine=0; iterationLine < countLine - 1; iterationLine++))
do
if (($iterationLinePerPage == $countLinePerPageDisplay - 3))
then
fillPage=$((fillPage+(countLinePerPageDisplay-2)))
iterationLinePerPage=0
else
((iterationLinePerPage++))
fi
done

for ((iterationLine=0; iterationLine < fillPage - countLine; iterationLine++))
do
echo "" >> tmp/tmp3
done

titlePageTable[iterationTable]=${fileTable[iterationTable]}

if [ $countLineTotal == 0 ]
then
numberPageTable[iterationTable]=1
else
numberPageTable[iterationTable]=$(((countLineTotal/(countLinePerPageDisplay-2))+1))
fi

countLineTotal=$(wc -l < tmp/tmp3)
done

iterationLinePerPage=0
numberPageContent=1
flipFlop=false

for ((iterationLine=0; iterationLine < countLineTotal; iterationLine++))
do
if (($iterationLinePerPage == $countLinePerPageDisplay - 1))
then
sed -i tmp/tmp3 -e $iterationLine"i\\\\"

if [ $flipFlop == false ]
then
lenghtNumberPageContent=${#numberPageContent}
fillSpace=""

for ((iterationCharacter=0; iterationCharacter < countCharacterPerLineDisplay - lenghtNumberPageContent; iterationCharacter++))
do
fillSpace=$fillSpace$bashString"SPACE"
done

sed -i tmp/tmp3 -e $((iterationLine+1))"i"$fillSpace$numberPageContent | sed -e "s/"$bashString"SPACE/ /g"

flipFlop=true
else
sed -i tmp/tmp3 -e $((iterationLine+1))"i"$numberPageContent
flipFlop=false
fi

iterationLinePerPage=0

((numberPageContent++))

clear

progress=$(echo "25+(25/("$countLineTotal"/("$iterationLine"+1)))" | bc -l)
progressDisplay=$(echo "scale=1;(("$progress"+0.05)*10)/10" | bc -l)

echo "Progress = "$progressDisplay"%"
else
((iterationLinePerPage++))
fi

countLineTotal=$(wc -l < tmp/tmp3)
done

if [ $flipFlop == false ]
then
lenghtNumberPageContent=${#numberPageContent}
fillSpace=""

for ((iterationCharacter=0; iterationCharacter < countCharacterPerLineDisplay - lenghtNumberPageContent; iterationCharacter++))
do
fillSpace=$fillSpace$bashString"SPACE"
done

echo -e "\n"$fillSpace$numberPageContent | sed -e "s/"$bashString"SPACE/ /g" >> tmp/tmp3
else
echo -e "\n"$numberPageContent >> tmp/tmp3
fi

echo -e "Table des fichiers\u00a0:\n" | fold -s -w$countCharacterPerLineDisplay >> tmp/tmp3

lenghtMaxPageNumber=${#numberPageTable[$((countTable-1))]}
lenghtMaxPageTitle=$(((countCharacterPerLineDisplay-3)-${#numberPageTable[$((countTable-1))]}))

for ((iterationTable=0; iterationTable < countTable; iterationTable++))
do
echo ${titlePageTable[$iterationTable]} | fold -s -w$lenghtMaxPageTitle > tmp/tmp4

countTmpLine=$(wc -l < tmp/tmp4)

iterationTmpLine=1
point="."

while read line
do
if [ $iterationTmpLine != $countTmpLine ]
then
echo $line >> tmp/tmp3
else
lenghtLastLine=$((${#line}+${#numberPageTable[iterationTable]}))

for ((iterationCharacter=0; iterationCharacter < countCharacterPerLineDisplay - (lenghtLastLine + 3); iterationCharacter++))
do
point=$point"."
done

echo $line" "$point" "${numberPageTable[iterationTable]} >> tmp/tmp3
fi

((iterationTmpLine++))
done < tmp/tmp4
done

countLineTotal=$(wc -l < tmp/tmp3)
iterationLinePerPage=0
fillPage=$countLinePerPageDisplay

for ((iterationLine=0; iterationLine < countLineTotal - 1; iterationLine++))
do
if (($iterationLinePerPage == $countLinePerPageDisplay - 1))
then
fillPage=$((fillPage+countLinePerPageDisplay))
iterationLinePerPage=0
else
((iterationLinePerPage++))
fi
done

for ((iterationLine=0; iterationLine < fillPage - countLineTotal; iterationLine++))
do
echo "" >> tmp/tmp3
done

cp tmp/tmp3 tmp/tmp5

sed -i tmp/tmp5 -e "s/ /_/g" -e "s/*/_/g" -e "s/\\\/_/g"

iterationLine=0

while read line
do
lenghtLineContent[iterationLine]=${#line}
((iterationLine++))
done < tmp/tmp5

countLineTotal=$(wc -l < tmp/tmp3)
iterationLine=0
iterationLineDisplayed=0

cp tmp/tmp3 tmp/tmp6

sed -i tmp/tmp6 -e "s/ /"$bashString"SPACE/g" -e "s/*/"$bashString"STAR/g" -e "s/\\\/"$bashString"BACKSLASH/g"

clear

echo "Progress = 50.0%"

while read line
do
fillSpace=""

for ((iterationCharacter=0; iterationCharacter < countCharacterPerLineDisplay - lenghtLineContent[iterationLine]; iterationCharacter++))
do
fillSpace=$fillSpace$bashString"SPACE"
done

echo $line$fillSpace | sed -e "s/"$bashString"SPACE/ /g" -e "s/"$bashString"STAR/*/g" -e "s/"$bashString"BACKSLASH/\\\/g" >> tmp/tmp7

((iterationLine++))

if (($iterationLineDisplayed == $countLinePerPageDisplay - 1))
then
clear

progress=$(echo "50+(25/("$countLineTotal"/"$iterationLine"))" | bc -l)
progressDisplay=$(echo "scale=1;(("$progress"+0.05)*10)/10" | bc -l)

echo "Progress = "$progressDisplay"%"

iterationLineDisplayed=0
else
((iterationLineDisplayed++))
fi
done < tmp/tmp6

iterationLine=0
iterationFileDisplayed=0
firstPage=false
flipFlop=false
countPageTotal=$(($(wc -l < tmp/tmp3)/countLinePerPageDisplay))

sed -i tmp/tmp7 -e "s/ /"$bashString"SPACE/g" -e "s/*/"$bashString"STAR/g" -e "s/\\\/"$bashString"BACKSLASH/g"

while read line
do
if [ $iterationLine == 0 ]
then
echo "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" > tmp/tmp.svg
echo "<svg width=\""$(echo "("$marginCutter"*2)+"$widthPage | bc -l)"mm\" height=\""$(echo "("$marginCutter"*2)+"$heightPage | bc -l)"mm\">" >> tmp/tmp.svg
fi

if [ $flipFlop == false ]
then
echo "<text x=\""$(echo $marginCutter"+("$widthPage"-"$marginPage")" | bc -l)"mm\" y=\""$(echo $marginCutter"+("$marginPage"+("$fontSize"*("$iterationLine"+1)))" | bc -l)"mm\" text-anchor=\"end\" font-family=\""$fontName"\" font-size=\""$fontSize"mm\" fill=\"#000000\" xml:space=\"preserve\">"$(echo $line | sed -e "s/&/&amp;/g" -e "s/</\&lt;/g" -e "s/>/\&gt;/g" -e "s/\"/\&quot;/g" -e "s/'/\&apos;/g")"</text>" | sed -e "s/"$bashString"SPACE/ /g" -e "s/"$bashString"STAR/*/g" -e "s/"$bashString"BACKSLASH/\\\/g" >> tmp/tmp.svg
else
echo "<text x=\""$(echo $marginCutter"+"$marginPage | bc -l)"mm\" y=\""$(echo $marginCutter"+("$marginPage"+("$fontSize"*("$iterationLine"+1)))" | bc -l)"mm\" text-anchor=\"start\" font-family=\""$fontName"\" font-size=\""$fontSize"mm\" fill=\"#000000\" xml:space=\"preserve\">"$(echo $line | sed -e "s/&/&amp;/g" -e "s/</\&lt;/g" -e "s/>/\&gt;/g" -e "s/\"/\&quot;/g" -e "s/'/\&apos;/g")"</text>" | sed -e "s/"$bashString"SPACE/ /g" -e "s/"$bashString"STAR/*/g" -e "s/"$bashString"BACKSLASH/\\\/g" >> tmp/tmp.svg
fi

if (($iterationLine == $countLinePerPageDisplay - 1))
then
echo "<rect x=\"0mm\" y=\"0mm\" width=\""$(echo "("$marginCutter"*2)+"$widthPage | bc -l)"mm\" height=\""$(echo $marginCutter"+"$marginPage | bc -l)"mm\" fill=\"#ffffff\"/>" >> tmp/tmp.svg
echo "<rect x=\"0mm\" y=\""$(echo $marginCutter"+("$heightPage"-"$marginPage")" | bc -l)"mm\" width=\""$(echo "("$marginCutter"*2)+"$widthPage | bc -l)"mm\" height=\""$(echo $marginCutter"+"$marginPage | bc -l)"mm\" fill=\"#ffffff\"/>" >> tmp/tmp.svg
echo "<rect x=\"0mm\" y=\""$(echo $marginCutter"+"$marginPage | bc -l)"mm\" width=\""$(echo $marginCutter"+"$marginPage | bc -l)"mm\" height=\""$(echo $heightPage"-("$marginPage"*2)" | bc -l)"mm\" fill=\"#ffffff\"/>" >> tmp/tmp.svg
echo "<rect x=\""$(echo $marginCutter"+("$widthPage"-"$marginPage")" | bc -l)"mm\" y=\""$(echo $marginCutter"+"$marginPage | bc -l)"mm\" width=\""$(echo $marginCutter"+"$marginPage | bc -l)"mm\" height=\""$(echo $heightPage"-("$marginPage"*2)" | bc -l)"mm\" fill=\"#ffffff\"/>" >> tmp/tmp.svg

echo "</svg>" >> tmp/tmp.svg

if [ $firstPage == false ]
then
rsvg-convert -f pdf -d 72 -p 72 tmp/tmp.svg -o tmp/tmp1.pdf
firstPage=true
else
rsvg-convert -f pdf -d 72 -p 72 tmp/tmp.svg -o tmp/tmp2.pdf
pdftk tmp/tmp1.pdf tmp/tmp2.pdf cat output tmp/tmp3.pdf

mv tmp/tmp3.pdf tmp/tmp1.pdf
fi

if [ $flipFlop == false ]
then
flipFlop=true
else
flipFlop=false
fi

iterationLine=0

((iterationFileDisplayed++))

clear

progress=$(echo "75+(25/("$countPageTotal"/"$iterationFileDisplayed"))" | bc -l)
progressDisplay=$(echo "scale=1;(("$progress"+0.05)*10)/10" | bc -l)

echo "Progress = "$progressDisplay"%"
else
((iterationLine++))
fi
done < tmp/tmp7

exiftool -q -m -all= tmp/tmp1.pdf

mv tmp/tmp1.pdf "book content.pdf"
rm tmp -r -f

lenghtTotalCover=$(echo "(("$marginCutter"*2)+("$widthPage"*2))+("$countPageTotal"*0.06)" | bc -l)
widthFrontBackCover=$(echo $marginCutter"+"$widthPage | bc -l)
heightFrontBackCover=$(echo "("$marginCutter"*2)+"$heightPage | bc -l)
widthSideCover=$(echo "("$countPageTotal"*0.06)" | bc -l)

lenghtTotalCoverDisplay=$(echo "scale=3;(("$lenghtTotalCover"+0.0005)*10)/10" | bc -l)
widthFrontBackCoverDisplay=$(echo "scale=3;(("$widthFrontBackCover"+0.0005)*10)/10" | bc -l)
heightFrontBackCoverDisplay=$(echo "scale=3;(("$heightFrontBackCover"+0.0005)*10)/10" | bc -l)
widthSideCoverDisplay=$(echo "scale=3;(("$widthSideCover"+0.0005)*10)/10" | bc -l)

sizeRaw=0

for ((iterationTable=0; iterationTable < countTable; iterationTable++))
do
sizeRaw=$((sizeRaw+$(stat -c "%s" "${fileTable[iterationTable]}")))
done

if [ $sizeRaw == 0 ]
then
size="0 byte"
elif [ $sizeRaw == 1 ]
then
size="1 byte"
elif (($sizeRaw < 1024))
then
size=$sizeRaw" bytes"
elif (($sizeRaw < 1048576))
then
sizeInteger=$((sizeRaw/1024))
sizeDecimal=$(echo "("$sizeRaw"/1024)-"$((sizeRaw/1024)) | bc -l)
sizeDecimalDisplay=$(echo "scale=1;("$sizeDecimal"*10)/10" | bc -l)
sizeNumber=$(echo $sizeRaw"/1024" | bc -l)
sizeNumberDisplay=$(echo "scale=1;("$sizeNumber"*10)/10" | bc -l)

if [ $sizeDecimalDisplay == 0 ]
then
if (($(echo $sizeNumberDisplay" == "$sizeNumber | bc -l)))
then
size=$sizeRaw" bytes ("$sizeInteger"KiB)"
else
size=$sizeRaw" bytes (≈ "$sizeInteger"KiB)"
fi
else
if (($(echo $sizeNumberDisplay" == "$sizeNumber | bc -l)))
then
size=$sizeRaw" bytes ("$sizeNumberDisplay"KiB)"
else
size=$sizeRaw" bytes (≈ "$sizeNumberDisplay"KiB)"
fi
fi
elif (($sizeRaw < 1073741824))
then
sizeInteger=$((sizeRaw/1048576))
sizeDecimal=$(echo "("$sizeRaw"/1048576)-"$((sizeRaw/1048576)) | bc -l)
sizeDecimalDisplay=$(echo "scale=1;("$sizeDecimal"*10)/10" | bc -l)
sizeNumber=$(echo $sizeRaw"/1048576" | bc -l)
sizeNumberDisplay=$(echo "scale=1;("$sizeNumber"*10)/10" | bc -l)

if [ $sizeDecimalDisplay == 0 ]
then
if (($(echo $sizeNumberDisplay" == "$sizeNumber | bc -l)))
then
size=$sizeRaw" bytes ("$sizeInteger"MiB)"
else
size=$sizeRaw" bytes (≈ "$sizeInteger"MiB)"
fi
else
if (($(echo $sizeNumberDisplay" == "$sizeNumber | bc -l)))
then
size=$sizeRaw" bytes ("$sizeNumberDisplay"MiB)"
else
size=$sizeRaw" bytes (≈ "$sizeNumberOne"MiB)"
fi
fi
fi

clear

echo "Book cover specifications for printing :"

if ((${#lenghtTotalCoverDisplay} == 4))
then
echo "Total lenght (front + side + back) = 0"$lenghtTotalCoverDisplay"mm"
else
echo "Total lenght (front + side + back) = "$lenghtTotalCoverDisplay"mm"
fi

if ((${#widthFrontBackCoverDisplay} == 4))
then
echo "Front width = 0"$widthFrontBackCoverDisplay"mm"
else
echo "Front width = "$widthFrontBackCoverDisplay"mm"
fi

if ((${#heightFrontBackCoverDisplay} == 4))
then
echo "Front height = 0"$heightFrontBackCoverDisplay"mm"
else
echo "Front height = "$heightFrontBackCoverDisplay"mm"
fi

if ((${#widthSideCoverDisplay} == 4))
then
echo "Side width = 0"$widthSideCoverDisplay"mm"
else
echo "Side width = "$widthSideCoverDisplay"mm"
fi

if ((${#heightFrontBackCoverDisplay} == 4))
then
echo "Side height = 0"$heightFrontBackCoverDisplay"mm"
else
echo "Side height = "$heightFrontBackCoverDisplay"mm"
fi

if ((${#widthFrontBackCoverDisplay} == 4))
then
echo "Back width = 0"$widthFrontBackCoverDisplay"mm"
else
echo "Back width = "$widthFrontBackCoverDisplay"mm"
fi

if ((${#heightFrontBackCoverDisplay} == 4))
then
echo "Back height = 0"$heightFrontBackCoverDisplay"mm"
else
echo "Back height = "$heightFrontBackCoverDisplay"mm"
fi

echo -e "\nBook content specifications for printing :"
echo "Number of pages = "$countPageTotal

if [ $countTable == 1 ]
then
echo "Total file size = "$size
else
echo "Total files size = "$size
fi
fi

read

exit 0

La routine présentée ci-dessus utilise les programmes (ou paquets) inkscape, librsvg2-bin, pdftk, et exiftool afin d'effectuer tous les traitements nécessaires.

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

sudo apt-get install inkscape librsvg2-bin pdftk exiftool -y
Une fois cette installation effectuée, lorsque vous exécutez la routine (.sh), se propose à  vous dans l'ordre d'apparition les questions suivantes :

Citer
- Page width in mm ? : largeur des pages (en millimètres).
- Page height in mm ? : hauteur des pages (en millimètres).
- Page margin in mm ? : dimensions des marges générales (en millimètres).
- Gutter margin in mm ? : dimension de la marge de reliure qui servira à  positionner le texte en retrait par rapport à  la reliure du livre (en millimètres).
- Font size in mm ? : taille des caractères du texte qui sera imprimé (en millimètres).
- Font name ? : police de caractère utilisée (elle doit être à  espacement unique, par exemple "ubuntu mono").
- Cutter margin in mm ? : dimensions du fond perdu (en millimètres).

Lorsque vous validez cette dernière question, se propose à  vous le choix "Sort option ?". Choisissez "a" (pour "Alphanumeric sort" ou tri alphanumérique) puis validez pour trier automatiquement les fichiers dans l'ordre alphanumérique, ou choisissez "m" (pour "Manual sort" ou tri manuel) pour effectuer vous-même le tri.

Si vous avez choisi l'option de tri "m", le menu "Manual sort :" (tri manuel) s'affiche à  l'écran suivi de quelques commandes (détaillées ci-dessous), ainsi que l'arborescence des fichiers qui vont être inclus dans le livre, avec successivement le numéro d'apparition des fichiers et le chemin d'accès, c'est à  ce moment que vous pouvez modifier l'ordre du tri. Voici ci-dessous le détail des commandes possibles :

Détail des commandes du menu "Manual sort :" :

Citer
- e (pour "Exit" ou sortie) permet de sortir du menu et commencer la génération du livre.
- s (pour "Save" ou sauvegarde) permet de sauvegarder l'arborescence de fichiers dans un fichier nommé file.tree.
- l (pour "Load" ou chargement) permet de charger le fichier nommé file.tree contenant l'arborescence de fichiers.
- d (pour "Delete" ou suppression) permet de supprimer le fichier nommé file.tree contenant l'arborescence de fichiers.

Utilisez ces options pour sauvegarder l'arborescence avec la commande "s", la modifier en ouvrant manuellement le fichier file.tree avec un éditeur de texte (comme gedit par exemple). Puis rechargez cette arborescence modifiée avec la commande "l", vous verrez les modifications s'afficher dans le menu "File tree :".

Plus bas le menu "File tree :" est affiché, c'est l'arborescence de fichiers :

La flèche orientée vers la gauche en suffixe des chemins d'accès aux fichiers indique la position de la destination d'un autre fichier source que vous pouvez choisir de déplacer. Validez pour décaler ce curseur vers une autre destination (c'est-à -dire vers le bas), ou écrivez un nombre, puis validez afin de changer la position dans l'arborescence (l'ordre de tri) du fichier indiqué en source (soit le nombre indiqué) vers la destination (soit le curseur en forme de flèche).

Exemple :
- Le curseur est positionné sur le fichier numéro 3, c'est la destination.
- J'indique le numéro 10, c'est la source, puis je valide.
- Le fichier en position 10 (la source) prend la position 3 (la destination), et inversement, le 3 prend la position 10.

Lorsque l'ordre de tri des fichiers correspond à  ce que vous souhaitez, indiquez la commande "e" puis validez pour sortir du menu et débuter la génération du livre.

La génération du livre commence alors. Elle prend logiquement un temps proportionnel à  la complexité de l'arborescence de fichiers utilisée comme source, ainsi que le nombre de lignes et de caractères dans la programmation et l'encodage de chaque fichiers. Une fois la génération du livre terminée, un fichier PDF nommé book content.pdf est constitué, et les spécifications utiles pour l'impression du livre sont affichées :

Citer
- Book cover specifications for printing : caractéristiques de la couverture du livre pour l'impression.
- Total lenght (front + side + back) : longueur totale de la couverture (soit la somme des largeurs de la face avant, du dos, et de la face arrière).
- Front width : largeur de la face avant.
- Front height : hauteur de la face avant.
- Side width : largeur du dos.
- Side height : hauteur du dos.
- Back width : largeur de la face arrière.
- Back height : hauteur de la face arrière.

- Book content specifications for printing : caractéristiques du contenu du livre pour l'impression.
- Number of pages : nombre total de pages du contenu du livre.
- Total files size : taille totale des fichiers de votre arborescence faisant partie du contenu, ce qui correspond à  la taille totale des fichiers inclus dans le livre, autrement dit, le contenu utile (cette taille exclue donc les titres et la numérotation des pages, de même que la table des fichiers à  la toute fin du livre qui n'est là  que pour faciliter la navigation dans l'ouvrage final imprimé).

Toutes ces caractéristiques vont vous permettre de créer la couverture du livre manuellement. Dans la continuité, la génération de la couverture aurait pu être également automatisée, mais je pense que c'est contre-artistique, ne laissant plus aucun libre cours à  la création et l'imagination. C'est donc un choix mûrement réfléchit de ma part que de laisser la création de la couverture à  la charge de l'auteur.

Après avoir créé la couverture de votre livre à  votre guise, il suffit simplement d'envoyer cette dernière ainsi que le fichier book content.pdf à  un imprimeur !

Libre à  vous de faire une utilisation de ce petit programme de génération automatique de contenu de livre, lorsque vous aurez besoin de sauvegarder vos fichiers sur un autre support que ceux habituellement utilisés dans le monde du numérique.

199
Bonjour Yffig, merci pour les précisions et explications :)

Je souhaite tirer grand max 500mA par transistor, tension de 5V en sortie, je pense mettre 4 à  8 transistors 2SC6017 (datasheet : https://www.onsemi.com/pub/Collateral/EN8275-D.PDF), ceux-ci m'intéressent car ils ont des Collector-to-Emitter Saturation Voltage assez faibles.

Merci d'avance pour votre aide !

200
Bonjour à  vous :)

Je reviens vers vous avec ce schéma :


En effet ma question est : quel serait pour vous la meilleure solution afin de multiplier le nombre de transistors de puissance (en parallèles) dans ce montage ? (dans le but de répartir la dissipation thermique)

J'ai quelques idées et schémas posés sur papier, mais j'aimerais l'avis d'autres personnes à  ce sujet. Je souhaite mettre des résitances de 0.05 ohm à  l'émetteur des transistors pour équilibrer les courants. Par contre je ne sais pas trop si il est mieux de placer le pont diviseur avant ou après ces résistances ballasts.

Merci d'avance pour votre aide.

201
Qu'est-ce que la radioactivité ?

La radioactivité est la conséquence et la manifestation de l'instabilité du noyau des atomes qui composent la matière qui nous entoure et qui nous constitue.

Cet état instable peut avoir plusieurs causes au niveau atomique :
- Le noyau de l'atome a un excédant de neutrons (par rapport à  la vallée de stabilité).
- Le noyau de l'atome se réorganise (un neutron devient un proton).
- Le noyau de l'atome est excité, il possède un excédant d'énergie (qu'il doit libérer).

Dans tous les cas, l'atome souhaite retrouver un état plus stable.

Cette radioactivité se manifeste sous plusieurs formes :
- Alpha (α) : 2 protons + 2 neutrons (4 nucléons) sont éjectés du noyau, c'est l'Helium 4.
- Beta- (β-) : 1 neutron (1 quark up + 2 quarks down) devient 1 proton (2 quarks up + 1 quark down), ceci est accompagné de l'émission d'1 électron + 1 anti-neutrino.
- Beta+ (β+) : 1 proton (2 quarks up + 1 quark down) devient 1 neutron (1 quark up + 2 quarks down), ceci est accompagné de l'émission d'1 positon + 1 neutrino.
- Gamma (γ) : résultat de la collision d'1 particule avec son anti-particule, 1 ou plusieurs photons (rayonnement de nature électro-magnétique) peuvent êtres libérés de l'atome du fait de sa désexcitation. La fréquence vibratoire de cette onde est supérieure à  30 exahertz (30000000000000000000 hertz).
- X : 1 électron passe d'un niveau d'énergie à  un autre, ce qui s'accompagne d'une émission (photon) de même nature que le rayonnement Gamma mais de fréquence vibratoire inférieure (de 30 petahertz à  30 exahertz).

Ces émissions se comportent différemment selon le matériau traversé :
- l'Alpha est arrêté au contact d'une feuille de papier.
- Le Beta est arrêté au contact d'une tôle d'aluminium.
- Le Gamma est atténué en traversant plusieurs mètres de béton ou plusieurs centimètres de plomb, mais n'est pas arrêté.

Quantifier la radioactivité :
Plusieurs unités de mesure standards (ou dérivées du système standard) existent et permettent de quantifier le niveau de radioactivité et la dose reçue. Chaque unité est à  placer dans un contexte précis de mesures par rapport aux conditions et à  l'environnement associé, ceci afin d'éviter de fausses interprétations des résultats.

Plusieurs paramètres interviennent pour quantifier la radioactivité :
- La nature de l'émission (Alpha, Beta, Gamma, X).
- La distance (à  1 cm, à  1 mètre, etc...).
- La durée d'exposition (1 seconde, 1 heure, etc...).
- Les parties du corps exposées au rayonnement (les effets seront bien différents selon la zone exposée).
- La sensibilité du matériel utilisé pour effectuer les mesures.

Voici une liste de quelques unités de mesure :
- Le Sievert (Sv) : établi une estimation de l'impact biologique de la radioactivité sur le corps humain (par unité de temps en heures ou en années).
- Le Becquerel (Bq) : est l'activité d'un radio-nucléide. Souvent indiqué par kilogramme de matière, 1 Becquerel signifie 1 désintégration d'atome / seconde.
- Le coup / seconde (Cps) : de même nature que le Becquerel mais sans quantification de la quantité de matière.
- Le Gray (Gy) : représente l'énergie (en Joules) apportée à  une masse homogène d'1kg.

La dose reçue liée à  la radioactivité naturelle en France est en moyenne de 1 millisievert / an par habitant. Pour les travailleurs du secteur du nucléaire en France, la dose maximale admissible est de 20 millisievert sur 12 mois glissants par personne.

Les risques de maladies et de cancers commencent à  apparaître à  partir de 100 millisievert (pas forcément lié à  une unité de temps cette fois-ci), mais d'une façon plus générale, toute dose ajoutée à  la radioactivité naturelle est susceptible d'augmenter les risques de développer une pathologie (on parle alors des risques liés aux faibles doses d'exposition).

Quelques notions sur les grandeurs physiques :
- 0.1 microsievert / heure par habitant est environ égal à  1 millisievert / an par habitant.
- En règle générale (cela dépend de la zone du corps exposée), 1 Gray est égal à  1 Sievert (unités de même dimension).
- 1 Joule est égal à  1 Watt / seconde.

Ces mesures sont déterminés par l'intermédiaire du tube Geiger, qui est l'élément sensitif d'un détecteur de radioactivité.

Le tube Geiger est un dipôle (cathode + anode) qui, rempli d'un gaz rare à  basse pression (généralement le néon) et soumis à  une différence de potentielle élevée (haute tension), est ainsi placé dans un état de métastabilité. Il suffit donc d'une particule (électron, positon, proton, neutron, ou photon) traversant le tube Geiger pour ioniser le gaz (les atomes perdent ou gagnent des électrons), se qui a pour conséquence de créer une avalanche d'électrons se déplaçant de la cathode vers l'anode. Le tube est alors en saturation (le dipôle est fermé, comme un interrupteur), c'est le coup (quantifié ensuite en coups / seconde).

La radioactivité naturelle (aussi appelé bruit de fond) a toujours été présente sur la planète, elle fait partie intégrante de la croûte terrestre, de l'atmosphère, des océans, et du vivant. Au cours de l'histoire et de l'évolution de la Terre, des réacteurs naturels ont existé bien avant l'apparition de l'homme. On en trouve des traces (vitrification des roches au voisinage de minerai d'Uranium) au Gabon, à  la mine d'Uranium d'Oklo.


Une histoire d'isotopes et de descendants :  Les isotopes radioactifs :
Un isotope est un atome ayant un nombre différent de neutrons.

De fait, l'Uranium 236 est un isotope plus lourd (il a 1 neutron de plus) que l'Uranium 235. En revanche, un atome n'est pas un isotope d'un autre atome ayant un nombre différent de protons (comme le Cesium 55 n'est pas un isotope du Xénon 54), ce sont bien deux éléments chimiques différents.

Cette opération de transformation d'un élément chimique en un autre élément chimique s'appelle la transmutation.

Le corps humain est constitué de Potassium 40, un isotope radioactif ! Le Potassium 40 (19 protons + 21 neutrons) est instable, il se désintègre par radioactivité Beta- dans 88.8% des cas en Calcium 40 (20 protons + 20 neutrons), un élément chimique stable.

Un isotope radioactif (instable donc) ne se désintègre pas forcément d'une seule manière, dans un certain nombre de cas (exemple ci-dessus : 88.8% des cas) cela peut être via radioactivité Alpha, dans d'autres cas par Beta- ou Beta+, ceci est variable selon l'isotope et la situation.

Dans la plupart des cas l'Uranium 236 fissionne, mais dans un autre pourcentage de cas il se désintègre par radioactivité Alpha en Thorium 232, et dans un certain nombre (faible) de cas à  l'aide d'un bombardement intense de neutrons qu'il capture, il se transforme en Uranium 237, puis par radioactivité Beta- devient du Neptunium 237.

La désintégration d'un atome peut être spontanée :
Un matériau constitué d'isotopes radioactifs perds la moitié de sa radioactivité durant une période radioactive, puis une autre moitié durant une autre période radioactive, et ainsi de suite, de sorte que la décroissance radioactive d'un matériau suit une courbe exponentielle.

Ce temps est dépendant de l'isotope considéré, en effet plus il est instable, plus sa période radioactive est courte, et plus ses émissions radioactives sont fortes. Il n'est pas possible de prédire la désintégration d'un seul atome, ce phénomène peut intervenir à  n'importe quel moment (aléatoire), par contre il est possible de prédire la désintégration de la moitié d'un groupe d'atomes : 1kg d'Uranium 235 perds la moitié de sa radioactivité (ou de sa masse) en 703.8 millions d'années. Il reste alors 0.5kg d'Uranium 235 encore non désintégré, qui perds à  son tour la moitié de sa radioactivité en 703.8 millions d'années supplémentaires, etc... Les premiers 500g d'Uranium 235 désintégrés ne sont pas volatilisés, il se sont transformés en Thorium 231 par désintégration Alpha, puis ce Thorium par désintégration Beta- se transformera en Protactinium 231, de sorte qu'un seul isotope radioactif au départ produit une grande quantité de descendants radioactifs dont il faut tenir compte pour les mesures effectuées dans le cadre de la radio-protection.

La désintégration d'un atome peut être induite :
Par capture d'un neutron lent, l'Uranium 235 devient de l'Uranium 236, beaucoup plus instable dans la plupart des cas, qui en conséquence se désintègre (fission) en ce scindant en deux atomes, ce sont les produits de fission. L'un des possibles est la désintégration en Krypton 92 et en Baryum 141, deux isotopes radioactifs aux périodes radioactives très courtes.

Remarquons que 236 - (92 + 141) = 3, ce qui signifie que 3 neutrons rapides sont éjectés lors de cette réaction de fission. Les 3 neutrons rapides ainsi libérés, si ils sont ralentis (par exemple en traversant un volume d'eau), peuvent être à  nouveau capturés par de l'Uranium 235, qui à  son tour deviendra un Uranium 236 par nature instable qui se désintégrera et éjectera à  nouveau 2 ou 3 neutrons :
C'est la réaction en chaîne !

La réaction en chaîne est obtenue sous plusieurs conditions :
- La masse critique doit être atteinte (c'est-à -dire un certain volume de radio-isotopes dans le but de favoriser la capture de neutrons).
- La géométrie du réacteur (endroit ou se produit la réaction) doit être considérée avec importance.
- Des réflecteurs à  neutrons (en carbure de tungstène) doivent êtres disposés autour des assemblages de radio-isotopes (crayons de combustible).
- Les neutrons rapides doivent êtres ralentis par des modérateurs (eau, Béryllium, ou Graphite) afin qu'ils soient capturés par les noyaux d'atomes.

(Ceci n'est pas valable pour les réacteurs à  neutrons rapides, dont le fonctionnement est différent.)
Cette réaction en chaîne est accompagnée d'une forte émission Gamma, résultat de la perte de masse entre le début et la fin de la réaction, et du trop plein d'énergie à  évacuer. Toutes ses émissions (Alpha, Beta, et Gamma) échauffent les différents matériaux utilisés au sein d'un réacteur d'une centrale nucléaire, ce qui permet de chauffer l'eau lourde, produire de la vapeur d'eau sous pression via un échangeur (interface entre le circuit primaire et secondaire), faire tourner des turbines, alternateurs, et produire de l'électricité sur le réseau.

Différents combustibles nucléaires :  Le minerai d'Uranium 235 et ses dérivés :
Le minerai d'Uranium se trouve à  l'état naturel la plupart du temps dans des roches Pechblende (littéralement : minerai de malheur) sous la forme UO2 (dioxyde d'Uranium).

L'Uranium se présente généralement dans des proportions de 0.7% d'Uranium 235 (fissile), et 99.3% d'Uranium 238 (fertile), c'est pourquoi l'isotope 235 doit être enrichit (augmenter le ratio de 0.7%) pour que le réacteur ait un meilleur rendement. Néanmoins, il a existé par le passé des réacteurs à  Uranium pauvre (non enrichit) nommés pile atomique : La première pile atomique (premier réacteur nucléaire) à  avoir existé fut celle d'Enrico Fermi en 1942 aux États-Unis (dans une ancienne salle de squash sous les gradins du Stagg Field à  Chicago).


L'Uranium 238 pour fabriquer le Plutonium 239 :
Dans un réacteur nucléaire, comme évoqué l'Uranium 238 n'est pas fissile, il est fertile, ce qui signifie que par capture de neutrons il peut servir à  la fabrication d'un isotope fissile.

Ainsi bombardé de neutrons lents (neutrons thermiques), l'Uranium 238 se transforme alors en son isotope 239, très instable, qui par désintégration Beta- se transforme à  son tour en Neptunium 239, ce dernier étant lui aussi radioactif Beta-, se transforme alors en Plutonium 239, un élément chimique fissile cette fois-ci.

Le Plutonium 239 a servit à  créer le coeur de la première bombe atomique de l'histoire (coeur qui mesurait seulement 93mm de diamètre), elle fut testée grandeur nature lors de l'essai Trinity réalisé par l'armée Américaine le 16 Juillet 1945 dans le cadre du projet Manhattan.

Le Plutonium 241 qu'en à  lui se forme à  partir du Plutonium 239 puis 240 par capture de neutrons. Également, le Plutonium 238 peut être formé par captures de neutrons successives par de l'Uranium 236 n'ayant pas fissionné (U236 +1n > U237 Beta- > Np237 +1n > Np238 Beta- > Pu238).

Il existe 15 isotopes connus du Plutonium (tous radioactifs), les plus produits en réacteur sont :
- Le Pu238
- Le Pu239
- Le Pu240
- Le Pu241 (voir plus bas : "La radio-toxicité du Plutonium 241")
- Le Pu242

Le Plutonium 238 est souvent utilisé dans des missions spatiales de part le fait qu'il a une période radioactive courte (87.75 années) et donc une énergie issue de sa désintégration très élevée (environ 567 Watts / kg). Ce radio-isotope dégage une grande quantité de chaleur qui peut être utilisée pour produire de l'électricité à  bord des astronefs dans des générateurs thermo-électriques à  radio-isotopes. Sa désintégration spontanée Alpha n'étant pas accompagnée de rayonnements Gamma pénétrants, il est donc un bon candidat pour les longues expéditions habitées.

Le Plutonium est utilisé plus généralement dans les centrales électrogènes (nucléaires) sous la forme de crayons de combustibles en Zirconium, dans lequels se trouvent enfermé un composé de dioxyde de Plutonium (PuO2) et de dioxyde d'Uranium (UO2). Ce combustible est appelé MOX par la filière nucléaire.

Certains isotopes du Plutonium plus lourds que le Pu242, comme par exemple le Pu246, n'ont étés produits que lors des explosions atomiques car étant très lourds et instables, leurs fabrication requiert un bombardement de neutrons très intense.


L'exposition et la contamination :

L'exposition externe :
L'exposition à  la radioactivité est dite externe lorsque la source d'émission est situé à  l'extérieur du corps. Cela peut être provoqué par la radioactivité naturelle (minerai) ou artificielle (stockage de déchets ou pollution). La durée d'exposition est très importante dans un calcul, associée à  la dose reçue et à  la zone du corps touchée, elle conditionne les facteurs de risques encourus. Dans les usines de retraitement du combustible usé, les techniciens accumulent une certaine dose de rayonnement ionisant. Pour éviter d'être contaminé, les éléments chimiques les plus dangereux sont manipulés à  l'aide de boites à  gants étanches ou télémanipulateurs mécaniques et robotisés à  assistance électrique, ceci derrière des vitres blindées composées de Plomb (ce qui atténue les rayonnements).

L'exposition interne :
L'exposition interne qu'en à  elle intervient lorsque la source d'émission ce situe à  l'intérieur du corps, c'est alors la contamination. Ceci est très dangereux parce que l'énergie émise par un radio-isotope décroit au carré de la distance. Ce qui signifie qu'un atome d'Uranium 235 à  quelques mètres de distance (sans danger immédiat), ne comporte pas les mêmes risques sur la santé que directement au contact des cellules du corps humain (dans le cas d'une ingestion ou inhalation).

Émise depuis une source externe au corps humain, la particule Alpha (Helium 4) est généralement inoffensive du fait qu'elle est peu pénétrante (elle s'arrête à  la surface de la peau sans occasionner de lésions). En revanche, lors d'une contamination, l'émission Alpha (la plus ionisante comparé aux autres types de radiations) déposera toute son énergie dans le corps, ce qui pourra provoquer de façon irréversible beaucoup plus de dommages que les Beta, Gamma, ou encore rayonnements X (notamment la mutations des chromosomes).

On différencie la contamination interne et externe, car si vous portez sur vous la source de radiation (exemple : une petite poussière radioactive sur votre EPI), vous êtes dans ce cas également contaminé. Il est alors possible de se décontaminer en effectuant différents lavages des équipements de protection et/ou douches successives (tout dépend du degré de contamination).


La radio-toxicité du Plutonium 241 :
Le radio-isotope Pu241 est l'élément le plus dangereux connu (plus de 1000 fois plus que les autres isotopes). Il a une période radioactive de 14.4 années, et une activité massique de 3848000000000 Becquerels / gramme.

Il est estimé que l'ingestion de seulement 9 milligrammes de Pu241 provoquerait chez l'homme une mortalité probable de 50% au bout de 30 jours (au bout d'un an avec 0.9mg, et au bout de 1000 jours avec 0.4mg).

Les descendants du Pu241 sont à  considérer avec importance : Le Plutonium 241 se désintègre par radioactivité Beta- en Americium 241, un émetteur de rayonnement Gamma également particulièrement dangereux. A l'instar du Pu241, d'autres isotopes comme le Pu239 ont également une radio-toxicité particulièrement élevée. Par expérimentations, il est estimé que l'apparition de tumeurs pulmonaires chez l'homme après inhalation seraient provoquées par un dépôt de 200000 Bequerels soit environ 87 microgrammes d'oxyde de Plutonium 239. La production mondiale de Plutonium depuis sa découverte dans les années 1940 s'élève aujourd'hui à  plus de 500 Tonnes réparties en différents pays.

Le cas de l'Iode 131 :
L'Iode 131 est très radioactif parce qu'il a une période radioactive de seulement 8.02 jours. À relativement faible dose, l'Iode 131 provoque des mutations génétiques dans les cellules ou il pénètre et les cellules voisines, ce qui est le germe du cancer. Paradoxalement, c'est la raison pour laquelle ce radio-isotope est plus dangereux à  faibles doses qu'à  fortes doses. En effet, les cellules irradiées fortement étant détruites, elles ont moins de risque de propager un cancer. Notez que l'apoptose (mort cellulaire programmée) est essentiel dans l'équilibre et la survie des organismes multi-cellulaires en réponse à  la prolifération cellulaire.

L'Iode 131 prend place dans la thyroïde chez l'homme. L'Iode 131 est un isotope volatile, il est produit en grandes quantités dans les réacteurs nucléaires, et se désintègre par radioactivité Beta- (95% des cas) en Xénon 131, c'est pourquoi les populations en zones classées à  risque radiologique (accidents nucléaires) sont tenues informées et doivent le cas échéant prendre des pastilles d'Iode stable (non radioactif) afin de saturer la thyroïde, ce qui a pour effet d'empêcher l'isotope 131 d'y prendre place. Notez que cette prise d'Iode stable devrait s'effectuer 1 heure au moins avant la contamination, et que même l'Iode stable en grande quantité dans la thyroïde n'est pas sans effets sur la santé.

La contamination au Cesium 137 :
L'isotope Cesium 137 est lui aussi produit en abondance dans les réacteurs nucléaires, et est l'un des nombreux produits de fission de L'Uranium. Le Cesium 137 se désintègre par radioactivité Beta- en Baryum 137m instable (m pour isomère), puis en Baryum 137 cette fois-ci stable. Le Cesium 137 a une période radioactive de 30.15 années. Avec le Strontium 90, il fait partie des déchets radioactifs à  vie moyenne. Le Cesium 137 est la principale source de contamination de la chaîne alimentaire due aux essais nucléaires, et aux accidents de Tchernobyl et Fukushima.

Le Cesium 137 est assez mobile, il se répand sur les sols, les minéraux, se fixe dans les végétaux et les êtres vivants (notamment au niveau des muscles). La communauté scientifique internationale émet l'hypothèse que le Cesium 137 se réparti de façon homogène dans la masse musculaire de l'homme, tandis-que certains scientifiques Russes prétendent qu'il pourrait se concentrer au niveau du coeur de l'individu, provoquant diverses pathologies cardiaques (notamment des arythmies). Si il ne se stock pas définitivement dans le corps, le Cesium 137 à  une période biologique d'environ 100 jours (temps après lequel il est évacué par l'organisme), ce qui dans ce cas précis signifie qu'1 noyau de Cesium 137 seulement sur 160 a le temps de se désintégrer à  l'intérieur du corps.


La chaîne de désintégration du Radium 226 :
Le Radium 226 par radioactivité Alpha et période radioactive de 1602 ans, se désintègre en Radon 222, un gaz radioactif à  la période radioactive très courte (3.824 jours) et donc très radioactif. Plus largement, le Radon fait partie de la chaîne de désintégration de l'Uranium et du Thorium, on en trouve donc dans les mines d'Uranium, et les constructions en granite. Le Radium fut découvert par Pierre et Marie Curie en 1898 et a trouvé de multiples applications. Il est aujourd'hui interdit à  cause de sa radio-toxicité. À l'époque (années 1920/1930) ou on ne connaissait pas bien encore les dangers de la radioactivité, le Radium (sous différents isotopes) a été largement utilisé (car brillant dans le noir et aux soit-disant effets thérapeutiques) dans des produits du quotidien (chiffres et aiguilles des réveils, pendules, boussoles, différentes crèmes pour le visage, laine pour bébés au Radium, etc...) et à  usage professionnel (instruments pour le médical, cadrans des instruments de navigation en avionique, etc...). On ventait également ses bienfaits dans des stations thermales (aux eaux radioactives).

Les femmes qui peignaient au Radium (mélange de poudre de Radium, d'eau, et de colle) dans les manufactures étaient des ouvrières non informées sur les risques, elles affinaient la pointe de leurs pinceaux enduits de Radium (dont les poils finissaient par s'abîmer) avec leurs lèvres et leurs langues afin de continuer à  peindre avec précision. Les conséquences sanitaires ne se sont pas fait attendre : cancers de la mâchoire et du cou.


Le Plomb 214 et 210 (deux descendants du Radium 226) ne sont pas stables, ils peuvent rester dans les poumons lorsque le Radon 222 est inhalé avant de se stabiliser en Plomb 206 (isotope stable) en passant par différentes étapes de désintégration (isotopes radioactifs de Polonium et de Bismuth).


Pour se faire une idée de la complexité des descendants d'un isotope radioactif, ci-dessous la chaîne de désintégration de l'Uranium 238 (appelée chaîne du Radium) qui passe par le Radium 226 (la période radioactive est notée entre parenthèses) :
Uranium 238 > Radioactivité Alpha (4.4688 milliards d'années)
Thorium 234 > Radioactivité Beta- + Gamma (24.1 jours)
Protactinium 234 > Radioactivité Beta- + Gamma (1.17 minutes)
Uranium 234 > Radioactivité Alpha (245500 années)
Thorium 230 > Radioactivité Alpha + Gamma (75380 années)
Radium 226 > Radioactivité Alpha + Gamma (1602 années)
Radon 222 > Radioactivité Alpha (3.8235 jours)
Polonium 218 > Radioactivité Alpha (3.1 minutes)
Plomb 214 > Radioactivité Beta- + Gamma (26.8 minutes)
Bismuth 214 > Radioactivité Beta- + Gamma (19.9 minutes)
Polonium 214 > Radioactivité Alpha (164.3 microsecondes)
Plomb 210 > Radioactivité Beta- + Gamma (22.2 années)
Bismuth 210 > Radioactivité Beta- (5.012 jours)
Polonium 210 > Radioactivité Alpha (138.376 jours)
Plomb 206 (stable)

Il est important de notifier que certaines des désintégrations Alpha ou Beta- à  différentes étapes de la chaîne sont accompagnées d'émissions Gamma plus ou moins importantes. Ceci n'est pas le seul parcourt possible, par exemple dans un certain nombre de cas le Polonium 218 peut se désintégrer par radioactivité Beta- et devenir de l'Astate 218, le Bismuth 214 peut se désintégrer par radioactivité Alpha et se transformer en Thallium 210, etc...




Cet interlude était un aperçu pour les non-initiés de ce qu'est la radioactivité, j'espère vous avoir donné envie d'en savoir plus ! :)

202
Bonjour à  toute la communauté des bidouilleurs et bidouilleuses :)


Bidouille partagée : L'élévateur de tension +400V pour tube Geiger

Le tube d'un compteur Geiger a besoin d'être alimenté avec une différence de potentielle entre son anode et sa cathode suffisamment élevée afin de détecter des particules issues de la désintégration d'isotopes radioactifs.



Le plan du PCB est disponible au format de fichiers Gerber ici : http://www.sylvainmahe.site/download/pcb/geiger_boost_converter.zip

Cette élévation de tension est obtenue à  l'aide d'un montage qui dans son principe de fonctionnement est assez simple :
- Charge d'une inductance.
- Décharge de l'inductance dans un condensateur en passant par une diode de redressement.
- Charge du condensateur.
- Alimentation du tube Geiger via le condensateur.



C'est au moment ou l'inductance n'est plus alimentée (découpage du courant à  l'aide d'un NE555), que celle-ci produit une surtension, cet excédent de tension charge un condensateur "haute tension".

Cette carte électronique permet donc d'élever la tension d'alimentation de +5V (délivrée par mes automates programmables, voir http://www.sylvainmahe.site/projectModulable32.html) à  +400V, elle détecte également la fermeture du tube Geiger (ci-dessous le prototype connecté sur le tube Geiger SBM20 de conception Russe) :



Connexions (élévateur de tension +400V sur automate programmable) :
- Broche GND (masse) sur broche GND disponible.
- Broche +5V (pôle positif) sur broche +5V disponible.
- Broche SHOCK (coups) sur port GPIO relié à  l'interruption externe (INT0, INT1, etc...) pour détecter la fermeture du tube Geiger.

Connexions (tube Geiger sur élévateur de tension +400V) :
- Anode du tube Geiger sur connecteur à  braser GEIGER TUBE +400V (pôle positif).
- Cathode du tube Geiger sur connecteur à  braser GEIGER TUBE GND (masse).



Les caractéristiques de la carte :
- 1 broche GND (masse) pour l'alimentation.
- 1 broche +5V (pôle positif) pour l'alimentation.
- 1 broche SHOCK (coups) pour détecter la fermeture du tube Geiger (0V = fermé, +5V = ouvert).
- 1 connecteur à  braser GEIGER TUBE GND (masse) pour alimenter un tube Geiger.
- 1 connecteur à  braser GEIGER TUBE +400V (pôle positif) pour alimenter un tube Geiger.
- Dimensions : 51.435mm x 25.4mm.
- Entre-axes de fixations : 43.815mm x 17.78mm.
- Fixations par vis M3 (perçages diamètre 3.2mm).

Liste des composants :
1x Oscillateur NE555 (boîtier DIP-8)
2x Résistances 1kΩ ± 5% carbone 0.25W
1x Résistance 1kΩ ± 1% métal 0.25W
1x Résistance 2.2kΩ ± 5% carbone 0.25W
2x Résistances 10kΩ ± 5% carbone 0.25W
1x Résistance 10kΩ ± 1% métal 0.25W
1x Résistance 10MΩ ± 5% carbone 0.25W
1x Condensateur 100pF céramique (pas 5.08mm, tension >=800V)
1x Condensateur 4.7nF céramique (pas 5.08mm, tension >=800V)
1x Condensateur 33nF céramique (pas 5.08mm, tension >=10V)
2x Condensateurs 100nF céramique (pas 5.08mm, tension >=10V)
1x Condensateur 10μF électrolytique aluminium (pas 2mm, tension >=10V)
1x Inductance 15mH self (pas 5.08mm, boîtier radial, intensité >=100mA)
1x Diode 1N4007
1x Transistor bipolaire 2N3904 (boîtier TO-92)
1x Transistor bipolaire MPSA44 (boîtier TO-92)
1x Support DIP-8 300mil
3x Broches mâles (pas 2.54mm)

Photo des composants nécessaires :


Photo du PCB nu :



Exemple d'application de la carte avec un tube Geiger LND712 équipé d'une fenêtre en mica afin de détecter la radioactivité Alpha, soit l'Hélium 4 :



Ci-dessous un échantillon de minerai naturel d'Uranium que j'ai vitrifié (plus exactement coulé dans la résine d'inclusion) pour plus de sécurité :




Cette fiole contient majoritairement de l'Uranium 238, voir plus bas : La chaîne de désintégration de l'Uranium 238 pour avoir une idée de tout ce qu'elle contient en isotopes !



Je vous transmettrai le schéma de la carte bientôt, j'écris avec mon smartphone, dès que j'ai accès à  mon ordinateur je pourrais communiquer plus de détails si il faut :)

203
Bonjour à  vous,

Je profite de ce forum qui nous est mis à  disposition afin de vous présenter plus ou moins succintement un projet de radiocommande, pour les personnes intéressées.

Ce projet de radiocommande est la suite logique de mon intérêt et de mes convictions pour un modélisme aérien tel qu'il devrait être pratiqué, c'est-à -dire la conception et la fabrication de systèmes radio-pilotés en partant réellement de zéro.





À partir des premières ébauches sur papier, études des possibilités et contraintes techniques, schémas des circuits électroniques, conception des programmes dans la radiocommande et les modèles associés, dessins du boîtier et définition des différentes pièces d'usinage (etc...), jusqu'à  la finalisation du projet, il aura fallu plus d'une année de conception, fabrication, et tests de validation.

Les caractéristiques de la radiocommande :
- Automate programmable MODULABLE 32 équipé du microcontrôleur ATmega1284P.
- Émetteur/récepteur (transceiver) radio 2.4GHz (composant nRF24L01+).
- Antenne Trèfle omnidirectionnelle 3 branches (7dBm).
- Communication multidirectionnelle vers (sol/air air/sol) et entre (air/air) plusieurs modèles.
- Communication vers périphériques relais pour applications longues distances basse puissance.
- Communication par trames de 32 bits.
- Affichage digital avec mini afficheur à  digits.
- Buzzer de signalement.
- Système à  tolérance de pannes (fail-safe) sur 5 bits (0 à  31).
- Surveillance de l'activité du modèle (watchdog) sur 5 bits (0 à  31).
- 1 menu principal + 1 menu des paramètres/réglages.
- Aucune mémoire de modèles (la mémoire est située dans les modèles).
- Possibilité de copier les réglages d'un modèle vers un autre très facilement.
- 15 paramètres/réglages par défaut envoyés par le modèle.
- Réglage des trims (autour des neutres) des manches de gaz/roulis et profondeur/lacet.
- Réglage d'une alarme (visuelle et sonore) tension de batterie faible du modèle (de 0V à  100V).
- Réglage d'une alarme (visuelle et sonore) temporisation/chronomètre (de 0s à  3600s).
- Réglage de l'inversion des manches de gaz/roulis et profondeur/lacet.
- Réglage de courbes des manches de gaz/roulis et profondeur/lacet.
- Jusqu'à  16 paramètres/réglages personnalisés supplémentaires envoyés par le modèle.
- 5 paramètres/réglages par défaut propres à  la radiocommande.
- Calibration des potentiomètres des manches et auxiliaire (si remplacement/autre).
- Verrouillage des menus (plus de réglages possibles, ni d'extinction de la radiocommande).
- Affichage de la tension de la batterie de la radiocommande.
- Affichage de la tension de la batterie du modèle.
- Affichage d'une temporisation/chronomètre (temps d'utilisation du modèle/autre).
- Affichage des trims (verrouillage et remise à  0 possible par le bouton de sélection).
- Affichage d'une télémétrie personnalisée.
- Affichage des paramètres/réglages par défaut et personnalisés.
- Menu de mise à  jour des paramètres/réglages du modèle.
- Menu de sauvegarde des réglages propres à  la radiocommande.
- Allumage ou extinction de la radiocommande ou du modèle dans n'importe quel ordre.
- Accumulateur Nickel-hydrure métallique (NiMH) 8S (+9.6V) 600mAh.
- Alarme niveau de batterie faible (en dessous de +6V).
- Prise de charge de la batterie (XT30).
- Prise de programmation du microcontrôleur (mini XLR).
- Boîtier fermé en aluminium, acier inoxydable, bois (contreplaqué 5mm), et ertalon.
- Dimensions : 214mm x 205mm x 118mm.



L'interface électromécanique entre l'homme et la machine :
- 2 manches analogiques (1 gaz/roulis + 1 tangage/lacet) sur 10 bits chacun (0 à  1023).
- 4 interrupteurs de trims (3 positions) sur 2 bits chacun (0 à  2).
- 1 interrupteur de coupure moteur/autre (2 positions) sur 1 bit (0 à  1).
- 3 interrupteurs auxiliaires (3 positions) sur 2 bits chacun (0 à  2).
- 1 bouton rotatif auxiliaire sur 10 bits (0 à  1023).
- 1 bouton rotatif de sélection/menus sur 10 bits (0 à  1023).
- 1 bouton poussoir de sélection/menus (2 positions, dont 1 momentanée) sur 1 bit (0 à  1).
- 1 interrupteur d'alimentation maintenue on/off (2 positions).



Programmation de l'automate programmable MODULABLE 32 avec MODULE :
Le programme en langage C++ fonctionnant avec MODULE est téléchargeable ici : http://www.sylvainmahe.site/download/cpp/radio_control.zip



Connexions (automate programmable MODULABLE 32 sur les différents systèmes embarqués) :
- Port GPIO 1 (PB0) sur broche STATE (état) interrupteur d'alimentation maintenue.
- Port GPIO 2 (PB1) sur broche HOLD (auto-maintien) interrupteur d'alimentation maintenue.
- Port GPIO 3 (PB2) sur broche SS (slave select) mini afficheur à  digits.
- Port GPIO 4 (PB3) sur broche WAVE (onde) buzzer de signalement.
- Port GPIO 5 (PB4) sur broche CSN (slave select) composant nRF24L01+.
- Port GPIO 6 (PB5) sur broche MOSI (master output slave input) mini afficheur à  digits et composant nRF24L01+.
- Port GPIO 7 (PB6) sur broche MISO (master input slave output) composant nRF24L01+.
- Port GPIO 8 (PB7) sur broche SCK (serial clock) mini afficheur à  digits et composant nRF24L01+.
- Port GPIO 9 (PD0) sur bouton poussoir de sélection/menus.
- Port GPIO 10 (PD1) sur interrupteur de coupure moteur/autre.
- Port GPIO 11 (PD2) sur interrupteur auxiliaire A (position 1).
- Port GPIO 12 (PD3) sur interrupteur auxiliaire A (position 3).
- Port GPIO 13 (PD4) sur interrupteur auxiliaire B (position 1).
- Port GPIO 14 (PD5) sur interrupteur auxiliaire B (position 3).
- Port GPIO 15 (PD6) sur interrupteur auxiliaire C (position 1).
- Port GPIO 16 (PD7) sur interrupteur auxiliaire C (position 3).
- Port GPIO 17 (PC0) sur interrupteur trim de gaz (position 1).
- Port GPIO 18 (PC1) sur interrupteur trim de gaz (position 3).
- Port GPIO 19 (PC2) sur interrupteur trim de tangage (position 1).
- Port GPIO 20 (PC3) sur interrupteur trim de tangage (position 3).
- Port GPIO 21 (PC4) sur interrupteur trim de roulis (position 1).
- Port GPIO 22 (PC5) sur interrupteur trim de roulis (position 3).
- Port GPIO 23 (PC6) sur interrupteur trim de lacet (position 1).
- Port GPIO 24 (PC7) sur interrupteur trim de lacet (position 3).
- Port GPIO 25 (PA7) sur curseur bouton rotatif de sélection/menus.
- Port GPIO 26 (PA6) sur curseur manche analogique des gaz.
- Port GPIO 27 (PA5) sur curseur manche analogique de tangage.
- Port GPIO 28 (PA4) sur curseur manche analogique de roulis.
- Port GPIO 29 (PA3) sur curseur manche analogique de lacet.
- Port GPIO 30 (PA2) sur curseur bouton rotatif auxiliaire.
- Port GPIO 31 (PA1) sur broche VOLT (tension) interrupteur d'alimentation maintenue.

Le concept de cette radiocommande :

Depuis les premiers temps ou je pilote des modèles radiocommandés dans des associations d'aéromodélisme jusqu'à  aujourd'hui, je me suis souvent demandé et au vu de l'avancée précédente et actuelle en matière d'électronique embarquée :
Mais pourquoi donc les radiocommandes du commerce ont-elles des mémoires de modèles ? Les mémoires de modèles permettent en effet de retenir les réglages relatifs à  un modèle, dans la mémoire de la radiocommande.

À ce propos je ne citerais que l'exemple d'un ami au terrain de modélisme sans le nommer, qui par mégarde se trompe assez régulièrement de mémoire de modèles (il vole avec beaucoup de choses). En conséquence cela lui arrive souvent d'écraser ses réglages, ou d'écraser son modèle tout simplement au sens physique du terme !

En fait, cette "lacune" des mémoires de modèles dans les radiocommandes modernes trouve historiquement ses racines dans la conception même des premiers radio-émetteurs/récepteurs de modélisme. En effet, les premières radiocommandes se contentaient uniquement d'être émetteur d'information, et le modèle étant lui simplement un récepteur. Dans cette situation (unidirectionnelle), il est facile de comprendre que le modèle reste toujours muet. Plus tard, les concepteurs et divers industriels se sont décidés (au vue de la demande qui augmentait) à  ajouter une communication du modèle vers la radiocommande, sur un circuit électronique bien distinct et avec une antenne radio supplémentaire sur le modèle et la radiocommande. C'est un retour air/sol qui a été appelé télémétrie (en rapport avec la télémétrie à  l'époque des débuts de la conquête spatiale jusqu'à  nos jours).

L'avancée en matière de miniaturisation des composants permet aujourd'hui d'avoir dans une même puce un émetteur et un récepteur, qui se sert de la même antenne radio pour communiquer, ces systèmes sont appelés transceivers (émetteurs/récepteurs).



Le concept que je développe ici permet de vous expliquer l'idée même de ma radiocommande, celle-ci n'a en effet aucune mémoire de modèles, ayant souhaité aller au bout de ma logique, c'est le modèle qui contient la mémoire .

Cette idée simple permet beaucoup de choses, notamment le fait que c'est le modèle qui envoi des paramètres et réglages personnalisés à  la radiocommande, qui à  l'origine dispose d'un menu des paramètres et réglages vide. La radiocommande se voit alors garnie de paramètres personnalisés relatifs au modèle qui est actuellement en communication avec elle. Ces paramètres peuvent être de n'importe quel type et agir sur n'importe quelle fonction du modèle. Ce retour radio air/sol permet également à  la radiocommande de disposer de l'affichage de la tension de la batterie du modèle en temps réel, et d'une télémétrie personnalisée en fonction du modèle. Une fois cette notion comprise, tout est alors possible. Pour régler votre modèle, ma radiocommande dispose alors de 15 paramètres par défaut qui en général sont assez communs aux modèles réduits (trims, alarmes, inversion des voies, courbes de gaz, etc...), et d'un maximum de 16 paramètres personnalisés par le modèle (dont le type de paramètre n'est pas défini par défaut). Ceci est largement suffisant parce que par définition même, ces paramètres sont spécifiques au modèle considéré. Terminé les réglages et menus à  n'en plus finir (souvent la plupart du temps inutilisés) dans les radiocommandes du commerce !



Dans ce que je propose ici, vous disposez des réglages uniquement nécessaires au modèle mis en oeuvre, ce qui facilite grandement son utilisation sur le terrain de modélisme.


Liens utiles si vous êtes intéressés par mon projet :

Descriptif complet de la radiocommande : http://www.sylvainmahe.site/projectRadioControl.html
L'automate programmable MODULABLE 32 : http://www.sylvainmahe.site/projectModulable32.html
Un projet associé, le quadri-hélicoptère : http://www.sylvainmahe.site/projectQuadcopter.html
Le programme MODULE avec lequel je programme tous mes projets : http://www.sylvainmahe.site/understandWhatIsModule.html
 

Je vais essayer d'agrémenter ce sujet si besoin et de fournir des explications si des personnes sont intéressés. Je suis ouvert aux suggestions, commentaires, et interrogations :)

Bonne soirée à  vous tous.



204
Bonjour à  tous :)

Je m'adresse à  vous car j'ai une question par rapport à  la vidéo EB_#208 (https://youtu.be/sZ3ou1UCcls) en ce qui concerne le dernier schéma présenté sans le LM317, juste le TL431, le delta V ou dropout maximum entre la tension d'entrée et de sortie du schéma correspond t'elle grossièrement au VCE (ou VBE?) ou VGS du transistor bipolaire ou mosfet de puissance ? (+ l'alimentation du TL431)

Datasheet TL431 : https://www.google.com/url?sa=t&source=web&rct=j&url=http://www.ti.com/lit/gpn/tl431&ved=2ahUKEwiRwtSR2bfoAhUKfBoKHWnaC0oQFjAAegQIAxAB&usg=AOvVaw3t7FdGQ0X3a7MBox2uYQ7Q€

Exemple du datasheet avec NPN :


Je me demande si le dropout pourrait être inférieur avec un MOSFET canal p (ou bipolaire PNP) de puissance piloté par un transistor NPN qui tire vers la masse lui même piloté par le TL431 ?
Pour avoir un dropout faible j'ai l'habitude d'utiliser le transistor PNP MJE15033 dans mes montages qui commute à  des tensions bien inférieures aux MOSFETs.

Je vous questionne à  ce sujet car j'aimerais réaliser un schéma similaire avec une tension régulée de +5V en sortie, et avoir une tension minimum d'entrée de +6V (voir moins avec des courants de sortie inférieurs à  1A) pour éventuellement ~8A en pointe en sortie.

Merci par ailleurs si vous avez des idées à  ce sujet ! :)

Pages: 1 ... 12 13 [14]