#14 28BYJ-48 stappenmotor met ULN2003 driver


In deze Nederlandstalige Arduino tutorial voor beginners leer ik je hoe je een 28BYJ-48 stappenmotor samen met een ULN2003 driver kunt gebruiken.

Meer informatie over stappenmotors: https://nl.wikipedia.org/wiki/Stappenmotor

#14 28BYJ-48 stappenmotor met ULN2003 driver schakelschema

Benodigdheden

  • 1× Arduino
  • 1× Breadboard
  • 2× Jumper wire (man-man)
  • 6× Jumper wire (man-vrouw)
  • 1× 28BYJ-48 stappenmotor
  • 1× ULN2003 motor driver
  • 1× Externe adapter (voltage tussen de 5V en 12V)
  • 1× Power plug
  • 1× Stukje karton

Leerdoelen

  • Begrijpen werking stappenmotor
  • Aansturen stappenmotor met ULN2003 motor driver
  • Gebruik maken van hulpfunctie

Bas van Dijk

Over Bas on Tech


Mijn naam is Bas van Dijk, ondernemer, software ontwikkelaar en maker. Onder de naam "Bas on Tech" bied ik op YouTube videolessen aan over technische onderwerpen zoals Arduino en 3D-printen.

De video’s zijn in het Nederlands met ondertiteling, zodat mensen met een gehoorbeperking ze ook kunnen volgen.

Jaren geleden toen ik mijn eerste Arduino kocht had ik maar één doel: zo snel mogelijk een LCD schermpje aansluiten en er een tekst op laten zien. Na allerlei bronnen te hebben geraadpleegd kwam ik er na veel puzzelen eindelijk uit. Ik was als een kind zo blij met die paar letters op een geel schermpje.

Met Bas on Tech wil ik mijn kennis delen zodat ook anderen deze blijheid kunnen ervaren. Ik heb gekozen voor kort en krachtige YouTube video’s, met een duidelijke vaste opbouw en één onderwerp per video. Daarnaast staan onder elke video links naar de broncode en webshops waar de onderdelen te koop zijn.

video Transcriptie


