Étape 4 : Conduite DC motors
La broche A + (D1) contrôle la PWM out pour le premier moteur à courant continu et le A-(D3) pin contrôle de direction. La sortie PWM actionne le moteur et laisser fors régulateur de vitesse. Par exemple, un cycle de 50 % en effet crée une plus faible tension. Il n’a rien à voir avec le comptage d’impulsions. La commande de direction A - va tout simplement basse ou haute, effectivement inversion de tension et en tant que tel le sens de rotation du moteur. Veuillez noter que vous pouvez conduire les moteurs avec alimentation séparée (tension habituellement plus élevée) en connectant l’alimentation moteur sur VM et NodeMCU à VIN. Remarque importante: Si vous utilisez deux sources d’alimentation, retirez le cavalier qui relie VM et VIN.
Pour l’essayer, procédez comme suit :
- Connecter le (-) plomb (généralement noir) du moteur d’A -
- Connectez le signe (+) plomb (généralement rouge) du moteur à A +
- Fixez le moteur B de la même manière
- En utilisant ESPlorer, Télécharger init.lua (ci-dessous)
Après le téléchargement, reset et regarder le tour de moteurs, inverser et arrêter. Pour répéter, appuyez sur reset à nouveau. Obviusly ce comportement particulier n’est pas très utile autrement qu’à des fins de démonstration. Les moteurs doivent être contrôlés sur le wifi mais c’est pour la deuxième partie de ce instructable. Après chargement/fonctionnement du fichier, vous pouvez contrôler les moteurs de la ESPlorer commande linte avec des appels à des fonctions motrices, e. g.
> motor_a (FWD, 100)
--motordrive: init.lua
pin_a_speed = 1 pin_a_dir = 3 pin_b_speed = 2 pin_b_dir = 4
FWD = gpio.HIGH REV = gpio.LOW
duty = 1023
--initiate motor A gpio.mode(pin_a_speed,gpio.OUTPUT) gpio.write(pin_a_speed,gpio.LOW) pwm.setup(pin_a_speed,1000,duty) --PWM 1KHz, Duty 1023 pwm.start(pin_a_speed) pwm.setduty(pin_a_speed,0) gpio.mode(pin_a_dir,gpio.OUTPUT)
--initiate motor B gpio.mode(pin_b_speed,gpio.OUTPUT) gpio.write(pin_b_speed,gpio.LOW) pwm.setup(pin_b_speed,1000,duty) --PWM 1KHz, Duty 1023 pwm.start(pin_b_speed) pwm.setduty(pin_b_speed,0) gpio.mode(pin_b_dir,gpio.OUTPUT)
-- speed is 0 - 100 function motor(pin_speed, pin_dir, dir, speed) gpio.write(pin_dir,dir) pwm.setduty(pin_speed, (speed * duty) / 100) end
function motor_a(dir, speed) motor(pin_a_speed, pin_a_dir, dir, speed) end function motor_b(dir, speed) motor(pin_b_speed, pin_b_dir, dir, speed) end -------------------------------------------------
--start motors 100% speed forward motor_a(FWD, 100) motor_b(FWD, 100)
--reverse motors after 4s tmr.register(0, 4000, tmr.ALARM_SINGLE, function() motor_a(REV, 100) motor_b(REV, 100) end) tmr.start(0)
--turn motors off after 8s tmr.register(1, 8000, tmr.ALARM_SINGLE, function() motor_a(FWD, 0) motor_b(FWD, 0) end) tmr.start(1)