DC Motor Control Using an H

download DC Motor Control Using an H

of 41

Transcript of DC Motor Control Using an H

  • 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