Inhoudsopgave:

Hoekige positionele besturing van 28BYJ-48 stappenmotor met Arduino en analoge joystick - Ajarnpa
Hoekige positionele besturing van 28BYJ-48 stappenmotor met Arduino en analoge joystick - Ajarnpa

Video: Hoekige positionele besturing van 28BYJ-48 stappenmotor met Arduino en analoge joystick - Ajarnpa

Video: Hoekige positionele besturing van 28BYJ-48 stappenmotor met Arduino en analoge joystick - Ajarnpa
Video: [4K] Austria Vienna, Historical commentary / Just look and you good to go! / night photo view points 2024, November
Anonim
Hoekige positionele besturing van 28BYJ-48 stappenmotor met Arduino en analoge joystick
Hoekige positionele besturing van 28BYJ-48 stappenmotor met Arduino en analoge joystick

Dit is een besturingsschema voor de 28BYJ-48 stappenmotor die ik heb ontwikkeld om te gebruiken als onderdeel van mijn afstudeerproject. Ik heb dit nog niet eerder gezien, dus ik dacht dat ik zou uploaden wat ik ontdekte. Hopelijk helpt dit iemand anders!

Met de code kan een stappenmotor in feite de hoekpositie van een analoge joystick "kopiëren", dat wil zeggen dat als u de joystick naar voren duwt, de motor naar het "noorden" wijst. duw de joystick naar het westen, de motor draait om in dezelfde richting te wijzen.

Voor mijn implementatie vereiste ik dat als de joystick wordt losgelaten, d.w.z. geen hoekpositie heeft, de motor terugkeert naar de "thuis" -richting. De thuisrichting is naar het oosten gericht en de motor (of in ieder geval welke aanwijzer / apparaat je ook aan de uitgaande as hebt bevestigd!) Moet ook in deze richting wijzen wanneer hij wordt ingeschakeld.

Benodigdheden

Arduino Uno of vergelijkbaar

breadboard & selectie van jumperdraden (man naar man, man naar vrouw)

5V voeding

Analoge joystickmodule (idealiter met een kortstondige drukknopfunctie, dit maakt het gemakkelijker om de "thuis" -positie te laten rusten

28BYJ-48 stappenmotor en ULN2003 stappenmotor

Pen, papier en blu-tac (of een ander aanwijsapparaat om aan de motor te bevestigen!)

Stap 1: Stap 1: Instellen

Sluit de stappenmotor aan op de stappenmotor en sluit de pinnen als volgt aan:

IN1 - Arduino-pin 8

IN2 - Arduino-pen 9

IN3 - Arduino-pin 10

IN4 - Arduino-pin 11

Sluit uw 5v-voeding aan op de voedingsrails op uw breadboard en sluit de ULN2003 5v-ingangen aan op de voedingsrails. verbind de grondrail met de grond op je Arduino.

voor de joystick, sluit als volgt aan:

Schakel pin - Arduino pin 2

X-as - Arduino A0 (analoog in 0)

Y-as - Arduino A1

+5V - Arduino 5V-uitgang

GND - Arduino GND

Verbind tenslotte de aarde van je breadboard met de andere Arduino GND-pin

Stap 2: Stap 2: De code uitleggen

Ik heb de volledige Arduino-code bijgevoegd die u kunt downloaden en gebruiken. Maar zal mijn best doen om de relevante delen hier uit te leggen.

De theorie achter deze code is dat de ruimte die door de joystick wordt ingenomen, wordt opgesplitst in een grafiek, met 0, 0 in het midden. de joystick-ingangen rusten echter op (ongeveer) 512 in het midden, dus om dit te verhelpen worden twee functies gebruikt om de waarde die wordt afgelezen van de X- en Y-as op nul te zetten. afhankelijk van de voeding die u gebruikt, moet u mogelijk de waarden in de functies ZeroX en ZeroY wijzigen, zodat uw joystick een betrouwbare waarde van 0 geeft tijdens het rusten.

Wanneer de X-, Y-waarden worden gelezen, worden ze eerst geconverteerd naar radialen met behulp van de functie atan2() in de math.h-bibliotheek. Het uitleggen van deze functie valt buiten het bestek van deze instructable, maar ga het alsjeblieft opzoeken - het is een vrij eenvoudige truc van geometrie!

Ten slotte, om het leven van degenen onder ons die vroeger in graden werkten in plaats van in rads het leven gemakkelijker te maken, wordt de rad-waarde berekend door atan2() omgezet in graden.

Bovenaan de lus bevindt zich een klein stukje code waarmee u op de tijdelijke knop op de joystick kunt klikken om de "thuis"-locatie te verplaatsen. Dit was ongelooflijk handig tijdens het testen van de code, maar ik heb het erin gelaten omdat ik kan zien hoe het in sommige gevallen nuttig kan zijn.

Nu op naar het grootste deel van de code! we beginnen met het lezen van de joystick X, Y-coördinaten twee keer gescheiden door een vertraging van 10 ms en controleren dan of ze hetzelfde zijn - ik ontdekte dat de joystick af en toe sporadische metingen uitvoerde, en deze kleine vertraging was genoeg om de motor te stoppen met draaien op basis van deze. Het is ook een vertraging die zo kort is dat het niet lijkt te interfereren met opzettelijke invoer.

De rest van de code is vrij duidelijk en ik heb mijn best gedaan om het te documenteren; Een reeks IF-instructies vergelijkt de huidige joystickhoek met de motorhoek en verplaatst de motor naar die hoek. De 28BYJ-48 heeft 5.689 stappen per graad, dus daarom vermenigvuldigen we de benodigde beweging met dit schijnbaar oneven getal!

Het enige deel van de code dat de meeste uitleg vereist, is wat ik de "omhullende zaak" heb genoemd. In het zelfs dat de joystick & motor op b.v. +175 °, en de joystick bewoog vervolgens naar -175° (een beweging van slechts 10 ° op de joystick, van net noordwest naar net zuidwest), de motor zou 350° IN DE VERKEERDE RICHTING bewegen! om hiervoor rekening te houden is het speciale geval geschreven.

De omhullende zaak begint door te controleren of de motor en joystick tegengestelde tekens hebben, d.w.z. de motor is positief en de joystick negatief, of omgekeerd. Het controleert ook of de som van de absolute (d.w.z. positieve waarden) van de joystick en motor hoger zijn dan 180°.

Als beide beweringen waar zijn, controleert de functie of de motor met de klok mee moet bewegen (de motorwaarde is negatief) of tegen de klok in (als de motorwaarde positief is).

De absolute waarden van de motorhoek en joystickhoek worden opgeteld en afgetrokken van 360° om de te verplaatsen afstand te bepalen. Ten slotte wordt de motorhoek (die nu de joystickhoek weerspiegelt) als zodanig bijgewerkt.

Stap 3: KLAAR

U hoeft dus alleen nog maar de code naar uw Arduino te uploaden en deze uit te voeren! Zie de video hierboven voor een goed idee van hoe het project functioneert. Dit zou handig zijn voor camera-gimbals, robotarmen en vele andere toepassingen!

Als je de code gebruikt, laat het me dan weten. Als je ziet waar de code kan worden verbeterd, hoor ik graag je feedback.

Aanbevolen: