Exemple:
Potentiometre_Vitesse_Continue
Ce programme fait tourner le moteur pas à pas dans les deux sens à une vitesse variable dépendant de la position d'un potentiomètre. Au millieu, vitesse nulle, plus on s'éloigne, plus la vitesse augmente. Pour ce faire, on va faire un mouvement "infini", et on ajustera la vitesse régulièrement. Le moteur ne peut tourner que dans un seul sens de façon simple.
Liens
Pour faire fonctionner cet exemple, il faut soit télécharger QuickStepExemples.zip
contenant tous les fichiers d'exemples, soit télécharger Potentiometre_Vitesse_Continue.zip
contenant cet exemple, soit créer un répertoire du nom de l'exemple et mettre dedans:
- le fichier Potentiometre_Vitesse_Continue.ino de l'exemple
- le fichier de configuration QuickStepConf.h propre à cet exemple
- les trois fichiers (QuickStep.h, QuickStep.cpp
et digitalWriteFast.h) pour avoir la bibliothèque (identiques pour toutes les
applications)
QuickStepConf.h (extrait)
#define timer1pourQuickStep // Hybride 200pas/tr en mode 16 micro-pas #define timer1pourQuickStep #define UN_TOUR (200L*16) pas_ou_micro_pas #define VITESSE_MAXI 1.0 RPS #define STEP 2 #define DIR 5 #define ENABLE 8
Ici si on utilise le timer 1, la vitesse minimum est de 1 pas toutes les 3s. Avec le timer 2 par défaut, la vitesse minimum serait de 1 pas toutes les 16 ms.
Il faut absolument le comptage 32 bits pour avoir un mouvement suffisament long.
Potentiometre_Vitesse_Continue.ino (extrait)
# $menu = ":QS"; include "QuickStep.h" const uint8_t POTENTIOMETRE = A5; // Broche de la borne centrale du potentiomètre // Une autre broche est à GND, l'autre au 5V float vitesse_maxi; void setup() { quickStepInit(); // Obligatoire pour utiliser QuickStep vitesse_maxi = quickStepGetBaseDeTemps(); // Donc défini par l'utilisateur // Mise en rotation à la vitesse la plus lente quickStepRotation(MAX_PAS, 0 micro_secondes_par_pas); } int valeurPotentiometreLue; // Résulat de analogRead(potentiometre) void loop() { quickStepBaseDeTemps(vitesse_maxi * 1023 / (1023.1 - analogRead(POTENTIOMETRE))); }
La ligne vitesse_maxi = quickStepGetBaseDeTemps(); permet d'avoir le paramètre vitesse_maxi si la vitesse a été donnée en tr/mn ou tr/s.
Cette méthode n'est pas utilisable si on a plusieurs moteurs car quickStepBaseDeTemps ferait varier la vitesse de tous les moteurs.
Pour utiliser cette méthode pour les deux sens de rotation, il faut avoir une zone "arrêt" en milieu de course du potentiomètre, arrêter et relancer le mouvement "infini" chaque fois qu'on change de sens.