Monitorización de corriente continua


La medición de la Intensidad de la corriente siempre es un poco desafiante, ya que tenemos que medirla en un circuito en serie pues por lo general, la medición no es posible sin romper un circuito, insertando algunos cables para la medida.

Hay algunos métodos directos que utilizan una masa comun entre el dispositivo medido y el dispositivo de medición con la ayuda de un registro entre ellos. Pero tales métodos son nunca tan confiables debido al uso de una masa común, que puede hacer que los sistemas sean inestables.

Los sensores podrían ayudar a resolver este desafío. Los sensores como el INA219 de Texas Instruments operan en una configuración de bus I2C que hace posible medir la corriente viva.

  • El módulo del sensor de corriente está configurado para monitorear la caída de voltaje de los pines y el voltaje de alimentación del bus, tiempos de conversión y opciones de filtro.
  • El valor de calibración programado del módulo de corriente digital de alta precisión se combina con un multiplicador interno para admitir la lectura directa de corriente.
  • El INA219 es un monitor de alimentación y bypass que admite la interfaz I2C o SMBUS.
  • La función de consumo de energía ultrabajo del módulo del sensor de corriente de la interfaz I2C se puede utilizar de manera adecuada y adecuada en equipos que funcionan con baterías.
  • El módulo del sensor de corriente se caracteriza por una salida de señal I2C, que puede comunicarse directamente con el sistema principal.

ina219 Stromsensormodul

En este proyecto, la primera parte fue conectar este sensor con una MCU , que en este caso fue un ESP32 con Arduino IDE debido a su facilidad de uso y capacidad para monitoreo remoto a través de internet ,aunque también puede funcionar con una Raspberry Pi como vamos a ver.

En el caso de usar como MCU una Raspberry el desafío que se enfrentó el autor fue encender esta a través de GPIO usando un convertidor de USB a TTL. El Raspberry Pi no se inicia y las medidas tampoco aparecen ,pero el autor encontró una solución sobre la marcha.

Ahora, se tiene la solución para encender RaspberryPi a través de GPIO. El problema es que se requiere usar GPIO 2 y 4 para suministrar energía de 5V y GPIO 6 para suministrar tierra.

La siguiente imagen muestra el Pi en ejecución a través de Putty y sus actualizaciones, la imagen es el gráfico de la absorción de corriente en mAmps por Pi, alcanzando el máximo alrededor de 900 mAmps solo a veces.

Normalmente permanece alrededor de 500mAmps.

Cuando la RaspberryPi funciona con comandos sudo de apagado todavía hay algo de energía requerida por el LED de estado y otras funciones internas. Si desenchufamos el cable, el consumo de energía será cercano a cero, como en las siguientes capturas de pantalla.

Tambien se puede agregar una pequeña pantalla que pudiera mostrar los datos en vivo para el monitoreo de energía por ejemplo una pantalla LCD SSD1306 para que funcione.

Una idea más es que los datos de monitoreo de energía se pueden enviar a los ruidosos, como AWS IoT, donde los datos se manipulan de manera efectiva, pero eso es demasiado para un dispositivo tan pequeño. Además, no encaja con el proyecto.

Una cosa más interesante es que un PoE HaT para RaspberryPi (básicamente cualquier placa) podría tener capacidad de monitoreo actual con LCD. Sería interesante saber qué parte del software / hardware consume más energía.

