Un nuevo horizonte para NILMTK con OpenZmeter


En plena crisis energética, el consumo eléctrico supone una importante fuente de gasto, tanto para las empresas, como para los ciudadanos podríamos haber reducido  las emisiones  de  32,23 Megatoneladas de Co2.

Para intentar optimizar el consumo eléctrico de cualquier entidad, es necesario previamente medir éste de la forma más fiel posible, pues no se puede optimizar nada que no se pueda medir, siendo lo ideal monitorizarlo en tiempo, con objeto de generar alarmas, registrar eventos y crear informes de análisis de calidad de energía.

Algunas de las utilidades de monitorizar el consumo eléctrico:

  • Estudiar los hábitos de consumo en función de las franjas horarias con objeto de promover políticas destinadas a su reducción.
  • Detectar picos indebidos de consumo en horas de baja actividad con objeto de detectar “consumos fantasmas” y consumos indebidos.
  • Racionalizar el gasto energético consumiendo sólo lo necesario evitando derroches superfluos, contribuyendo de esta manera a luchar contra el cambio climático.
  • Predecir el consumo energético estudiando el histórico.
  • Trasladar los picos de consumo, cuando sea posible, a otras franjas horarias con objeto de no sobrecargar la red.
  • Detectar cortes de suministro con objeto de generar alarmas o tomar medidas correctivas.
  • Diagnosticar posibles fallos tanto en las instalaciones como en los aparatos eléctricos.
  • Servicios relacionados con AAL (Ambient Assisted Living), es decir servicios para la independencia de las personas mayores .
  • Detectar consumos indebidos causados por sabotajes de las instalaciones.
  • Optimización de la demanda contratada.

Usando técnicas de monitorización según muchos expertos se puede ahorrar desde un 15% hasta  20%. Y no solo esto va de ahorro económico pues por ejemplo en España en 2020 podríamos haber reducido  las emisiones  de  32,23 Megatoneladas de Co2.

En este contexto, contamos con el OpenZMeter, un medidor monofásico de energía eléctrica, que es además también analizador de calidad de la energía. Este dispositivo, es  de código abierto,  cuenta  con capacidades de IoT y permite medir una amplia gama de variables eléctricas a una elevada frecuencia de muestreo (15625Hz).

Este nuevo código intenta completar  las capacidades del OZM adaptando para ello la herramienta de desagregación de la demanda NILMTK, mediante la ampliación del  uso de TimeStamp de 13 dígitos,  la creación  de dos nuevos convertidores y conversores con el soporte de transitorios hasta el orden 50 de tensión , corriente y potencia, la generación de dos nuevos DS y el desarrollo del nuevo  código abierto para la desagregación. 

Para ello, el entrenamiento contempla el uso de dos de los algoritmos de desagregación más conocidos, como son el de Optimización Combinatoria (CO) y el Modelo de Markovv Factorial Oculto (FHMM).

OZM requiere para la desagregación un periodo bastante más pequeño de unos 30” en contraposición con los requeridos con otros DS públicos que suele estar en torno a los 15’.

Tras el entrenamiento, los datos agregados pueden introducirse en el modelo para su desagregación y posterior análisis de los resultados obtenidos obteniéndose un error que no supera el 1%.

Gracias a que NILMTK proporciona funciones para calcular las métricas de los resultados de cada algoritmo de desagregación, en este estudio podemos comparar resultados obtenidos con diferentes métodos, periodos de muestreo, algoritmos y DS.

Resultados DEPS                                

RESULTADOS  OZM

Destaca el error mínimo en la desagregación así como  las métricas           MNEAP y RMSE cuyo comportamiento son bastante superiores en OZM frente a otros DS públicos

Conclusiones

  •  El uso de componentes armónicos se   demuestra que mejora el resultado de  casi  todas las métricas dependiendo mucho del tipo del dispositivo eléctrico.
  •  El comportamiento del nuevo DS  supera en tiempos de muestreo y métricas a otros DS públicos.
  • Se entrega código abierto  funcional que permite desagregar por completo una instalación convencional.
  •  En un horizonte futuro, como continuación de este trabajo, se propone obtener un mecanismo automatizado para desplegar en una instalación convencional para hacer posible mostrar en tiempo real  la desagregación del consumo energético de los diferentes aparatos eléctricos que lo constituyen.

Video resumen

En el siguiente video podemos ver un resumen en video de los conceptos y resultados mas importantes que hemos visto en este post:

NOTA : El código fuente del proyecto lo podemos encontrar en https://github.com/crn565

Anuncio publicitario

Hablemos de la familia STM32


La familia STM32 de microcontroladores de 32 bits basada en el procesador Arm ® Cortex ® -M está diseñada para ofrecer nuevos grados de libertad a los usuarios de MCU. Ofrece productos que combinan un rendimiento muy alto, en tiempo real, procesamiento de señales digitales, operación de baja potencia/bajo voltaje y conectividad, al mismo tiempo que mantiene una integración total y facilidad de desarrollo.

La gama incomparable de microcontroladores STM32, basada en un núcleo estándar de la industria, viene con una amplia variedad de herramientas y software para respaldar el desarrollo de proyectos, lo que hace que esta familia de productos sea ideal tanto para proyectos pequeños como para plataformas de extremo un extremo.

En este cuadro podemos ver un resumen de todas sus varaintes:

Arm® Cortex®-M en pocas palabras

El grupo de núcleos de procesador Arm® Cortex®-M es una serie de núcleos optimizados para la eficiencia energética y el funcionamiento determinista. Se usa ampliamente en microcontroladores (MCU) y también se puede encontrar integrado en microprocesadores multinúcleo (MPU).

brazo corteza microcontrolador mcu

Desde el núcleo del microcontrolador Cortex®-M3 inicial y la introducción de variantes de núcleo optimizadas para bajo consumo , como Cortex®-M0 y luego Cortex®-M0+ , rendimiento , con Cortex®-M7 , tiempo real , con Cortex®- M4 o seguridad con el último Cortex®-M33 , la arquitectura Arm® Cortex®-M es la arquitectura estándar de facto para MCU de uso general de 32 bits. También ofrece una alternativa convincente a las arquitecturas MCU de 8 y 16 bits de propósito general.

