nov 2, 2016 0 Comments Arduino

Arduino - Sensor de corriente

En este tutorial vamos a realizar un proyecto interesante con el sensor de corriente ACS712-30A, este proyecto consiste en obtener la medición del consumo de la corriente de una bombilla haciendo uso de este sensor y se visualizará en una pantalla LCD 16x2, también este dato será enviado a un smartphone, por medio de bluetooth, para que pueda ser visto en la aplicación que diseñaremos en App Inventor.

Primero veremos  las características del sensor de corriente ACS712-30A, las conexiones para el circuito, la programación realizada para arduino y el desarrollo de la aplicación para Android.

El sensor de corriente ACS712ELCTR-30A-T, es un dispositivo económico y preciso que nos ayuda a obtener el consumo de la corriente, tanto alterna como continua, de un circuito; por sus pequeñas dimensiones, lo hace muy ideal para cualquier proyecto o aplicación que requiera realizar esta medición.

Sus principales características son:

Para  más información puede consultar al datasheet haciendo clíck aquí.

De este tipo de sensor hay 3 versiones, que se diferencian en la cantidad de corriente que es capaz de soportar, esos son:

La respuesta de salida de este sensor es proporcional a la corriente que se esta midiendo, siendo el mínimo -30 A (0V), el máximo 30 A (5V) y 2.5V cuando es 0 A.

Primero se realizará el circuito eléctrico como se muestra en la imagen superior, antes de realizar las pruebas, cabe recordar que se debe de desconectar el módulo de bluetooth HC-05, al momento que se esta cargando el programa en el arduino; debido a que si esta conectado módulo, este interferirá con la comunicación en serie del arduino.

Midiendo Corriente Continua

Para obtener la medición; solo queda obtener la lectura analógica del sensor, que en el arduino será desde 0 a 1023,  luego se realiza una proporción para que este en los rangos de voltaje de 0 a 5v, obteniendo la siguiente formula:

Voltaje de salida=(5.00/1023)*Lectura del sensor

Luego de obtener el voltaje de salida del sensor, usamos una condición para que se consideren solo valores mayores o igual a 2.5, ya que estos son los valores para una corriente de 0 a 30 A, mientras que menores de este corresponde de 0 a -30 A, el cual podríamos considerar como 0; si se realiza esto, debemos de considerar el sentido de la corriente; para ello, si es necesario, habrá que cambiar el orden de conexión de los cables en la entrada del sensor.

Para realizar la conversión se resta 2.5 del valor del voltaje medido y se divide entre la sensibilidad; este  es un factor de conversión para obtener la corriente medida por medio del voltaje entregado, esto se encuentra en el datasheet, y para el modelo que estamos usando, ACS712ELCTR-30A-T, la sensibilidad es de 0.066 Voltios por cada amperio, la formula quedaría de la siguiente manera:

Corriente medida=(Voltaje de salida-2.5)/sensibilidad

Ahora solo queda imprimir el valor por la pantalla LCD y enviarlo por medio de bluetooth al smartphone.

Midiendo Corriente Alterna

Primero hallamos el voltaje enviado desde el sensor con esta misma fórmula:

Voltaje de salida=(5.00/1023)*Lectura del sensor

Si la corriente es alterna, hay que emplear una fórmula para obtener el voltaje RMS:

Vrms= (1/2*√2)*Vpp  ........1

En donde:

       Vrms: Es el voltaje  RMS.

       Vpp:   Es el voltaje pico a pico de la onda senoidal.

En la programación el voltaje pico a pico, se obtiene de la resta del voltaje máximo con el mínimo, debido a que en el voltaje máximo se esta considerando además de la parte positiva, toda la parte negativa; así que se realiza esta resta para quitar esa parte negativa que esta sobrando y así solo nos quedamos con el voltaje pico a pico.

Una vez que se ha obtenido el voltaje RMS, vamos a pasar a convertirlo a la corriente RMS que se esta midiendo, para ello se le divide entre la sensibilidad del sensor:

Irms= Vrms/Sensibilidad ......2

Si complementamos la fórmula 1 en la 2 obtenemos:

Irms= (1/2*√2)*Vpp/Sensibilidad

Irms=5.3568*Vpp

Y esta es la fórmula para obtener la corriente RMS de un circuito de corriente alterna.

Ahora que ya conocemos las fórmulas para obtener la medición de la corriente, tanto en continua como en alterna, continuamos con el desarrollo de la programación para el arduino.

CONTROL DEL SENSOR DE CORRIENTE CON ARDUINO
//Sensor de corriente v3

#include <LiquidCrystal.h>         //Seincluye la libreria para la pantalla LCD

#define rele 2   //Se define el pin  de salida para el rele

unsigned long previousMillis = 0; //Variable que indica el tiempo que ha pasado en ms
const long interval = 1000;       //Variable asignado para el intervalo de tiempo, es 1s
char comando;                     //Variable que guarda el valor recibido por el puerto serie
double voltajeInst;             //Variable para la corriente instantanea
double voltajeMax;              //Variable para la corriente máxima
double voltajeMin;              //Variable para la corriente mínima
int potencia;                     //Variable para guardar la potencia
float  Irms;                      //Variable para la corriente rms
int nMuestras=500;                //Numero de muestras realizadas en una medición

LiquidCrystal LCD1(8,9,10,11,12,13); //pines asignados para la pantalla LCD

