Tabla de contenido:

Indicador de carga de CPU de Raspberry Pi: 13 pasos
Indicador de carga de CPU de Raspberry Pi: 13 pasos

Video: Indicador de carga de CPU de Raspberry Pi: 13 pasos

Video: Indicador de carga de CPU de Raspberry Pi: 13 pasos
Video: Configurar la Raspberry Pi 2024, Mes de julio
Anonim
Indicador de carga de CPU de Raspberry Pi
Indicador de carga de CPU de Raspberry Pi

Cuando se ejecuta Raspberry Pi (RPI) como sin cabeza sin monitor de consola, no hay indicaciones visuales específicas disponibles para reconocer que el RPI realmente está haciendo algo.

Aunque el terminal remoto se usa con SSH, se requiere la ejecución de vez en cuando del comando de Linux para verificar cuánta carga del sistema está cargando la CPU ahora

Por lo tanto, este circuito está hecho para ayudar a reconocer inmediatamente la actividad real de la CPU (tal vez de manera semi-real o casi real) para ejecutar las cargas del sistema actualmente aplicadas.

Aunque solo la programación de Python y un circuito mucho más simple pueden admitir la misma funcionalidad, se requerirán códigos de Python un poco complejos para simular la sofisticada lógica de control de LED requerida por este circuito.

También, paradójicamente, una mayor complejidad del código Python cargará más a la CPU con una mayor carga del sistema.

Por lo tanto, será razonable descargar cualquier funcionalidad de indicación tanto como sea posible al circuito de hardware externo, ya que este servicio debe estar funcionando todo el tiempo y con frecuencia, por ejemplo, cada 5 segundos.

Y este circuito agregará una característica un poco divertida al RPI de ejecución sin cabeza.

Paso 1: Comando de Linux de comprobación de carga de la CPU

Comando de Linux de comprobación de carga de CPU
Comando de Linux de comprobación de carga de CPU

Hay diversos comandos de Linux de comprobación de carga de CPU disponibles, como top, iostat, sysstat y uptime.

Cada comando tiene características ventajosas específicas en términos de diversidad de información y simplicidad de visualización de datos.

El comando superior es el más rico en información y hay datos muy detallados disponibles para reconocer inmediatamente la carga del sistema.

Pero funciona como modo de iteración (mostrando datos continuamente en la pantalla) y el formato de información es bastante complejo para extraer simplemente los datos de carga de la CPU necesarios.

El comando iostat proporciona información detallada sobre la carga del sistema al separar los trabajos de cola en ejecución del usuario y del sistema que están cargando la CPU actualmente.

Pero también es innecesariamente complejo obtener la carga actual de la CPU de manera rápida e intuitiva.

En caso de tiempo de actividad, los datos de carga del sistema muy simples están disponibles en términos de promedio de 1 minuto, promedio de 5 minutos y promedio resumido de 15 minutos.

Como se mencionó anteriormente, es necesario simplificar el código Python porque debe ejecutarse con bastante frecuencia, por ejemplo, cada 5 o 10 segundos.

Cuando el código de Python se vuelve complejo, sobrecargará mucho a la CPU.

Es una especie de paradoja que sobrecargue a RPI para monitorear la carga de su sistema.

Por lo tanto, elijo el comando de tiempo de actividad para recopilar la carga de la CPU e interoperar con el circuito indicador porque es el más simple.

Pero como el tiempo de actividad muestra un promedio de 1 minuto de carga del sistema, el circuito indicador no debe funcionar como modo estrictamente en tiempo real.

Aún así, este circuito puede proporcionar una pista visual útil que muestra cómo le está yendo a RPI ahora.

Paso 2: esquemas

Esquemas
Esquemas

Este circuito recibirá 4 niveles diferentes (por ejemplo, 00-> BAJO, 01-> LIGERO, 10-> MEDIO, 11-> ALTO) de carga de CPU actual de RPI a través de dos entradas de optoacoplador.