Las principales ventajas de tener la arquitectura de perfil Arm® Cortex®-M estandarizada en esta familia de núcleos son:

  • para que los ingenieros transfieran fácilmente su código de una serie de MCU a la otra. Pueden elegir el equilibrio adecuado entre eficiencia energética, rendimiento informático, seguridad y variedad de periféricos para su sistema.
  • aprovechar un rico ecosistema de proveedores de silicio y de proveedores de herramientas de software y hardware
  • para acelerar la innovación en aplicaciones integradas

STMicroelectronics es uno de los primeros en adoptar los núcleos Arm® Cortex®-M y lidera el mercado con la cartera más grande de MCU Cortex®-M de 32 bits.

Ofrece a los ingenieros:

  • la opción de microcontroladores más flexible y escalable del mercado con más de 1000 números de pieza
  • la experiencia de diseño más integrada con un amplio ecosistema de herramientas y software MCU creado por ST y socios autorizados
  • 10 años de compromiso de longevidad de suministro

Desde su lanzamiento en 2007, STM han vendido más de 6 mil millones de microcontroladores basados ​​en Arm® Cortex®-M STM32 de 32 bits en todo el mundo.

El procesador central Arm® Cortex®-M3 de 32 bits está diseñado para un procesamiento en tiempo real de alto rendimiento en aplicaciones con costos limitados y puede manejar tareas complejas. Cualquier microcontrolador Arm® Cortex®-M3 ofrece alta escalabilidad combinada con un compromiso óptimo entre rendimiento y costo.

Características clave del núcleo Arm® Cortex®-M3

  • Arquitectura Armv7-M
  • Interfaz de bus 3x interfaz AMBA AHB-lite (arquitectura de bus de Harvard) Interfaz AMBA ATB para componentes de depuración de CoreSight
  • Compatibilidad con instrucciones de subconjunto Thumb/Thumb-2
  • tubería de 3 etapas
  • Controlador de interrupción vectorial anidado (NVIC)
  • 8 regiones MPU opcionales con subregiones y región de fondo
  • Instrucciones de procesamiento de campo de bits integradas y bandas de bits a nivel de bus
  • Interrupción no enmascarable + 1 a 240 interrupciones físicas con 8 a 256 niveles de prioridad
  • Controlador de interrupción de reactivación
  • Multiplicación de ciclo único de hardware (32×32), división de hardware (2-12 ciclos), soporte de ajuste saturado
  • Instrucciones WFI y WFE integradas y capacidad Sleep On Exit. Señal de sueño y sueño profundo, modo de retención opcional con kit de administración de energía del brazo
  • Puertos opcionales JTAG y Serial Wire Debug. Hasta 8 puntos de interrupción y 4 puntos de vigilancia
  • Instrucción opcional (ETM), seguimiento de datos (DWT) y seguimiento de instrumentación (ITM)

corteza del brazo m3 

Diagrama de bloques de Arm Cortex-M3

Serie MCU Arm® Cortex®-M3 de última generación

Pequeña huella de pie

El tamaño reducido del núcleo permite que se use como un núcleo único en dispositivos pequeños o como un núcleo complementario incorporado adicional cuando se requiere un aislamiento de hardware específico o una partición de tareas. Gracias a los avances en las tecnologías de fabricación de silicio, el proceso de litografía pasó de 180 a 90 nm y menos, y el núcleo de silicio ahora alcanza los 0,03 mm² en litografía de 90 nm.

De manera similar a Cortex®-M0 y Cortex®-M0+ , el núcleo Cortex®-M3 tiene un bajo impacto en el equilibrio que se debe realizar entre los elementos típicos de una arquitectura MCU, basada en E/S, analógica y memorias no volátiles. Por lo tanto, el tamaño del bus (8, 16 o 32 bits) ya no es relevante al particionar carteras de MCU.

Los microcontroladores Cortex®-M3 se utilizan ampliamente y ofrecen varios beneficios :

  • Cumplen con los requisitos de rendimiento en aplicaciones de nivel de entrada.
  • También son adecuados para aplicaciones de propósito general.
  • La arquitectura de los procesadores Arm® Cortex®-M3 ofrece una alta escalabilidad y permite reutilizar los diseños existentes en diferentes proyectos.
  • Y, por lo tanto, le permite reducir los costos generales de propiedad y facilitar los pasos de desarrollo .

Consumo de energía dinámico de 10 a 150 µW/MHz

La potencia dinámica del núcleo oscila entre 10 y 150 µW/MHz según la tecnología utilizada. Sin embargo, el núcleo en sí no es representativo del consumo total de energía de un dispositivo y no es el único factor a tener en cuenta. Por lo tanto, es importante leer atentamente las fichas técnicas de los productos.

El conjunto de instrucciones Thumb es un subconjunto de la familia Cortex-M. Facilita la escalabilidad de la cartera mediante la reutilización de bloques de software validados para cualquier producto Cortex-M.

Unidad de protección de memoria (MPU)

La Unidad de Protección de Memoria (MPU) administra el acceso de la CPU a la memoria . Garantiza que una tarea no corrompa accidentalmente la memoria o los recursos utilizados por otras tareas activas. La MPU generalmente está controlada por un sistema operativo en tiempo real (RTOS).

Si un programa accede a una ubicación de memoria que está prohibida por la MPU, el RTOS puede detectarlo y tomar medidas. En un entorno RTOS, el kernel puede actualizar dinámicamente la configuración del área MPU, según el proceso que se ejecutará. La MPU es opcional y se puede omitir para aplicaciones que no la necesitan.

Microcontroladores basados ​​en Arm® Cortex®-M3

Serie de un solo núcleoVelocidad (MHz)Rendimiento (CoreMark)Destello (kB)RAM (kB)Fuente de alimentación (V)PaquetesConectividadCosa análoga
STM32L1329332 a 5124 a 801,65 a 3,6LQFP48/64/100/144, TBGA64, UFBGA100/132 UFQFPN48, WLCSP63/64/104USART, SPI, I2C, USB
STM32F124 a 7211716 a 10244 a 962 a 3.6LFBGA100/144, LQFP48/64/100/144, UFBGA100, TFBGA64, UFQFPN48, VFQFPN36, WLCSP64USART, SPI, I2C, PUEDE, USB
STM32F2120398128 a 102464 a 1281,8 a 3,6LQFP64/100/144/176, BGA176, WLCSP66USART, SPI, I2C, PUEDE, USB

