Está en la página 1de 14

Universidad Tecnológica De Panamá

Facultad de Eléctrica

Asignatura: Sistemas De Potencia 1

Grupo: 1SE241

Profesor: Filadelfio Caballero

Estudiante:
Jonathan Sousa 7-709-778
Ana Camargo 3-738-355

Año: IV

Tema: Informe De Proyecto Final

Fecha de Entrega: 14-7-2018

I SEMESTRE 2018
Medidor RPM
Objetivo
El objetivo de nuestro proyecto es crear un medidor de velocidad de un motor DC mediante la utilización de
Arduino. Para lograr esto, es necesario tener un conocimiento acerca de Arduino y de fundamentos elementales de
medición.

Introducción Del Proyecto


Se desea medir la velocidad de un motor DC-6V, mediante la utilización de un disco encoder y un optocoplador.
El disco encoder estará sujeto directamente al eje del motor DC y el optocoplador estará conectado a un pin del
arduino para la debida lectura de pulsos; a su vez, un potenciómetro se encargará de variar la velocidad del motor
DC que queremos sensar.
Materiales
 Arduino UNO
 Resistencias de 150Ω (1), 10K Ω (1) y 1K Ω (7)
 Optoacoplador De Herradura
 Pantalla De Cristal Líquido I2C
 Módulo L298N
 Potenciómetro de 50k
 Motor de 6V DC
 Disco de 2mm de diámetro, con 20 orificios de 1cm cada uno
 Cables conexión de pines de arduino
 7 Leds (1Rojo, 2Azules, 2 Amarillos y 2 Verdes)
 Cable De Comunicación Serial
 Tacómetro
 Adaptador de 6V DC, 2Amp
 Protoboard
Descripción de los módulos utilizados
Antes de proceder al desarrollo y a la descripción detallada del proyecto, se debe de conocer las propiedades de los
elementos usados en el proyecto.
Los elementos utilizados son:
Módulo L298N
Este módulo basado en el chip L298N nos permite controlar dos motores de corriente continua o un motor paso a paso
bipolar de hasta 2 amperios.
El módulo cuenta con todos los componentes necesarios para funcionar sin necesidad de elementos adicionales, entre ellos
diodos de protección y un regulador LM7805 que suministra 5V a la parte lógica del integrado L298N Cuenta con
jumpers de selección para habilitar cada una de las salidas del módulo (A y B). La salida A esta conformada
por OUT1 y OUT2 y la salida B por OUT3 y OUT4. Los pines de habilitación son ENA y ENB respectivamente.
A continuación, una ilustración del módulo, con la definición de sus pines de salida y entrada.
L298N

Conexión de alimentación
Este módulo se puede alimentar de 2 maneras gracias al regulador integrado LM7805.

Cuando el jumper de selección de 5V se encuentra activo, el módulo permite una alimentación de entre 6V a 12V DC.
Como el regulador se encuentra activo, el pin marcado como +5V tendrá un voltaje de 5V DC. Este voltaje se puede usar
para alimentar la parte de control del módulo ya sea un microcontrolador o un Arduino.
Cuando el jumper de selección de 5V se encuentra inactivo, el módulo permite una alimentación de entre 12V a 35V DC.
Como el regulador no está funcionando, tendremos que conectar el pin de +5V a una tensión de 5V para alimentar la parte
lógica del L298N. Usualmente esta tensión es la misma de la parte de control, ya sea un microcontrolador o Arduino.
Pantalla De Cristal Líquido I2C

El Módulo adaptador LCD/I2C que usaremos está basado en el controlador I2C PCF8574, el cual es un Expansor de
Entradas y Salidas digitales controlado por I2C.
La dirección I2C por defecto del módulo puede ser 0x3F o en otros casos 0x27. Es muy importante identificar
correctamente la dirección I2C de nuestro modulo, pues de otra forma nuestro programa no funcionará correctamente.
Para identificar la dirección especifica de nuestro módulo podemos utilizar un pequeño sketch de prueba llamado: I2C
Scanner, el cual nos permite identificar la dirección I2C del dispositivo conectado al Arduino.
Para controlar el contraste de los dígitos en el LCD solo necesitamos girar el potenciómetro que se encuentra en el
módulo, hasta quedar conformes con el contraste mostrado.
La luz de fondo se controla principalmente por software desde el Arduino, pero el módulo también permite desconectar el
Led de la luz de fondo removiendo un jumper LED.

