Controleur de moteurs L298N H bridge
Le courant fourni par les pins GPIO ou les pins du arduino n'est pas suffisant pour alimenter des moteurs. Ceux ci doivent être alimentés par une autre source (batterie, piles, alimentation DC). Ce circuit permet d'alimenter et de contrôler très simplement deux moteurs par l'intermédiaire d'un arduino ou d'un raspberry PI. Il comporte :
- 2 connecteurs +/- sur les quels sont reliés les moteurs.
- 1 connecteur d'alimentation à 3 broches : 1 ground, un 5V, un 12V (pour une alimentation entre 5 et 12V). Cette alimentation 12V est externe (piles/batteries). Un jumper est utilisé pour changer l'alimentation externe/interne (5V venant du PI/Arduino). Quand +12V est alimenté, +5V fournit du courant qui pourrait être utilisé pour alimenter autre chose, par exemple alimenter le arduino. Mais ATTENTION il semblerait que cela puisse provoquer des problèmes si le arduino est alimenté simultanément par le câble USB. Ce point n'est pas très clair pour moi : à éclaircir. Si vous avez des explications elles sont les bienvenues. De plus, d'après cet article, même si c'est possible d'alimenter le arduino UNO de cette façon, ce n'est pas très conseillé. A cause du bruit électrique du aux moteurs (notamment arrêt /démarrage) la tension de sortie n'est pas très stable, ce qui pourrait provoquer des redémarrage intempestifs de la carte arduino, à moins de filtrer le courant de sortie. Il est préférable d'alimenter séparément la carte avec une pile 9V par exemple.
- 2x2 pin pour contrôler le sens de rotation des moteurs (1pin clockwise, 1 pin counterclockwise), à relier aux pins digital output du arduino/PI.
- 1 pin par moteur pour contrôler ceux-ci en PWD (pulse width modulation, ce qui permet de faire varier la vitesse de rotation). Quand ceux ci ne sont pas utilisés un jumper est en place.

void setup() {
//pins direction
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
//PWM pin
pinMode(9,OUTPUT);
}
void loop() {
//en avant vitesse max
digitalWrite(8,HIGH);
digitalWrite(7,LOW);
//PWM au maximum
analogWrite(9,255);
delay(1000);
//en arriere lent
digitalWrite(8,LOW);
digitalWrite(7,HIGH);
//PWM au minimum. <60 le moteur ne tourne plus
analogWrite(9,60);
delay(1000);
}