Índice:

Indicador de carga da CPU Raspberry Pi: 13 etapas
Indicador de carga da CPU Raspberry Pi: 13 etapas

Vídeo: Indicador de carga da CPU Raspberry Pi: 13 etapas

Vídeo: Indicador de carga da CPU Raspberry Pi: 13 etapas
Vídeo: #138 Variable Speed Cooling Fan for Raspberry Pi using PWM and PID controller 2024, Julho
Anonim
Indicador de carga da CPU Raspberry Pi
Indicador de carga da CPU Raspberry Pi

Ao executar o Raspberry Pi (RPI) como headless sem monitor de console, nenhuma indicação visual específica está disponível para reconhecer que o RPI está realmente fazendo algo.

Mesmo que o terminal remoto seja usado com SSH, a execução de tempo em tempo do comando Linux é necessária para verificar quanta carga do sistema está sobrecarregando a CPU agora

Portanto, este circuito é feito para ajudar a reconhecer imediatamente a atividade real da CPU (talvez de forma semi-real ou quase real) para executar as cargas do sistema aplicadas atualmente.

Embora apenas a programação python e um circuito muito mais simples possam suportar a mesma funcionalidade, códigos python um pouco complexos serão necessários para simular a sofisticada lógica de controle de LED exigida por este circuito.

Além disso, a complexidade paradoxalmente aumentada do código Python sobrecarregará mais a CPU com o aumento da carga do sistema.

Portanto, descarregar qualquer funcionalidade de indicação tanto quanto possível para o circuito de hardware externo será razoável, pois este serviço deve ser executado o tempo todo e com frequência, a cada 5 segundos.

E este circuito adicionará um recurso um pouco engraçado ao RPI em execução sem cabeça.

Etapa 1: carga da CPU, verificando o comando do Linux

Comando Linux de verificação de carga da CPU
Comando Linux de verificação de carga da CPU

Existem diversos comandos Linux de verificação de carga da CPU, como top, iostat, sysstat e uptime.

Cada comando tem características vantajosas específicas em termos de diversidade de informações e simplicidade de exibição de dados.

O comando superior é o mais rico em informações e os dados muito detalhados estão disponíveis para o reconhecimento imediato da carga do sistema.

Mas operar como modo de iteração (exibindo dados continuamente na tela) e formato de informação é bastante complexo para extrair apenas os dados de carga da CPU necessários de forma simples.

O comando iostat fornece informações detalhadas sobre a carga do sistema, separando os trabalhos da fila de execução do usuário e do sistema que estão sobrecarregando a CPU atualmente.

Mas também é desnecessariamente complexo obter a carga atual da CPU de maneira rápida e intuitiva.

Em caso de tempo de atividade, dados de carga do sistema muito simples estão disponíveis em termos de média de 1 minuto, média de 5 minutos e média resumida de 15 minutos.

Como mencionado acima, simplificar o código Python é necessário porque ele deve ser executado com bastante frequência, a cada 5 ou 10 segundos.

Quando o código python se torna complexo, sobrecarrega muito a CPU.

É meio paradoxal que você sobrecarregue o RPI para monitorar a carga do sistema.

Portanto, estou escolhendo o comando uptime para reunir a carga da CPU e interoperar com o circuito indicador porque é o mais simples.

Mas como o tempo de atividade mostra a média de 1 minuto de carga do sistema, o circuito indicador deve ser operado não no modo estritamente em tempo real.

Ainda assim, este circuito pode fornecer uma dica visual útil que mostra como o RPI está fazendo agora.

Etapa 2: esquemas

Esquemas
Esquemas

Este circuito receberá 4 níveis diferentes (por exemplo, 00-> LOW, 01-> LIGHT, 10-> MEDIUM, 11-> HIGH) de carga atual da CPU do RPI por meio de duas entradas opto-acopladoras.

74LS139 (2 a 4 decodificador e desmultiplexador) está decodificando duas entradas de bits em uma de saída única entre 4 maneiras possíveis, como 00 (BAIXO) -> B0, 01 (LUZ) -> B1, 10 (MÉDIO) -> B2, 11 (ALTO) -> B3.

Como a saída 74LS139 está em nível reverso (entrada 00 -> B0 torna-se BAIXA e outras 3 saídas ALTA), o inversor 74HC04 é usado para tornar a saída reversa mais uma vez.

Quando a saída de 74LS139 é normal HIGH, 74HC04 não será necessário.

Mas de alguma forma o 74LS139 é feito dessa maneira. (Por favor, verifique a tabela verdade de 74LS139)

Quando qualquer uma das saídas 74LS139 for selecionada, ela ativará uma determinada chave analógica entre as 4 chaves incluídas no CD4066 IC.

O CD4066 pode suportar 4 chaves analógicas e cada chave consiste em 1 entrada de controle e 2 saídas analógicas.