74LS139 (decodificador y demultiplexor de 2 a 4) está decodificando dos entradas de bits en una de salida única entre 4 formas posibles, como 00 (BAJA) -> B0, 01 (LIGERA) -> B1, 10 (MEDIA) -> B2, 11 (ALTO) -> B3.

Como la salida 74LS139 es de nivel inverso (entrada 00 -> B0 se convierte en BAJA y otras 3 salidas en ALTA), el inversor 74HC04 se utiliza para invertir la salida una vez más.

Cuando la salida de 74LS139 es ALTA normal, 74HC04 no será necesario.

Pero de alguna manera 74LS139 está hecho de esa manera. (Consulte la tabla de verdad de 74LS139)

Cuando se selecciona cualquiera de las salidas 74LS139, se activará un determinado interruptor analógico entre 4 interruptores incluidos en CD4066 IC.

CD4066 puede admitir 4 interruptores analógicos y cada interruptor consta de 1 entrada de control y 2 salidas analógicas.

Cuando la entrada de control se vuelve ALTA, la conexión de dos salidas se vuelve de baja impedancia (la resistencia se vuelve 0) y otras se vuelven de alta impedancia (la resistencia entre dos rutas de salida se vuelve de varios cientos de mega ohmios).

Simplemente el control 1 (pin 13) del CD4066 se convierte en ALTO, la ruta entre la salida 1 (pin 1) y la salida 2 (pin 2) está conectada mientras que otras salidas no están conectadas (en estado de alta impedancia).

Asimismo, la entrada HIGH del control 2 (pin 5) hace que la salida 1 (pin 4) y la salida 2 (pin 3) estén conectadas mientras que otras salidas están desconectadas.

Entonces el LM555 está parpadeando dos LED con diferente frecuencia de parpadeo.

Como puede ver en el esquema anterior, NE555 operará con uno de valor de resistencia entre 4 (12k, 24k, 51k, 100k) posibles niveles de resistencia.

Paso 3: Generación de reloj diferente NE555

NE555 Generación de reloj diferente
NE555 Generación de reloj diferente

Como se muestra en el esquema, NE555 operará con uno de los posibles valores de resistencia, como 12k, 24l, 51k y 100k.

En realidad, la parte del circuito de temporización NE555 es una parte de soporte de indicación visual importante del circuito.

El esquema de funcionamiento del circuito es el siguiente.

- Cuando no hay una carga significativa de CPU, el programa Python instalado en RPI enviará 00 salidas al circuito indicador. Entonces, dos rutas de salida de CD4066 se activan y NE555 está operando con un valor de resistencia de 12k. Por lo tanto, los LED parpadean 1,5 veces por segundo (parpadean bastante rápido)

- La CPU está ligeramente cargada (luego, la longitud de la cola de tiempo de actividad se convierte en un nivel de 0.1 ~ 0.9), Python enviará 01 al circuito. Luego CD4066 activado con salidas conectadas con resistencia de 24k. Como resultado, el parpadeo del LED disminuyó 1.2 veces por segundo (el parpadeo del LED disminuyó levemente pero aún un poco más rápido)

- Cuando la carga de la CPU aumentó significativamente (luego la longitud de la cola de ejecución del tiempo de actividad se convierte en un nivel de 1.0 ~ 1.9), Python generará 10 en el circuito. Luego, se abre la ruta de conexión de la resistencia de 51k y el NE555 está operando 0.8 veces por segundo. Ahora la frecuencia de parpadeo se reduce significativamente.

- Las cargas pesadas que sobrecargan la CPU y la duración de la cola de ejecución se vuelven más largas (más de 2 trabajos esperarán a ser ejecutados por la CPU y el tiempo de actividad reportará más de 2.0). Cuando se selecciona una conexión de resistencia de 100k, NE555 parpadeará el LED 0,5 veces por segundo (la velocidad de parpadeo se volverá muy lenta)

***

Junto con el aumento de las cargas del sistema, la velocidad de parpadeo del LED se reducirá en consecuencia.