0:00:12.250 In deze les ga ik je uitleggen hoe je een stappenmotor kunt aansturen 
0:00:16.810 voor deze les heb je nodig: een breadboard en een Arduino
0:00:21.439 2 man-man jumper wires 
0:00:24.580 6 man-vrouw jumper-wires. Ik heb ze van vier en van twee. 
0:00:29.386 een stukje karton 
0:00:32.140 een driverboard voor je stappenmotor en de stappenmotor zelf
0:00:37.100 een externe voeding van tussen de 5 en de 12 volt 
0:00:44.350 En een plug waarmee je de adapter kunt gaan aansluiten op je jumper wires 
0:00:49.300 de adapter zelf heeft hier zo'n mannelijke aansluiting 
0:00:53.480 en deze plug heeft aan de achterkant een aansluiting waardoor ze op elkaar passen en hier 
0:00:59.780 kun je vervolgens jumper wires op aansluiten 
0:01:06.320 Elektromotoren zijn er in vele soorten en maten 
0:01:10.430 hier ligt een elektromotor uit een oude boormachine 
0:01:13.800 en daarnaast de stappenmotor die wij vandaag gaan gebruiken 
0:01:17.140 er is al één groot verschil te zien dat is dat de deze electromotor alleen maar een + en een - heeft 
0:01:22.920 zodat we er stroom opzetten gaat de motor draaien draaien we + en - om dan gaat hij de andere kant op
0:01:29.240 bij de stappenmotor hebben we veel meer controle over de positie van de motor 
0:01:35.980 dit wordt bijvoorbeeld gebruikt bij 3d printers,  of bij harde schijven
0:01:40.720 waarbij het van belang is te weten op welke positie de motor zich bevindt 
0:01:46.700 je ziet dat hier de as niet in het midden van de motor zit 
0:01:51.330 dat komt omdat hier binnen en tandwielenwerk is aangebracht van vier verschillende tandwielen 
0:01:58.250 op deze manier kunnen we zorgen dat de motor veel 
0:02:00.870 sterker wordt doordat de as aan een klein tandwiel zit, en deze aan de wat grotere 
0:02:06.690 dit heeft als voordeel dat je zware taken toch met een klein motorje kunt uitvoeren 
0:02:13.580 de verhouding staat in de specificatie 
0:02:16.430 en dat is in dit geval 1 op 64 
0:02:19.020 dus als de as 64x rond is gegaan van de motor dan is de uitgang maar 1x  rond gegaan 
0:02:32.020 Om onze elektromotor aan te sturen 
0:02:35.080 gaan gebruik maken van dit bordje, deze wordt ook wel een motor driver genoemd 
0:02:41.200 de motor driver bestaat uit vier uitgangen 
0:02:44.120 die gaan straks naar onze Arduino 
0:02:46.580 vijf ingangen, daar past het stekkertje  van onze motor op
0:02:50.500 vier ledjes, om te zien waar de motor zich bevindt 
0:02:54.680 een jumper, als we die eraf halen dan is het hele bord je uitgeschakeld 
0:03:01.000 twee pennetjes: de - en de + waar we zoals hier staat tussen de 5 en de 12-volt op kunnen aansluiten 
0:03:09.220 Hiervoor hebben wij de externe adapter in onze schakeling opgenomen 
0:03:13.790 dit driver bordje zorgt ervoor dat de Arduino niet zwaar belast wordt 
0:03:19.190 motortjes kunnen best wel wat stroom trekken en dat willen we niet door ons Arduino bord laten gaan. 
0:03:24.340 omdat het hierdoor beschadigd kan raken 
0:03:26.580 daarom sluiten we hier een externe voeding aan, zodat de motor alleen maar de stroom van deze voeding pakt 
0:03:33.080 en alleen maar de data uitwisselt met de Arduino, en er niet ook nog eens stroom doorheen trekt 
0:03:39.700 Dan zit hier nog een chip 
0:03:41.660 en die chip die zorgt er voor dat de motor 
0:03:45.500 aangestuurd wordt. In dit geval is het een ULN2003A 
0:03:50.690 en ik ga je laten zien hoe die van binnen werkt 
0:03:53.880 dit is de schematische weergave 
0:03:56.389 van onze schakeling op het driver boardje 
0:04:00.010 we hebben hier de Vin, dat is onze stroombron dus bij ons de externe adapter 
0:04:05.709 de motor 
0:04:07.069 en daarom heen zien we 4 schakelaars 
0:04:10.200 die worden uitgedrukt met een S van Switch in dit geval 
0:04:13.560 al die schakelaars staan open, er loopt dus geen stroom 
0:04:17.060 want ook al gaat die stroom weg hij kan niet door de schakelaars heen 
0:04:21.120 we willen echte de richting van de motor kunnen gaan bepalen 
0:04:25.580 daarom heb ik dit schema gemaakt. Dan kun je zien wat er gebeurt als we de motor de ene of de andere kant op wil laten draaien
0:04:33.900 dat kunnen dus door de chip aan te sturen 
0:04:36.910 want je ziet in dit geval: de stroom vertrekt gaat door schakelaar 1 die nu dicht is. Door de motor 
0:04:43.810 en weer terug naar de ground 
0:04:46.650 via s4 
0:04:49.199 De motor draait dus nu de ene kant op 
0:04:52.270 zetten we echter S1 en S4 open,  maar sluiten we S2 en S3
0:04:57.760 dan zie je dus dat de + via de andere kant door de motor gaat en naar de ground 
0:05:05.280 een ander voordeel van de chip is, dat hij de stroom maar één kant doorlaat dus alleen naar de motor toe 
0:05:12.520 omdat de motor ook een 
0:05:15.500 stroomt terug zou kunnen geven is onze Arduino daarvoor beschermd 
0:05:19.540 en kan nu geen stroom van de motor terug naar de Arduino, waardoor die beschadigd zou kunnen raken 
0:05:30.920 Om te beginnen heb ik de motor op het driver board aangesloten 
0:05:36.520 en heb ik de vrouw man aangesloten op de IN1, 2, 3, en 4 van de driver 
0:05:45.440 Ga ik nu de externe adapter aansluiten 
0:05:49.280 Ik heb alvast een jumper wire in de - aangesloten  dat is de zwarte draad
0:05:56.000 dan ga ik de gele draad op de +  aansluiten 
0:06:07.260 En de groene draad, houden we nog even apart 
0:06:13.180 daar hebben het breadboard voor nodig eerst ga ik deze aansluiten op de motor driver
0:06:20.960 Dus dan doe ik geel op de + 
0:06:24.949 en groen op de Ground 
0:06:29.849 Die er nog even bij 
0:06:32.490 Het is al behoorlijk krap op die printplaatjes dus het kan zijn dat je een beetje moet pielen aan de pennetjes 
0:06:39.210 pennetjes om het er allemaal op te krijgen 
0:06:41.980 de heeft niet echt zin op het moment 
0:06:57.020 Zo 
0:06:59.310 Dan hebben we hier de Ground van onze adapter die doe ik in de - van het breadboard
0:07:08.240 samen met de - van ons motor drivertje 
0:07:14.960 dan is dit zo compleet 
0:07:17.210 dan ga ik deze - zo te verbinden met de Arduino 
0:07:21.740 met de ground, en je ziet deze zijn allemaal doorverbonden op het breadboard 
0:07:25.700 dus alles staat met elkaar in verbinding 
0:07:28.880 Ga ik eerst deze pennen van motor driver 
0:07:32.600 Op pin 8, 9, en 10 van de Arduino aansluiten 
0:07:41.520 Ga ik deze nog even terug zetten 
0:07:47.400 Bij mij blijven ze niet zo heel goed zitten allemaal 
0:07:51.000 ik hoop dat het bij jullie beter gaat 
0:07:53.460 het lastig is ook dat het 4 losse stekkers zijn die allemaal tegelijk 
0:07:58.580 of alle pennetjes contact moeten maken 
0:08:02.420 en het behoorlijk strak tegen elkaar aan staat 
0:08:06.920 deze laatste, die zet ik op de ground 
0:08:11.660 En dan heb ik nog een stukje karton, daar heb ik een pijltje uit geknipt
0:08:16.400 dat is makkelijk om te zien of de motor draait en waar die naartoe wijst 
0:08:20.700 dan is onze schakeling voor nu klaar 
0:08:24.500 ga ik je nu de code laten zien 
0:08:30.319 Dan ga ik beginnen met het uitleggen van de code van onze stappenmotor 
0:08:34.190 de originele code heb ik van Mike McCouly Dat is degene die de accel stepper bibliotheek heeft gemaakt 
0:08:42.210 en deze hebben nog niet geïnstalleerd dus die ga ik nu installeren 
0:08:46.000 ik ga ik nu naar schets, bibliotheek gebruiken en bibliotheek beheren 
0:08:50.279 en dan ga ik op zoek naar de AccelStepper bibliotheek 
0:08:55.950 En dan zie je hier de AccelStepper van Mike McCouly die ook de code hebt gemaakt. Die installeren we 
0:09:02.270 en dan hebben we nu toegang tot de bibliotheek om de motor te gebruiken 
0:09:06.839 ons motor driver shield heeft vier pennetjes 
0:09:11.180 en die pinnetjes heb ik op 8 9 10 en 11 aangesloten staat ook hier achter beschreven 
0:09:17.360 dan hebben we twee variabelen 
0:09:20.120 we hebben steps per revolution 
0:09:22.300 dat is het aantal stappen per omwenteling van de motor en het aantal graden dat een omwenteling duurt 
0:09:28.480 dat is 5,625 
0:09:31.060 dit gebruiken we om straks terug te rekenen hoeveel stappen 1 graad is 
0:09:35.340 je ziet hier #define bij onze motor pins 
0:09:38.513 en hier zie je "int" 
0:09:40.560 we weten dat int een variabel is dus die steps per revolution kunnen we later nog wijzigen 
0:09:46.100 dat #define is geen variable maar een constante 
0:09:50.180 we zeggen dat motor pin 1 op 8 staat en dan gaan we geen wijzigingen meer in aanbrengen 
0:09:55.880 je kunt dus van te voren bepalen of je #define gebruikt voor iets wat vast staat of 
0:10:00.529 int of float of wat je wil voor een variabele 
0:10:04.700 dan gaan we de AccelStepper bibliotheek initialiseren 
0:10:08.600 dat doe ik met AccelStepper::HALF4WIRE 
0:10:11.730 onze motor is een zogenaamde half stepper en daarom gebruiken we hier HALF4WIRE 
0:10:18.390 je hebt ook nog andere types zoals full wire, three wire hangt er net van af welke motor je gebruikt 
0:10:26.240 en de auteur van de AccelStepper had een notitie gemaakt dat je de pen volgorde moet aanpassen als je met de 
0:10:33.420 28BYJ-48 motor werkt, dat is degene die wij gebruiken dan moet je in 1 in 3 
0:10:40.610 en 2 en in 4 gebruiken dus niet 1, 2, 3 en 4r wat je logisch zou vinden 
0:10:45.620 vandaar dat hier ook zat motor pin 1, 3, 2 en 4 
0:10:51.040 Dan gaan we verder met het initialiseren van de seriële monitor 
0:10:55.460 dat is ons wel bekend en dan gaan we drie verschillende 
0:10:58.740 waarden meegeven aan de stappenmotor bibliotheek 
0:11:01.426 we zetten een maximale snelheid 
0:11:03.839 die zetten we op 1000 en acceleratie die zorgt ervoor dat het motortje langzaam op start en langzaam afremt 
0:11:12.060 je dit op 0 zet dan gaat de motor gewoon altijd op volle snelheid 
0:11:16.800 we stellen de snelheid in op 200, dus hij kan nog harder, want want we hebben gezegd dat de maximale snelheid duizend is 
0:11:23.310 dan heb ik een functie gemaakt 
0:11:25.760 degToSteps dus de degrees (graden) naar stappen omrekenen 
0:11:31.260 en dat getal geven we mee aan de moveto functie die stappenmotor laat bewegen 
0:11:36.600 die functie degToStep is eigenlijk een simpele functie 
0:11:40.520 je neemt het aantal stappen per omwenteling en dat deel je door 
0:11:44.220 het aantal graden per omwenteling 
0:11:46.360 zo weten dus hoeveel stappen er in een graad zitten en dat doen we weer keer het aantal graden 
0:11:50.820 wat we willen in ons geval hier 90 
0:11:53.600 dat wordt 64 gedeeld door 5.625 
0:11:58.160 dat geeft 1024 stappen 
0:12:01.520 Dan gaan we de loop in en dan zeggen we dat de stepper zijn commando's mag gaan uitvoeren 
0:12:06.480 dus hier zeggen we moveTo 
0:12:08.720 en hier wordt het pas uitgevoerd 
0:12:10.880 ik heb deze expres in de setup gezet 
0:12:13.160 als je hem in de loop zou zetten zou je continu door blijven gaan en kun je niet goed zien 
0:12:17.190 of je daadwerkelijk die 90 graden heeft bewogen 
0:12:21.520 Dat ga ik nu de Arduino aansluiten en de code uploaden 
0:12:29.200 Ik heb de Arduino aangesloten maar nog geen stroom op de externe adapter gezet 
0:12:34.280 Dat ga ik nu doen 
0:12:37.380 Dan zie je dat een lampje gaat branden 
0:12:40.090 op het driver board maar er gebeurt verder nog niks 
0:12:43.100 dat komt omdat we in de setup() hebben gezegd dat de motor moet gaan draaien 
0:12:48.370 niet in de loop() dus die setup() is al klaar en toen stonden motor nog niet aan 
0:12:53.350 nu kan ik hier op reset drukken en start de Arduino opnieuw en dan wordt dus ook ons programma opnieuw gestart en de setup 
0:13:00.580 en je ziet dat de motor 
0:13:03.750 precies 45 graden draait. Je ziet hij langzaam begint en langzaam afremt 
0:13:11.670 langzaam opstarten 
0:13:14.140 dan draait hij 
0:13:16.090 en dan remt hij weer af, precies zoals in onze code is aangegeven