Nous voulons fabriquer notre propre caméra infrarouge en utilisant un ou plusieurs capteurs infrarouge, ce qui nous permettra de reconstruire une image. Pour cela, nous utiliserons deux moteurs afin de faire tourner horizontalement et verticalement ce ou ces capteurs.
Deux projets trouvés sur Internet (ici et là) nous ont inspiré lors de la conception de notre projet.
Notre projet peut-être découpé en plusieurs morceaux :
- Mécanique du mouvement du ou des capteurs - Commande du mouvement du ou des capteurs - Traitement des données du ou des capteur
Plusieurs solutions ont été étudiées :
- utiliser de vibreurs piézo-électriques (rejeté):
- utiliser uniquement des servos motor (rejeté):
cran: l'angle sera plus précis. - utiliser un servo motor ET un moteur à cran (choisi):
La première est une illustration du concept et de l'idée que l'on se faisait initialement de l'agencement des deux moteurs. La deuxième image est plus fidèle à la réalité.
START (taille de l'image en x) (taille de l'image en y)
Commande pour
* TOBJ (position en x) (position en y) temperature
température de l'objet (à noter que les positions vont de 0 jusqu'à (taille_de_l_image - 1)
* TAMB temperature
température ambiante
* STOP
affichage de l'image
Ces commandes sont interprétées par un programme en Python disponible ici. Ce programme à besoin des bibliothèques Python ``numpy``, ``matplotlib`` et ``pyserial`` (voir l'installation de la Raspberry Pi pour plus de détails sur leur installation). Le résultat est une image colorées en fonction des températures minimales et maximales.
Nous avons aussi pu testé la prise de vu d'une ligne avec un servomoteur et le capteur thermique, dont voici deux rendus :
Configuration de la Raspberry Pi
Modèle utilisé : Raspberry Pi A (faute de mieux)
Écran utilisé : TFT35“ Touch Shield SKU: AC-TFT35-V2.1 (apparemment très similaire au PiScreen)
Système d'exploitation : Raspbian (basé sur Debian stretch)
- ``sudo raspi-config`` pour changer :
- la configuration du clavier en AZERTY,
- la langue en français,
- lancer SSH au démarrage,
- activer les ports Série, I2C et SPI
- Ajouter ``fbtft_device name=piscreen rotate=90 speed=16000000`` au fichier ``/etc/modules``
- Ajouter ``dtoverlay=piscreen fbtft_device.debug=3`` à ``/boot/config.txt``
- Redémarrer avec ``sudo shutdown -r now``
- Vérifier que l'écran passe de blanc (alimenté) à noir (alimenté et reconnu par le système d'exploitation)
- Vérifier que les utilitaires ``con2fbmap`` pour afficher la console sur l'écran et ``fbi`` pour afficher des images (l'installer au préalable avec ``sudo apt install fbi``) fonctionnent correctement avec l'écran
- Installer Python 3 et Pip 3 avec ``sudo apt install python3 python3-pip``
- Installer l'utilitaire d'environnement virtuel avec ``sudo pip3 install virtualenv``
- Créer un environnement virtuel avec ``virtualenv –python=python3 venv`` puis l'activer avec ``source venv/bin/activate``
- Installer les bibliothèques nécessaires pour générer l'image de la caméra avec ``pip install numpy matplotlib pyserial``
Une fois la Raspberry Pi configurée, cela donne ceci :
Câblage de la connexion série entre l'Arduino et la Raspberry Pi
Il faut prendre soin d'adapter les tensions entre les deux cartes électroniques !
===== Expériences et prototypage =====
Le schéma de ce circuit viens de là
<note>La température mesurée dans cette vidéo n'est pas directement la flamme. Celle-ci étant immatérielle on ne peut que mesurée indirectement la température qu'elle génère. Ainsi nous avons visé la partie métallique du briquet.</note> L'angle de notre capteur est de 35°, ce qui est énorme. Quand des objets seront présenté trop loin, ceux-ci risquent de ne pas être “vus”. Donc cela pose un problème étant donné que le déplacement effectué sera uniquement rotationnel et que l'image (en plus d'être en arc de cercle) sera petite. Le mieux serait donc de réduire l'angle de vue, mais cela est compliqué à mettre en place. Nous passons donc au-dessus ce problème et demandons à ce que l'utilisateur place l'objet ou la surface à mesurer assez proche du capteur. ===== Support et boîte ===== ====== Support du capteur ====== L'objectif c'est de concevoir un support en 3D pour le capteur thermique. Celui-ci devra relie le capteur au moteur pas a pas de façon à qu'il puisse faire des rotations autour de l'axe des x. Celui-ci sera relié au stepper et à un roulement à bille qui facilitera la rotation.
Mesures pour pouvoir concevoir le support du capteur thermique Ces mesures ont été faites avec un pied à coulisse qui possède une incertitude de 0,01 mm * Largeur du capteur: 17,46 ± 0,01 mm * Longueur du capteur: 32,34 ± 0,01 mm * Diamètre de l'axe du moteur pas à pas: 7,13 ±0,01 mm * Diamètre de l’intérieur du roulement à bille: 8,54 ±0,01 mm Il y a eu beaucoup de problème lors de l'impression et quand nous voulions retirer les fils de construction cela était un peu compliqué et fissurer le support. Cela reste néanmoins possible, il faut juste rester minutieux et patient. De plus nous avons choisi de fixer le capteur sur le support avec du scotch ou de la pâte à fixe pour éviter d'endommager les circuits. Cela peut paraître ridicule, mais ces deux manières restent quand même fiables. ====== Support des moteurs ====== Notre support en 3D doit être suffisamment grand pour pouvoir tenir le moteur pas a pas, mais rester tout de même le plus petit possible pour que le servo motor qui placé dans l'axe du capteur, soit assez puissant pour déplacer toute l'installation. Le support + le stepper + le contre poids doivent donc être le plus léger possible et le stepper doit de plus être en équilibre sur le servo motor. Ce dernier n'est don pas de tout repos. Nous avons laissé un emplacement pour un contre poids, mais celui-ci ne va pas être à la même distance du servo que le stepper (qui est très long et qui prend en conséquence trop de place par rapport à ce que nous voulons. Le contre poids doit donc être plus compact et plus lourd que le stepper. En guise de contre poids nous avons ainsi choisi du laiton (un alliage de Cuivre et de Zinc principalement). Nous devions faire avec ce que nous avions sous la main et il se trouve que le bloc de laiton qui se rapprochait le plus de nos attentes est cylindrique. Pour illustrer voici un bloc de laiton La conception était assez compliquée et nous avons essayé d'être le plus compact possible. L'objet est assez excentré, nous avons de plus ajouté une case pour placer le stepper. Ainsi il sera protégé et ne risquera pas de tomber lors d'une utilisation. Dimensions de notre support en 3D (avec le servo moteur): * Hauteur: 8,5cm * Longueur: 10 cm * Largueur: 4,5cm Lors de l'impression 3D nous avons été confronté à un autre problème. En effet, on a du faire face a l'effet de Warping où les matières se déforment sous l’effet de la température et des forces de tension internes. C'est ainsi qu'on a modifié les paramètres du support pour que celui-ci soit plus dense. L’épaisseur doit être plus grande et avec des traits plus rapprochés pour que le support ait plus de cohésion et est plus dur. support.svg.zip Nous pouvons bien voir que la base du support est bien arrondi à ses extrémités. ====== Boîte ====== Mesures pour pouvoir concevoir la boite Pour créer la boite, on doit tenir en compte des dimensions de tous les éléments de notre objet à savoir la Raspberry; l'écran, la Shield, la carte Arduino et notre support en 3D. Voici le schéma montrant l'agencement de toutes les composantes (le 1 est celui que l'on avait conçu initialement, mais nous avons ajouter un écran etc. Nous avons de plus changer la façon de l'ouvrir, pour accéder aux différentes parties. Le 2 est donc celle que nous avons réellement faite). Comme vous le pouvez voir dans le schéma, notre boite est divisé en deux compartiments. Un compartiment possède notre support 3D alors que l'autre contient les autres éléments de notre objet. Pour connaitre la longueur du premier compartiment, on a du tenir en compte que notre support va faire une rotation de 45° selon l'axe de rotation x (Voir premier schéma). Dans ce schéma, on s’intéresse a la longueur LM' ET PN'. On a utilisé des différentes formules de trigonométrie pour en déduire que LM'= sin(45°)*OM' soit LM'=4,8 cm. De même, PM'= LM'+ sin(45)*M'N' soit PM'=6,4 cm Ainsi, sachant que notre support 3D va faire une rotation de 45° de chaque coté, on peut déduire que la longueur de notre premier compartiment va être de 6,2*2=12,4 cm. On va laisser une marge de 2 cm. Dimensions du premier compartiment: * hauteur= 12 cm * longueur= 14,5 cm * larguer= 14 cm Dimensions du deuxième compartiment: * hauteur= 12 cm * longueur= 14 cm * larguer= 14 cm Dimensions de la boite dans sa totalité:**Nous avons fait de nombreuses plaques avec des dents, pour que nous puissions les emboîter et construire la boîte à partir d'une plaque de contre plaqué de peuplier de 6 mm. Voici le résultat après l'avoir mis ensemble:
Guide pour la relation arduino/ servo