dc motor control using an h
TRANSCRIPT
-
7/25/2019 DC Motor Control Using an H
1/41
DC Motor Control Using an H-Bridge
Overview
In this tutorial, you'll learn how to control a DC motor's direction using an H-bridge.
To reverse a DC motor, you need to be able to reverse the direction of the current in the motor. The easiest way to do
this is using an H-bridge circuit. There are many different models and brands of H-ridge. This tutorial uses one ofthe most basic, aTe!as Instruments "#$%&or aTe!as Instruments (&)*++.
If you simly want to turn a motor on and off, and don't need to reverse it, for e!amle if you're controlling a fan, try
the tutorial on controlling high current loads with transistors.
/0toc Table of Contents01
2arts
3or this lab you'll need0
(olderless breadboard
##-456 hoo7u wire
4rduino 8icrocontroller
module
http://octopart.com/search?q=L293NEhttp://octopart.com/search?q=L293NEhttp://octopart.com/search?q=SN754410http://octopart.com/search?q=SN754410http://octopart.com/search?q=SN754410http://itp.nyu.edu/physcomp/Tutorials/HighCurrentLoadshttp://octopart.com/search?q=SN754410http://itp.nyu.edu/physcomp/Tutorials/HighCurrentLoadshttp://octopart.com/search?q=L293NE -
7/25/2019 DC Motor Control Using an H
2/41
"ight miting Diodes, "D
9ohm resistors
(witch
-
7/25/2019 DC Motor Control Using an H
3/41
"#$%&
or (&)*++ H-bridge
-
7/25/2019 DC Motor Control Using an H
4/41
#: DC ower suly
-
7/25/2019 DC Motor Control Using an H
5/41
DC 8otor
2reare the breadboard
Connect ower and ground on the breadboard to ower and ground from the microcontroller. On the 4rduino module,use the *: and any of the ground connections0
-
7/25/2019 DC Motor Control Using an H
6/41
/Diagram made with3rit;ing1
4dd a Digital Inut /a switch1
Connect a switch to digital inut # on the 4rduino.
http://fritzing.org/http://fritzing.org/http://fritzing.org/ -
7/25/2019 DC Motor Control Using an H
7/41
/Diagram made with3rit;ing1
3ind a motor
3ind yourself a DC motor that runs on low DC voltage within the range of * - *:. Comuter (tore on occasion has small a few, the ?un7 shelf is almost always a goldmine
for discarded motors and fans. 4s7ing classmates and second years is another good aroach.
(older leads to the motor's terminals. 5ith DC motors, there is no olarity regarding the motor terminals so you can
connect it any way you'd li7e.
Optional:Consider testing your motor with a bench ower suly from the e@uiment room. 4s7 a teacher or
resident if you need hel setting one u. egin by ad?usting the voltage on the bench ower suly and observe its
effects. Ta7e note of its seed at different voltages without diing to low or too high.
-
7/25/2019 DC Motor Control Using an H
8/41
"#$%& H-bridge
This e!amle uses an H-bridge integrated circuit, theTe!as Instruments "#$%&orTe!as Instruments (&)*++.
There is one in your 2hysical Comuting 9it, and the &=> Comuter (tore and many distributors such
as Digi7ey,(ar73un,8ouserand Aamecosell them as well.
How your H-bridge wor7s
The "#$%&B(&)*++ is a very basic H-bridge. It has two bridges, one on the left side of the chi and one on theright, and can control # motors. It can drive u to am of current, and oerate between +.*: and %:. The small DC
motor you are using in this lab can run safely off a low voltage so this H-bridge will wor7 ?ust fine.
The H-bridge has the following ins and features0
2in /,#&1 enables and disables our motor whether it is give HI6H or "O5
2in # /41 is a logic in for our motor /inut is either HI6H or "O51
2in % /=1 is for one of the motor terminals
2in +-* are for ground
2in /#=1 is for the other motor terminal
2in ) /#41 is a logic in for our motor /inut is either HI6H or "O51
2in /:CC#1 is the ower suly for our motor, this should be given the rated voltage of your motor
2in $- are unconnected as you are only using one motor in this lab
http://octopart.com/search?q=L293NEhttp://octopart.com/search?q=L293NEhttp://octopart.com/search?q=L293NEhttp://octopart.com/search?q=SN754410http://octopart.com/search?q=SN754410http://octopart.com/search?q=SN754410http://www.digikey.com/http://www.digikey.com/http://www.sparkfun.com/commerce/product_info.php?products_id=315http://www.sparkfun.com/commerce/product_info.php?products_id=315http://www.sparkfun.com/commerce/product_info.php?products_id=315http://www.mouser.com/http://www.mouser.com/http://www.mouser.com/http://www.jameco.com/http://www.jameco.com/http://octopart.com/search?q=L293NEhttp://octopart.com/search?q=SN754410http://www.digikey.com/http://www.sparkfun.com/commerce/product_info.php?products_id=315http://www.mouser.com/http://www.jameco.com/ -
7/25/2019 DC Motor Control Using an H
9/41
2in #-% are for ground
2in +-* are unconnected
2in /:CC1 is connected to *:
elow is a diagram of the H-bridge and which ins do what in our e!amle. Included with the diagram is a truth table
indicating how the motor will function according to the state of the logic ins /which are set by our 4rduino1.
3or this lab, the enable in connects to a digital in on your 4rduino so you can send it either HI6H or "O5 and turn
the motor O& or O33. The motor logic ins also connected to designated digital ins on your 4rduino so you can
send it HI6H and "O5 to have the motor turn in one direction, or "O5 and HI6H to have it turn in the other
direction. The motor suly voltage connects to the voltage source for the motor, which is usually an e!ternal ower
suly. If your motor can run on *: and less than *m4, you can use the 4rduino's *: outut. 8ost motors re@uire
-
7/25/2019 DC Motor Control Using an H
10/41
a higher voltage and higher current draw than this, so you might need an e!ternal ower suly.
Connect the motor to the H-bridge
Connect the motor to the H-bridge as follows0
-
7/25/2019 DC Motor Control Using an H
11/41
-
7/25/2019 DC Motor Control Using an H
12/41
/Diagram made with3rit;ing
Or, if you are using an e!ternal ower for 4rduino, you can use :in in.
http://fritzing.org/http://fritzing.org/http://fritzing.org/ -
7/25/2019 DC Motor Control Using an H
13/41
-
7/25/2019 DC Motor Control Using an H
14/41
/Diagram made with3rit;ing1
If you need an e!ternal ower suly, you can use any DC ower suly or battery from $ - *: as long as your
motor can run at that voltage, and as long as the suly can suly as much current as your motor needs.
2lug an e!ternal DC ower source into the 4rduino's e!ternal ower inut. =ou may still leave your >( cable
lugged in for @uic7 and easy rerogramming. 5hichever motor you use, ma7e sure the ower source is comatible/i.e. don't use a $: battery for a %: motorE1. The e!ternal voltage inut is available at the :in in, so you can use it
both to ower the 4rduino, and to ower the motor.
/Diagram made with3rit;ing1
If you find that your microcontroller is resetting whenever the motor turns on, add a caacitor across ower and
ground close to the motor. The caacitor will smooth out the voltage dis that occur when the motor turns on. This
use of a caacitor is called a decoupling capacitor. >sually a - u3 caacitor will wor7. The larger the ca, the
more charge it can hold, but the longer it will ta7e to release its charge.
http://fritzing.org/http://fritzing.org/http://fritzing.org/http://fritzing.org/http://fritzing.org/http://fritzing.org/http://fritzing.org/http://fritzing.org/ -
7/25/2019 DC Motor Control Using an H
15/41
2rogram the 8icrocontroller
2rogram the microcontroller to run the motor through the H-bridge. 3irst set u constants for the switch in, the two
H-bridge ins, and the enable in of the H-bridge. >se one of the analog5rite ins /%,*,,$,, or 1 for the enable
in.
I give u, how do I do thatF
In the setu/1, set all the ins for the H-bridge as oututs, and the in for the switch as an inut. The set the enable
in high so the H-bridge can turn the motor on
I give u, how do I do thatF
In the main loo/1. read the switch. If it's high, turn the motor one way by ta7ing one H-bridge in high and the other
low. If the switch is low, reverse the direction by reversing the states of the two H-bridge ins.
I give u, how do I do thatF
Once you've seen this code wor7ing, try modifying the seed of the motor using the analog5rite/1 function, ase!lained in the4nalog "ab. >se analog5rite/1 on the enable in of the motor, and see what haens as you change
the value of the analog5rite/1.
6et creative
4rduino0 rGctica n #0 Control medianteulsadores
ysalvael # 8ayo # Comentario
4rduino,
lectrJnica
D
arle B*
D
arle #B*
D
arle %B*
D
arle +B*
Darle +B*
http://toggleobj%28%27question1%27%2C%27show%27%2C%27i%20give%20up%2C%20how%20do%20i%20do%20that/?%27,%27Let%20me%20figure%20it%20out%27,%27Show%27,%27Hide%27,%27%27,%27%27,%27%27,%27%27,%27%27)http://toggleobj%28%27question2%27%2C%27show%27%2C%27i%20give%20up%2C%20how%20do%20i%20do%20that/?%27,%27Let%20me%20figure%20it%20out%27,%27Show%27,%27Hide%27,%27%27,%27%27,%27%27,%27%27,%27%27)http://toggleobj%28%27question3%27%2C%27show%27%2C%27i%20give%20up%2C%20how%20do%20i%20do%20that/?%27,%27Let%20me%20figure%20it%20out%27,%27Show%27,%27Hide%27,%27%27,%27%27,%27%27,%27%27,%27%27)http://itp.nyu.edu/physcomp/Labs/AnalogInhttp://itp.nyu.edu/physcomp/Labs/AnalogInhttp://www.tecnosalva.com/users/salvahttp://www.tecnosalva.com/users/salvahttp://www.tecnosalva.com/node/33#commentshttp://www.tecnosalva.com/categorias/arduinohttp://www.tecnosalva.com/categorias/electr%C3%B3nicahttp://www.tecnosalva.com/arduino-pr%C3%A1ctica-n%C2%BA-2-control-mediante-pulsadores#20http://www.tecnosalva.com/arduino-pr%C3%A1ctica-n%C2%BA-2-control-mediante-pulsadores#40http://www.tecnosalva.com/arduino-pr%C3%A1ctica-n%C2%BA-2-control-mediante-pulsadores#60http://www.tecnosalva.com/arduino-pr%C3%A1ctica-n%C2%BA-2-control-mediante-pulsadores#80http://toggleobj%28%27question1%27%2C%27show%27%2C%27i%20give%20up%2C%20how%20do%20i%20do%20that/?%27,%27Let%20me%20figure%20it%20out%27,%27Show%27,%27Hide%27,%27%27,%27%27,%27%27,%27%27,%27%27)http://toggleobj%28%27question2%27%2C%27show%27%2C%27i%20give%20up%2C%20how%20do%20i%20do%20that/?%27,%27Let%20me%20figure%20it%20out%27,%27Show%27,%27Hide%27,%27%27,%27%27,%27%27,%27%27,%27%27)http://toggleobj%28%27question3%27%2C%27show%27%2C%27i%20give%20up%2C%20how%20do%20i%20do%20that/?%27,%27Let%20me%20figure%20it%20out%27,%27Show%27,%27Hide%27,%27%27,%27%27,%27%27,%27%27,%27%27)http://itp.nyu.edu/physcomp/Labs/AnalogInhttp://www.tecnosalva.com/users/salvahttp://www.tecnosalva.com/node/33#commentshttp://www.tecnosalva.com/categorias/arduinohttp://www.tecnosalva.com/categorias/electr%C3%B3nicahttp://www.tecnosalva.com/arduino-pr%C3%A1ctica-n%C2%BA-2-control-mediante-pulsadores#20http://www.tecnosalva.com/arduino-pr%C3%A1ctica-n%C2%BA-2-control-mediante-pulsadores#40http://www.tecnosalva.com/arduino-pr%C3%A1ctica-n%C2%BA-2-control-mediante-pulsadores#60http://www.tecnosalva.com/arduino-pr%C3%A1ctica-n%C2%BA-2-control-mediante-pulsadores#80 -
7/25/2019 DC Motor Control Using an H
16/41
D
arle *B*
(u voto0 &ada 4verage0 + / vote1
ien en esta segunda rGctica usaremos unos ulsadores ara controlar el encendido de un diodo "DK
LcJmo conectamos un ulsadorF >saremos un divisor de tensiJn, como se arecia en la figura, con una
resistencia en 2ull-down, de forma @ue cuando ulsemos la entrada digital tome el valor alto.
Declaramos el in como entrada y usamos la funciJn Digital
-
7/25/2019 DC Motor Control Using an H
17/41
pinMode(buttonPin, INPUT);
void loop(){
estado = di!ital"ead(buttonPin);
i# (estado == $I%$) {
di!ital&'ite(ledPin, $I%$);
else {
di!ital&'ite(ledPin, O&);
#. 4hora con dos ulsadores, al accionar el ulsador , enciende el Diodo, al accionar el ulsador #,
aaga el diodo.
int ledPin = 13;int inputPin1 = 2; pulsado' 1
int inputPin2 = 3; pulsado' 2
int p1;
int p2;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(inputPin1, INPUT);
pinMode(inputPin2, INPUT);
void loop(){
p1=di!ital"ead(inputPin1);
p2=di!ital"ead(inputPin2);
i# (p1 == $I%$) {
di!ital&'ite(ledPin, $I%$);
else i# (p2 == $I%$) {
di!ital&'ite(ledPin, O&);
%. 4hora usamos los ulsadores ara iluminar mGs o atenuar la lu; del led, ara ello debemos cambiar la
cone!iJn del "ed al in $, @ue usa la salida 258, modulaciJn or ancho de ulso, como si de una salidaanalJgica se tratara.
int ledPin = *;
int inputPin1 = 2; pulsado' 1
int inputPin2 = 3; pulsado' 2
int p1;
-
7/25/2019 DC Motor Control Using an H
18/41
int p2;
int value = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(inputPin1, INPUT);
pinMode(inputPin2, INPUT);
void loop(){
p1=di!ital"ead(inputPin1);
p2=di!ital"ead(inputPin2);
i# (p1 == $I%$) { value++;
else i# (p2 == $I%$) { value;
value = -onst'ain(value, 0, 2..);
analo!&'ite(ledPin, value);
dela/(10);
- (ee more at0 htt0BBwww.tecnosalva.comBarduino-rMC%M4ctica-nMC#M4-#-control-mediante-
ulsadoresNsthash.w7e7m:5.duf
PULSADORES SIN
REBOTES.Experiencias con Arduino.
Hoy: 25 Mayo 2014, ncluir en !a"oritos, para "ol"er a "isitarnos#
Creado por: $# %arc&a#
Tema0
ntroducci'n
(ue son los pulsadores#2ulsadores o interrutores, hay toneladas de ellos en
su casa. >n interrutor es un disositivo simle con dos osiciones, & y 42
uscar
http://www.tecnosalva.com/arduino-pr%C3%A1ctica-n%C2%BA-2-control-mediante-pulsadores#sthash.w6kekmVW.dpufhttp://www.tecnosalva.com/arduino-pr%C3%A1ctica-n%C2%BA-2-control-mediante-pulsadores#sthash.w6kekmVW.dpufhttp://addbookmark%28%29/http://www.tecnosalva.com/arduino-pr%C3%A1ctica-n%C2%BA-2-control-mediante-pulsadores#sthash.w6kekmVW.dpufhttp://www.tecnosalva.com/arduino-pr%C3%A1ctica-n%C2%BA-2-control-mediante-pulsadores#sthash.w6kekmVW.dpufhttp://addbookmark%28%29/ -
7/25/2019 DC Motor Control Using an H
19/41
/)*cendido y+agado1. >na clase de interrutor @ue usted usa cada da es el
interrutor de la lu;. Cuando conecta, dentro del interrutor, dos cables son
unidos, lo @ue ermite fluir a la corriente @ue enciende la lu; o la tostadora se
caliente. Cuando lo desconecta, los dos cables son desunidos y corta el flu?o de la
corriente. sto esta muy bien ero creo @ue esto no es lo @ue interesa a@u.
n definitiva, se trata de un mecanismo simle /los hay muy sofisticados1,
constituido or un ar de contactos elPctricos @ue se unen o searan or medios
mecGnicos. n electricidad, los falsos contactos @ue se roducen el ser utili;ados
normalmente, en algunos casos roduce una chisa debido a la corriente @ue
atraviesa los contactos, rovocando @ue @uemen en arte y ennegreciendo los
contactos elPctricos, lo @ue a la larga acaba deteriorando dichos contactos. "a
chisa se roduce siemre al searar los contactos /desconectar1, en ocasiones
arece @ue tambiPn salta al conectarlos, eso es debido a los rebotes mecGnicos@ue se roducen al cambiar de estado.
sto @ue en electricidad se considera normal, en electrJnica es un verdadero
nido de roblemas, debido a dichos falsos contactos. 2or su roia naturale;a, al
cambiar de osiciJn un interrutor, los contactos chocan entre s y esto significa
una serie de falsos contactos @ue se reroducen de un modo sin control, or lo
@ue se generan los temidos rebotes /debounce en inglPs1, estos rebotes, se
roducen incluso cuando unimos dos cables desnudos, simulando un interrutor o
ulsador.
ulsadores#
stos e@ueQos ulsadores son un B+ R or cada lado, son bastante econJmicos
y se ueden 'inchar' directamente en una laca de rototiado. stos disositivos
mecGnicos tienen + atillas, @ue ueden hacernos ensar @ue hay + cables @ue
son & y 42, ero de hecho, dos de cada lado en realidad dentro estGn unidos.
2or tanto realmente, este ulsador es solamente un ulsador de # cables.
-
7/25/2019 DC Motor Control Using an H
20/41
Como digo, en electrJnica los rebotes suelen fastidiar a los intrPidos reciPn
iniciados @ue creen en la teora y sin embargo se salta este unto en muchas
ocasiones, lo @ue les lleva a recordar la imortancia @ue tiene el antirrebote.
esistencias de polari.aci'n#
Cuando nos de desenvolvemos en el entorno de los microcontroladores, nos
encontramos con un tPrmino oco comSn, me refiero a la olari;aciJn de una B(,
debemos saber @ue hay dos tios de olari;aciJn, olari;aciJn alta /tPrmino
inglPs ullup1 la resistencia va conectada a /*:1 o olari;aciJn ba?a /tPrmino
inglPs ulldo/n1 la resistencia va conectada a masa - /:1. (iguen dos es@uemas
de estos tPrminos0
-
7/25/2019 DC Motor Control Using an H
21/41
-
7/25/2019 DC Motor Control Using an H
22/41
efecto y como evitarlo.
ulsador#
:amos a hacer nuestra rimera rueba de botJn /ulsador1 conectando un "D
en nuestra tar?eta 4rduino. l smbolo del es@uema ara un ulsador de botJn es
algo diferente @ue el mostrado. 2reare un "D ro?o y una resistencia de 9
Ohms, as como el ulsador de botJn y construya un monta?e del es@uema en su
tabla de rototiado cerca del 4rduino.
Ha llegado la hora de onernos a rogramar, llegados a@u, deberamos decidir
@ue tio de entrada utili;ar, analJgica o digital. 2ara no demorar mGs el tema,
haremos la rueba con un in digital, ya @ue se trata de un ulsador @ue
resentarG o , lo conectamos a *: a travPs de una resistencia y ara
mantener el consumo del "D, lo conectamos con una resistencia /de #) Ohm1
ara limitar su consumo dentro de tPrminos admisibles de las salidas de 4rduino
/sobre los #m41.
-
7/25/2019 DC Motor Control Using an H
23/41
4nali;aremos el es@uema, he elegido la
-
7/25/2019 DC Motor Control Using an H
24/41
caso. Como se ve, es roiedad de 8assimo an;i /gracias1. Coiar este cJdigo y
guardarlo con el nombrepulsado'03pdeen la careta destino de vuestros
e?emlos o e?ercicios, ara comrobar su funcionamiento.
/* Pulsador y LED
*
* Detectar si el botn ha sido presionado o no y encender
* el LED en consecuencia.
*
* Basado en un cdigo de: Massimo Banzi
*
*/
int inPin !"# // pin del pulsador
$oid setup%& // establecer la con'iguracin de pines a usar.
(
)erial.begin%+"" // ,nicializa el puerto serie a +"" baudios
pinMode%inPin- ,P0 // ,nicializa el pin !" como entrada digital1
$oid loop%& // Lazo 2ue se repite inde'inidamente
(
)erial.print%3Estado del pulsador: 3 // muestra el 3Estado del pulsador: 3
)erial.println%digital4ead%inPin& // imprime el estado del %pulsador&
// y lo muestra en decimal %"/!&
delay %5" // toma un poco de tiempo.
1
ste es un cJdigo escueto, corto @ue, funciona, sin embargo refiero un cJdigo
@ue 'diga mGs', algo mGs comleto y didGctico, si es osible. Como el @ue sigue0
/* Pulsador
*
* Detectar si el botn ha sido presionado o no y encender
* el LED en consecuencia.
*
* Basado en un cdigo de: Massimo Banzi
*
*/
int inPin !"# // pin del pulsador
int ledPin 6# // pin del LED
int $alue "# // $alor 2ue tomara el pulsador
$oid setup%& // establecer la con'iguracin de pines a usar.
( )erial.begin%+"" // ,nicializa el puerto serie a +"" baudios
pinMode%inPin- ,P0 // ,nicializa el pin !" como entrada digital
pinMode%ledPin- 70P0 // ,nicializa el pin 6 como salida digital
1
$oid loop%& // Lazo 2ue se repite inde'inidamente
(
$alue digital4ead%inPin // Lee el $alor de la entrada digital %pulsador&
)erial.print%3Estado del pulsador: 3 // muestra el 3Estado del pulsador: 3
)erial.print%$alue- DE8 // imprime el estado del %pulsador&
-
7/25/2019 DC Motor Control Using an H
25/41
// y lo muestra en decimal %"/!&
digital9rite%ledPin- $alue // enciende el LED cuando el $alue es !.
1
+nlisis#
Como se arecia, las lneas estGn comentadas en su mayora, tamoco es
necesario asarse, a@u lo hago, ara @ue se ueda entender or los no iniciados.
n rimer lugar, se declaran las variables globales @ue, se usaran en cual@uier
arte del rograma, se designan los nombres @ue damos a los ines de B( y a las
variables de estado o lo @ue se haya revisto como tal. (eguidamente, el mJdulo
de configuraciJn de los ines como B( y si utili;aremos el uerto serie ara
comunicaciJn @ue, utili;arG el rograma "oid setup, siguen si hay las rutinas
generales, a@u esta su sitio, en otro caso, se llega al la;o rincial @ue see?ecutarG sin descanso, estoy refiriPndome al mJdulo "oid loop, con el @ue se
da or terminado el cJdigo.
void setu/1
Tenemos @ue decirle a 4rduino @ue onga el in @ue designamos ara el
ulsador, como entrada. sto es bastante fGcil, emleando pinMode ara usar
la &T
-
7/25/2019 DC Motor Control Using an H
26/41
)erial.println%digital4ead%sitchpin& // imprime el estado del %pulsador&
. . .
l caso de la variable se verG mGs adelante.
$alue digital4ead%inPin // Lee el $alor de la entrada digital %pulsador&
)erial.print%$alue // imprime el estado del %pulsador&
scritura Digital.
Con el rocedimiento Digital3riteondremos el volta?e en un in a 4"TO *: o
a 4AO masa : y luego usaremos Digitaleadara reguntar si a@uel in es
4"TO o 4AO. ste rocedimiento se usa normalmente como salida, mayormente
en el mJdulo "oid loop, como tendremos ocasiJn de comrobar.
Copilar el c'digo#
>tili;ando el software, libre de 4rduino. Coie y egue el cJdigo del e?ercicio, en
la ;ona habilitada ara este fin. Conecte la tar?eta 4rduino a su comutadora /2C1
y ulse el icono /n1 de $eri!y.
Iconos de 4rduino.
(i todo va bien, el cJdigo saldrG bien, sin errores, a continuaciJn ulse el icono
de Upload to O 6oard/es el n 1, esta ve; tambiPn cargarG el rograma @ue
acaba de comilar en la memoria del 4tmega /4rduino1 y ahora, ulse el 7erialMonitor/n )1 ara ven en la arte inferior cJmo se muestra el estado del
ulsador.
-
7/25/2019 DC Motor Control Using an H
27/41
Comilar el rograma.
Cargar el rograma en el 4rduino.
8onitorear resultado
n el monitor, se arecia @ue mientras no se resiona el ulsador, la salida es y
cada ve; @ue se resiona, al hacer contacto, se muestra un , lo @ue demuestra si
se ha resionado o no el ulsador.
:erifi@ue @ue cuando el botJn es resionado, enciende el "D y cuando el botJn
es liberado, el "D se aaga. (i no le funciona, trate de usar
declaraciones printlnara eliminar fallos de su royecto. Cuando usted arieta el
botJn, hace @ue imrima un mensa?e. 4s usted uede decir si la mitad de entrada
funciona o si no funciona la mitad de salida. 4hora uede guardar el archivo
ulsando el icono /n*1
+l eo' odo de dest'ui' -opletaente un i-'o-ont'olado' -oo 4'duino es,
alienta'lo -on voltaes deasiado altos 54se!6'ese 7ue sus voltaes de ent'ada
est8n ent'e 0 / .9: 5Nun-a -one-te la bate'a *9 di'e-taente en un pin de
-
7/25/2019 DC Motor Control Using an H
28/41
ent'ada, esto #'ei'8 el pin / posibleente dest'ui'8 al i-'o-ont'olado' 4'duino:
4hora, desconecte el 4rduino de su comutador y cambie el sistema de
alimentaciJn del 4rduino, or medio de una ila de $:, conecte dicha ila al
4rduino y ya uede resionar el botJn. l "D debera encenderse cuando el
ulsador es resionado /la corriente es caa; de fluir1 y vuelve a aagarse cuando
se ha liberado el ulsador /la corriente no es caa; de fluir1, esto demuestra @ue el
4rduino una ve; cargado el rograma, uede funcionar de forma autJnoma.
(i, ya se, el monitor tiene un 'roblema' estG mostrando continuamente la misma
resuesta 8)stado del pulsador: 08y sJlo cambia a 8)stado del pulsador:
18en el momento en @ue se resiona el ulsador y seguidamente se reite
el 8)stado del pulsador: 08. :aya, no es un grave roblema, ya @ue todo
funciona como se eseraba, la salvedad de lo @ue muestra el monitor. Como no es
un verdadero roblema no le daremos mGs imortancia or el momento. l
rograma hace lo @ue se eseraba.
l caso rincial es @ue seguimos sin areciar el tan mencionado rebote
/debuncing1. n el rJ!imo e?emlo veremos cJmo se roduce dicho efecto.
9ercer eercicio#
n este momento, vamos a desarrollar el cJdigo @ue nos ermita constatar el
efecto rebote. 2ara este fin, he arovechado un cJdigo de un maestro en estamateria como es H. arragan, sJlo he hecho unas e@ueQas modificaciones ara
@ue se arecie con mGs detalle lo @ue ocurre al e?ecutar el rograma.
/*
Pulsador 8onmutador
original: by B;44;
El pin usado como entrada es conectado a un pulsador y el pin
usado como salida al LED. 8uando el pulsador es presionado-
parpadea el LED- el LED deber?a apagarse cuando el pulsador es
liberado.
)e puede $er el e'ecto rebote %debouncing&
4e$isado 6+ @ulio 6""
por A.
-
7/25/2019 DC Motor Control Using an H
29/41
int ledPin 6# // pin para conectar el LED
$oid setup%& (
)erial.begin%+"" // establece comunicacion serie
pinMode%sitchPin- ,P0 // pone el pin digital como la entrada
pinMode%ledPin- 70P0 // pone el pin digital 6 como la salida
1
$oid loop%&
(
i'%digital4ead%sitchPin& C,
-
7/25/2019 DC Motor Control Using an H
30/41
el rograma y definir el uerto serie ara la comunicaciJn /definir el uerto serie,
no es siemre necesario1 con el 2C or e?emlo.
$oid setup%& (
)erial.begin%+"" // establece comunicacion serie
pinMode%sitchPin- ,P0 // pone el pin digital como la entrada
pinMode%ledPin- 70P0 // pone el pin digital 6 como la salida
1
2or cierto, cuando utili;amos los microcontroladores, en ocasiones odemos
utili;ar la resistencia de olari;aciJn interna del in indicado. Con esto, ahorramos
las resistencias de olari;aciJn e!ternas @ue anteriormente se comentaron y su
comortamiento es idPntico. ste es un buen momento ara utili;ar esta
osibilidad, veamos cJmo.
$oid setup%&
(
)erial.begin%+"" // establece comunicacion serie
pinMode%sitchPin- ,P0
digital9rite%sitchPin- C,
-
7/25/2019 DC Motor Control Using an H
31/41
)erial.print%3 L:3 // muestra la L de BaHo.
1
)erial.print%direction
delay%6" // espera 6" milliseconds
1
1
"a declaraciJn if, es la rimera declaraciJn @ue es condicional, esta sJlo controla
las declaraciones si una condiciJn es verdadera. n este caso, las condiciones
son el RbotJn se ha resionadoR o el RbotJn no es resionadoR.
Operadores de Comparacin:
I y %I es igual a y&
I J y %I no es igual a y&
I = y %I es menor 2ue y&
I > y %I es mayor 2ue y&
I = y %I es menor o igual a y&
I > y %I es mayor o igual a y&
n la rimera lnea del i!, se comara el estado del in de entrada erteneciente
al ulsador, ara saber si se ha ulsado. (i se ha resionado, el estado del
ulsador serG /H1 y or lo tanto se e?ecutarG lo @ue hay dentro del siguiente
corchete RW .... XR
i'%digital4ead%sitchPin& C,
-
7/25/2019 DC Motor Control Using an H
32/41
)erial.print%3 L:3 // muestra la L de BaHo.
1
n este caso, tambiPn aQadimos una salida ara el uerto serie @ue ermita ver
el resultado de los dos estados osibles del ulsador.
)erial.print%direction // imprime el contenido de la $ariable KdirectionK.
delay%6" // espera 6" milliseconds
2ruebe a comentar la lnea delay y vuelva a comilar el cJdigo, luego modifi@ue
el valor del arPntesis /e!resado en milisegundos1 y vuelva a comilar el cJdigo
cada ve;, arenderG de la imortancia de este arGmetro.
l rograma de arriba, tal cual, demuestra @ue mientras se resiona el ulsador,
el "D se enciende e incluso aradea, aun@ue la resiJn sobre el botJn sea muy
rGida. 2uede @ue si es muy rGido, a la vista no se arecie, sin embargo, si
utili;amos el monitor del sistema 4rduino, Pste delatarG el efecto rebote.
2rocedamos, una ve; cargado el rograma en la laca de 4rduino, ulse el icono )
/corresonde al monitor1, ahora, intente reali;ar una rGida resiJn del ulsador,
@uP ocurre, en el monitor se ve, cada letra lleva su valor asociado, como se
muestra en la imagen siguiente.
2resencia de
-
7/25/2019 DC Motor Control Using an H
33/41
el valor del tiemo /dentro del arPntesis1, or e?emlo, si subimos el valor a #,
se observa @ue de?an de roducirse rebotes, salvo @ue mantengamos resionado
el ulsador, cosa a todas luces, innecesaria.
/*
Pulsador 8onmutador
original: by B;44;
El pin usado como entrada es conectado a un pulsador y el pin usado
como salida se conecta al LED. 8uando el pulsador es presionado-
parpadea el LED- el LED deber?a apagarse cuando el pulsador es
liberado.
)e puede apreciar el e'ecto rebote %debouncing&
4e$isado 6+ @ulio 6""
por A.
-
7/25/2019 DC Motor Control Using an H
34/41
He encontrado la forma de evitar los rebotes, en cuanto he considerado cJmo
encarar el roblema. "a soluciJn asa or leer el estado del botJn cuando se
roduce el borde ascendente de la tensiJn a e!tremos de los contactos del
ulsador e introducir inmediatamente la salida con ese estado, el resto de entradas
/se llama ruido1 se inhiben o anulan mediante un lasus de tiemo. :Pase la
imagen de deba?o ara entender me?or lo dicho.
l lasus de tiemo se uede variar ara @ue no se lea mGs @ue el rimer ulso
del tren de ulsos @ue se generan. = este es el listado del cJdigo @ue cumle
estos arGmetros. 2uede coiar y egar este cJdigo@ue sigue, en su software
ara comrobar su efectividad.
/* conmutador.pde %sitch&
*
* 8ada $ez el pin de entrada $a de B;@7 a ;L07 %p.eH. debido a apretar un botn&-* el pin de salida es basculado de B;@7 a ;L07 o de ;L07 a B;@7. Cay un
* retraso m?nimo entre basculados para los rebotes del circuito.
* %no hacer caso del ruido&.
*
* http://.arduino.cc/en/0utorial/)itch
*
* Da$id ;. Mellis
* 6! o$ember 6""+
*
* Modi'icado por A.
-
7/25/2019 DC Motor Control Using an H
35/41
$oid setup%& // 8on'ig. pines
(
pinMode%inPin- ,P0
pinMode%outPin- 70P0
)erial.begin%+""
1
$oid loop%&
(
reading digital4ead%inPin
// si la entrada solamente 'uera de B;@7 a ;L07 y hemos esperado bastante tiempo
// para 2ue ningn ruido a'ecte al circuito- el pin de salida bascula y
// recuerda el tiempo
i' %reading C, debounce& (
i' %state C,
-
7/25/2019 DC Motor Control Using an H
36/41
2uede coiar y egar el siguiente listado del cJdigo y guardarlo como
conmutadorYab.de, en su software ara comrobar una ve; mGs @ue funciona y
ademGs @ue lo hace al soltar el ulsador.
/*
* conmutador sin rebote %debounced&
*
* 8ada $ez el pin de entrada $a de ;L07 a B;@7 %p.eH. debido a liberar un botn&-
* el pin de salida es basculado de ;L07 a B;@7 o de B;@7 a ;L07. Cay un
* retraso m?nimo entre basculados para los rebotes del circuito.
*
* 6/"/"
* ;utor: A.
-
7/25/2019 DC Motor Control Using an H
37/41
(in rebotes
4 D(T4C4na ve; comrobado @ue, el rograma roorciona los resultados eserados,
uesto @ue no siemre se tienen @ue mostrar los resultados en el monitor, seuede eliminar del cJdigo las referencias a la comunicaciJn serie, de?ando mGs
comacto el cJdigo.
l lector, nuevamente, con unos ocos cambios uede adatar este listado a sus
royectos.
Como siemre, comentarios, criticas y sugerencias ara me?orar este artculo,
son bienvenidos y areciados.
sto es todo, or este simle tutorial, los @ue @uieran leer mGs sobre el tema4rduino, revele esta secciJn. / 8ostrarBOcultar1
)*C)*D) ? ++%+ @)D CO* +DU*O ? DO7 U@7+DO)7
n este tutorial vamos ha crearun rograma ara 4rduino, mediante el cual encenderemos un led con un ulsdor y
lo aagaremos con oto diferente.
http://proyectosenrique.mex.tl/930784_encender-led-con-arduino-y-dos-pulsadores.htmlhttp://proyectosenrique.mex.tl/930784_encender-led-con-arduino-y-dos-pulsadores.htmlhttp://proyectosenrique.mex.tl/930784_encender-led-con-arduino-y-dos-pulsadores.html -
7/25/2019 DC Motor Control Using an H
38/41
2T1K
in8ode/inut2in, I&2>T1K
in8ode/inut2in#, I&2>T1K
X
void loo/1W
if /digital
-
7/25/2019 DC Motor Control Using an H
39/41
1
4
1
5
1
6
1
7
1
8
1
9
2
0
2
1
2
2
2
3
2
4
i-!alidar(ar .=1" // si el caio es par
#
//ponga aqui su codigo
+
estadoAnterior =estadoActual;
+
+
Cambio de estado de un ulsador
cuantas eces nos a pasado que nuestro proecto necesita de uno o arios
pulsadores no a prolea% los pulsadores son sencillos de ipleentar
para leer su estado solo a que acer un digital,ead!"
pero luego resulta que nuestro Arduino )'o eonardoace cosas raras: si la
accin a disparar por la pulsacin es corta puede que nos la aga iles deeces por segundo o si es larga puede que no suceda nada cuando accionaos
otros pulsadores porque Arduino est< ocupado en otras cosas no puede irar
el estado del pin al que aaos conectado el pulsador
A i e pas que tena que edir las reoluciones por inuto de un
aneetro no poda estar todo el tiepo esperando a que se actiara el pin
http://www.ardumania.es/ardutienda/es/arduino/11-arduino-uno.htmlhttp://www.ardumania.es/ardutienda/es/arduino/85-arduino-leonardo.htmlhttp://www.ardumania.es/ardutienda/es/arduino/11-arduino-uno.htmlhttp://www.ardumania.es/ardutienda/es/arduino/85-arduino-leonardo.html -
7/25/2019 DC Motor Control Using an H
40/41
cuando la elocidad de giro de aquel aneetro era u lenta el contador
se ola loco cada e> que se cerraa el contacto
?olucin: prograar un peque@o cdigo que detecte cuando un pin caia de
estado% ien sea de ao a alto o iceersa% ade
-
7/25/2019 DC Motor Control Using an H
41/41
1
9
2
0
2
1
2
2
2
3
2
4
)tili>aos 3 ariales: estadoActual% estadoAnterior contador Dl cdigo se
liita a irar en cada loop si las ariales estadoActual estadoAnterior son
di-erentes% si ello sucede es que el estado del pin a caiado desde la Eltia
e> que lo ir% increenta el contador a partir de aqu es donde se ace la
agia: si el resto de la diisin entre el contador 2 es di-erente de 1 es que el
caio de estado se a producido de BpulsadoC a Bno pulsadoC pasar< a
eecutar lo que pongaos deao de Bponga aqui su codigoC
?i quereos que la accin se desarrolle cuando el puslador es accionado solo
a que caiar la condicin de la lnea 18 poner esta otra Bi- !alidar(ar ==
1"C
Adear este cdigo en encoders u otros dispositios siilares
(odeos utili>arlo dentro de una -uncin con las ariales coo locales el
cdigo actuando dentro de una parte u especFca del proecto% coo por
eeplo% en el enE eco con una GH unos otones