Conexiones entre Arduino y Módulo LCD I2C


Para conectar con el modulo con el Arduino solo utilizamos los pines I2C del Arduino (SDA y SCL) y alimentación (GND
y 5V), los pines I2C varían de acuerdo al modelo de Arduino con el que trabajemos, en la siguiente tabla podemos ver
cuáles son los pines I2C para cada modelo de Arduino.

Arduino
Adaptador LCD a I2C Arduino Uno, Nano, Mini. Arduino Mega , DUE
Leonardo

GND GND GND GND

VCC 5V 5V 5V

SDA A4 20 2

SCL A5 21 3
Conexión De Pantalla

A continuación, mostraremos el esquema de conexiones referente a la nuestra pantalla LCD I2C


Figura 1

La figura 1, es una ilustración de las conexiones que se deben hacer directamente con el arduino, sin tener que usar ningún
protoboard o placa de cobre en la cual, los pines de 5V y GND de arduino necesiten estar conectados a más de un solo
punto.

Optocoplador
Se obtendrán los datos de lectura mediante los flancos de subida que sufra nuestro sensor, en este caso utilizamos un
optocoplador que consta de un led que se mantiene encendido y que envía un haz de luz infrarroja a un fototransistor, la
forma de herradura del sensor, tiene un espacio entre el emisor y el receptor por el cual estará girando nuestro disco
encoder (Asociado directamente al eje del motor), este es un principio conocido como sensor de barrera.
Conexión del circuito de lectura óptica al Arduino
Esquema Eléctrico:
Figura 2

Esquema Físico:
Figura 3
Módulo L298N
El módulo L298N estará energizado por una fuente externa de 6V, el “jumper” de “6V a 12V”, debe estar habilitado. El
modulo mismo debe tener en su pin negativo de la fuente externa, un cable que conecte el negativo de la fuente externa
con el “GND” del arduino.
Además de que los pines del módulo “IN3,IN4 y ENB” deben estar conectados al arduino de la siguiente forma:
IN3  Conectado al pin 4 (Controla la dirección de giro del motor en sentido horario)
IN4  Conectado al pin 5 (Controla la dirección de giro del motor en sentido anti-horario)
ENB  Conectado al pin 3 (Recibe la señal PWM de arduino y la envía a los pines de salida OUT4 y OUT3 para
accionar el giro del motor y la variación del mismo )

Esquema de Conexión
Figura 4
Esquema de conexiones completo
A continuación, en la figura 5, se presenta el esquema de todos los elementos empleados en nuestro proyecto.
Figura 5
Explicación De La Programación
Función para el sensado: La función utilizada para sensar los pulsos del optocoplador fue “attachInterrupt”.
Esta función nos va a permitir definir o configurar uno de los pines como un puerto de interrupción. Los tres parámetros
que admite son:
 pin: debemos llevar especial cuidado con este parámetro. Indica que pin vamos a utilizar como interrupción. No
debemos pasar el número de pin, debemos pasar el ordinal, es decir, si trabajamos con Arduino UNO tenemos dos
pines para interrupciones el 2 y el 3. Si queremos utilizar el 2 debemos poner un 0 y si queremos utilizar el 3
debemos poner un 1. En nuestro caso se utilizó la interrupción “0”, por ende, conectamos el lector del sensor al
pin 2.
 ISR: Es la función o método que se llama cuando se produce la interrupción. Es de un tipo particular ya que no
admite parámetros y tampoco devuelve ningún valor.
En nuestro caso se ideo un contador dentro de otra función de nombre “interrupción0”.
 modo: define cuando debe ser disparada la interrupción. Puede tomar cuatro valores constantes dependiendo de lo
