Search Code

Gebruik die 28BYJ-48 Stappermotor met 'n ULN2003 Bestuurder en Arduino

Gebruik die 28BYJ-48 Stappermotor met 'n ULN2003 Bestuurder en Arduino

In hierdie tutorial sal ons leer hoe om 'n 28BYJ-48 stapmotor te beheer met 'n ULN2003-ryer saam met 'n Arduino. Hierdie opstelling maak dit moontlik om die motor se posisie en spoed presies te beheer. Teen die einde van hierdie projek sal jy in staat wees om die motor in beide rigtings te draai en sy stappe effektief te beheer.

Ons sal die 28BYJ-48 stapmotor gebruik, wat 'n gewilde keuse is vir verskeie robotika- en outomatiseringsprojekte weens sy lae koste en gebruiksgemak. Die ULN2003 dryfplaat koppel die stapmotor met die Arduino, wat ons in staat stel om stap seine te stuur wat die motor se beweging beheer. Hierdie tutoriaal sal jou lei deur die nodige bedrading en kode om jou motor te laat draai.

Vir verdere verduideliking, verwys asseblief na die video wat met hierdie tutoriaal geassosieer is (in video by 0:45).

Hardeware verduidelik

Die sleutelkomponente van hierdie projek sluit die 28BYJ-48 stapmotor en die ULN2003 dryfplaat in. Die stapmotor bestaan uit verskeie spoele wat in 'n spesifieke volgorde geaktiveer kan word om rotasie te skep. Die ULN2003 dryf fungeer as 'n skakelaar, wat die Arduino toelaat om die krag wat aan elke spoel gelewer word, te beheer.

Die ULN2003-stuurder gebruik 'n Darlington-transistorreeks om die hoër stroom wat deur die stapmotor vereis word, te hanteer. Wanneer 'n pen van die Arduino 'n HOOG sein uitset, laat dit stroom toe om na die ooreenstemmende spoel in die motor te vloei, wat dit laat beweeg. Dit stel presiese beheer oor die rotasiewinkel en spoed van die motor in.

Datasheet Besonderhede

FabrikantULN2003
Onderdeel nommerULN2003
Logika/IO spanning5 V
Voorsienings spanning5-30 V (maks)
Uitsetstroom (per kanaal)500 mA maksimum
Piekstroom (per kanaal)2 A maks
PWM frekwensie riglyneN/A
Invoerlingsdrempels0.8 V (laag), 2.4 V (hoog)
Spanningstoename / RDS(on)/ versadiging1.5 V maks
Termiese grense70 °C maks
PakketDIP-16
Notas / varianteGereeld gebruik met 5V stapmotors.

  • Verseker dat die bestuurder die huidige vereistes van jou motor kan hanteer.
  • Gebruik hitte-afvoer indien nodig om termiese perke te bestuur.
  • Kontroleer dat al die verbindings veilig is om te voorkom dat daar drijvende insette is.
  • Toets die motor deur eenvoudige stapvolgorde te loop voordat dit in groter projekte geïntegreer word.
  • Maak seker dat die motor met 'n voldoende toevoer spanning van krag voorsien word.

Draadinstruksies

stepper_28BYJ-48_wiring_battery
stepper_28BYJ-48_wiring

Om die 28BYJ-48 stapmotor aan die ULN2003-stuurder en Arduino te koppel, volg hierdie stappe:

Eerst, koppel die motor aan die ULN2003-stuurprogram. Die motor het vier drade, tipies kleurgecodeer as oranje, geel, pienk en blou. Koppel hierdie drade aan die ooreenstemmende uitsetpinte op die ULN2003-stuurprogram. Die verbindings is soos volg:

  • Orangedraad naOUT1
  • Yellowdraad naOUT2
  • Pinkdraad naOUT3
  • Bluedraad naOUT4

Verbind dan die ULN2003-stuurder met die Arduino. Die invoerpenne op die stuurder stem ooreen met vier digitale penne op die Arduino. Byvoorbeeld:

  • IN1naPin 10
  • IN2naPin 11
  • IN3naPin 12
  • IN4naPin 13

Laastens, verbind die krag- en grondpinte van die ULN2003-stuurder aan die Arduino. Verbind dieVCCpen na die Arduino se 5V-uitgang en dieGNDPyn na die Arduino se grond. Verseker dat al die verbindings veilig is voordat die stelsel aangeskakel word.

Kode Voorbeelde & Staproete

In die opstelling afdeling van die Arduino-kode, definieer ons die penne wat aan die ULN2003-stuurder gekoppel is:

int Pin1 = 10; 
int Pin2 = 11; 
int Pin3 = 12; 
int Pin4 = 13; 

Hier verklaar ons vier heelgetal veranderlikes:Pin1,Pin2,Pin3, andPin4, wat ooreenstem met die digitale penne op die Arduino. Hierdie penne sal die stapmotor se beweging beheer.