Arm® Cortex®-M4 en pocas palabras

El núcleo del procesador Arm® Cortex®-M4 de 32 bits es el primer núcleo de la línea Cortex-M que cuenta con bloques de IP de procesamiento de señal digital (DSP) dedicados , incluida una unidad de punto flotante (FPU) opcional. Aborda aplicaciones de control de señales digitales que requieren capacidades de procesamiento de señales y control eficientes y fáciles de usar, como IoT, control de motores, administración de energía, audio integrado, automatización industrial y del hogar, aplicaciones de salud y bienestar.

Al igual que el núcleo Cortex-M3, el núcleo Cortex-M4 alcanza un rendimiento de subprocesos de 1,25 DMIPS/MHz y 3,42 CoreMark/MHz .

Características clave del núcleo Arm® Cortex®-M4

  • Arquitectura Armv7E-M
  • Interfaz de bus 3x interfaz AMBA AHB-lite (arquitectura de bus de Harvard) Interfaz AMBA ATB para componentes de depuración de CoreSight
  • Compatibilidad con instrucciones de subconjunto Thumb/Thumb-2
  • tubería de 3 etapas
  • Extensiones DSP: MAC de 16/32 bits de ciclo único, MAC dual de 16 bits de ciclo único, aritmética SIMD de 8/16 bits, División de hardware (2-12 ciclos)
  • Unidad de punto flotante (FPU) de precisión simple opcional, compatible con IEEE 754
  • 8 regiones MPU opcionales con subregiones y región de fondo
  • Instrucciones de procesamiento de campo de bits integradas y bandas de bits a nivel de bus
  • Interrupción no enmascarable y de 1 a 240 interrupciones físicas con 8 a 256 niveles de prioridad
  • Controlador de interrupción de reactivación
  • Instrucciones WFI y WFE integradas y capacidad Sleep-On-Exit, señales Sleep & Deep Sleep, modo de retención opcional con Arm Power Management Kit
  • Puertos opcionales JTAG y Serial Wire Debug. Hasta 8 puntos de interrupción y 4 puntos de vigilancia
  • Rastreo de instrucciones (ETM), rastreo de datos (DWT) y rastreo de instrumentación (ITM) opcionales

corteza del brazo m4

Diagrama de bloques de Arm Cortex-M4

Ventajas clave de los microcontroladores Arm® Cortex®-M4

Arquitectura Armv7E-M

Los microcontroladores basados ​​en el núcleo Cortex-M4 se benefician de la arquitectura Armv7E-M. La arquitectura Armv7E-M se basa en la arquitectura Armv7-M del núcleo Cortex-M3 y ofrece extensiones DSP adicionales , como:

  • Procesamiento de datos múltiples de instrucción única (SIMD)
  • instrucciones aritméticas de saturación
  • una amplia gama de instrucciones MAC que pueden ejecutarse en ciclos individuales
  • y una FPU opcional, que admite operaciones de punto flotante de precisión simple.

Esta arquitectura se adapta perfectamente a las aplicaciones de control en tiempo real que requieren operaciones altamente deterministas con ejecución de conteo de ciclos bajo, latencia de interrupción mínima, una canalización corta y la posibilidad de realizar operaciones sin caché.

Procesamiento de señales digitales

Los microcontroladores basados ​​en Cortex-M4 se basan en sus aceleradores de hardware DSP avanzados integrados para procesar señales mediante cálculos matemáticos . El acelerador de hardware DSP puede procesar cualquier señal analógica, como la señal de salida de un micrófono, la retroalimentación de un sensor integrado en un sistema de control de motores o las salidas de aplicaciones de fusión de sensores.

Gracias al procesamiento de señales digitales, se requieren menos ciclos para ejecutar algoritmos de bucle de control , lo que contribuye al rendimiento y la eficiencia energética de la aplicación. De hecho, cuando los algoritmos se procesan con formatos de datos Q1.15 o Float32, las MCU que se ejecutan en un Cortex-M4 ofrecen un rendimiento mucho mayor que las MCU basadas en Cortex-M3. Para el formato Q1.15, la mejora se debe principalmente a la disponibilidad de instrucciones SIMD , lo que permite que Cortex-M4 divida la cantidad de ciclos requeridos por aproximadamente dos. Para el formato de datos Float32, el acelerador de unidades de coma flotante aumenta el rendimiento de los MCU Cortex-M4 en un orden de magnitud, en comparación con el de los MCU Cortex-M3 .

Los MCU Cortex-M4 con DSP a veces son comercializados por fabricantes de MCU alternativos como MCU Cortex-M4F . Todos los MCU STM32 Cortex-M4 incorporan la opción DSP del núcleo Cortex-M4, y todos se denominan MCU Cortex-M4 .

Escalabilidad y eficiencia energética

Los microcontroladores Arm Cortex-M4 son compatibles con el estándar de interfaz de software de microcontrolador Cortex (CMSIS), lo que permite a los desarrolladores transferir su código hacia o desde diferentes microcontroladores para proyectos futuros. Esta interfaz también facilita la integración de software de terceros, lo que ayuda a reducir el tiempo de comercialización .

La flexibilidad y la escalabilidad de la arquitectura de Cortex-M4 permiten a los diseñadores ejecutar la mayoría de los algoritmos de aprendizaje automático recientes .

También es extremadamente eficiente desde el punto de vista energético . Por lo tanto, los microcontroladores Cortex-M4 son excelentes opciones para los controladores perimetrales de IoT o los nodos de sensores que funcionan con baterías, así como para los dispositivos portátiles de consumo.

