Page 75 - arduino_Neat
P. 75
}
void loop()
{
// boucle pour faire accélérer le moteur
for (int i = 0 ; i <= 255 ; i++)
{
//envoyer la valeur de 0 à 255
analogWrite( pinMoteur, i);
// attendre 10 millisecondes pour donner le temps de réaliser l'accélération
delay(10);
}
// boucle pour faire décélérer le moteur
for (int j = 0 ; j <= 255 ; j++)
{
//envoyer la valeur de 255 à 0
analogWrite( pinMoteur, 255 - j);
// attendre 10 millisecondes pour donner le temps de réaliser l'accélération
delay(10);
}
}
Le code ci-dessus nous permet d'abord de tester le contrôle du moteur. Nous utilisons la
commande analogWrite(); pour envoyer un signal au transistor. Pour plus d'information sur le
PWM, veuillez lire la partie « Entrées / Sorties » du chapitre « Micro-contrôleurs » de la section
« Électronique ». Ce signal nous permet de varier la vitesse de rotation du moteur en envoyant
de courtes impulsions « on/off ». La commande analogWrite(); prend deux paramètres : la pin
à laquelle nous voulons nous adresser et une valeur entre 0 et 255, correspondant dans notre
projet à une intensité « très faible » pour le 0 jusqu'à une quasi-pleine intensité pour 255.
L'autre fonction que nous utilisons dans ce programme est la boucle for();. Celle-ci permet de
répéter un certain nombre de fois une série d'instructions. Dans notre code, nous répétons 256
fois la commande analogWrite(); en incrémentant à chaque fois la valeur passée en
paramètre. Notre boucle for(); nécessite l'utilisation d'une variable et la spécification de trois
instructions pour son bon fonctionnement :
for (int i = 0 ; i <= 255 ; i++)
1. le premier élément déclare la variable à utiliser et son état de départ. Dans notre
exemple, nous déclarons la variable : int i = 0;
2. le second élément précise la condition à remplir pour arrêter la boucle : i <= 255; ceci
signifie que tant que i sera plus petite ou égale à 255, les instructions comprises entre les
accolades seront répétées.
3. le dernier élément précise l'opération à exécuter après chaque boucle : i++;. Donc, une
fois que les instructions entre accolades sont exécutées une première fois, la valeur de i
sera incrémentée de 1. i++; est un raccourci qui est équivalent à écrire i = i + 1;.
Au départ, i prend donc la valeur 0. Nous spécifions cette valeur à analogWrite();. Puis, le
programme attend 10 millisecondes avec la fonction delay(10); pour laisser un temps au moteur
de bouger un peu. Un délai plus long ferait en sorte que le moteur change d'état plus
lentement (la boucle s'exécuterait avec plus de temps d'attente entre chaque étape). Lorsque
ces instructions sont terminées, la boucle reprend et i est incrémenté. La variable a donc
maintenant une valeur de 1. La condition est testée i <= 255 et retourne “faux”, donc la boucle
continue. Les instructions sont exécutées, le moteur tourne un peu plus vite et i est ensuite
incrémenté à 2. Et ainsi de suite jusqu'à ce que i soit incrémenté à 256, qui rend la condition
"vraie" et qui fait sortir le programme de la boucle for();.
La deuxième boucle du programme s'exécute de la même manière, à la différence que nous
utilisons la variable j et que pour effectuer une décélération du moteur, nous utilisons
l'opération 255-j pour spécifier la valeur à prendre pour analogWrite(). En effet, lorsque j est
égal à 0, la valeur retournée par 255-j est égale à 255. Et ainsi de suite. Notre boucle for()
passera donc en réalité les valeurs de 255 à 0 à analogWrite().
DEUXIÈME ÉTAPE
Dans cette deuxième étape, notre Arduino se dévouera pour fumer à votre place. Nous
connecterons donc le capteur de souffle et modifierons le code pour que lorsque vous
soufflez ou aspirez près du micro électret, l'arduino active sa micro pompe.
75