Upload
boris-portugal
View
2.113
Download
1
Embed Size (px)
Citation preview
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