El núcleo Cortex-M4 está integrado principalmente en MCU de un solo núcleo. Sin embargo, una nueva generación de microcontroladores y microprocesadores multinúcleo empuja los límites de la integración del sistema y la optimización del rendimiento, implementando casos de uso de partición de dos tareas :

  • El Cortex-M4 se puede utilizar como el núcleo de control principal , asociado con el núcleo Cortex-M0+ de mayor eficiencia energética, que puede ejecutar protocolos de radio de manera más eficiente.
  • El núcleo Cortex-M4 se puede utilizar como núcleo complementario de uso general y en tiempo real para la potencia informática de los núcleos Cortex-M7 o -A7 que procesan gráficos avanzados, algoritmos complejos de procesamiento de señales digitales o ejecutan el código abierto. Sistema operativo Linux y bibliotecas.

Microcontroladores basados ​​en Arm Cortex-M4

STMicroelectronics combina el núcleo Arm Cortex-M4 con su exclusiva propiedad intelectual de silicio de bajo consumo, tecnología de memoria integrada no volátil, aceleradores de hardware ( Cordic para cálculo trigonométrico e hiperbólico y FMAC para filtrado), arquitecturas de alto rendimiento y conectividad inalámbrica experiencia para ofrecer los MCU STM32 Arm Cortex-M4 como una solución a los muchos desafíos técnicos y comerciales que los ingenieros deben resolver.

Los microcontroladores STM32 Cortex-M4 están completamente integrados en el entorno de desarrollo STM32Cube y aprovechan las herramientas y soluciones que ofrece la extensa red de socios de ST.

Serie de microcontroladores Arm M4 de un solo núcleo

SerieVelocidad (MHz)Rendimiento (CoreMark)Destello (kB)RAM (kB)Fuente de alimentación (V)PaquetesConectividadCosa análoga
STM32F37224516 a 51216 a 801,8 a 3,6LQFP48/64/100, UFBGA100, UFQFPN32, WLCSP49/66/100USART, SPI, I2C, I2S, PUEDE, USB
STM32L48027364 a 102440 a 3201,7 a 3,6LQFP32/48/64/100/144, UFBGA64/100/132, UFQFPN32/48, WLCSP36/49/64/72/100USART, SPI, I2C, PUEDE, USB, chrom-ART
STM32L4+120409512 a 2048320 a 6401,7 a 3,6LQFP48/64/100/144, UFBGA132/169, UFQFPN48, WLCSP100USART, SPI, I2C, PUEDE, USB, TFT, MIPI DSI, Chrom-ART
STM32G417055032 a 512118 a 1281,7 a 3,6LQFP32/48/64/80/100/128, UFBGA64/100/121, UFQFPN32/48, WLCSP48/64/81USART, SPI, I2C, PUEDE, USBAnalógico rico
STM32F484 a 180hasta 61364 a 204832 a 3841,7 a 3,6LQFP48/64/100/144/176/208, BGA100/144/176/216, UFQFPN48, WLCSP36/49/81/90/143/168USART, SPI, I2C, CAN, Ethernet, USB, TFT, MIPI DSI, Chrom-ART

Serie de doble núcleo (inalámbrico) de microcontroladores Arm M4

Serie
(inalámbrica)
Velocidad de la corteza M4 (MHz)Procesador 2Destello (kB)RAM (kB)Fuente de alimentación (V)PaquetesConectividadConectividad inalámbrica
STM32WL548[email protected]64 a 25620 a 641,8 a 3,6UFBGA73, UFQFPN48USART, SPI, I2C150 a 960 MHz, LoRa, (G)FSK, (G)MSK, BPSK
STM32WB64[email protected]256 a 1024128 a 2561,71 a 3,6UFBGA129, UFQFPN48, VFQFPN68, WLCSP100USART, SPI, I2C, USB2,4 GHz, 802.15.4, BLE5.0, hilo/hilo abierto, Zigbee3.0

Serie de doble núcleo (alto rendimiento) de microcontroladores Arm M4

Serie
(Alto Rendimiento)
Velocidad de la corteza M4 (MHz)Procesador 2Destello (kB)RAM (kB)Fuente de alimentación (V)PaquetesConectividadCosa análoga
STM32H7240[email protected]
+L1
1024 a 204810241,62 a 3,6UFBGA129/169, LQFP176/208, TFBGA240, WLCSP156USART, SPI, I2C, USB, TFT-LCD, MIPI-DSIAnalógico avanzado
STM32MP1209Doble [email protected]
+L1+L2
GPU 3D
n / A7081,71 a 3,6LFBGA354/448, TFBGA257/361USART, SPI, I2C, USB HS
GbE
TFT-LCD, MIPI-DSI

Mas información en https://www-st-com

Sensor de consumo con display Nokia 5110


En proyectos antiguos   de un doble voltímetro y amperímetro para una fuente de laboratorio es habitual disponer de una tensión positiva y otra negativa, lo que nos obliga al uso de amplificadores operacionales para adaptar la señal y poder medirla con Arduino. Lo normal para mostrar las tensiones y corrientes es emplear un LCD monocromo de 16 caracteres x 2 filas de texto, que se suele quedar un poco justo para mostrar toda la información.

Pues bien, en el siguiente proyecto vamos a simplificar el circuito de medida del voltímetro y vamos a sustituir el LCD de 16×2 caracteres por un display gráfico Nokia 5110.

En una primera parte vamos a hacer el voltímetro y en un segundo circuito añadiremos el amperímetro.

EL FAMOSO DISPLAY LCD NOKIA 5110

Utilizaremos 5 pines digitales ademas de la retroiluminación, VCC y GND.

LIBRERIAS ARDUINO

Hay varias librerías disponibles para trabajar con LCDs, siendo la mas interesante la Adafruit-PCD8544-Nokia-5110-LCD-library.

Descargue la librería desde aquí, la PCD8544 necesita a su vez la Adafruit-GFX-Library que puede descargar aquí.

Con las libs en local, abre Arduino y añada las librerías, menú Programa/Incluir Libreria/Añadir Libreria Zip…

Una vez añadidas puede ir a Ejemplos/Librerías personalizadas y abrir el ejemplo pcdtest.

ESQUEMA DE CONEXIONES ARDUINO

Podemos conectar de dos formas, por SPI o sin el.

SIN SPI, CONEXIÓN ESTANDAR.

Funcionará en todos los dispositivos aunque el rendimiento no es tan eficiente como por SPI. De cualquier modo para la mayoría de proyectos es suficiente.

