Arduino et les moteurs avec le module L293D
Autre module qui sert à piloter des moteurs, le L293D (D car il y a des diodes à l'intérieur).
il peut piloter 2 moteurs à courant continu.
Les tutoriaux ne manquent pas sur le web mais ici on va voir comment le piloter depuis VB.net.
Comment ça se branche ?
Pour tester ce module avec VB.net j'ai fait le montage simple ci-dessous :
Ci-dessous le programme à injecter dans l'Arduino :
Pour rappel la fonction parseInt prend une chaine avec un délimiteur, exemple une virgule, et la divise en plusieurs "morceaux".
Par exemple si la chaine qui arrive est 200,1,0 alors parseInt la divise en trois, quand on fait :
byte a=Serial.parseInt();
byte m=Serial.parseInt();
byte n=Serial.parseInt();
on place 200 dans la variable a, 1 dans la variable m, 0 dans la variable n.
la chaine aurait pu être 200;1;0 ou 200/1/0 le résultat serait le même.
Ici le 200 sera la valeur PWM c'est à dire la vitesse du moteur (de 0 à 255).
Le 1 pour HIGH et le 0 pour LOW ce qui détermine la direction de rotation du moteur.
int enA = 9;
int in1 = 2;
int in2 = 4;
void setup()
{
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
Serial.begin(57600);
}
void loop()
{
if (Serial.available() > 0) {
byte a = Serial.parseInt();
byte m = Serial.parseInt();
byte n = Serial.parseInt();
analogWrite(enA, a);
digitalWrite(in1, m);
digitalWrite(in2, n);
}
}
Pour la partie VB.net, il faut :
- une Form
- un SerialPort (vitesse 57600, port COM de la carte Arduino)
- un Timer (Timer1)
- une TrackBar nommé EnA, avec un minimum de 1, maximum de 250.
- deux CheckBox nommées in1, in2.
Puis le programme ci-dessous :
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SerialPort1.Close()
Try
SerialPort1.Open()
Catch ex As Exception
MsgBox(ex.Message)
End Try
Timer1.Start()
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
SerialPort1.WriteLine(EnA.Value & "," & In1.CheckState & "," & In2.CheckState)
End Sub
End Class
Construction de l'appli VB en vidéo :
Pour 2 moteurs :
int enA = 9;
int in1 = 2;
int in2 = 4;
int enB = 5;
int in3 = 7;
int in4 = 8;
void setup()
{
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
Serial.begin(57600);
}
void loop()
{
if (Serial.available() > 0) {
byte a = Serial.parseInt();
byte m = Serial.parseInt();
byte n = Serial.parseInt();
byte b = Serial.parseInt();
byte o = Serial.parseInt();
byte p = Serial.parseInt();
analogWrite(enA, a);
digitalWrite(in1, m);
digitalWrite(in2, n);
analogWrite(enB, b);
digitalWrite(in3, o);
digitalWrite(in4, p);
}
}
Programme VB.net :
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
InitArduino()
Timer1.Start()
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
SerialPort1.WriteLine(EnA.Value & "," & In1.CheckState & "," & In2.CheckState & "," & EnB.Value & "," & In3.CheckState & "," & In4.CheckState)
End Sub
Private Sub InitArduino()
SerialPort1.Close()
Try
SerialPort1.Open()
Catch ex As Exception
MsgBox("La carte Arduino n'est peut-être pas branchée, ou le port COM n'est pas le bon." & vbCrLf & "Port déclaré actuellement : " & SerialPort1.PortName, MsgBoxStyle.Exclamation, "Problème")
End
End Try
End Sub
End Class