que queramos hacer:
LOW: se lanzará la interrupción cuando el pin esté en estado bajo.
CHANGE: se lanzará la interrupción cuando el pin cambie de valor de alto a bajo, o de bajo a alto.
RISING: se lanzará la interrupción cuando el pin cambie de estado de bajo a alto.
FALLING: se lanzará la interrupción cuando el pin cambie de estado de alto a bajo.
En nuestro caso utilizamos el modo “RISING”.
Mediante el flanco de subida que detecte el pin 2 de arduino, se ejecutará la función “interrupción0” la cual lleva
un contador y este se ejecuta cada vez que haya un flanco de subida en el pin 2.
Dentro del void loop se establece un retardo de casi 1 segundo para llevar el conteo de la cantidad de
interrupciones que se tienen en 1 segundo aproximadamente. El contador de la función de interrupción0
aumentará y lanzará la cantidad de pulsos contados en 1 segundo a nuestra ecuación de RPM
Al querer presentar la cantidad de revoluciones por minuto, y al haber establecido un delay de 1 segundo.
60 𝑆𝑒𝑔𝑢𝑛𝑑𝑜𝑠
Fijaremos la ecuación 𝐶𝑎𝑛𝑡𝑖𝑑𝑎𝑑 𝐷𝑒 𝑂𝑟𝑖𝑓𝑖𝑐𝑖𝑜𝑠 𝐷𝑒𝑙 𝐷𝑖𝑠𝑐𝑜 𝐸𝑛𝑐𝑜𝑑𝑒𝑟, dado que nuestro disco consta de 20 orificios se
60 𝑆𝑒𝑔𝑢𝑛𝑑𝑜𝑠
divide 20
= 3. Dando como resultado la siguiente ecuación.
rpm=contador*3, con esta ecuación se obtuvieron mediciones con un margen de error que fue corregido tomando
como punto de referencia los valores de un tacómetro.

Lectura De Potenciómetro
El potenciómetro fue leído en el pin analógico A0, en donde no se hizo transformación de los datos del ADC para saber la
entrada máxima y mínima que presentara en ese pin.
Las mediciones de resistencia del potenciómetro arrojaron los siguientes valores:
Tabla 1
Valores Resistencia ( Ohms)
Máximo 48600
Mínimo 0

Las mediciones de voltaje que llegaba al pin arrojaron las siguientes mediciones:
Tabla 2
Valores Voltaje
Máximo 4.95
Mínimo 0

Los datos obtenidos en función de la entrada de voltaje fueron los siguientes:


Tabla 3
Valores Datos
Máximo 1021
Mínimo 4

Salida PWM
Se intentó implementar una rampa de salida que fuese directamente proporcional a los datos de entrada obtenidos en el pin
A0, pero el comportamiento del sensor no era línea. Se logró variar la velocidad del moto, pero se pueden realizar
mejoras.
Los valores de datos en relación a la entrada de voltaje de la tabla 2 se linearizaron con los datos de salida de PWM de la
siguiente forma:
Tabla 4
SALIDA PWM/RPM
PWM
255
0
Salida
131.1728395
(255−0)
Salida PWM=(1021−4) ∗ (𝐷𝑎𝑡𝑜𝑠)

Salida PWM=Datos*0.249755142
En el programa nuestra ecuación es MT=Pot*0.249755142, en donde “Pot” se refiere a la lectura de datos del
potenciómetro.
Se le asignó un dato al pin 4 de “HIGH”, para obtener el giro de motor en sentido horario y un valor de “LOW” al pin 5
para que evitar que el motor intentara girar en los 2 sentidos a la vez.
Impresión En Pantalla LCD I2C
En la pantalla LCD se realizó la impresión de los datos leídos por el potenciómetro y se imprimió el resultado de la
ecuación de RPM.
Código utilizado
A continuación, copiaremos el código empleado:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// set the LCD address to 0x27 for a
// 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
//Variable donde almacenaremos el valor del potenciómetro
long Pot;
volatile int contador = 0; // Variable entera que se almacena en la RAM del Micro
volatile int rpm = 0;
int IN3 = 5; // Input3 conectada al pin 5
int IN4 = 4; // Input4 conectada al pin 4
int Motor = 3; // ENB conectada al pin 3 de Arduino
float MT = 0; //VARIABLE DE SALIDA DEL MOTOR

void setup() {
pinMode (Motor, OUTPUT);
pinMode (IN3, OUTPUT);
pinMode (IN4, OUTPUT);
Serial.begin(57600);
attachInterrupt(0, interrupcion0, RISING); // Interrupción 0 (pin2), Interrupción 1 (pin 3)
lcd.init();
lcd.backlight();
}
void loop() {
delay(999); // retardo de casi 1 segundo
rpm = contador * 3;
Serial.print(rpm); // Como son 20 interrupciones por vuelta (contador * (60/20))
Serial.println(" RPM"); // El numero 2 depende del numero aspas de la hélice del motor en prueba
contador = 0;
MT = Pot * 0.2507374631268440;
Pot = analogRead(A0);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("POT=");
lcd.print(Pot);
lcd.setCursor(0, 1);
lcd.print("RPM=");
lcd.print(rpm);
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
analogWrite(Motor, MT);
}
void interrupcion0() // Función que se ejecuta durante cada interrupción
{
contador++; // Se incrementa en uno el contador
}

