Pour tout vous dire, cette semaine, on avait prévu de continuer notre série sur les batteries USB, mais il se trouve que les expériences associées durent plus longtemps que prévu. En soi, c'est plutôt une bonne nouvelle, mais il a fallu se rabattre en catastrophe sur un sujet de secours..
Il y a pratiquement dix ans, à l'occasion des fêtes de fin d'année, on avait construit un diorama en ombres chinoises qui avait eu pas mal de succès auprès des gens du village. On a récemment fait un peu de ménage dans nos anciens locaux et on a retrouvé le phare. Comme il marche encore, on s'est dit qu'il serait vraiment dommage de jeter un si joli témoin de l'histoire de Yoctopuce.
Le phare, 10 ans après, il marche encore
L'idée de base, c'est de transformer ce phare en un objet IoT. Pour ça on compte fabriquer un faux rocher en impression 3D, cacher l'électronique de contrôle à l'intérieur et percher le phare dessus.
Le rocher
Le problème, c'est qu'on n'avait ni le temps, ni l'envie, et encore moins la patience de modéliser manuellement un rocher dans un logiciel de CAO. On a plutôt cherché un moyen de scripter la création du rocher. On a trouvé FreeCAD qui, en plus d'être gratuit, est apparemment entièrement pilotable en Python.
Pour simplifier, on a décidé de créer un rocher stylisé sous la forme d'un amas de cubes enchevêtrés. La position des cubes et leur taille sont plus ou moins aléatoires. Leur angle par rapport à l'horizontal est soit de 0°, soit de 45° pour limiter les risques de surplombs difficiles à imprimer sans support. Après quelques tâtonnements, un petit script Python nous a permis d'obtenir un modèle de rocher à peu près satisfaisant.
import math
import random
from BOPTools import BOPFeatures
document = App.newDocument()
cubes = []
for i in range (0,300):
name="Cube"+str(i)
size = str(10+randrange(10))+" mm"
cube=App.ActiveDocument.addObject("Part::Box",name)
App.ActiveDocument.ActiveObject.Label = name
App.ActiveDocument.recompute()
cube.Length = size
cube.Width = size
cube.Height = size
angle = 2*math.pi*randrange(360)/360
z = randrange(50)
radius = 60.0-z/3
x = radius*math.cos(angle)
y = radius*math.sin(angle)
a=0
b=0
c=0
d=0
if random.random()>0.5: a=1
if random.random()>0.5: b=1
if random.random()>0.5: c=1
if random.random()>0.5: d=45
position = App.Vector(y,x,z)
rotation = App.Rotation(App.Vector(a,b,c),d)
cube.Placement = App.Placement(position,rotation)
cubes.append(name)
bp = BOPFeatures.BOPFeatures(App.activeDocument())
bp.make_multi_fuse(cubes)
App.ActiveDocument.recompute()
Gui.SendMsgToActiveView("ViewFit")
Le résultat dans FreeCAD
Comme on n'avait pas trop le temps d'apprendre à utiliser FreeCAD, on a exporté le modèle dans un fichier STEP et on l'a ré-importé dans Solidworks pour supprimer les quelques surplombs qui sont quand même apparus et ménager une place propre au centre pour y placer l'électronique.
Après quelques modifs dans Solidworks, c'est prêt à être imprimé
Grâce à toutes ces précautions, l'impression 3D s'est déroulée sans histoire même si elle a pris près de dix heures.
C'est prêt!
L'électronique
L'architecture du phare est relativement simple. Au sommet se trouve la LED d'un Yocto-PowerColor fixée sur une petite plateforme entraînée par un minuscule moteur réducté qui fonctionne en 5 volts. La connexion électrique entre la LED et le reste du phare est assurée par un petit contacteur tournant.
Pour piloter le phare depuis un réseau Ethernet, il nous suffit d'un YoctoHub-Ethernet alimenté par PoE, un Yocto-Relay pour piloter le moteur et la partie contrôle du Yocto-PowerColor pour piloter la LED. Pour alimenter le moteur, on se contentera de prélever un peu de courant sur un des ports du YoctoHub-Ethernet. Puisque le Yocto-Relay contient deux relais STDP, on a profité de l'occasion pour les câbler en H-Bridge ce qui permet de faire tourner le phare dans un sens ou dans l'autre en fonction du relais activé. Pour simplifier le câblage du H-bridge, on a lié entre elles les deux sorties A et le deux sorties B directement sous le Yocto-Relay.
La partie électronique
Et ça marche?
Une fois le tout assemblé, le résultat rend plutôt bien, jugez par vous même:
Bon, maintenant, il ne reste plus qu'à trouver une utilité à ce gadget....