Kokamba motɛ́ ya DC na kosalela L293D motɛ́ driver na Arduino PWM
Kokela moto to linga misala ya automatique ezwaka mingi na likambo moko ya libela: kokamba moteur DC na précision. Esengeli ozala na makoki ya kofungola mpe kokanga yango kaka te, kasi mpe kokamba vitesse na yango mpe direction na yango. Mpo na yango nde L293D motor driver ezali kongenga. Mokanda oyo ekotambolisa yo na kotonga contrôleur ya moteur ya makasi na kopesa Arduino mpe puce L293D oyo eyebani mingi. Na suka, okokoka kotinda moteur na vitesse nyonso, na direction nyonso, na mikapo ya code moke.
Projet oyo ezali moboko ya ntina mpo na misala ebele. Tala makanisi moke ya kolendisa yo:
- Kotonga robot ya bapnei mibale: Sala na ba circuits mibale ya lolenge oyo mpo na kotambolisa chassis ya robot, kokamba pnei moko na moko na précision mpo na mouvement mpe tournure ya malamu.
- Kosala système ya komelisa banyama ya bilanga automatiquement: Kokamba pompe ya mai moke mpo na kopesa mai ya ndenge esengeli na banyama na yo kolandana na ba lectures ya capteur ya humidité ya mabele.
- Kosala ventilateur ya mayele: Bongola commutateur ya maboko na ventilateur ya bureau na système oyo ekobongola vitesse automatiquement kolandana na température to na commande ya mosika.
- Kosala support ya caméra oyo etambolaka na moteur: Tambolisa caméra na nzela ya track na vitesse ya malembe mpe ya kozala séquentiel mpo na ba vidéos time-lapse ya malamu.
- Kotonga système ya kolanda mwese ya moyi: Sala na moteur moko mpo na kopivola panneau solaire malembe mpo na kolanda mwese ya moyi na likolo, mpo na kokitisa mingi koleka.
Ba Composants ya Hardware
Liboso ya kobanda, zwa ba composants oyo. L293D nde ezali moto ya lisano, ezali lokola pont kati na ba signaux ya contrôle ya faible puissance ya Arduino na ba besoins ya puissance ya makasi ya moteur.
- Arduino Board (Uno, Nano, etc.)
- L293D Motor Driver IC (to module oyo etongami na yango)
- Moteur DC (oyo ezali kosala kati na 4.5V na 36V)
- Source ya puissance ya libanda (ex., batterie ya 9V to bench power supply)
- Ba Jumper Wires
- Breadboard (oyo ezali malamu, kasi esalisaka mpo na prototypage)
Koyeba L293D Motor Driver
L293D ezali quadruple half-H driver, elingi koloba ete ezali na ba circuits minei ya demi-pont oyo ezali indépendant. Configuration oyo epesaka yango makoki ya kokamba direction ya moteur na kobalola polarité ya tension oyo epesami na ba terminaux na yango. Ekoki kokamba ba moteurs DC mibale na contrôle ya direction mpe vitesse ya kokoka, to ba moteurs minei soki esengeli kaka kofungola mpe kokanga yango.
Moko ya ba caractéristiques ya ntina mingi ya L293D ezali ba diodes ya flyback oyo etongami na kati. Ba moteurs ezali ba charges inductives, elingi koloba ete bazali kopekisa mbongwana ya courant. Soki okati puissance na moteur na mbala moko, ebotaka pointe ya tension ya likolo oyo ekoki kosala Arduino na yo mabe. "D" na L293D elakisi ete ba diodes ya protection oyo esili kotongama na kati ya puce, mpo na kobikisa yo na kobakisa yango na libanda. Oyo ezali différence ya ntina mingi na L293 ya kala, oyo esengaka ba diodes ya libanda mpo na fonctionnement ya libateli.
Détail mosusu ya ntina ezali ba limites ya courant ya puce. L293D ekoki kosimba courant ya kosala ya kino 600 mA na canal moko. Soki moteur na yo ezali kozwa mingi koleka oyo, puce ekokóma na température ya makasi mpe ekoki kobebama na libela. Mpo na ba moteurs oyo basengaka courant mingi, okosengela driver ya makasi koleka lokola L298N to motor shield oyo ebongisami mpo na yango.
Guide ya Câblage
Câblage ya projet oyo ezali pete. Tokosalela moteur moko, oyo esengaka H-bridge moko ya mobimba (ba demi-ponts mibale) longwa na L293D. Vidéo emonisi câblage yango polele, mpe diagramme emonami na nse.
Tala ndenge ba connexions ezali:
- Ba Connexions ya Puissance: Kanga pin 16 (VCC1) na pin ya 5V ya Arduino. Oyo epesaka puissance na logique ya kati ya puce. Kanga pin 8 (VCC2) na source ya puissance ya moteur ya libanda (ex., 9V). Oyo epesaka puissance na moteur moko moko. Kanga ba pins 4, 5, 12, mpe 13 na terre commune ya Arduino na yo mpe ya source ya puissance ya libanda.
- Ba Connexions ya Moteur: Kanga ba terminaux mibale ya moteur DC na yo na ba pins 3 mpe 6 ya L293D. Polarité ezali na tina te na ntango oyo, pamba te kobalola direction na code ekobalola kaka spin ya moteur.
- Ba Connexions ya Contrôle: Kanga pin 1 (1,2EN) na pin 9 ya Arduino. Oyo ezali pin ya "enable", oyo ezali lokola commutateur ya libandela mpo na moteur. Kanga pin 2 (1A) na pin 10 ya Arduino, mpe pin 7 (2A) na pin 11 ya Arduino. Ba pins oyo nde ezali kokamba direction mpe vitesse ya moteur.
Explication ya Code
Code oyo epesami ezali ya kosala malamu mpe ya kobongola pete. Ntina ya kosala projet oyo na ndenge na yo ezali na ba variables moke mpe ba fonctions oyo ezali na likolo ya sketch. (na vidéo na 07:05)
// Boti ya moteur DC
#define P1A 10 // tia moto pin 10 lokola P1A
#define P2A 11 // tia moto pin 11 lokola P2A
#define EN12 9 // tia moto pin 9 lokola 1,2EN enable
const int speedStep =15;
const int speedDelay = 1000;// kozelisa kati na bokoli ya vitesse
#define P1A, P2A, EN12: Basi oyo balobeli nini ba pin ya Arduino ezali kokangama na ba pin ya L293D. Soki obetelaki ba pin mosusu na ba câble na yo, okobongola ba nombres awa. Na ndakisa, soki okangaki EN12 na pin 6, okobongola#define EN12 9na#define EN12 6.const int speedStep = 15;: Variable oyo ekomaka kokamba bokoli oyo vitesse ya moteur ekobongwana na boucle ya liboso ya démonstration. Valeur moke (ndakisa, 5) ekosalisa moteur ekota na vitesse na ndenge ya pete, kasi valeur monene (ndakisa, 50) ekosalisa ekomata na vitesse na ndenge ya makasi.const int speedDelay = 1000;: Oyo etie kozelisa na millisecondes kati na etape nyonso ya vitesse. Esangisami naspeedStep, oyo ekolakisa ndenge nini moteur ekota na vitesse longwa na zéro tii na vitesse ya mobimba. Valeur ya 1000 elimboli ete ezali na kozelisa ya seconde moko kati na mbongwana nyonso ya vitesse.
Motema ya projet ezali fonction ya L293D() oyo esalemi na ndenge ya personalisé. Fonction oyo ekokitisa logique ya contrôle, epesi yo nzela ya kotia direction ya moteur, vitesse, mpe état ya on/off na ligne moko ya code. Tala ndenge ya kosalela yango:
L293D('L', 255, 1); // Zongola contre-sens horaire na vitesse ya mobimba
L293D('R', 127, 1); // Zongola sens horaire na ndenge ya katikati ya vitesse
L293D('L', 0, 0); // Simba moteur
- Argument ya liboso (Direction): Lettre moko,
'L'to'R', oyo etie direction ya moteur. - Argument ya mibale (Vitesse): Nombre entier longwa na 0 tii na 255 oyo etie vitesse ya moteur na kosalela PWM. 0 elimboli ete moteur esili, mpe 255 ezali vitesse ya mobimba.
- Argument ya misato (Enable): Nombre entier,
1mpo na kopelisa moteur to0mpo na kosimba yango.
Démonstration ya Projet na Bomoi
Na vidéo, okoki komona projet ezali kosala. Moteur ebandi longwa na esika moko mpe ekota na vitesse na ndenge ya pete-pete na ba étapes, kolakisa contrôle ya PWM. Serial Monitor elakisi état ya sika mpe vitesse. Okomona mpe forme ya onde na oscilloscope, oyo elakisi na ndenge ya komonana cycle ya devoir ya signal PWM ezali kokola ntango moteur ezali kokota na vitesse. Oyo ezali ndenge ya malamu mpo na kososola ndenge PWM esalaka—ezali kopelisa mpe kozimisa courant na nokinoki, mpe proportion ya ntango ya "on" (cycle ya devoir) etie voltage ya moyenne mpe na bongo vitesse ya moteur. (na vidéo na 11:07)
Ndakisa ya mibale ya code elakisi application ya mosala mingi. Ezali kopelisa moteur na vitesse ya mobimba na direction moko, kosimba yango, kopelisa na ndenge ya katikati ya vitesse, mpe na nsima kopelisa na vitesse moke na direction oyo ekeseni. Oyo elakisi ndenge okoki kosalela fonction L293D() mpo na kosala ba séquences ya mouvement ya mindondo mpo na ba projets na yo.
Bikapu
- [00:00] Introduction mpe Présentation ya Projet
- [00:30] Kososola L293D Motor Driver
- [01:16] Pinout mpe Spécifications ya L293D
- [04:40] Kokanga L293D na Arduino mpe Moteur
- [07:05] Explication ya Code mpe Personnalisation
- [11:07] Démonstration na Bomoi ya Contrôle ya Vitesse mpe Direction
- [12:30] Komona Formes ya Ondes PWM na Oscilloscope
/*
* This is the Arduino code to control the speed of a motor using an L293D DC motor driver.
Watch instructions for this video: https://youtu.be/akQoGNUzhHI
// Written for Robojax.com video
* Code is available at http://robojax.com/learn/arduino
*
// Written by Ahmad S. for Robojax.com on
// August 11, 2018 at 13:23 in Ajax, Ontario, Canada
// This code is AS IS without warranty. You may share it if you keep this note with the code.
*/
// DC motor control
#define P1A 10 // define pin 10 as P1A
#define P2A 11 // define pin 11 as P2A
#define EN12 9 // define pin 9 as the 1,2EN enable
const int speedStep =15;
const int speedDelay = 1000;// delay between speed increment
void setup() {
// L293 Motor Control Code by Robojax.com 20180811
Serial.begin(9600);// setup Serial Monitor to display information
pinMode(P1A, OUTPUT);// define pin as OUTPUT for P1A
pinMode(P2A, OUTPUT);// define pin as OUTPUT for P2A
pinMode(EN12, OUTPUT);// define pin as OUTPUT for 1,2EN
Serial.println("Robojax");
Serial.println("L293D Motor Speed Control");
// L293 Motor Control Code by Robojax.com 20180811
}
void loop() {
// L293D Motor Control Code by Robojax.com 20180811
for(int speed=0; speed<=255; speed +=speedStep)
{
L293D('L',speed, 0);//
delay(speedDelay);// delay between each step
}
delay(50);// 50 millisecond delay
// L293D Motor Control Code by Robojax.com 20180810
}//loop end
/*
* L293D(char dir,int spd, int en)
* dir is a character: 'L' for clockwise direction
* or 'R' for counter-clockwise direction
* en is an integer: 1 to rotate, 0 to stop
* spd is the speed value from 0 to 255
*/
void L293D(char dir,int spd, int en)
{
if(dir =='L')
{
if(en ==0){
Serial.println("CW Motor Stopped");
}else{
Serial.print("Rotating CW: ");
Serial.println(spd);//print actual speed value
}
digitalWrite(EN12 ,en);// Enable 1A and 2A
analogWrite(P1A,spd);// send PWM with spd value to P1A
digitalWrite(P2A,LOW);// LOW signal to P2A
}else{
if(en ==0){
Serial.println("CCW Motor Stopped");
}else{
Serial.print("Rotating CCW: ");
Serial.println(spd);//print actual speed value
}
digitalWrite(EN12 ,en);// Disable 1A and 2A
digitalWrite(P1A,LOW);// Keep this pin LOW
analogWrite(P2A,spd);// send PWM with spd value to P2A
}
}//L293D end
++
/*
* This is the Arduino code to control the speed of a motor using an L293D DC motor driver.
* This code will control the motor with different directions and speed.
Watch instructions for this video: https://youtu.be/akQoGNUzhHI
// Written for Robojax.com video
* Code is available at http://robojax.com/learn/arduino
*
// Written by Ahmad Shamshiri for Robojax.com on
// August 11, 2018 at 13:23 in Ajax, Ontario, Canada.
// This code is AS IS without warranty. You may share it if you keep this note with the code.
*/
// DC motor control
#define P1A 10 // define pin 10 as P1A
#define P2A 11 // define pin 11 as P2A
#define EN12 9 // define pin 9 as the 1,2EN enable
const int speedStep =15;
const int speedDelay = 1000;// delay between speed increment
void setup() {
// L293 Motor Control Code by Robojax.com 20180811
Serial.begin(9600);// setup Serial Monitor to display information
pinMode(P1A, OUTPUT);// define pin as OUTPUT for P1A
pinMode(P2A, OUTPUT);// define pin as OUTPUT for P2A
pinMode(EN12, OUTPUT);// define pin as OUTPUT for 1,2EN
Serial.println("Robojax");
Serial.println("L293D Motor Speed Control");
// L293 Motor Control Code by Robojax.com 20180811
}
void loop() {
// L293D Motor Control Code by Robojax.com 20180811
L293D('L',255, 1);// maximum speed to the LEFT
delay(3000);// wait for 3 seconds
L293D('L',255, 0);// stop motor
delay(2000);// wait for 2 seconds
L293D('L',127, 1);// half speed to the LEFT
delay(3000);// wait for 3 seconds
L293D('L',255, 0);// stop motor
delay(2000);// wait for 2 seconds
L293D('R',90, 1);// slow to the RIGHT
delay(3000);// wait for 3 seconds
L293D('L',255, 0);// stop motor
delay(2000);// wait for 2 seconds
// L293D Motor Control Code by Robojax.com 20180810
}//loop end
/*
* L293D(char dir,int spd, int en)
* dir is a character: 'L' for clockwise (CW) direction
* or 'R' for counter-clockwise (CCW) direction.
* en is an integer: 1 to rotate, 0 to stop.
* spd is the speed value from 0 to 255.
*/
void L293D(char dir,int spd, int en)
{
if(dir =='L')
{
if(en ==0){
Serial.println("CW Motor Stopped");
}else{
Serial.print("Rotating CW: ");
Serial.println(spd);//print actual speed value
}
digitalWrite(EN12 ,en);// Enable 1A and 2A
analogWrite(P1A,spd);// send PWM with spd value to P1A
digitalWrite(P2A,LOW);// LOW signal to P2A
}else{
if(en ==0){
Serial.println("CCW Motor Stopped");
}else{
Serial.print("Rotating CCW: ");
Serial.println(spd);//print actual speed value
}
digitalWrite(EN12 ,en);//enable 1A and 2A
digitalWrite(P1A,LOW);// Keep it LOW P1A
analogWrite(P2A,spd);// send PWM with spd value to P2A
}
}//L293D end
Nko o na nki.
-
AmazonPurchase L293D motor driver ICamzn.to
-
eBay
-
eBay
-
AliExpressPurchase an L293D chip from Amazon or AliExpresss.click.aliexpress.com
Mokili na bisika
-
L'extérieur
Fichiers📁
Fiche technique (pdf)
-
L293d_Quadruple_half_bridge_datasheet
l293d_Quadruple_half_bridge_datasheet.pdf0.34 MB -
L293d datasheet
L293d_datasheet.pdf0.34 MB