pin 3 – Serial clock out (CLK)
pin 4 – Serial data out (DIN)
pin 5 – Data/Command select (D/C)
pin 6 – LCD chip select (CE)
pin 7 – LCD reset (RST)

Código de inicialización:

 Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 6, 7);

CON SPI

Hardware SPI más rápido pero deben usarse ciertos pines por defecto y solo lo soportan algunas placas:
SCK is LCD serial clock (SCLK) – this is pin 13 on Arduino Uno
MOSI is LCD DIN – this is pin 11 on an Arduino Uno
pin 5 – Data/Command select (D/C)
pin 6 – LCD chip select (CS)
pin 7 – LCD reset (RST)

Para Inicializar con SPI:

Adafruit_PCD8544 display = Adafruit_PCD8544(5, 6, 7);

Respecto al código es la única diferencia, solo afecta a los pines y una vez establecidos el resto del código es común.

EL CÓDIGO, ESCRIBIENDO TEXTO EN EL LCD

El siguiente código muestra un texto simple por el display.

Modifica la inicialización al principio del código según conectes los pines con o sin SPI:

  • Con SPI: Adafruit_PCD8544 display = Adafruit_PCD8544(5, 6, 7);
  • Sin SPI: Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 6, 7);
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

// *****  Inicialización por SPI, *****
Adafruit_PCD8544 display = Adafruit_PCD8544(5, 6, 7);
// **** Inicialización sin SPI, pines 3 y 4 ***
//Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 6, 7);

#define ledRETROILUM 12

void InitDisplay(){
  pinMode(ledRETROILUM, OUTPUT);  
  display.begin();
  display.setContrast(50);
  display.display();
  digitalWrite(ledRETROILUM, HIGH); 
}

void testTXT1(){
  display.clearDisplay();   // clears the screen and buffer
  setFont(1, WHITE, BLACK);  
  drawTXT(0,0," altaruru.com ");
  setFont(1,BLACK);
  drawTXT(0,8,"lcd nokia 5110");
  drawTXT(0,16,"-");
  drawTXT(0,24,"-");
  drawTXT(0,32,"-");
  drawTXT(0,40,"(c) 2019-03-20");  
  display.display(); // actualiza/refresca display  
}

void setup()   {
  Serial.begin(9600);
  InitDisplay();  
  testTXT1();
}

void loop() {
}

void setFont(int isize, int Color1){
  setFont(isize, Color1, WHITE);
  
}
void setFont(int isize, int Color1, int Color2){
  display.setTextSize(isize);
  display.setTextColor(Color1, Color2);
  // altura de fuente size 1: 8 pixels
  // 6 lineas
  // 14 letras por linea  
}
void drawTXT(int x, int y, String smsg){
  display.setCursor(x,y);
  display.println(smsg);    
}

La función InitDisplay() incluye el código necesario para inicializar el Display y testTXT1() es un ejemplo que escribe varias palabras.

Funciones principales de Adafruit_PCD8544 display:

  • display.setTextSize(isize) establece tamaño de la fuente.
  • display.setTextColor(letra, fondo) establece color de la fuente y el fondo.
  • display.setCursor(x, y) posiciona el cursor para escribir.
  • display.println(mensaje) escribe el texto donde esta el cursor.
  • display.display() refresca/actualiza pantalla.
  • display.clearDisplay() limpia/borra pantalla

Con fuente de tamaño 1, tenemos capacidad para 6 lineas y hasta 14 caracteres por linea.

La función drawTXT(int x, int y, String smsg) unifica en una sola llamada posicionamiento de cursor y escritura del texto.

FUNCIONES DE DIBUJO

Puedes dibujar figuras geométricas o bitmaps, algunas funciones de dibujo:

  • display.drawLine()
  • display.drawRect()
  • display.drawCircle()
  • display.fillRect()
  • display.drawTriangle()
  • display.fillTriangle()
  • display.drawRoundRect()
  • display.fillRoundRect()
  • display.drawBitmap()

Algunos ejemplos directamente sacados del ejemplo pcdtest que facilita la librería:

void testdrawcircle(void) {
  for (int16_t i=0; i<display.height(); i+=2) {
    display.drawCircle(display.width()/2, display.height()/2, i, BLACK);
    display.display();
  }
}

void testfillrect(void) {
  uint8_t color = 1;
  for (int16_t i=0; i<display.height()/2; i+=3) {
    // alternate colors
    display.fillRect(i, i, display.width()-i*2, display.height()-i*2, color%2);
    display.display();
    color++;
  }
}

void testdrawtriangle(void) {
  for (int16_t i=0; i<min(display.width(),display.height())/2; i+=5) {
    display.drawTriangle(display.width()/2, display.height()/2-i,
                     display.width()/2-i, display.height()/2+i,
                     display.width()/2+i, display.height()/2+i, BLACK);
    display.display();
  }
}

Como hemos visto es relativamente fácil incluir un LCD en vuestros proyectos. Ahora veamos como conectar este display a una fuente variable de alimentación clásica basada en un regulador típico.

1. Voltímetro con Arduino y LCD Nokia 5110

El voltímetro aquí descrito únicamente lo vamos a usar para medir tensiones positivas.

Solo necesitamos un atenuador de señal a la entrada del pin A0 del Arduino.

El funcionamiento del sketch es muy sencillo. Simplemente conectamos el pin A0 al divisor de tensión formado por las resistencias R1 y R2. Debido al valor escogido para R1 y R2, el divisor de tensión funciona como un atenuador x6 de la tensión que queremos medir, y como la máxima tensión en los pines del Arduino es de 5V, significa que la máxima tensión que podemos medir es de 30V. Todo esto, está explicado con más detalle en el Proyecto 28.2.

Bien, al tener una atenuación x6, la variación entre 0 y 5V en el pin A0 corresponde con una tensión entre 0 y 30V en la fuente de alimentación.

En la variable RawVCC almacenamos el valor de analogRead(A0). Con la función map(RawVCC, 0, 1023, 0, 3000); convertimos los 0-1023 valores posibles de RawVCC en 0-3000, que se corresponden con la variación entre 0 y 30V de la fuente. Luego sólo hay que dividir entre 100 para obtener el valor real de tensión en la fuente de alimentación.

Sketch

