Motorize IoT med ESP8266 (5 / 6 steg)
Steg 5: Kör stegmotorer
För denna demo, jag har använt en standard unipolar (5 kablar) 28BYJ-48 inriktade stegmotor. Läs mer om steppers här.
- Fäst trådarna
- Blå -> A-
- Rosa -> A +
- Gul -> B-
- Orange -> B +
- Röd -> VM
- Använda ESPlorer, ladda upp init.lua och stepper.lua
Efter uppladdning, reset och titta på motorn vända halv rotation (2048 steg), vända och stoppa. Att upprepa, tryck på återställer igen. Som för DC motorer bör stepper motor styras över wifi för de flesta projekt. Du kan köra genom från kommandoraden med funktionen step_move.
init.lua
--init.lua < br >--
dofile("stepper.lua")
--
FWD = 1
REV =-1
--
ROTATION_FULL = 4096--en revolution, 28BYJ-48 inriktade stegmotor
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)
slutet).
TMR.start(0);
stepper.lua (krediter till: wakenils http://www.esp8266.com/viewtopic.php?f=19&t=2326)
--stepper.lua < br >--koden från: http://www.esp8266.com/viewtopic.php?f=19&t=2326
--enkel stepper drivrutin för att styra en stegmotor med en
--l293d drivrutin
--nodemcu stift: 0 5 6 7
stepper_pins = {1,3,2,4}--(A-) blå, (A +) rosa, (B-) gul, orange (B +)
--halv eller full kliva
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--Välj kliva läge
step_numstates = 8--förändring att matcha antalet rader i step_states
step_delay = 20--Välj hastighet
step_state = 0--uppdateras av step_take-funktion
step_direction = 1--Välj steg riktning -1, 1
step_stepsleft = 0--antalet steg att flytta, kommer de minskas
step_timerid = 4--som timer för stegen
--setup pins
för i = 1, 4, 1 göra
gpio.mode (stepper_pins [i], gpio. OUTPUT)
slutet
--stänga av alla stift att låta motor resten
funktion step_stopstate()
för i = 1, 4, 1 göra
gpio.write (stepper_pins [i], 0)
slutet
slutet
--göra stepper ta ett steg
funktion step_take()
--hoppa till nästa steg i riktningen, Linda
step_state = step_state + step_direction
om step_state > step_numstates sedan
step_state = 1;
ElseIf step_state < 1 sedan
step_state = step_numstates
slutet
--Skriv det aktuella tillståndet till stiften
för i = 1, 4, 1 göra
gpio.write (stepper_pins [i], step_states[step_state][i])
slutet
--kan ta ytterligare ett steg efter step_delay
step_stepsleft = step_stepsleft-1
om step_stepsleft > 0 då
TMR.alarm (step_timerid, step_delay, 0, step_take)
annat
step_stopstate()
slutet
slutet
--offentlig metod att börja flytta antal "int steg" i "int riktning"
funktion step_move (steg, riktning, fördröjning)
TMR.stop(step_timerid)
step_stepsleft = steg
step_direction = riktning
step_delay = fördröjning
step_take()
slutet
--offentlig metod att avbryta flyttar
funktion step_stop()
TMR.stop(step_timerid)
step_stepsleft = 0
step_stopstate()
slutet