Cuando el LED parpadea bastante lento, entonces el RPI seguramente se sobrecargó significativamente.

De esta manera, el circuito de indicación de carga le informa el nivel de carga actual de RPI.

Paso 4: Partes

Para hacer este circuito, se utilizan varios chips IC.

Aunque menciono 74LSxx, tipo CD40xx de chips IC antiguos, puede utilizar tipos recientes de chips TTL y CMOS como 74HC4066 y 74ASxx cuando el chip IC seleccionado es del tipo DIP.

El tipo de montaje en superficie de pequeño paquete IC también se puede usar cuando puede soldar los pequeños correctamente en la PCB universal.

Otras son piezas comunes que puede comprar fácilmente en tiendas electrónicas de Internet.

- 74LS139 (decodificador de 2 a 4, demultiplexor) x 1

- 74HC04 (6 inversores) x 1

- CD4066 (4 interruptores analógicos IC) x 1

- Temporizador NE555 IC x 1

- Condensadores: 10uF x 1, 0.1uF x 1

- Optoacoplador PC817 x 2 (se puede utilizar cualquier optoacoplador común de 4 pines)

- Resistencias: 220ohm x 4 (limitación de corriente LED), 4.7K (interfaz de optoacoplador) x 2, 12K, / 24K / 51K / 100K (control de sincronización del reloj) x 1

- LED x 2 (cualquier color diferente como amarillo, verde o rojo, verde)

- Placa universal de 30 (W) por 20 (H) agujeros de tamaño (puede cortar cualquier tamaño de placa universal para adaptarse a este circuito)

- Alambre de estaño (para hacer patrones de cableado en la PCB universal)

- cabeza de alfiler (3 pines) x 3

- Cabeza de pin IC (4 pines) x 4

- cables de cableado de color rojo / azul

***

Paso 5: hacer un dibujo de PCB

Hacer dibujos de PCB
Hacer dibujos de PCB

Aunque muestro un dibujo de PCB en cada proyecto, el diseño del cableado es solo una referencia que lo guiará para soldar correctamente cada pieza en el PCB universal.

Pero no necesariamente se apega a este esquema de cableado.

Como puede ver el diagrama de cableado anterior, es bastante complejo y requiere una PCB significativamente grande.

Puede usar un cable común para conectar piezas en lugar de alambre de estaño para reducir el tamaño de la PCB completada para soldar.

Utilice únicamente el dibujo de la PCB para verificar y confirmar la soldadura correcta entre las partes.

Cuando se aumenta el número de circuitos integrados TTL o CMOS, generalmente el dibujo de la PCB se vuelve bastante complejo más allá de la integración adecuada en un solo lado de la PCB.

Por lo tanto, las placas de circuito impreso multicapa se utilizan comúnmente para circuitos digitales de grado industrial que incluyen una gran cantidad de TTL, CMOS y microprocesadores.

Paso 6: soldadura

Soldadura
Soldadura

Estoy usando alambre de estaño y cable de cableado común juntos para minimizar el tamaño de la PCB tanto como sea posible.

Al compararlo con el dibujo de la placa de circuito impreso, la ubicación de cada pieza cambia por completo.

Pero todavía se utiliza el dibujo de PCB para verificar la conexión correcta entre las piezas mientras se suelda.

Puede ver que las resistencias de 12k / 24k / 51k / 100k están insertadas en la cabeza del pin IC sin soldar.

Por lo tanto, puede reemplazar las resistencias por otros valores para cambiar convenientemente el esquema operativo del circuito más adelante.

Paso 7: Montaje

Montaje
Montaje

El circuito indicador de carga completo (en adelante, INDICADOR) se instala en la caja RPI del reproductor de música como se muestra en la imagen de arriba.

Este reproductor de música está instalado con DAC y lo estoy usando recientemente para reproducir videos musicales.

Acerca de este cuadro de RPI, lo explicaré más adelante y ahora centrémonos en INDICATOR, ya que el circuito es el tema principal de este proyecto.