/*********************************************************************
This is an example sketch for our Monochrome Nokia 5110 LCD Displays
  Pick one up today in the adafruit shop!
  ------> http://www.adafruit.com/products/338
These displays use SPI to communicate, 4 or 5 pins are required to
interface
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada  for Adafruit Industries.
BSD license, check license.txt for more information
All text above, and the splash screen must be included in any redistribution
*********************************************************************/
// Easy Voltmeter with Arduino & Nokia 5110 LCD Display 
// https://sites.google.com/site/angmuz/
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
// Software SPI (slower updates, more flexible pin options):
// pin 7 - Serial clock out (SCLK)
// pin 6 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 3 - LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
int RawVCC = 0;
float VCC = 0;
float auxVCC = 0;
void setup()   {
 
  // Iniciamos comunicacion serie 
  Serial.begin(9600);
 
  // Iniciamos comunicacion con la pantalla
  display.begin();
 
  // Establecemos el contraste
  display.setContrast(50);
  // Mostramos la pantalla de inicio durante 2 segundos
  //display.display(); 
  delay(2000);
  display.clearDisplay();   
}
void loop()
{
 
  RawVCC = analogRead(A0);
  auxVCC = map(RawVCC, 0, 1023, 0, 3000);
  VCC = (auxVCC / 100.0);
 
  // text display tests
  display.clearDisplay();
  display.setTextSize(2);
  display.setCursor(0,0);
  display.print("V=");
  display.println(VCC,1);
 
  display.setTextSize(1);
  display.setCursor(0,20);
  display.println("Arduino");
  display.print("Easy Voltmeter");
  display.println("[email protected]");
  display.display();
  delay(100);  
 
}

2. Voltímetro y Amperímetro con Arduino y LCD Nokia 5110

El sensor de corriente ACS712 es una solución económica para medir corriente, internamente trabaja con un sensor de efecto Hall que detecta el campo magnético que se produce por inducción de la corriente que circula por la línea que se está midiendo. EL  sensor nos entrega una salida de voltaje proporcional a la corriente, dependiendo la aplicación podemos usar el ACS712-05A, ACS712-20A o el ACS712-30A, para rangos de 5, 20 o 30 amperios respectivamente

El ACS712 podemos encontrarlo en módulos, los cuales nos facilitan sus conexión, traen una bornera para conectar la línea que queremos medir y 3 pines, dos para conectar la alimentación y un pin para la salida analógica.

Para medir la corriente vamos a usar un sensor ACS712. Se conecta como en el esquema, se alimenta entre +5V y GND y la salida la llevamos al pin A3.

Partiendo del código del voltímetro, añadimos las líneas correspondientes al amperímetro.

También la parte correspondiente al cálculo del offset, ya estos módulos tienen un error apreciable. Así conseguimos afinar bastante la medida.

Sketch

// Voltímetro y Amperímetro con Nokia 5110 LCD Display
// https://sites.google.com/site/angmuz/
/*********************************************************************
This is an example sketch for our Monochrome Nokia 5110 LCD Displays
  Pick one up today in the adafruit shop!
  ------> http://www.adafruit.com/products/338
These displays use SPI to communicate, 4 or 5 pins are required to
interface
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada  for Adafruit Industries.
BSD license, check license.txt for more information
All text above, and the splash screen must be included in any redistribution
*********************************************************************/
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
// Software SPI (slower updates, more flexible pin options):
// pin 7 - Serial clock out (SCLK)
// pin 6 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 3 - LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
// Variables para el voltímetro
int RawVCC = 0;
float VCC = 0;
float auxVCC = 0;
//Variables para el amperímetro
float ICC = 0;
float offset1 = 0;
boolean ofst = 0;
void setup()   {
 
 
  // Iniciamos comunicacion serie 
  Serial.begin(9600);
 
  // Iniciamos comunicacion con la pantalla
  display.begin();
 
  // Establecemos el contraste
  display.setContrast(50);
  // Mostramos la pantalla de inicio durante 2 segundos
  //display.display(); 
  delay(2000);
  display.clearDisplay();   
}
// Función para calcular el offset de la corriente ICC
float offset1Adj()
{
 
  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(0,0);
  display.println("Calculando");
  display.println("offset");
  display.println("No conectar");
  display.println("ninguna carga");
  display.println("Por favor");
  display.println("espere...");
  display.display();
  delay(2000);  // to allow time for stabilizing offset
  for(int i = 0; i < 1000; i++) {
  offset1 = offset1 + (.0264 * analogRead(A3) -13.51);
  delay(2);
  }
 
  digitalWrite(2, LOW);
  ofst = 1;
  return offset1;
}
void loop()
{
  if (ofst == 0) 
    {
    offset1 = offset1Adj();
    }
 
  float average1 = 0;
  for(int i = 0; i < 1000; i++) {
  average1 = average1 + (.0264 * analogRead(A3) -13.51);
  delay(1);
  }
 
  RawVCC = analogRead(A0);
  auxVCC = map(RawVCC, 0, 1023, 0, 3000);
  VCC = (auxVCC / 100.0);
 
  ICC = (average1 - offset1) ; // offset adjust
 
  // text display tests
  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(0,0);
  display.print("VCC=");
  display.print(VCC,1);
  display.println("V");
  display.print("ICC=");
  display.print(ICC,0);
  display.println("mA");
  display.print("offset=");
  display.println(offset1,0);
  display.println("");
  display.print("Volt-Amp Meter");
  display.println("[email protected]");
  display.display();
  delay(100); 
 
}

Este seria por tanto el esquema final del montaje:

Links

Adafruit: Nokia 5110 Monochrome LCD

Cómo habilitar la ejecución de macros en PowerPoint


Una macro está compuesta por una serie de comandos que puede usar para automatizar una tarea repetitiva, y se puede ejecutar cuando haya que realizar la tarea. Este post intentar aclarar con información acerca de los riesgos relacionados con el trabajo con macros, y le permitirá aprender a habilitar o deshabilitar macros en el Centro de confianza.

Las macros automatizan tareas usadas frecuentemente para ahorrar tiempo en pulsaciones de tecla y acciones del mouse. Muchas se crearon con Microsoft Visual Basic para Aplicaciones (VBA) y son diseñadas por programadores de software.