Resultados obtenidos
Mediante el muestreo en intervalos de 5 segundos durante 40 segundos se obtuvieron los datos de la tabla , estos mismos
datos fueron utilizados para corregir el factor por el cual se debe multiplicar el contador.
Tabla 5
Tiempo Velocidad Medida OPTO - Velocidad Medida
(seg) RPM TACO - RPM
5 3072 2955
10 3060 2953
15 3063 2951
20 3060 2953
25 3057 2951
30 3060 2956
35 3072 2953
40 3054 2955

Error En La Medición
El error en la medición, se obtuvo de los resultados de nuestro medidor y se referenció con los valores medidos por un
tacómetro:

Error=Valor Real – Valor Medido, aplicando esta ecuación al muestreo realizado se obtuvieron los siguientes valores
Tabla 6
Tiempo (seg) Velocidad Medida Velocidad Medida TACO - Error - RPM
OPTO - RPM RPM
5 3072 2955 -117
10 3060 2953 -107
15 3063 2951 -112
20 3060 2953 -107
25 3057 2951 -106
30 3060 2956 -104
35 3072 2953 -119
40 3054 2955 -99

Corrección Del Error De Medición


Se sacaron se sacó la relación de error para cada tiempo correspondiente y de todas estas relaciones se calculó una
relación de error promedio.
La ecuación empleada fue la siguiente:
𝑉𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑 𝑀𝑒𝑑𝑖𝑑𝑎 𝑇𝑎𝑐𝑜
Relación=𝑉𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑 𝑀𝑒𝑑𝑖𝑑𝑎 𝑂𝑃𝑇𝑂, para la cual se obtuvieron los siguientes resultados con el máximo valor de datos de

1021:
Tabla 7

Tiempo (seg) Velocidad Medida OPTO - RPM Velocidad Medida TACO - RPM Error - RPM Relaciòn De Error (Tacometro/Arduino)
5 3072 2955 -117 0.961914063
10 3060 2953 -107 0.96503268
15 3063 2951 -112 0.963434541
20 3060 2953 -107 0.96503268
25 3057 2951 -106 0.965325482
30 3060 2956 -104 0.966013072
35 3072 2953 -119 0.961263021
40 3054 2955 -99 0.967583497
Promedio De Relacion De Error 0.964449879

Multiplicar Este valor por el contador 0.9644498794


Mùltiplo Correcto De la division de 60 2.893349638334060
Una vez sacado la relación de error promedio se procedió a la multiplicación de la misma por el número 3, dando como
resultado 2.893349638334060, entonces mediante tanteo de esta variable que, multiplicada por el contador, nos da un
valor muy aproximado a lo que leía el tacómetro. Y se cambió ese factor en el código. Explícitamente en la ecuación de
RPM=contador*2.91 (El error se redujo, mucho más al aumentar en 2 decimales el resultado calculado. Obteniendo las
siguientes mediciones, con el máximo valor de datos( ADC=1021).
Tabla 8

Tiempo (seg) Velocidad Medida OPTO - Velocidad Medida TACO - RPM Error - RPM
RPM
5 2857 2858 1
10 2831 2836 5
15 2840 2845 5
20 2854 2858 4
25 2840 2843 3
30 2840 2845 5
35 2828 2831 3
40 2848 2852 4

Logrando con los procedimientos anteriores una medición más cercana a los valores medidos por el tacómetro ya
estandarizado.
Conclusión
La utilización de la lectura del potenciómetro como referente para variar la salida PWM del arduino, pudo afectar la
velocidad dado que el potenciómetro no presentaba características lineales. Sin embargo, se logró variar la velocidad del
motor y con ello se logró ver el comportamiento de nuestro medidor ante los cambios de velocidad.
Luego de realizar las correcciones en la ecuación de rpm, se pudo observar una notable mejora en las mediciones con
errores de valores máximos de 5pm de diferencia.