Quando a entrada de controle torna-se ALTA, a conexão de duas saídas torna-se de baixa impedância (a resistência torna-se 0) e as outras tornam-se o nível de impedância ALTA (a resistência entre dois caminhos de saída torna-se várias centenas de mega ohm).

Simplesmente controle 1 (pino 13) de CD4066 torna-se HIGH, caminho entre a saída 1 (pino 1) e a saída 2 (pino 2) conectadas enquanto outras saídas não são conectadas (no estado de alta impedância).

Da mesma forma, a entrada HIGH do controle 2 (pino 5) torna a saída 1 (pino 4) e a saída 2 (pino 3) conectadas enquanto outras saídas são desconectadas.

Então o LM555 está piscando dois LEDs em taxas de piscamento diferentes.

Como você pode ver no esquema acima, o NE555 operará com um valor de resistência entre 4 (12k, 24k, 51k, 100k) níveis de resistência possíveis.

Etapa 3: geração de clock diferente do NE555

NE555 Geração de Clock Diferente
NE555 Geração de Clock Diferente

Conforme mostrado no esquema, NE555 irá operar um dos valores de resistência possíveis, como 12k, 24l, 51k e 100k.

Na verdade, a parte do circuito de temporização NE555 é a principal indicação visual que suporta a parte do circuito.

O esquema de operação do circuito é como segue.

- Quando não há carga significativa da CPU, o programa python instalado no RPI enviará 00 saídas para o circuito indicador. Então, o caminho de duas saídas de CD4066 está ativando e NE555 está operando com valor de resistor de 12k. Portanto, LEDs piscando 1,5 vezes por segundo (piscando muito rapidamente)

- A CPU está levemente carregada (então o comprimento da fila de tempo de atividade torna-se o nível 0,1 ~ 0,9), o python enviará 01 para o circuito. Em seguida, CD4066 ativado com saídas conectadas com resistor de 24k. Como resultado, o LED piscando diminuiu 1,2 vezes por segundo (LED piscando ligeiramente diminuiu, mas ainda um pouco rápido)

- Quando a carga da CPU aumenta significativamente (o comprimento da fila de execução do tempo de atividade torna-se o nível 1,0 ~ 1,9), o python produzirá 10 para o circuito. Então, o caminho de conexão do resistor de 51k é aberto e o NE555 está operando 0,8 vezes por segundo. Agora, a taxa de intermitência fica significativamente reduzida.

- Cargas pesadas que sobrecarregam a CPU e o comprimento da fila de execução de tempo de atividade torna-se maior (mais de 2 tarefas aguardarão para serem executadas pela CPU e o tempo de atividade relatará mais de 2,0). Conforme a conexão do resistor de 100k é selecionada, o NE555 piscará o LED 0,5 vezes por segundo (a velocidade de piscar torna-se muito lenta)

***

Junto com o aumento das cargas do sistema, a velocidade de piscar do LED será reduzida de acordo.

Quando o LED pisca bem devagar, o RPI certamente está sobrecarregado significativamente.

Desta forma, o circuito de indicação de carga informa o nível de carga atual do RPI.

Etapa 4: peças

Para fazer este circuito, vários chips IC são utilizados.

Embora eu esteja mencionando 74LSxx, tipo CD40xx de antigos chips IC, você pode utilizar tipos recentes de chips TTL e CMOS, como 74HC4066 e 74ASxx quando o chip IC selecionado é do tipo DIP.

O tipo de montagem em superfície do minúsculo pacote de IC também pode ser usado quando você pode soldar os pequenos corretamente no PCB universal.

Outros são peças comuns que você pode comprar facilmente em lojas virtuais na Internet.

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

- 74HC04 (6 inversores) x 1

- CD4066 (4 chaves analógicas IC) x 1

- NE555 Timer IC x 1

- Capacitores: 10uF x 1, 0,1uF x 1

- PC817 opto-acoplador x 2 (qualquer opto-acoplador comum de 4 pinos pode ser usado)

- Resistores: 220 ohm x 4 (limitação de corrente do LED), 4,7 K (interface opto-acoplador) x 2, 12 K, / 24 K / 51 K / 100 K (controle de tempo do relógio) x 1

- LED x 2 (quaisquer cores diferentes, como amarelo, verde ou vermelho, verde)

- Placa universal de 30 (W) por 20 (H) tamanho dos orifícios (você pode cortar qualquer tamanho de placa universal para caber neste circuito)

- Fio de estanho (para fazer padrões de fiação no PCB universal)

- cabeça de pino (3 pinos) x 3

- Cabeça de pino IC (4 pinos) x 4

- cabos de fiação de cor vermelha / azul

***

Etapa 5: Fazendo o desenho do PCB

Fazendo desenho de PCB
Fazendo desenho de PCB

