Schritt 5: Driving Schrittmotoren
Für diese Demo, ich habe einen standard unipolaren (5 Kabel) 28BYJ-48 Getriebemotor Schrittmotor verwendet. Lesen Sie mehr über Stepper hier.
- Befestigen Sie die Kabel
- Blau -> a-
- Rosa -> A +
- Gelb -> B-
- Orange -> B +
- Rot -> VM
- Mit ESPlorer, init.lua und stepper.lua hochladen
Nachdem der Upload, zurücksetzen und beobachten den Motor halbe Umdrehung (2048 Schritte) aktiviert haben, rückgängig zu machen und zu stoppen. Zu wiederholen, drücken wieder zurückgesetzt. Für die DC-Motoren muss der Schrittmotor über Wifi für die meisten Projekte gesteuert werden. Das Stepper kann von der Kommandozeile mit der Step_move-Funktion ausgeführt werden.
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 (Kredite an: 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