Exemple:
Potentiometre_Vitesse_2_pas
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 milieu, vitesse nulle, plus on s'éloigne, plus la vitesse augmente. Pour ce faire, on va faire des petits mouvements (par exemple 2 pas), et on ajustera la vitesse à chaque passage.
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_2_pas.zip
contenant cet exemple, soit créer un répertoire du nom de l'exemple et mettre dedans:
- le fichier Potentiometre_Vitesse_2_pas.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)
Comme il s'agit d'une rotation continue (enchaînement des mouvements), il faut une pile d'au moins 2 ordres. Plus la pile est grande, plus il faudra du temps pour changer la vitesse. 3 ordres dans la pile est donc ce qu'il y a de mieux.
// Hybride 200pas/tr en mode 16 micro-pas #define UN_TOUR (200L*16) pas_ou_micro_pas #define VITESSE_MAXI 1.0 RPS #define STEP 2 #define DIR 5 #define ENABLE 8 #define NB_ORDRES_DANS_LA_PILE 3
Si le nombre de pas fait dans chaque mouvement, est trop petit, on n'aura pas le temps de faire les calculs (voir Enchainements).
Potentiometre_Vitesse_2_pas.ino
# $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 const uint16_t MINI = 3; // Pour les faibles valeurs on arrête le moteur void setup() { quickStepInit(); // Obligatoire pour utiliser QuickStep Serial.begin(115200); } int valeurPotentiometreLue; // Résultat de analogRead(POTENTIOMETRE) void loop() { valeurPotentiometreLue = analogRead(POTENTIOMETRE) - 512; // Résultat entre -512 et +512 if (abs(valeurPotentiometreLue) > MINI) // Pour les résultats entre -MINI et +MINI on ne fait rien quickStepRotation((valeurPotentiometreLue > 0 ? 1 : -1)* // Choix du sens 2 pas_ou_micro_pas, VITESSE_MAXI * abs(valeurPotentiometreLue)/512); // Vitesse entre 0 et 1.0 RPS }