Embora eu esteja mostrando o desenho da PCB em cada projeto, o design da fiação é apenas uma referência que irá guiá-lo na soldagem correta de cada peça na PCB universal.

Mas você não está necessariamente preso a esse esquema de fiação.

Como você pode ver no diagrama de fiação acima, é bastante complexo e requer um PCB significativamente grande.

Você pode usar um cabo comum para conectar peças em vez de fio de estanho para reduzir o tamanho da placa de circuito impresso concluída.

Utilize apenas o desenho da PCB para verificar e confirmar a solda correta entre as peças.

Quando o número de ICs TTL ou CMOS é aumentado, normalmente o desenho do PCB torna-se bastante complexo além da integração adequada em um único lado do PCB.

Portanto, multicamadas de PCB são comumente utilizadas para circuitos digitais de nível industrial que incluem muito TTL, CMOS e microprocessador.

Etapa 6: Solda

De solda
De solda

Estou usando fio de estanho e cabo de fiação comum juntos para minimizar o tamanho do PCB tanto quanto possível.

Ao comparar com o desenho do PCB, a localização de cada peça é completamente alterada.

Mesmo assim, o desenho do PCB é utilizado para verificar a conexão correta entre as peças durante a soldagem.

Você pode ver resistores de 12k / 24k / 51k / 100k inseridos na cabeça do pino IC sem solda.

Portanto, você pode substituir os resistores por outros valores para alterar convenientemente o esquema operacional do circuito posteriormente.

Etapa 7: montagem

Montagem
Montagem

O circuito indicador de carga concluído (doravante INDICADOR) é instalado na caixa RPI do reprodutor de música conforme mostrado na imagem acima.

Este reprodutor de música está instalado com DAC e estou usando este recentemente para reproduzir um videoclipe.

Sobre esta caixa RPI, explicarei mais tarde e agora vamos nos concentrar no INDICADOR, pois o circuito é o assunto principal deste projeto.

Comprei o Raspberry Pi 4 Modelo B 2 GB (doravante RPI 4B) recentemente para oferecer suporte ao aplicativo de reprodução de vídeo.

Como o RPI 4B aumentou o desempenho da CPU de 4 núcleos, o manuseio de cargas do sistema foi aprimorado de forma bastante significativa com o RPI 3B +.

Portanto, a saída do comprimento da fila de execução do tempo de atividade deve ser tratada de forma diferente do RPI 3B +.

- Para a carga do sistema muito convencional, como reprodução de vídeo, o comprimento da fila de execução geralmente é menor que 0,5 (portanto, a carga do sistema BAIXA será de nível 0,0 ~ 0,5)

- Quando uma pequena carga adicional do sistema é adicionada, como reprodução de vídeo e cópia de arquivos de e para o diretório local, o tipo de trabalho resulta em uma pequena sobrecarga na CPU. (Portanto, o nível de carga LIGHT será de 0,5 ~ 1,0)

- Quando cargas significativas são aplicadas, como reprodução de vídeo no navegador no site do Youtube e navegação na web em outro navegador, a velocidade de execução do RPI 4 torna-se ligeiramente lenta (portanto, o nível de carga MÉDIO deve ser 1,0 ~ 2,0)

- Finalmente, a carga do sistema RPI 4 torna-se ALTA ao executar vários navegadores da web e copiar um grande volume de arquivos para outro servidor RPI através da rede (então o comprimento da fila de execução torna-se maior que 2.0)

***

Esses dados de nível de carga serão utilizados pelo código Python desenvolvido na próxima etapa.

Etapa 8: Revisão do circuito original

Revisando o circuito original
Revisando o circuito original

Devido a vários defeitos no projeto do circuito original, estou modificando o circuito conforme mostrado na imagem acima.

As razões para a mudança são as seguintes.

- O pulso de clock do NE555 consiste em formas de onda HIGH e LOW. Mas geralmente a duração do sinal HIGH e LOW (t = 1 / f) não é a mesma (por exemplo, HIGH é 70% e LOW é 30% no circuito original). Portanto, a taxa de intermitência de dois LEDs (LED verde / amarelo no design original) não é a mesma (um LED fica aceso por mais tempo que o outro). Por este motivo, a indicação visual por LED piscando não é muito facilmente reconhecível.

- Portanto, estou adicionando mais LEDs e criando um padrão de iteração circular com CD4017 para garantir fácil reconhecimento do estado operacional

- Também muda o esquema de piscar do LED de forma reversa, como piscar lentamente com carga BAIXA e piscar mais rápido com carga ALTA. (O circuito original é feito para piscar mais rápido na carga BAIXA e piscando lentamente na carga ALTA). Na situação de carga ALTA, qualquer ação RPI torna-se lenta. E mostrar o LED piscando lentamente não o deixará feliz. (No aspecto psicológico, estou escolhendo um esquema de exibição mais positivo)