In diesetup()funksie, ons konfigureer hierdie penne as uitsette:

void setup() { 
 pinMode(Pin1, OUTPUT);  
 pinMode(Pin2, OUTPUT);  
 pinMode(Pin3, OUTPUT);  
 pinMode(Pin4, OUTPUT);  
} 

Hierdie opstelling verseker dat die Arduino seine na die ULN2003-ryer kan stuur om die motor te beheer. DiepinModefunksie stel elke pen op UITVOER-modus, wat dit moontlik maak om seine te stuur.

Laastens, in die hooflus, skep ons 'n skakelgeval om die motor se stappe te beheer op grond van die veranderlike._step:

switch(_step){ 
   case 0: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, HIGH); 
   break;  
   // Additional cases follow
}

In hierdie uittreksel gebruik onsdigitalWriteom hoë of lae seine na elke pen te stuur gebaseer op die huidige_step. Dit beheer watter spoele geaktiveer word, wat die motor toelaat om te draai. Die volledige kode wat hierdie snippers integreer, sal onder die artikel gelaai word.

Demonstraasie / Wat om te verwag

Sodra alles korrek gekabel is en die kode opgelaai is, behoort die stapmotor te draai in reaksie op die seine van die Arduino. Jy kan die motor toets deur die vertraging in die lus te verander of die stappe te verander om te sien hoe dit reageer. Wees bewus daarvan dat as die motor nie korrek van krag voorsien word nie, dit dalk nie sal beweeg of onvoorspelbaar kan optree.

Hoofstukke

  • Inleiding - 0:00
  • Hardeware verduidelik - 1:30
  • Draadinstruksies - 3:15
  • Kode Voorbeelde & Stapsgewys - 5:00
  • Demonstraasie / Wat om te verwag - 7:45

Beelde

stepper_28BYJ-48_wiring_battery
stepper_28BYJ-48_wiring_battery
stepper_28BYJ-48_poles
stepper_28BYJ-48_poles
stepper_28BYJ-48_waveform_actual
stepper_28BYJ-48_waveform_actual
stepper_28BYJ-48_waveform_inverted
stepper_28BYJ-48_waveform_inverted
stepper_28BYJ-48_wiring
stepper_28BYJ-48_wiring
6-The source code for stepper motor 28BYJ-48 with ULN2003 for Arduino
Taal: C++
// Original source is http://www.geeetech.com/wiki/index.php/Stepper_Motor_5V_4-Phase_5-Wire_%26_ULN2003_Driver_Board_for_Arduino
// Update by Ahmad Shamshiri for RoboJax.com
// Published on March 27, 2017 in Ajax, ON, Canada.
/*
 * 
  Need wiring diagram from this code:  https://youtu.be/0glBk917HPg
  Purchase My Arduino course on Udemy.com http://robojax.com/L/?id=62
 * 

 * Get this code and other Arduino codes from RoboJax.com
Learn Arduino step by step in a structured course with all material, wiring diagrams, and libraries
all in one place. Purchase My course on Udemy.com http://robojax.com/L/?id=62

If you found this tutorial helpful, please support me so I can continue creating 
content like this. 

or make a donation using PayPal http://robojax.com/L/?id=64

 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been downloaded from RoboJax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */


int Pin1 = 10; 
int Pin2 = 11; 
int Pin3 = 12; 
int Pin4 = 13; 
int _step = 0; 
boolean dir = true;// false=clockwise, true=counter clockwise
int count=0;
void setup() 
{ 
 pinMode(Pin1, OUTPUT);  
 pinMode(Pin2, OUTPUT);  
 pinMode(Pin3, OUTPUT);  
 pinMode(Pin4, OUTPUT);  
} 
 void loop() 
{ 
 switch(_step){ 
   case 0: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, HIGH); 
   break;  
   case 1: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, HIGH); 
     digitalWrite(Pin4, HIGH); 
   break;  
   case 2: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, HIGH); 
     digitalWrite(Pin4, LOW); 
   break;  
   case 3: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, HIGH); 
     digitalWrite(Pin3, HIGH); 
     digitalWrite(Pin4, LOW); 
   break;  
   case 4: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, HIGH); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, LOW); 
   break;  
   case 5: 
     digitalWrite(Pin1, HIGH);  
     digitalWrite(Pin2, HIGH); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, LOW); 
   break;  
     case 6: 
     digitalWrite(Pin1, HIGH);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, LOW); 
   break;  
   case 7: 
     digitalWrite(Pin1, HIGH);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, HIGH); 
   break;  
   default: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, LOW); 
   break;  
 } 
 if(dir){ 
   _step++; 
 }else{ 
   _step--; 
 } 
 if(_step>7){ 
   _step=0; 
 } 
 if(_step<0){ 
   _step=7; 
 } 
 delay(1); 

}

Lêers📁

Geen lêers beskikbaar.