Sin embargo, algunas macros pueden suponer un riesgo de seguridad. Desgraciadamente algunas macros suelen ser usadas por personas con intenciones malintencionadas para instalar de forma silenciosa malware, como un virus, en el equipo o en la red de su organización.

Crear una macro de forma lícita

Entraremos al menú Macros ( tenga en cuenta que para sea visible debemos habilitar en la cinta el menú de programador) , escribiremos el nombre del la nueva macro y pulsaremos Crear.

Como ejemplo del código en VB, vemos a continuación el código en VB para mostrar en cada slide una barra de progreso que avanza en función del numero de diapositiva . Este código si esta de acuerdo lo podemos copiar desde la ventana de edición de VB:

Sub BarraDeProgreso()
On Error Resume Next
Height = 10 ' cambiar este valor para modificar la altura de la barra de progreso
With ActivePresentation
For X = 1 To .Slides.Count
.Slides(X).Shapes("A").Delete
.Slides(X).Shapes("B").Delete
Set s = .Slides(X).Shapes.AddShape(msoShapeRectangle, _
0, .PageSetup.SlideHeight - Height, _
X * .PageSetup.SlideWidth / .Slides.Count, Height)
s.Fill.ForeColor.RGB = RGB(0, 153, 204) ' cambiar los valores de RGB para personalizar el color de la barra
s.Line.Visible = msoFalse
s.Name = "A"
Set s = .Slides(X).Shapes.AddShape(msoShapeRectangle, _
X * .PageSetup.SlideWidth / .Slides.Count, .PageSetup.SlideHeight - Height, _
.PageSetup.SlideWidth - X * .PageSetup.SlideWidth / .Slides.Count, Height)
s.Fill.ForeColor.RGB = RGB(255, 255, 255)
s.Line.Visible = msoFalse
s.Name = "B"
Next X:
End With


End Sub

Como vemos en la imagen copiaremos el código en VB ( si estamos de acuerdo ) y salvaremos la macro desde la opción «Archivo» y «Guardar».

Ahora solo nos queda ejecutar la macro desde el menú «Ejecutar».

Nunca habilite macros en un Office a menos que esté seguro de lo que hacen esas macros. Las macros inesperadas pueden suponer un riesgo de seguridad importante. No tiene que habilitar macros para ver o editar el archivo; solo si desea la funcionalidad proporcionada por la macro.

Habilitar macros cuando aparece la barra de mensajes

Cuando abre un archivo con macros, aparece la barra de mensajes amarilla con un icono de escudo y el botón Habilitar contenido. Si sabe que las macros proceden de un origen confiable, use las siguientes instrucciones:

  • En la Barra de mensajes, haga clic en Habilitar contenido.
    El archivo se abre y es un documento de confianza.

La imagen siguiente es un ejemplo de la barra de mensajes cuando hay macros en el archivo.

Barra de mensajes de advertencia de seguridad para macros

Habilitar macros solo para la sesión actual

Utilice las siguientes instrucciones para habilitar macros mientras el archivo esté abierto. Cuando cierre el archivo y, a continuación, vuelva a abrirlo, la advertencia aparecerá de nuevo.

Nota: Este proceso solo funciona si ha abierto un archivo que contiene macros.

  1. Haga clic en la pestaña Archivo.
  2. En el área Advertencia de seguridad, haga clic en Habilitar contenido.
  3. Seleccione Opciones avanzadas.
  4. En el cuadro de diálogo Opciones de seguridad de Microsoft Office, haga clic en Habilitar contenido para esta sesión para cada macro.
  5. Haga clic en Aceptar.

Cambiar la configuración de las macros en el Centro de confianza

La configuración de las macros se encuentra en el Centro de confianza. Sin embargo, si el dispositivo es administrado por su trabajo o escuela, el administrador del sistema podría impedir que alguien cambie la configuración.

Al cambiar la configuración de las macros en el Centro de confianza, solo cambia en el programa de Office que esté usando. La configuración de la macro no cambia para todos los programas de Office.

  1. Haga clic en la pestaña Archivo.
  2. Haga clic en Opciones.
  3. Haga clic en Centro de confianza y, después, en Configuración del Centro de confianza.
  4. En Centro de confianza, haga clic en Configuración de macros.

    Área Configuración de macros del Centro de confianza
  5. Haga las selecciones que desee y, a continuación, haga clic en Aceptar.

Las macros pueden agregar una gran cantidad de funcionalidad a Office, pero a menudo las usan personas con intenciones incorrectas para distribuir malware a las víctimas que no se dan cuenta del ataque.

Las macros no son necesarias para su uso diario, como leer o editar un documento en Word o usar libros de Excel. En la mayoría de los casos, puede hacer todo lo que necesita hacer en Office sin necesidad de permitir la ejecución de macros.

¿Qué debo hacer ahora?

¿Sigue preguntándose si debe continuar?

  • ❒ ¿Esperaba recibir un archivo con macros? Nunca abra un archivo adjunto que no esperaba, incluso si parece provenir de alguien de confianza. A menudo, los ataques de suplantación de identidad (phishing) provienen de una persona u organización en la que confía en un esfuerzo por ayudarle a abrirlos.
  • ❒ ¿Le están recomendando habilitar el contenido que proviene de un desconocido? Una táctica común de los atacantes es crear algún intento previo, como cancelar un pedido o leer un documento legal. Le pedirán que descargue un documento e intente animarle a permitir la ejecución de macros. Ninguna empresa legítima le hará abrir un archivo de Excel para cancelar un pedido y no necesita macros solo para leer un documento en Word.
  • ❒ ¿Le están recomendando habilitar el contenido mediante un mensaje emergente? Si ha descargado el archivo desde un sitio web, es posible que vea elementos emergentes u otros mensajes que le animen a habilitar el contenido activo. Estas también son tácticas comunes de los atacantes y deberían provocar sospechas de que el archivo no es realmente seguro.

Si un archivo descargado de Internet quiere permitir macros y no está seguro de lo que hacen esas macros, lo más probable es que deba eliminar ese archivo. 