//Configuración y presentación
void setup() {
Serial.begin(9600);               //Se configura el puerto serial a 9600 baudios
pinMode(rele, OUTPUT);            //Se declara el pin 2 como salida
LCD1.begin(16,2);                 //Se cofigura el LCD de  16x2
LCD1.clear();                     //Se borra toda la pantalla
LCD1.setCursor(0,0);              //Se coloca el cursor al inicio de la pantalla
LCD1.print("Sensor de______");    //Se imprime el mensaje entre comillas
LCD1.setCursor(0,1);              //Se coloca el cursor en la segunda línea
LCD1.print("______Corriente.");   //Se imprime el mensaje entre comillas
delay(5000);                      //Se realiza una espera de 5 segundos
}

//Programación que se ejecutará continuamente
void loop() {
  unsigned long currentMillis = millis(); //Se asigna a esa variable el tiempo que esta pasando
  //Se inicia las variables iniciales para la corriente máxima y mínima
   voltajeMax=0.00;                        
    voltajeMin=5.00;

  //Se toma una medición, para ello se realizan 500 muestras
for(int a=0; a<nMuestras; a++){           //En este ciclo for se realizan las 500 muestras

    voltajeInst=5.00/1023*analogRead(A0);//Se normaliza el valor obtenido desde el sensor
    
  if(voltajeInst>=voltajeMax){        //Si la corriente instantanea es mayor a la corriente máxima...
    voltajeMax=voltajeInst;           //Se asigna ese valor a la corriente máxima
  }
  if(voltajeInst<=voltajeMin){        //Si la corriente instantanea es mayor a la corriente mínima...
    voltajeMin=voltajeInst;           //Se asigna ese valor a la corriente mínima
  }
}
  float Vpp=voltajeMax-voltajeMin;    //Se halla la corriente pico a pico; 
  //Se obtiene la corriente rms por la siguiente formula, la resta es una tolerancia
  Irms=(5.3568*Vpp)-0.15;              
  if(Irms<=0){                            //Si la corriente rms es menor o igual a 0...
    Irms=0;                               //Se le asigna 0
  }
  potencia=Irms*220;                      //Para hallar la potencia se suma con el voltaje rms
  
  comando=Serial.read();                  //Se realiza la lectura por el puerto serial  
  if(comando=='a'){                       //Si se recibió la letra a...
    digitalWrite(rele, HIGH);             //Se activa el relé
  }
  if(comando=='b'){                       //Si se recibió la letra b...
    digitalWrite(rele, LOW);              //Se desactiva el relé
  }

  //Se revisa si el tiempo transcurrido es mayor o igual a 1 segundo
 if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;       //Se asigna el valor del tiempo actual
  
  Serial.println(Irms);                   //Se envia por mensaje serial el valor de la corriente rms
 
  LCD1.clear();                           //Se borra toda la pantalla
  LCD1.setCursor(0,0);                    //Se coloca el cursor al inicio de la pantalla
  LCD1.print("Corriente: ");              //Se imprime en el LCD el mensaje entre comillas
  LCD1.print(Irms);                       //Se  imprime el valor de la variable Irms
  LCD1.print("A");                        //Se imprime en el LCD la letra entre comillas
  LCD1.setCursor(0,1);                    //Se coloca el cursor al inicio de la segunda linea
  LCD1.print("Potencia: ");               //Se imprime en el LCD el mensaje entre comillas
  LCD1.print(potencia);                   //Se  imprime el valor de la variable potencia
  LCD1.print("W");                        //Se imprime en el LCD la letra entre comillas
 }
}



Aplicación con App Inventor:

Primero se realizó el diseño, quedando de la siguiente manera:

En este diseño se observa que la aplicación cuenta con una caja de texto seguido por la letra "A" de amperios, también vemos dos botones que son para encender o apagar el foco u otro artefacto.
Por último hay tres botones, el primero es para seleccionar la dirección del bluetooth al que nos queremos conectar, el segundo para desconectarse y acabar la comunicación, la tercera es simplemente para salir de la aplicación.

Ahora analicemos la programación con bloques:
En esta primera imagen vemos que se inicia el "StartActivity" al entrar a la aplicación, luego hay un "listPicker" que es nuestro botón de conectar, el que nos presentará los dispositivos con bluetooth sincronizados con nuestro smartphone, después de escoger algún dispositivo este se conectará automáticamente. El botón 6 será usado para terminar la comunicación.


Ahora en el primer temporizador, que es de 1 segundo, primero se verifica si hay una conexión, si es así se inhabilita el teclado para que no aparezca en la caja de texto y se muestra el dato recibido por bluetooth.
Sí es que no esta conectado, se mostrará el mensaje "No Conectado".



En esta última parte vemos el segundo temporizador, que es de 10 segundos, en la que no se muestra nada en la caja de texto; también esta programado que cuando se pulse el botón 4 se enviará la letra "a" por bluetooth, si se presiona el botón 5 se  enviará la letra "b", esto serán enviados al arduino para encender o apagar el foco, por medio del módulo relé.
Finalmente el botón 3 será para salir de la aplicación, cuando este sea pulsado.

Puedes descargar todos nuestros archivos en los siguientes links, el código en formato arduino, la aplicación en .apk y el archivo en formato .aia; para que pueda ser modificado o mejorado desde el entorno de desarrollo de AppInventor.


*Código para Arduino
*Aplicación en APK para Android.
*Archivo de la aplicación en AppInventor

Si deseas armar este proyecto, puedes encontrar todos los productos en nuestra tienda.

Related Articles

Leave a Reply

* Name:
* E-mail: (Not Published)
Website: (Site url with http://)
* Comment:
Type Code
* Envio en 

24 horas

*

Se entrega número de seguimiento

View details