La technique derrière le graffiti numérique
// Conception interactive // La technique derrière le graffiti numérique
Depuis 2016, je développe un dispositif de graffiti numérique permettant de dessiner sur n’importe quelle surface grâce aux technologies de projection vidéo, le tout avec une interface utilisateur en forme de canette de peinture. Voici un article sur le développement de ce dispositif.
Le dispositif 0.1
La toute première version de la canette de graffiti numérique était très rudimentaire : une LED infrarouge, une résistance et une switch fixée sur une batterie 9 volts avec du tape électrique. Elle n’a servi qu’une fois pour le développement d’un petit démo afin d’aller chercher notre premier financement, en 2016, dans le cadre d’un appel de projets de l’Entente de développement culturel de la ville de Québec. Le logiciel de dessin était lui aussi très rudimentaire et programmé dans Max/MSP.
Le dispositif 1.0
Grâce à l’obtention du financement, nous avons pu développer la première version du système de graffiti numérique.
La canette
Celle-ci était construite dans un cocktail shaker en métal en forme de canette acheté sur Amazon. L’électronique était constitué d’un microcontrôleur ESP8266 et d’un capteur de force rudimentaire.
La caméra
Pour le tracking de la canette, la caméra utilisée était une Playstation Eye modifiée avec un filtre qui laisse passer seulement la lumière infrarouge. C’était un filtre assez rudimentaire, constitué de petit morceau de gel rouge, vert et bleu afin de couper complètement la lumière visible.
La caméra était branchée sur un très petit ordinateur Linux sur lequel se trouvait le logiciel de blob tracking.
La console
La première console de graffiti numérique était un logiciel programmé dans Max, que l’on pouvait contrôler avec une souris ou un iPad. Ce système était complexe et nécessitait plusieurs appareils informatiques, ce qui n’était pas optimal.
Pour ce qui est des types de traits, nous sommes partis de vrai « pouch » de peinture que nous avons photographiés pour ensuite les intégrer au logiciel.
Le logiciel de dessin
Libraires à installer dans Processing :
- Syphon
- oscP5
Le dispositif 2.0
C’est en 2021 que nous avons développé la version 2.0 du dispositif. Le but était de créer un dispositif plus plug and play, plus fiable, plus performant et plus esthétique. Pour ce faire, nous avons utilisé les technologies d’impression 3D ainsi que des pièces et du matériel mieux adapté.
La canette
La canette 2.0 a été désignée de toute pièce dans Fusion 360 afin de créer un dispositif imprimable durable, performant, esthétique et adapté à nos besoins. Voici la dernière version du modèle :
Les premières canettes ont été imprimées en PLA standard, un plastique fragile qui se déforme facilement à la chaleur. J’ai rapidement changé pour le PETG, qui est beaucoup plus performant.
La caméra
Le matériel
La caméra Playstation Eye et l’ordinateur LINUX étaient plutôt complexes à brancher et à mettre en marche. Pour la version 2.0, j’ai opté pour une caméra sur laquelle on peut programmer directement l’algorithme de blob tracking, la caméra Open MV H7 Plus.
À cette caméra, j’ai ajouté le module WiFi afin de pouvoir facilement communiquer avec le logiciel de dessin ainsi que le module de caméra Global shutter, qui permet une image plus fiable et de meilleure qualité.
Un autre élément important est la modification de la lentille pour qu’elle puisse voir les ondes infrarouges de la LED installée sur la caméra. Les lentilles viennent toujours avec un filtre qui laisse passer la lumière visible et qui filtre la lumière infrarouge. Il faut donc enlever ce filtre et le remplacer par un autre qui laisse passer seulement la lumière à 850 nm, longueur d’onde de la LED utilisée. Sur la photo, on voit à droite le filtre infrarouge enlevé à l’aide d’un exacto et à gauche la lentille avec le nouveau filtre, recollé avec du cyanoacrylate :
Le code
Cette caméra vient avec son propre IDE, ce qui simplifie encore plus son utilisation. Le langage utilisé est le MicroPython, un langage assez simple. Voici le code de la caméra, inspiré de ce tutoriel :
import sensor, image, time, math, uosc, network
import pyb
from machine import LED
red_led = LED("LED_RED")
green_led = LED("LED_GREEN")
blue_led = LED("LED_BLUE")
ID = 1
thresholds = (252, 255)
sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.WVGA)
sensor.set_framerate(60)
sensor.skip_frames(time = 2000)
sensor.set_lens_correction(True, 720, 5)
sensor.set_auto_gain(False)
sensor.set_auto_gain(False,gain_db=0)
sensor.set_auto_exposure(False, exposure_us=35000)
sensor.set_hmirror(True)
clock = time.clock()
SSID='LRB WIFI'
KEY='LRBW1F1!'
print("Trying to connect... (may take a while)...")
wlan = network.WINC()
wlan.connect(SSID, key=KEY, security=wlan.WPA_PSK)
while(wlan.isconnected() == False):
time.sleep(1000)
print("not yet connected" )
wlan.connect(SSID, key=KEY, security=wlan.WPA_PSK)
red_led.on()
green_led.off()
blue_led.off()
print(wlan.ifconfig())
time.sleep_ms(1000)
red_led.off()
blue_led.on()
time.sleep_ms(500)
blue_led.off()
time.sleep_ms(500)
blue_led.on()
time.sleep_ms(500)
blue_led.off()
time.sleep_ms(500)
blue_led.on()
time.sleep_ms(500)
blue_led.off()
from uosc.client import Bundle, Client, create_message
osc = Client('192.168.0.255', 8888)
while True:
clock.tick()
img = sensor.snapshot()
blob_list = img.find_blobs([thresholds], pixels_threshold=500, area_threshold=100, merge=True)
blob_count = len(blob_list)
if blob_count==0:
green_led.off()
red_led.on()
for blob in blob_list:
x = blob.cx()
y = blob.cy()
z = 10
if blob.roundness() > 0.6 and blob.pixels() < 3000:
img.draw_cross(x, y, color=127)
osc.send('/blob',ID, x, y, z)
green_led.on()
red_led.off()
else:
green_led.off()
red_led.on()
Pour mettre à jour le firmware (microprogramme) du module WiFi :
- Aller le chercher ici : /Applications/OpenMV IDE.app/Contents/Resources/firmware/WINC1500/winc_19_7_6.bin
- Le mettre sur la caméra
- Ouvrir l’exemple File/Exemples/Wifi/WINC1500/fw_update.py
- Mettre l’exemple sur la caméra
- Redémarrer la caméra
- Faire rouler le programme. Il se peut que l’erreur : « OSError : Failed to verify the firmware! » s’affiche, mais le firmware (microprogramme) est tout de même à jour.
Le boitier
Le boitier a été conçu dans le logiciel Fusion 360 pour qu’il soit facile de l’imprimer en 3D. Voici la dernière version de celle-ci :
La console
Ce que je voulais pour remplacer les iPads, c'est une console tactile, avec de vrais boutons. J'ai donc fait le design de cette première console :
Le boitier de celle-ci était fabriqué en polycarbonate noir par Multifab.
Le dispositif 2.5
En 2024 j'ai entamé la fabrication de deux nouveaux kits de graffiti numérique dans le cadre d'un partenariat avec la compagnie Light Art Creative basé au Royaume-Uni. J'en ai profité pour faire plusieurs petites modifications.
La caméra
En faisant quelques tests, je me suis rendu compte que de mettre deux filtres infrarouges l’un par-dessus l’autre ne nuisait pas à la LED de la canette, mais filtrait pas mal mieux la lumière polluante. J’ai aussi amélioré un peu le code, notamment les couleurs de la LED de la caméra : rouge quand elle ne détecte pas la caméra et verte lorsqu’elle la détecte, au lieu de vert et bleu, ce qui est beaucoup plus logique. Le code à jour se retrouve dans la section 2.0.
La console
En 2024, j’ai créé le design d’une nouvelle console afin de pouvoir la produire entièrement dans mon studio, avec mes imprimantes 3D et ma découpeuse laser. Seul le template de couleurs reste à faire imprimer/découper par une firme externe.
La console utilisant un nouveau microcontrôleur avec un module externe pour lire les boutons, je ne peux plus utiliser la librairie de boutons que j'utilisais avant. Comme je n'ai pas besoin de fonctions avancées pour les boutons, j'ai simplement utilisé la librairie de base d'Adafruit pour le MCP.
La découpe de la façade
Puisqu’il est dangereux d’utiliser la découpe laser pour couper du polycarbonate, j’ai acheté des panneaux transparents en PETG pour faire des tests avec ce matériel, somme toute assez résistant pour l’utilisation que nous voulions en faire. J’ai fait plusieurs tests, pour finalement y aller avec des paramètres de type « lentement mais surement » : vitesse 35, puissance 85, et 50 passes. Il y aurait plus de tests à faire pour arriver au même résultat plus rapidement.
Autres idée :
- Faire seulement les marques de trous à la découpeuse et ensuite les percer à la perceuse à colonne.
- Utiliser la CNC (probablement la meilleure approche, mais je n’ai pas eu le temps de la rendre fonctionnelle pour cette étape).