Si está seguro de que el archivo es seguro y desea desbloquear macros

  1. Guarda el archivo en un disco duro local o en un recurso compartido en la nube como OneDrive.
  2. Abra el Explorador de archivos de Windows y vaya a la carpeta donde ha guardado el archivo.
  3. Haga clic con el botón derecho en el archivo y elija Propiedades en el menú contextual.
  4. En la parte inferior de la pestaña General , seleccione la casilla Desbloquear y seleccione Aceptar.

De qué manera puede el malware infectar su PC

Estas son algunas de las formas más comunes de que sus dispositivos se infecten con el malware.

Correos spam

Los autores de malware suelen intentar engañarle para que descargue archivos malintencionados. Puede ser un correo con un archivo adjunto que te indica que es una confirmación de entrega, un reembolso de impuestos o una factura. Es posible que diga que tienes que abrir el adjunto para recibir los elementos o dinero.

Si abre el adjunto, terminará instalando malware en tu PC.

En ocasiones un correo malintencionado puede ser sencillo de detectar; podría estar mal escrito con una ortografía o gramática incorrectas, o provenir de una dirección de correo que no hayas visto antes. Sin embargo, estos correos también pueden parecer provenir de un negocio legítimo o de alguien que conoces. Algún malware puede piratear cuentas de correo electrónico y usarlas para enviar spam malintencionado a los contactos que se encuentre.

Para reducir las posibilidades de que el dispositivo se infecte:

  • Si no está seguro de quién te envió el correo, o algo no le convence, no lo abra.
  • Nunca haga clic en un vínculo inesperado en un correo electrónico. Si parece que procede de una organización en la que confía o con la que hace negocios y cree que puede ser legítima, abra el explorador web y vaya al sitio web de la organización desde su propio favorito guardado o desde una búsqueda en Internet.
  • No abra datos adjuntos a un correo electrónico que no esperaba, aunque parezca que procede de alguien en quien confía.

Macros Office malintencionados

Microsoft Office incluye un potente lenguaje de scripting que permite a los desarrolladores crear herramientas avanzadas para ayudarle a ser más productivo. Desafortunadamente, los delincuentes también pueden usar ese lenguaje de scripting para crear scripts malintencionados que instalen malware o hagan otras cosas malas.

Si abre un archivo Office y ve un aviso como este:

La barra de mensajes

No habilite ese contenido a menos que esté seguro de que sabe exactamente lo que hace, incluso si el archivo parece venir de alguien en quien confía.

 Un truco popular de los delincuentes es decirle que se le va a cobrar por un servicio por el que nunca se suscribió. Al ponerse en contacto con ellos para protestar, le dicen que para cancelar el servicio solo tiene que descargar un archivo Excel que proporcionan y rellenar algunos detalles. Si descarga y abre el archivo Excel mostrará la advertencia que ve anteriormente. Si selecciona Habilitar contenido, la macro malintencionada se ejecutará e infectará el sistema.

Ninguna compañía legítima le hará abrir un archivo Office solo para cancelar un servicio. Si uno le pide que lo haga, cuelgue sobre ellos. Es una estafa y no hay ningún servicio que tenga que cancelar.

Unidades extraíbles infectadas

Muchos gusanos se propagan infectando unidades extraíbles, como unidades flash USB o unidades de disco duro externas. El malware puede instalarse automáticamente al conectar la unidad infectada a tu PC. 

Hay algunas cosas que puede hacer para evitar este tipo de infección:

  • Tenga mucho cuidado con cualquier dispositivo USB que no le pertenezca. Si encuentra un dispositivo USB que aparentemente se ha perdido o se ha descartado, piénselo dos veces antes de conectarlo a un equipo que tenga información que le importe.
  • En ocasiones, los atacantes abandonan deliberadamente dispositivos USB infectados que se colocan en áreas populares con la esperanza de que alguien los encuentre y los conecte en su equipo. Esto se denomina «ataque de colocación USB».
  • Si no lo enchufa, no le infectará. Si encuentra una unidad USB que acaba de colocarse, aparentemente perdida, vea si hay una recepcionista cercana, o perdida y encontrada, a la que puede entregarla. 
  • Si enchufa un dispositivo extraíble desconocido en el equipo, asegúrese de ejecutar un examen de seguridad de él inmediatamente.

Integrado con otro software

Algún malware se puede instalar al mismo tiempo como otros programas que descargas. Esto incluye software de sitios web de terceros o archivos compartidos a través de redes punto a punto.

Algunos programas también instalarán otro software que Microsoft detecta como software potencialmente no deseado. Esto puede incluir barras de herramientas o programas que te muestran anuncios adicionales mientras navegas por la web. Por lo general, para optar por no participar y no instalar este software adicional, desactiva una casilla durante la instalación. Seguridad de Windows puede ayudarle a protegerse de aplicaciones potencialmente no deseadas.

Los programas que se usan para generar claves de software (keygens) a menudo instalan malware al mismo tiempo. El software de seguridad de Microsoft busca malware en más de la mitad de los equipos con keygens instalados.

Puede evitar instalar malware o software potencialmente no deseado de este modo:

  • Descargando siempre el software en el sitio web del proveedor oficial.
  • Asegurándose de que lee exactamente lo que va a instalar; no haga simplemente clic en Aceptar.

Páginas web en peligro o pirateadas

El malware puede usar vulnerabilidades de software conocidas para infectar el equipo. Una vulnerabilidad es similar a un agujero en el software que puede proporcionar acceso al malware a tu PC.

Cuando vaya a un sitio web, puede intentar usar vulnerabilidades en el explorador web para infectar el equipo con malware. El sitio web puede ser malintencionado o podría ser un sitio web legítimo que se haya puesto en peligro o se haya pirateado.

Por eso es muy importante mantener todo el software, especialmente el explorador web, actualizado y quitar el software que no usa. Esto incluye extensiones de explorador sin usar.

Otro malware

Algunos tipos de malware pueden descargar otras amenazas en tu PC. Una vez que estas amenazas se instalen en tu PC, seguirán descargando más amenazas.

La mejor protección contra malware y software potencialmente no deseado es un producto de seguridad actualizado y en tiempo real, como por ejemplo el Antivirus de Microsoft Defender .

Fuente: Microsoft.com