Étape 14 : Rassembler tout le Code
Il s’agit d’une vue d’ensemble du code qui a été discuté lors des étapes précédentes. Mon fichier final est joint pour votre usage.
Le code se compose de ces classes
- crayon optique
- SVGHandler
- moteurs pas à pas
- lightPlotter
- cmdInterface
LightPen classe
Cette classe gère la communication avec les ESP8266 wifi contrôle RGB LED via une interface HTML. Il a trois fonctions
setColourRGBTuple() Cette fonction est utilisée pour définir la couleur actuelle à une valeur RGB fournie sous la forme d’un tuple (R, G, B), où les valeurs R, G et B sont compris entre 0 et 255 (base 10 - décimale)
setColourHexString() Cette fonction est utilisée pour définir la couleur actuelle à une valeur RGB fournie sous la forme d’une chaîne hexadécimale de « #rrggbb », où les valeurs rr, gg et bb sont entre 00 et ff (base 16 - hex)
setColour() Cette fonction est appelée par setColourRGBTuple ou setColourHexString pour appliquer la couleur à LEDS via une demande de HTML. Si nous avons appelé cette fonction directement entre les étapes moteurs il pourrait entraîner un retard et interférer avec la douceur de notre progression. Pour éviter cela, il est appelé dans un fil, pour qu’il fonctionne simultanément avec le code pas à pas.
Classe SVGHandler
Fonctionnement de cette classe a été expliqué dans l’étape « Coordonnées XY de SVG an » bref il lit dans un SVG (qui est censé pour avoir des coordonnées absolues chemin unique et linéaire des objets seulement) et les stocke sous forme de liste de coordonnées de début et de fin de lignes, ainsi que de la couleur de la ligne. Les segments forment une liste de listes, chaque segment ayant la forme [x 0 y0 x1 y1 RGB]. x et y coordonnées sont normalisées des flotteurs (mise à l’échelle afin que le minimum est 0 et la valeur maximale est 1).
Classe de moteurs pas à pas
Cette classe est décrite à l’étape « Code Python pour conduire les steppers ». Il gère la communication I2C avec les moteurs pas à pas et offre une fonction de simple step() qui se déplace le stepper ou recule d’un cran.
Classe LightPlotter
La classe LightPlotter toutes ces autres classes rassemble dans un système qui peut dessiner avec la lumière. Au cours de l’initialisation, il y a quelques variables clés qui sont configurés
- les deux moteurs sont définis comme motor1 (moteur gauche) et motor2 (moteur de droite), ce sont des instances de la classe de moteurs pas à pas
- Le nombre d’étapes horizontales entre motor1 et motor2 est définis (xRes). Cela doit être déterminée expérimentalement et dépendra du diamètre de vos poulies et la distance entre les moteurs.
- Le temps par défaut entre les étapes (Steptime est) est défini. une valeur de 10 ms (0,01) bien fonctionné pour moi, mais vous devrez déterminer à quelle vitesse vous pouvez passer sans étapes manquantes.
- La durée de l’étape maximale (stepTimeMax) est également définie, mais c’est vraiment juste une sécurité pour certains calculs, elle n’a pas un intérêt matériel, j’ai choisi 1 seconde, ce qui n’était jamais atteint dans la pratique.
- usableArea. Comme décrit dans la l’étape de la « Compréhension la géométrie d’un String traceur », les extrémités directement sous les moteurs et directement entre les moteurs (en haut) devrait être évitée, si je définis une variable « usableArea » qui est un pourcentage de la surface théorique. 70 % (ou 0,7) est un bon point de départ.
- Parfois, vous souhaiterez peut-être déplacer votre image entière vers le bas (par exemple, pour dessiner des pieds d’un personnage sur le sol), la variable "Décalage_y" s’occupe de cette
Elles sont fonctions de la classe lightPlotter
- setOrigin
- goTo
- runSteppers
- stepMotors
setOrigin() permet d’indiquer l’abaque de lumière qu’il est actuellement à (0,0) qui est utilisé dans l’étalonnage.
runSteppers() est une fonction de commodité qui prend dans un certain nombre de mesures que chaque moteur doit tourner, ainsi que l’intervalle entre les étapes pour chaque moteur. À l’aide de fils les deux moteurs sont tous deux capables d’être renforcée en même temps.
goTo() prend une (X, Y) coordonner et calcule le nombre d’étapes requises par chaque moteur pour se déplacer afin d’obtenir la LED à cet endroit. En outre, il détermine le délai entre les étapes pour s’assurer que les deux moteurs prennent le même temps pour arriver à leur destination. Une fois ces détails sont calculées, goTo() fait usage de la fonction runSteppers() pour obtenir les moteurs se déplaçant.
cmdInterface Class
Cette classe utilise la très cool Python module « cmd », ce qui nous permet de créer facilement une interface de ligne de commande pour notre plotter de lumière.
Les fonctions qui sont précédées de « do_ » peuvent être appelées depuis la ligne de commande lorsque le script est exécuté. Vous pouvez voir qu’ils sont tous correspondent presque directement aux fonctions des diverses classes, dans la plupart des cas, elles comprennent un bit de vérification des erreurs pour s’assurer que les arguments sont sain d’esprit. L’étape de « Comment utiliser le système » décrira comment utiliser ceux-ci.
- do_plotsvg
- do_movesteps
- do_invertMotor
- do_disableMotor
- do_enableMotor
- do_setrgb
- do_goxy
- do_goxyrgb
- do_setusable
- do_setorigin
- do_setyoffset
- do_exit
lightPlotter_003.py