Étape 5 : Conduite des moteurs pas à pas
Pour cette démonstration, j’ai utilisé un moteur de 28BYJ-48 stepper engrenage standard unipolaire (5 fils). En savoir plus sur Steps ici.
- Attacher les fils
- Bleu -> A-
- Rose -> A +
- Jaune -> B-
- Orange -> B +
- Rouge -> VM
- En utilisant ESPlorer, Télécharger init.lua et stepper.lua
Après que l’envoi, de réinitialisation et regardez le moteur tourner une demi-révolution (2048 étapes), inverser et arrêter. Pour répéter, appuyez sur reset à nouveau. En ce qui concerne les moteurs à courant continu, le moteur pas à pas doit être contrôlé sur le wifi pour la plupart des projets. Vous pouvez exécuter le stepper de la ligne de commande avec la fonction step_move.
init.lua
--init.lua<br>-- dofile("stepper.lua") -- FWD=1 REV=-1 -- ROTATION_FULL=4096 --One revolution, 28BYJ-48 geared stepper motor ROTATION_HALF=ROTATION_FULL / 2 -- step_move(ROTATION_HALF,FWD,1) tmr.register(0, 5000, tmr.ALARM_SINGLE, function() step_move(ROTATION_HALF,REV,1) end); tmr.start(0);
stepper.lua (crédits : wakenils http://www.esp8266.com/viewtopic.php?f=19&t=2326)
-- stepper.lua<br>-- code from: http://www.esp8266.com/viewtopic.php?f=19&t=2326 -- simple stepper driver for controlling a stepper motor with a -- l293d driver -- nodemcu pins: 0 5 6 7 stepper_pins = {1,3,2,4} -- (A-)blue, (A+)pink, (B-)yellow, (B+)orange -- half or full stepping step_states4 = { {1,0,0,1}, {1,1,0,0}, {0,1,1,0}, {0,0,1,1} } step_states8 = { {1,0,0,0}, {1,1,0,0}, {0,1,0,0}, {0,1,1,0}, {0,0,1,0}, {0,0,1,1}, {0,0,0,1}, {1,0,0,1}, } step_states = step_states8 -- choose stepping mode step_numstates = 8 -- change to match number of rows in step_states step_delay = 20 -- choose speed step_state = 0 -- updated by step_take-function step_direction = 1 -- choose step direction -1, 1 step_stepsleft = 0 -- number of steps to move, will de decremented step_timerid = 4 -- which timer to use for the steps -- setup pins for i = 1, 4, 1 do gpio.mode(stepper_pins[i],gpio.OUTPUT) end
-- turn off all pins to let motor rest function step_stopstate() for i = 1, 4, 1 do gpio.write(stepper_pins[i], 0) end end
-- make stepper take one step function step_take() -- jump to the next state in the direction, wrap step_state = step_state + step_direction if step_state > step_numstates then step_state = 1; elseif step_state < 1 then step_state = step_numstates end -- write the current state to the pins for i = 1, 4, 1 do gpio.write(stepper_pins[i], step_states[step_state][i]) end -- might take another step after step_delay step_stepsleft = step_stepsleft-1 if step_stepsleft > 0 then tmr.alarm(step_timerid, step_delay, 0, step_take ) else step_stopstate() end end
-- public method to start moving number of 'int steps' in 'int direction' function step_move(steps, direction, delay) tmr.stop(step_timerid) step_stepsleft = steps step_direction = direction step_delay = delay step_take() end
-- public method to cancel moving function step_stop() tmr.stop(step_timerid) step_stepsleft = 0 step_stopstate() end