***

Embora a parte da tela de LED seja significativamente modificada, o nível geral de mudança com o circuito original não é muito como você pode ver na próxima etapa.

Etapa 9: Mudança esquemática original

Mudança esquemática original
Mudança esquemática original

A adição de CD4017 e 8 LEDs são modificações importantes.

Além disso, para alterar a frequência de clock do NE555 e o esquema de piscar do LED reverso, os valores dos resistores são alterados conforme mostrado no esquema acima.

Como a parte do circuito adicionado é um circuito chaser baseado em CD4017 simples, vou pular outras explicações detalhadas do circuito modificado.

Toda parte do circuito alterado pode ser feita como placa filha PCB à qual CD4017 e 8 LEDs são soldados.

A placa filha pode ser conectada à placa-mãe (placa-mãe) conforme mostrado na imagem na etapa 8.

Etapa 10: Teste

O vídeo de teste de todas as etapas operacionais (estado de carga LOW, LIGHT, MEDIUM e HIGH) é mostrado pelo arquivo armazenado no google drive abaixo.

***

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

***

De acordo com a carga atual do sistema, a taxa de intermitência será alterada entre um dos 4 estados mostrados no vídeo.

Etapa 11: Código Python

Código Python
Código Python

Como a maioria das lógicas de controle são incluídas no circuito de hardware externo, a lógica operacional do código python é relativamente simples, incluindo as etapas a seguir.

- Obter dados de temperatura da CPU para comparar a relatividade entre a carga do sistema e o aumento da temperatura

- Obtendo carga média do sistema de 1 minuto da saída de tempo de atividade

- Criação de carimbo de data / hora no formato aa-mm-dd hh: mm: ss

- Gravando a temperatura, a carga do sistema junto com o carimbo de data / hora

- De acordo com os dados de saída de carga do sistema atual (00, 01, 10, 11) para o circuito INDICADOR

- Durma 5 segundos antes de iniciar as etapas mencionadas acima

Como o programa python precisa de recuo estrito no código-fonte, baixe o arquivo-fonte do Google Drive seguindo o link abaixo.

***

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

***

Como não estou usando RPI como computador desktop, executar aplicativos de escritório Libre ou navegador da web é muito raro.

Normalmente, estou reproduzindo videoclipe, cópia / movimentação de arquivo ou programação python com RPI 4B 2 GB recém-adquirido.

Portanto, a carga média é geralmente inferior a 1,0 no meu caso e, consequentemente, estou alterando os níveis BAIXO / LEVE / MÉDIO / ALTO no meu código. (Você pode alterar as condições de teste de outra forma)

Mas quando você costuma assistir a vídeos do Youtube com RPI, mais de 2.0 cargas do sistema geralmente acontecem.

Etapa 12: Relatividade entre a carga do sistema e a temperatura da CPU

Relatividade entre a carga do sistema e a temperatura da CPU
Relatividade entre a carga do sistema e a temperatura da CPU

Normalmente, estou supondo e certo de que aumentar a carga do sistema aumentará a temperatura da CPU.

Mas até agora não tenho uma imagem clara da mútua interação entre eles.

Como você pode ver no gráfico acima, eles são correlacionados muito fortes da seguinte forma.

- Para facilitar a comparação, multiplico 10 pela carga média do sistema. Caso contrário, a escala de carga do sistema é muito pequena (0,0 ~ 2,0), a comparação direta torna-se difícil.

- Como o circuito FAN de resfriamento é instalado na caixa de Pi de reprodução de música, a temperatura da CPU nunca excede mais de 50 ° C

- Quando a carga do sistema está na faixa de 0,0 ~ 1,0, a temperatura está na faixa de 45 ~ 48C (a tampa de metal da CPU está ligeiramente aquecendo)

- Mas a carga pesada é aplicada (normalmente o navegador da web e reprodução de vídeos do Youtube), a carga aumenta e assim a temperatura

***

Como o RPI 4B é instalado com CPU de 4 núcleos, teoricamente o desempenho não será muito degradado até o nível de carga (fila de execução de tempo de atividade) 4.

Mas ainda menos do que o nível de carga médio 4, será necessário um controle de temperatura apropriado.

Etapa 13: Finalização

Finalização
Finalização

Estou terminando este projeto instalando o INDICADOR na caixa Pi como na imagem acima.

Durante o uso casual desta caixa de Pi, o INDICADOR raramente mostra o nível ALTO e o LED dinâmico piscando.

Normalmente ele permaneceu em estados de LEDs piscando lentamente (nível LOW ou LIGHT).

De qualquer forma, o indicador visual adicionado torna um pouco engraçado, pelo menos mostra RPI fazendo algo agora.

Obrigado por ler esta história…..

Recomendado: