81206618 tacometro usando arduino uno

Upload: boris-portugal

Post on 30-Oct-2015

2.113 views

Category:

Documents


1 download

TRANSCRIPT

  • Vctor Solrzano

    Alejandro Alemn

    Tpicos selectos de control.

    Prof. Dr. Horacio Orozco

    Tacmetro usando Arduino Uno

    Para medir velocidad se consideraron dos opciones:

    1. Medir el tiempo entre dos pulsos (o alguna otra cantidad predefinida de pulsos) y calcular

    la velocidad correspondiente.

    2. Contar la cantidad de pulsos en un intervalo de tiempo predefinido.

    Se decidi utilizar la segunda opcin. En el programa de arduino se definieron las siguientes

    constantes:

    1. interval

    Para facilitar la modificacin del intervalo de tiempo constante para el cual se cuentan los pulsos.

    2. Pulsrev

    t=variable

    t=constante

    Cantidad de pulsos

    variable

    Cantidad de pulsos

    constante

  • Para facilitar la modificacin del encoder. Es la cantidad de pulsos que enva el encoder por cada

    revolucin.

    La conversin a velocidad se realiza de la siguiente manera:

    Donde:

    es la cantidad de pulsos contada.

    es el intervalo de tiempo fijado en la constante interval en ms.

    es el inverso de la cantidad de pulsos por cada revolucin (fijado en la constante pulsrev).

    El resto son factores de conversin de tiempo para ms -> min.

    La operacin en el Arduino se realiza de la siguiente manera:

    Esto se hace por que se est utilizando el tipo de datos entero, se busca tener un nmero grande

    antes de realizar las divisiones. Esto porque, si el resultado de una divisin es menor que 1

    provocar un error en la medicin de la velocidad.

    Para medir el tiempo se utilizar la funcin de Arduino millis(), esta funcin cuenta el tiempo en

    milisegundos desde el momento en que comenz a funcionar el Arduino.

    El funcionamiento del programa depende de la funcin de interrupcin externa con que cuenta el

    Arduino. La mayora de los arduinos tienen la interrupcin 0 en el Pin2 digital, esta interrupcin

    es la que ser utilizada.

    Citando [1]

    Las interrupciones son un mecanismo por el que un dispositivo, ante la ocurrencia de un

    evento, pide al procesador que interrumpa el programa que se est ejecutando y pase a

    ejecutar temporalmente una subrutina especfica. Esta subrutina recibe el nombre de rutina de

    atencin a la interrupcin.

    velocidad=contador*1000*60;

    velocidad=velocidad/pulsrev;

    velocidad=velocidad/interval;

  • La interrupcin en el Arduino se inicializa de la siguiente manera:

    El material necesario es:

    - Arduino Uno

    - Optoswitch

    - Motor

    - Disco de encoder

    - Resistencias

    El diagrama de conexin es el siguiente

    Donde R2 es una resistencia limitadora de corriente para proteger el led del optoswitch. R1 sirve

    para que cuando el optoswitch est desactivado el pin2 del Arduino se aterrice de esta manera

    siempre tendr o 5V o 0V (si no se aterriza puede provocar errores en la lectura y por tanto en el

    disparo de la interrupcin).

    El diagrama de flujo de funcionamiento del programa es el siguiente:

    attachInterrupt( 0, conteo, FALLING);

    | | |

    | | ->Dispara la interrupcin en el

    | | borde de bajada del pulso

    | | enviado por el encoder.

    | ->Al entrar la interrupcin llama a la

    | subrutina conteo.

    ->Se est utilizando la interrupcin 0 (Pin2

    digital)

    Al pin digital 2 del Arduino

  • El cdigo completo es:

    Referencias

    [1] Zuloaga, A., Astarloa, A., 2008, Sistemas de procesamiento digital, Delta Publicaciones,

    Madrid, Espaa.

    const int buttonPin=2;

    const int ledPin=13;

    long previousMillis=0;

    long interval = 250;

    // pulsos por revolucion

    long pulsrev=55;

    long velocidad=0;

    volatile long contador=0;

    int buttonstate=0;

    int lastbuttonstate=0;

    void setup () {

    pinMode (buttonPin, INPUT);

    pinMode(ledPin,OUTPUT);

    attachInterrupt(0, conteo, FALLING);

    Serial.begin(9600);

    }

    void loop(){

    unsigned long currentMillis = millis();

    if(currentMillis - previousMillis > interval) {

    previousMillis = currentMillis;

    // Serial.print("cont = " );

    //Serial.println(contador);

    if (contador