1- Contexte
Il existe de nombreuses situations où il est nécessaire de savoir où se trouve le point de départ du déplacement d'un objet.
Par exemple, sur l'imprimante 3D où la fraiseuse à commande numérique, il faut savoir où se trouve l'origine de l'axe X, Y et Z.
Pour ces 2 machines, il existe une fonctionnalité qui permet de lancer le déplacement des axes afin de déterminer les points d'origine :
- sur la fraiseuse à commande numérique, ce sont des capteurs à effet hall qui sont utilisés,
- sur l'imprimante 3D ce sont des fins de course classiques.
D'autres objets utilisent par exemple des fourches optiques afin de déterminer le bord d'une feuille, par exemple dans une imprimante jet d'encre, ou encore pour déterminer la position de la cabine d'ascenseur sur le projet de maquette d'ascenseur du laboratoire.
Pour notre projet, il faut trouver un moyen de déterminer l'origine de notre engrenage de sortie.
2 Comparaison de solutions techniques
Compléter le tableau suivant afin de pouvoir argumenter sur le choix d'une solution technique.
Plusieurs critères peuvent être pris en compte : prix, simplicité de mise en œuvre, sensibilité aux saletés, détection par contact ou sans contact...
Solutions techniques | Principe de fonctionnement | Avantages | Inconvénients |
Fourche optique |
|||
Capteur effet hall |
|||
fin de course |
3 Test de fonctionnement sur la maquette
Pour la détection de l'origine sur la maquette, le choix s'est porté sur un capteur à effet hall essentiellement à des fins pédagogiques compte tenu des possibilités d'applications variées.
Côté programme, une nouvelle fonction est créée origine() pour rassembler les instructions permettant de détecter et se positionner sur l'origine.
Plan de câblage
Les 4 fils du moteur sont reliés par l'intermédiaire d'une carte de puissance sur les entrées 17-5-18-19.
Sur la maquette, le circuit du capteur à effet hall est équipé, en plus du capteur, d'une led qui peut être allumée par programmation lorsque l'aimant est en vis-à-vis du capteur :
- le capteur en broche 35 -> À renseigner dans le début du programme ci-dessous
- la led en broche 12 -> À renseigner dans le début du programme ci-dessous
Maquette du moteur pas à pas
Voici la maquette du moteur pas à pas où l'on peut observer la led qui indique l'origine du disque :
Compléter le code du programme de détection d'origine
Copier/coller le code suivant : ATTENTION il ne fonctionne pas.
Il manque des éléments de code !
from machine import Pin, ADC, SoftI2C
from time import sleep
import ssd1306
#****************déclaration des variables globales***********************
#--initialisation afficheur
i2c = SoftI2C(scl=Pin(22), sda=Pin(21))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
#---initialisation paramètres moteur pas à pas-----------
#Déclaration des sorties
IN1 = Pin(17,Pin.OUT)
IN2 = Pin(5,Pin.OUT)
IN3 = Pin(18,Pin.OUT)
IN4 = Pin(19,Pin.OUT)
#Définition des séquences de commande
pins = [IN1, IN2, IN3, IN4]
#sens anti-horaire
sequence1 = [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]
#sens horaire
sequence2 = [[ ],[ ],[ ],[ ]]
#---initialisation paramètres origine-------------------
cptHall = ADC(Pin( ))
#full range 3.3V
cptHall.atten(ADC.ATTN_11DB)
led = Pin( , Pin.OUT)
hallMax=0
hallMin=1200
#==================déclaration des fonctions================
#---------fonction pour arreter la moteur------------------
def stop():
for i in range(len(pins)):
pins[i].value(0)
sleep(0.001)
#---------fonction pour se positionner sur l'origine-------
def origine():
global hallMin, hallMax
#faire un tour complet pour détecter l'inversion du flux
for t in range(2050):
for step in sequence1:
for i in range(len(pins)):
pins[i].value(step[i])
sleep(0.001)
sleep(0)
#détection inversion flux magnétique
hallValue = int(cptHall.read()/10)
print(hallValue) #affiche dans la console hallValue
if hallValue>hallMax:
hallMax=hallValue
posMax=t
if hallValue<hallMin:
hallMin=hallValue
posMin=t
origineValue=int((hallMax+hallMin)/2)
origineDecal=int((posMax-posMin)/2)
#retour origine
for t in range(2050-(posMin+origineDecal)):
for step in ??:
for i in range(len(pins)):
pins[i].value(step[i])
sleep(0.001)
sleep(0)
#arrêt du moteur
stop()
#message sur l'écran et allumer led verte
oled.text('Origine prise !', 0, 20)
oled.show()
led.value(1)
sleep(0.5)
led.value(0)
#============programme principal==============================
#appel de la fonction qui positionne le panneau sur l'origine
origine()
#efface l'écran
oled.fill(0)
oled.show()
Ligne 21 : compléter le contenu du tableau pour que le moteur tourne dans le sens horaire, compte tenu de ce qui est proposé pour le sens anti-horaire.
Ligne 23 : mettre le numéro de broche du capteur à effet hall
Ligne 26 : mettre le numéro de broche de la led du circuit du capteur à effet hall
Ligne 57 : écrire le nom du tableau sequence à la place des points d'interrogation qu'il faut utiliser pour tourner dans le sens horaire
Test du programme sur la maquette
a- Activer le grapheur : menu Affichage
b- Lancer le programme et observer sur le grapheur l'évolution du signal qui correspond au niveau du champ électromagnétique.
c- Compléter alors le schéma ci-dessous pour vous permettre de faire la capture d'écran pour la trace écrite.
Tous les capteurs n'ont pas exactement les mêmes valeurs, c'est normal !

ATTENTION : Pour relancer une autre fois le programme, il ne faut pas que l'aimant soit sur son origine
TOUTES LES LEDS du moteur pas à pas doivent être éteintes pour faire tourner à la main le grand engrenage
d- Le message sur l'afficheur à la fin du programme ne s'affiche que 0,5s. Modifier la durée pour voir le message 4s.
e- La led doit s'éteindre au bout de 2s et le message doit s'éteindre au bout de 5s. Modifier le programme en conséquence.