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

 fourcheOptique

Fourche optique

     

capteurEffetHall

Capteur effet hall

     

switch

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

planCablageSolarPanel

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 :

maquettePasAPas

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 !

Aimant en face du capteur
Début détection champ magnétique
Fin détection champ magnétique

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.