Contrôle Moteur Arduino PWM : Guide Complet
Salut les makers ! Vous êtes passionnés par la robotique, l'automatisation ou simplement l'électronique ? Alors, vous êtes au bon endroit ! Aujourd'hui, on va plonger au cœur du contrôle de moteurs avec Arduino en utilisant la technique PWM (Pulse Width Modulation). Accrochez-vous, ça va être passionnant !
Pourquoi le PWM pour le contrôle de moteurs ?
Le PWM (Pulse Width Modulation), ou Modulation de Largeur d'Impulsion en français, est une technique géniale pour contrôler la puissance fournie à un appareil électrique, comme un moteur. Imaginez que vous ayez une lampe que vous voulez dimmer. Au lieu de simplement réduire la tension (ce qui serait inefficace et pourrait endommager votre circuit), le PWM permet d'allumer et d'éteindre la lampe très rapidement. Le temps pendant lequel la lampe est allumée par rapport au temps total du cycle détermine la luminosité perçue. C'est un peu comme un stroboscope, mais tellement rapide que l'œil humain perçoit une lumière continue de luminosité variable.
Pour les moteurs, c'est le même principe. En contrôlant le rapport cyclique (le pourcentage du temps pendant lequel le signal est à l'état haut), on peut ajuster la vitesse du moteur. Un rapport cyclique de 0% signifie que le moteur est à l'arrêt, tandis qu'un rapport cyclique de 100% signifie qu'il tourne à sa vitesse maximale. Entre les deux, on a toute une plage de vitesses possibles ! Le PWM est donc super efficace pour un contrôle précis de la vitesse, tout en conservant un bon couple moteur, même à basse vitesse.
Mais pourquoi utiliser le PWM plutôt qu'une simple variation de tension ? La réponse est simple : l'efficacité énergétique. En utilisant le PWM, on minimise les pertes d'énergie sous forme de chaleur, ce qui est crucial pour les applications alimentées par batterie ou nécessitant un contrôle précis de la consommation. De plus, le PWM permet un contrôle plus fin et plus stable de la vitesse du moteur, ce qui est essentiel pour les robots, les imprimantes 3D et autres systèmes automatisés.
Les bases du PWM avec Arduino
Maintenant que vous comprenez l'intérêt du PWM, passons à la pratique avec Arduino. Heureusement pour nous, les cartes Arduino sont équipées de broches PWM dédiées. Ces broches, généralement marquées d'un tilde (~), sont capables de générer un signal PWM. Sur une Arduino Uno, par exemple, les broches 3, 5, 6, 9, 10 et 11 sont des broches PWM.
Pour générer un signal PWM avec Arduino, on utilise la fonction analogWrite(). Cette fonction prend deux arguments : le numéro de la broche PWM et une valeur entre 0 et 255. Cette valeur représente le rapport cyclique du signal PWM. 0 correspond à un rapport cyclique de 0% (moteur arrêté), 255 correspond à un rapport cyclique de 100% (vitesse maximale), et les valeurs intermédiaires permettent de contrôler la vitesse du moteur de manière proportionnelle.
Voici un exemple de code simple pour faire varier la vitesse d'un moteur DC en utilisant le PWM :
int moteurPin = 9; // Broche connectée au moteur
void setup() {
pinMode(moteurPin, OUTPUT); // Définir la broche comme sortie
}
void loop() {
for (int rapportCyclique = 0; rapportCyclique <= 255; rapportCyclique++) {
analogWrite(moteurPin, rapportCyclique); // Envoyer le signal PWM
delay(10); // Attendre un peu
}
delay(1000); // Attendre une seconde à la vitesse maximale
for (int rapportCyclique = 255; rapportCyclique >= 0; rapportCyclique--) {
analogWrite(moteurPin, rapportCyclique); // Envoyer le signal PWM
delay(10); // Attendre un peu
}
delay(1000); // Attendre une seconde à l'arrêt
}
Ce code fait varier la vitesse du moteur de 0 à 100% puis de 100% à 0 en utilisant une boucle for et la fonction analogWrite(). N'oubliez pas que ce code est un exemple de base et qu'il faudra l'adapter à votre montage spécifique et à vos besoins.
Contrôler un moteur DC avec Arduino et un transistor
Il est important de noter que vous ne pouvez pas connecter directement un moteur DC aux broches d'une carte Arduino. Les broches Arduino ne sont pas conçues pour fournir le courant nécessaire au fonctionnement d'un moteur. Tenter de le faire pourrait endommager votre carte Arduino. La solution ? Utiliser un transistor comme un interrupteur contrôlé par l'Arduino.
Un transistor permet de contrôler un circuit de puissance (celui du moteur) avec un signal de faible puissance (celui de l'Arduino). Il existe différents types de transistors, mais les plus couramment utilisés pour le contrôle de moteurs sont les transistors BJT (Bipolar Junction Transistor) et les transistors MOSFET (Metal-Oxide-Semiconductor Field-Effect Transistor). Les MOSFET sont souvent préférés pour leur faible résistance à l'état passant, ce qui réduit les pertes d'énergie et permet de contrôler des moteurs plus puissants.
Voici un schéma de câblage typique pour contrôler un moteur DC avec un Arduino et un transistor MOSFET :
- La broche PWM de l'Arduino est connectée à la résistance de base (R1) du transistor.
- La résistance de base est connectée à la grille (Gate) du MOSFET.
- La source (Source) du MOSFET est connectée à la masse (GND) de l'Arduino et de l'alimentation du moteur.
- Le drain (Drain) du MOSFET est connecté à une borne du moteur.
- L'autre borne du moteur est connectée à l'alimentation du moteur.
- Une diode de roue libre (D1) est connectée en parallèle avec le moteur pour protéger le transistor contre les pics de tension lors de la commutation.
N'oubliez pas de choisir un transistor et une diode de roue libre adaptés à la tension et au courant de votre moteur. Il est également important d'utiliser une alimentation externe pour le moteur, car l'Arduino ne peut pas fournir suffisamment de courant.
Inverser le sens de rotation d'un moteur DC avec un pont en H
Contrôler la vitesse d'un moteur, c'est bien, mais pouvoir inverser son sens de rotation, c'est encore mieux ! Pour cela, on utilise un pont en H. Un pont en H est un circuit électronique qui permet d'inverser la polarité de la tension appliquée à un moteur DC, ce qui inverse son sens de rotation.
Un pont en H est constitué de quatre interrupteurs (généralement des transistors) disposés en forme de