Compré Raspberry Pi 4 Model B 2GB (en adelante RPI 4B) recientemente para admitir la aplicación de reproducción de video.

Como RPI 4B ha aumentado el rendimiento de la CPU de 4 núcleos, el manejo de las cargas del sistema se ha mejorado de manera significativa desde RPI 3B +.

Por lo tanto, la salida de la longitud de la cola de ejecución del tiempo de actividad debe tratarse de manera diferente a la del RPI 3B +.

- Para la carga del sistema muy convencional, como la reproducción de video, la longitud de la cola de ejecución generalmente es inferior a 0.5 (por lo que la carga del sistema BAJA será de 0.0 ~ 0.5 nivel)

- Cuando se agrega una ligera carga adicional al sistema, como reproducir video y copiar archivos desde y hacia el directorio local, el tipo de trabajo resulta en una ligera carga para la CPU. (Entonces el nivel de carga LIGERA será 0.5 ~ 1.0)

- Cuando se aplican cargas significativas, como reproducir videos en el navegador en el sitio de Youtube y navegar por la web en otro navegador, la velocidad de ejecución de RPI 4 se vuelve ligeramente lenta (por lo que el nivel de carga MEDIO será 1.0 ~ 2.0)

- Finalmente, la carga del sistema RPI 4 se vuelve ALTA cuando se ejecutan varios navegadores web y se copia un gran volumen de archivos a otro servidor RPI a través de la red (luego, la longitud de la cola de ejecución se convierte en más de 2.0)

***

Estos datos de nivel de carga serán utilizados por código Python desarrollado en el siguiente paso.

Paso 8: revisión del circuito original

Revisión del circuito original
Revisión del circuito original

Debido a varios defectos del diseño del circuito original, estoy modificando el circuito como se muestra en la imagen de arriba.

Las razones para cambiar son las siguientes.

- El pulso de reloj NE555 se compone de formas de onda ALTA y BAJA. Pero generalmente la duración de la señal ALTA y BAJA (t = 1 / f) no es la misma (por ejemplo, ALTA es 70% y BAJA es 30% en el circuito original). Por lo tanto, la frecuencia de parpadeo de dos LED (LED verde / amarillo en el diseño original) no es la misma (un LED se enciende durante más tiempo que el otro). Por esta razón, la indicación visual mediante el parpadeo del LED no es muy fácil de reconocer.

- Por lo tanto, agregaré más LED y haré un patrón de iteración circular con CD4017 para garantizar un fácil reconocimiento del estado operativo.

- También cambia el esquema de parpadeo del LED a la inversa, como un parpadeo lento con carga BAJA y un parpadeo más rápido con carga ALTA. (El circuito original está hecho para parpadear más rápido en carga BAJA y parpadear lentamente en carga ALTA). En la situación de carga ALTA, cualquier acción de RPI se vuelve lenta. Y mostrar un parpadeo lento del LED no te hará feliz. (En el aspecto psicológico, elijo un esquema de visualización más positivo)

***

Aunque la parte de la pantalla LED se modificó significativamente, el nivel de cambio general con el circuito original no es mucho como puede ver en el siguiente paso.

Paso 9: cambio de esquema original

Cambio de esquema original
Cambio de esquema original

La adición de CD4017 y 8 LED es una modificación importante.

Además, para cambiar la frecuencia de sincronización del NE555 y el esquema de parpadeo inverso del LED, los valores de las resistencias se cambian como se muestra en los esquemas anteriores.

Como la parte del circuito agregado es un circuito de persecución basado en CD4017 simple, omitiré otras explicaciones detalladas del circuito modificado.

Toda la parte del circuito cambiada se puede hacer como placa PCB hija a la que se sueldan el CD4017 y 8 LED.

La placa secundaria se puede conectar a la placa principal (placa madre) como se muestra en la imagen en el paso 8.

Paso 10: Prueba

El video de prueba de todas las etapas operativas (estado de carga BAJA, LIGERA, MEDIA y ALTA) se muestra en el archivo almacenado en la unidad de Google a continuación.