A continuación el código del proyecto para Arduino con los comentarios en español;

    #include <Adafruit_GFX.h>  
    #include <Adafruit_SSD1306.h>  
    #include <Wire.h>  
    #include <Adafruit_INA219.h>  
      
      
    #define SCREEN_WIDTH 128 // Ancho de pantalla OLED, en píxeles  
    #define SCREEN_HEIGHT 32 // Altura de la pantalla OLED, en píxeles  
      
      
    #define OLED_RESET 4 // Restablecer el pin # (o -1 si se comparte el pin de restablecimiento de Arduino)  
    #define SCREEN_ADDRESS 0x3C /// <Consulte la hoja de datos para la dirección; 0x3D para 128x64, 0x3C para 128x32  
    Pantalla Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, & Wire, OLED_RESET);  
      
      
    Adafruit_INA219 ina219;  
      
     void setup()   
    {  
      Serial.begin ( 115200 );  
      while  (! Serial) {  
          // pausará Zero, Leonardo, etc.hasta que se abra la consola serie  
       delay( 1 );  
      }  
      if (! display.begin (SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {  
        Serial.println (F ( "Falló la asignación SSD1306" ));  
       halt (;;); // No continúes, bucle para siempre  
      }  
      display.display ();  
      delay ( 2000 ); // Pausa por 2 segundos  
      display.clearDisplay ();  
        
      uint32_t currentFrequency;  
          
      Serial.println ( "¡Hola!" );  
        
      // Inicializa el INA219.  
      // Por defecto, la inicialización usará el rango más grande (32V, 2A). Sin embargo  
      // puede llamar a una función setCalibration para cambiar este rango (ver comentarios).  
      if  (! ina219.begin ()) {  
        Serial.println ( "No se pudo encontrar el chip INA219" );  
        while  ( 1 ) {retraso ( 10 ); }  
      }  
      // Para usar un rango de 32V, 1A ligeramente más bajo (mayor precisión en amperios):  
      //ina219.setCalibration_32V_1A();  
      // O para usar un rango más bajo de 16V, 400mA (mayor precisión en voltios y amperios):  
      //ina219.setCalibration_16V_400mA();  
      
      
      Serial.println ( "Medición de tensión y corriente con INA219 ..." );  
    }  
      
      
     void loop ()   
    {  
       tensión de derivación de flotación =  0 ;  
       voltaje del bus flotante =  0 ;  
      flotar  current_mA =  0 ;  
       voltaje de carga flotante =  0 ;  
      flotación  power_mW =  0 ;  
      
      
      shuntvoltage = ina219.getShuntVoltage_mV ();  
      busvoltage = ina219.getBusVoltage_V ();  
      current_mA = ina219.getCurrent_mA ();  
      power_mW = ina219.getPower_mW ();  
      tensión de carga = tensión de bus + (tensión de derivación /  1000 );  
        
      //Serial.print("Bus Voltage: "); Serial.print (busvoltage); Serial.println ("V");  
      //Serial.print("Shunt Voltage: "); Serial.print (shuntvoltage); Serial.println ("mV");  
      //Serial.print("Load Voltage: "); Serial.print (voltaje de carga); Serial.println ("V");  
      Serial.print ( "Actual:" ); Serial.print (current_mA); Serial.println ( "mA" );  
      //Serial.print("Power: "); Serial.print (potencia_mW); Serial.println ("mW");  
      Serial.println ( "" );  
      
      
      delay( 10 );  
        
      display.clearDisplay ();  
      display.setTextSize ( 2 );  
      display.setTextColor (SSD1306_WHITE);  
      display.setCursor ( 5 , 5 );  
      display.print (current_mA);  
      display.print ( "mA" );  
      
      
        
    // display.setCursor (0,0);  
    // display.print (power_mW);  
    // display.print ("mWatt");  
        
      display.display ();  
      delay( 100 );  
      display.clearDisplay ();  
            
    }  


Fuente :https://www.element14.com 

Arduino sobre Ubuntu


Arduino IDE no se encuentra en los repositorios oficiales de Ubuntu, al menos en su última versión, por lo que tenemos que utilizar la web oficial del Proyecto para conseguir este IDE.

Actualmente existen dos versiones de Arduino IDE, una versión que corresponde a la rama 1.8.x y otra rama que corresponde con la versión 1.0.x. La diferencia entre ambas versiones radica en los modelos de placas que soportan: si descargamos la versión 1.8.x de Arduino IDE podemos cambiar en cualquier momento de placa y esta versión lo soportará ( si escogemos la versión 1.0.x hemos de cambiar el programa si cambiamos a una placa moderna, pues la rama 1.0.6 no soporta las placas de Arduino más modernas).

Una vez que hemos descargado el paquete de Arduino IDE desde aquí, descomprimimos el archivo comprimido en cualquier carpeta de nuestra home (mejor hacerlo ena Home y no en Descargas para evitar problemas cuando realizamos limpiezas en el futuro).

En el paquete que hemos descomprimido aparecerán varios archivos e incluso dos ejecutables, uno de ellos llamado Arduino-Builder, pero estos archivos ejecutables no seráa necesario para instalar Arduino IDE en nuestro Ubuntu

Una vez descomprimidos los archivos necesitaremos abrir una terminal en la carpeta donde están todos estos archivos, y desde la consola escribimos lo siguiente:

sudo chmod +x install.sh

Esta orden hará que el archivo de instalación pueda ejecutarse sin tener que ser root. Ahora ejecutamos en la terminal lo siguiente:

./install.sh

Puede que tenga problemas para ejecutar el instalable por los permisos, por lo que si fuese el caso solo tiene que escribir

sudo ./install.sh

Esto hará finalmente que comience la instalación de Arduino IDE en nuestro Ubuntu.

Tras seguir las instrucciones tendremos Arduino IDE instalado en nuestro Ubuntu y unacceso directo en nuestro escritorio. En este caso da igual la versión de Ubuntu que tengamos pues funciona con las últimas 10 versiones de Ubuntu que han sido lanzadas (versiones LTS incluidas).

Problemas con los puertos

Para los que esten aconstumbrados a usar el ide de Arduino sobre Windows , puede que les resulte extraño en la combinación Arduino-Ubuntu donde los puertos virtuales no se muestran del mismo modo, y con esto se desembocan en nuevos problemas, que como vamos a vers son facilmente resolubles.

COM1 es una designación de Windows (TM): se verá como/dev/ttyACM0,/dev/ttyUSB0 o similar en Linux.

El puerto atenuado tiende a significar que no ha configurado primero el tipo de placa: revise la configuración en arduino Menú Herramientas y configure la placa en ‘Uno’, también debería ver la habilitación de ‘puerto’ y el autocompletado.

puerto

El primer problema puede ser que el puerto Serial se encontraba deshabilitado, al momento de ingresar al IDE Arduino no detecta el puerto a pesar de encontrarse conectada la placa a la PC.Al acceder a  Herramientas/ Puerto Serial aparece como deshabilitado y esto NO permitirá que descarguemos nuestro código a la placa. Esto es debido a que el sistema no tiene permisos suficientes para poder establecer una comunicación a travez del puerto USB.

En linux, al conectar un USB le asigna un formato del tipo ttyACM0 o similar y esto se encuentra en la ubicación /dev.

Lo primero que tenemos que hacer es revisar como asigna el sistema operativo los puertos.Vamos abrir una terminal de ubuntu y antes de conectar el Arduino ejecutaremos el siguiente comando.

ls -l /dev | grep ACM

Si no hay ningún dispositivo conectado, no aparecerá ningún resultado. En caso contrario aparecerá asignado con algún nombre.

Ahora conectamos el arduino a la placa y ejecutamos el mismo comando.

Deberá aparecer una linea similar a

crw-rw—- 1 root dialout 166, 0 sep 25 14:42 ttyACM0

En este caso dice que solo el usuario root puede acceder al puerto.

Por lo tanto procedemos a brindarle permisos para los usuarios normales del sistema, ejecutamos e lo siguiente:

sudo chmod 777 /dev/ttyACM0

Donde ttyACM0 es el nombre que nos dio en el primer comando, este puede ser ttyACM1. Al ejecutar este comando les pedirá la contraseña del sistema. Para asegurarnos que ha cambiado los permisos ejecutamos de nuevo:

ls -l /dev | grep ACM

El resultado debe ser similar a:

crwxrwxrwx 1 root dialout 166, 0 sep 25 14:42 ttyACM0

El cambio que notaremos esta en las primeras letras del mensaje de respuesta:

Antes: crw-rw—- 1 root dialout 166, 0 sep 25 14:42 ttyACM0

Ahora: crwxrwxrwx 1 root dialout 166, 0 sep 25 14:42 ttyACM0

Esto ya indica que los demas usuarios tienen acceso al puerto ttyACM0 y por tanto no deberia dar problemas el ide de Arduino para reconocer la placa por el puerto.

Comando dmesg

En el caso de que pueda intentar iniciar sesión en Tools-> Port si existe un puerto que no sea /dev/ttyS0. Intente jugar con estas opciones. Finalmente, buscando en dmesg también puede averiguar qué puerto se ha ubicado para arduino.

Finalmente, otro enfoque es desconectar su arduino, volver a enchufarlo y escribir el siguiente comando:

dmesg | tail

Para registrar el último evento como el que ocurre cuando arduino se conecta a un puerto usb. El comando anterior le mostrará el puerto correcto.

Para obtener mejores resultados, puede usar lo siguiente:

  dmesg | tail -f

Y conecte y desconecte continuamente el arduino del puerto usp hasta que vea cualquier mensaje relacionado con arduino. El parámetro -f permite mostrar en tiempo real los nuevos registros.

Si todo va mal

Si su cuenta de usuario probablemente no tiene permiso para usar el puerto serie y no consigue resolver el problema hay aun dos formas de abordar esto:

  • Más fácil, pero no aconsejable: Ejecute Arduino IDE como root (por ejemplo, inicie desde la línea de comando usando Sudo).
  • La segunda forma más recomendable de hacerlo es agregar su usuario al grupo dialout, que tiene permiso para usar el puerto serie. Use el comando Sudo adduser $USER dialout. Sin embargo, deberá cerrar sesión y volver a iniciarla para que surta efecto (o intente esto ). Para enumerar grupos de usuarios actuales, use groups o id -Gn.

Una vez hecho esto, cuando seleccione el puerto serie correcto (como otros han mencionado, tal vez /dev/ttyUSB0), debería poder escribir, permitiéndole programar el Arduino.

sudo chmod a+rw /dev/ttyACM0  

o

sudo chmod a+rw /dev/ttyUSB0

Espero que se ha de utilidad este post, si tienen algún comentario o duda pueden dejarlo en los comentarios.