Het gebruik van de 28BYJ-48 stappenmotor met een ULN2003-driver en Arduino
In deze tutorial leren we hoe we een 28BYJ-48 stappenmotor kunnen aansturen met een ULN2003-driver en een Arduino. Deze opstelling maakt nauwkeurige controle van de positie en snelheid van de motor mogelijk. Aan het einde van dit project ben je in staat om de motor in beide richtingen te draaien en zijn stappen effectief te controleren.
We zullen de 28BYJ-48 stappenmotor gebruiken, die een populaire keuze is voor verschillende robotica- en automatiseringsprojecten vanwege de lage kosten en het gebruiksgemak. De ULN2003 driverboard verbindt de stappenmotor met de Arduino, waardoor we stap-signalen kunnen verzenden die de beweging van de motor regelen. Deze tutorial begeleidt je door de benodigde bedrading en code om je motor te laten draaien.
Voor verdere verduidelijking, verwijzen we naar de video die aan deze tutorial is gekoppeld (in de video op 0:45).
Hardware Uitleg
De belangrijkste componenten van dit project zijn de 28BYJ-48 stappenmotor en de ULN2003 stuurkaart. De stappenmotor bestaat uit verschillende spoelen die in een specifieke volgorde van stroom kunnen worden voorzien om rotatie te creëren. De ULN2003-stuurkaart fungeert als een schakelaar, waardoor de Arduino de stroom kan regelen die aan elke spoel wordt geleverd.
De ULN2003-driver gebruikt een Darlington-transistorarray om de hogere stroom te verwerken die door de stappenmotor vereist is. Wanneer een pin van de Arduino een HIGH-signaal uitzendt, laat dit stroom toe naar de overeenkomstige spoel in de motor, waardoor deze beweegt. Dit maakt nauwkeurige controle over de rotatiehoek en snelheid van de motor mogelijk.
Datasheet Gegevens
| Fabrikant | ULN2003 |
|---|---|
| Onderdeelnummer | ULN2003 |
| Logica/IO spanning | 5 V |
| Voedingsspanning | 5-30 V (max) |
| Uitgangsstroom (per kanaal) | 500 mA max |
| Piekstroom (per kanaal) | 2 A max |
| PWM frequentie richtlijnen | N/A |
| Ingangslogische drempels | 0,8 V (laag), 2,4 V (hoog) |
| Spanningsval / RDS(on)/ verzadiging | 1,5 V max |
| Thermische limieten | 70 °C max |
| Pakket | DIP-16 |
| Notities / varianten | Veel gebruikt met 5V stappenmotoren. |
- Zorg ervoor dat de driver kan voldoen aan de huidige vereisten van uw motor.
- Gebruik indien nodig koellichamen om thermische limieten te beheersen.
- Controleer of alle verbindingen veilig zijn om zwevende ingangen te voorkomen.
- Test de motor door eenvoudige stapsequenties uit te voeren voordat je deze in grotere projecten integreert.
- Zorg ervoor dat de motor van voldoende voedingsspanning wordt voorzien.
Bedradinginstructies


Om de 28BYJ-48 stappenmotor aan te sluiten op de ULN2003-driver en Arduino, volg je deze stappen:
Verbind eerst de motor met de ULN2003-driver. De motor heeft vier draden, meestal kleurgecodeerd als oranje, geel, roze en blauw. Verbind deze draden met de overeenkomstige uitgangspinnen op de ULN2003-driver. De verbindingen zijn als volgt:
Orangedraad naarOUT1Yellowdraad naarOUT2Pinkdraad naarOUT3Bluedraad naarOUT4
Verbind vervolgens de ULN2003-driver met de Arduino. De ingangs-pinnen op de driver komen overeen met vier digitale pinnen op de Arduino. Bijvoorbeeld:
IN1naarPin 10IN2naarPin 11IN3naarPin 12IN4naarPin 13
Verbind ten slotte de voedings- en aardepinnen van de ULN2003-driver met de Arduino. Verbind deVCCpin naar de 5V-uitgang van de Arduino en deGNDpin naar de aarde van de Arduino. Zorg ervoor dat alle verbindingen veilig zijn voordat je het systeem inschakelt.
Codevoorbeelden en Stappenplan
In de setup-sectie van de Arduino-code definiëren we de pinnen die zijn aangesloten op de ULN2003-driver:
int Pin1 = 10;
int Pin2 = 11;
int Pin3 = 12;
int Pin4 = 13;
Hier verklaren we vier gehele getalvariabelen:Pin1,Pin2,Pin3, enPin4, die overeenkomen met de digitale pinnen op de Arduino. Deze pinnen zullen de beweging van de stappenmotor aansturen.
In desetup()functie, we configureren deze pinnen als uitgangen:
void setup() {
pinMode(Pin1, OUTPUT);
pinMode(Pin2, OUTPUT);
pinMode(Pin3, OUTPUT);
pinMode(Pin4, OUTPUT);
}
Deze opstelling zorgt ervoor dat de Arduino signalen naar de ULN2003-driver kan sturen om de motor te bedienen. DepinModefunctie stelt elke pin in op OUTPUT-modus, waardoor ze signalen kunnen verzenden.
Ten slotte creëren we in de hoofdloop een switch-case om de stappen van de motor te regelen op basis van de variabele._step:
switch(_step){
case 0:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, HIGH);
break;
// Additional cases follow
}
In dit fragment gebruiken wedigitalWriteom hoge of lage signalen naar elke pin te sturen op basis van de stroom_step. Dit regelt welke spoelen worden van stroom voorzien, waardoor de motor kan draaien. De volledige code die deze fragmenten integreert, zal onder het artikel worden geladen.
Demonstratie / Wat te Verwachten
Zodra alles correct is aangesloten en de code is geüpload, zou de stappenmotor moeten draaien als reactie op de signalen van de Arduino. Je kunt de motor testen door de vertraging in de lus te wijzigen of het aantal stappen te veranderen om te zien hoe hij reageert. Wees je ervan bewust dat als de motor niet correct van stroom wordt voorzien, hij mogelijk niet beweegt of onvoorspelbaar kan reageren.
Hoofdstukken
- Inleiding - 0:00
- Hardware Uitleg - 1:30
- Bedradinginstructies - 3:15
- Codevoorbeelden en Stappenplan - 5:00
- Demonstratie / Wat te Verwachten - 7:45
// 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);
}
Dingen die je misschien nodig hebt
-
Amazon
-
Amazon
-
AliExpressPurchase 5 pcs 28BYJ-48 stepper motors from AliExpresss.click.aliexpress.com
-
AliExpress
Hulpmiddelen en referenties
-
Extern
-
Extern
-
Extern
-
Extern
-
Extern
Bestanden📁
Geen bestanden beschikbaar.