***

drive.google.com/file/d/1CNScV2nlqtuH_CYSW…

***

Según la carga actual del sistema, la frecuencia de parpadeo cambiará entre uno de los 4 estados que se muestran en el video.

Paso 11: Código Python

Código Python
Código Python

Como la mayoría de las lógicas de control se incluyen en el circuito de hardware externo, la lógica operativa del código Python es relativamente simple, incluidos los siguientes pasos.

- Obtener datos de temperatura de la CPU para comparar la relatividad entre la carga del sistema y el aumento de temperatura

- Recopilación de la carga promedio del sistema de 1 minuto a partir de la salida de tiempo de actividad

- Hacer una marca de tiempo como el formato aa-mm-dd hh: mm: ss

- Temperatura de escritura, carga del sistema junto con marca de tiempo

- Según los datos de salida de carga del sistema actual (00, 01, 10, 11) al circuito INDICADOR

- Duerma 5 segundos antes de comenzar los pasos mencionados anteriormente

Como el programa Python necesita una sangría estricta dentro del código fuente, descargue el archivo fuente desde Google Drive siguiendo el enlace a continuación.

***

drive.google.com/file/d/1BdaRVXyFmQrRHkxY8…

***

Como no estoy usando RPI como computadora de escritorio, ejecutar aplicaciones de oficina Libre o un navegador web es muy poco común.

Por lo general, estoy reproduciendo videos musicales, copia / movimiento de archivos o programación en Python con RPI 4B 2GB recién comprado.

Por lo tanto, la carga promedio suele ser inferior a 1.0 en mi caso y, en consecuencia, estoy cambiando los niveles LOW / LIGHT / MEDIUM / HIGH en mi código. (Puede cambiar las condiciones de la prueba de lo contrario)

Pero cuando normalmente ve videos de Youtube con RPI, es común que ocurran más de 2.0 de las cargas del sistema.

Paso 12: Relatividad entre la carga del sistema y la temperatura de la CPU

Relatividad entre la carga del sistema y la temperatura de la CPU
Relatividad entre la carga del sistema y la temperatura de la CPU

Por lo general, supongo y estoy seguro de que el aumento de la carga del sistema aumentará la temperatura de la CPU.

Pero hasta ahora no tengo una imagen clara de la interacción mutua entre ellos.

Como puede ver en el gráfico anterior, tienen una correlación muy fuerte de la siguiente manera.

- Para facilitar la comparación, multiplicaré por 10 la carga promedio del sistema. De lo contrario, la escala de carga del sistema es muy pequeña (0.0 ~ 2.0), la comparación directa se vuelve difícil.

- Como el circuito del ventilador de refrigeración está instalado en la caja Pi de reproducción de música, la temperatura de la CPU nunca supera los 50 ° C

- Cuando la carga del sistema está dentro del rango de 0.0 ~ 1.0, la temperatura dentro del rango de 45 ~ 48C (la cubierta de metal de la CPU se está calentando ligeramente)

- Pero se aplica una carga pesada (generalmente navegador web y reproducción de videos de Youtube), la carga se dispara y, por lo tanto, la temperatura

***

Como RPI 4B se instala con CPU de 4 núcleos, teóricamente el rendimiento no se degradará mucho hasta el nivel de carga (cola de ejecución de tiempo de actividad) 4.

Pero aún por debajo del nivel de carga promedio 4, será necesario un control de temperatura adecuado.

Paso 13: finalización

Finalización
Finalización

Estoy terminando este proyecto instalando INDICATOR en la caja Pi como se muestra en la imagen de arriba.

Durante el uso casual de esta caja Pi, el INDICADOR rara vez muestra un nivel ALTO y un LED dinámico parpadeando.

Por lo general, permanecía en estados de LED parpadeantes lentamente (nivel LOW o LIGHT).

De todos modos, el indicador visual agregado hace un poco divertido al menos muestra que RPI está haciendo algo en este momento.

Gracias por leer esta historia…..

Recomendado: