Relógio 2.3.11
Nesta nova atualização retiramos uma serie de operações para centralizar mais na função primordial.
O software passa apenas controlar o hardware proposto, sem marcação de ponto, que será implementado em outro software.
Nesta nova atualização retiramos uma serie de operações para centralizar mais na função primordial.
O software passa apenas controlar o hardware proposto, sem marcação de ponto, que será implementado em outro software.
Nesta versão realizei:
A mudança mais recente na versão 2.3.9 do projeto relógio, esta em ler as informações das placas NVIDIA.
Permitindo a integração além dos modelos da placa de vídeo, como também a temperatura de ambas.
Outro recurso, bem interessante na nova versão é a possibilidade de monitoramento de temperatura, através de gráfico.
Agora o projeto relógio permite ler a temperatura da placa de vídeo.
Nesta nova etapa, estamos adicionando informações chave da placa de vídeo.
O código associado a leitura do GPU esta na unit funcoes.pas
function GetGPUTemperature: string;
Esta função faz a integração com as GPUs da NVIDIA, através de lib da própria fabricante.
Falaremos neste artigo, como obter a temperatura da placa de Vídeo (GPU) NVIDIA.
Abordaremos o procedimento mais simples de integração, e leitura das informações da placa de vídeo, integrando com Lazarus.
A placa de vídeo, hoje é requisito obrigatório para qualquer computador realmente robusto.
Placas de vídeo com grande capacidade, por vezes precisam ser monitoradas para evitar super aquecimento .
Atualmente projetos de CASEMOD não seriam realmente case mode, se não lerem estas informações.
Pensando nisso a NVIDIA, lançou um conjunto de ferramentas que auxiliam o desenvolvedor na obtenção de forma fácil e assertiva, na leitura das informações da GPU.
O NVIDIA System Management Interface é um utilitário, baseado no NVML (NVIDIA MANAGEMENT Library) que gerencia e monitora dispositivos NVIDIA.
Este utilitário tambem administra por pesquisas por estado de dispositivo GPU , atribuindo privilegios , permitindo administradores modificares o estado da GPU.
NVIDIA-smi é embarcado com o driver para linux do NVIDIA GPU , e windows 64bits (WIN7/2008).
O NVIDIA-smi pode fornecer informações em formato XML ou em arquivo texto simples.
Para maiores informações consulte a documentação:
O fragmento acima é uma tradução livre do site:
https://developer.nvidia.com/nvidia-system-management-interface
O Componente TProcess , permite a integração de comandos através da console.
Segue o fragmento de código para analise.
function GetGPUTemperature: string;
var
cmd : TProcess;
AStringList: TStringList;
begin
cmd := TProcess.Create(nil);
// Cria o objeto TStringList.
AStringList := TStringList.Create;
cmd.CommandLine:='nvidia-smi -i 0 --format=csv,noheader --query-gpu=temperature.gpu';
cmd.Options := cmd.Options + [poWaitOnExit, poUsePipes];
cmd.Execute;
AStringList.LoadFromStream(cmd.Output);
result := trim(AStringList.Text);
AStringList.Free;
cmd.Free;
end;
Documentação da API
https://docs.nvidia.com/deploy/nvml-api/index.html
Documentação nvidia-smi
http://developer.download.nvidia.com/compute/DCGM/docs/nvidia-smi-367.38.pdf
Download do CUDA Toolkit 3.2
https://developer.nvidia.com/cuda-toolkit-32-downloads
Caminho no pc após instalação:
C:\Program Files\NVIDIA Corporation\NVSMI
Neste artigo, explicarei como ler as informações da BIOS.
Existe um projeto, na minha opinião um dos poucos que realmente funciona.
https://github.com/RRUZ/tsmbios/blob/master/Common/uSMBIOS.pas
Este projeto, implementa uma camada, que permite ler as informações da BIOS do computador.
Com ela é possível acessar informações, como memória, temperatura, e tantas outras informações.
Um exemplo de uso, esta no projeto relógio, a função GetMemorySize lê a quantidade de memória disponível no seu PC.
function GetMemorySize : DWORD;
Var
SMBios : TSMBios;
LPhysicalMemArr : TPhysicalMemoryArrayInformation;
begin
SMBios:=TSMBios.Create;
try
if SMBios.HasPhysicalMemoryArrayInfo then
for LPhysicalMemArr in SMBios.PhysicalMemoryArrayInfo do
begin
if LPhysicalMemArr.RAWPhysicalMemoryArrayInformation^.MaximumCapacity<>$80000000 then
begin
result := LPhysicalMemArr.RAWPhysicalMemoryArrayInformation^.MaximumCapacity div 1024;
break;
end
else
begin
result :=LPhysicalMemArr.RAWPhysicalMemoryArrayInformation^.ExtendedMaximumCapacity div 1024;
break;
end;
end
else
result := 0;
finally
SMBios.Free;
end;
end;
Existem diversos exemplos de código nesta maravilhosa biblioteca, e vale a pena rever e estudar este código.
O objetivo deste case, é permitir coletar a temperatura e humidade do local, armazenando e mostrando no relógio.
Para o desenvolvimento.
O desenvolvimento deste hardware, foi composto de 3 Etapas:
A confecção da caixa plástica, desenvolvida em ABS, e impressa na impressora 3D. Permite a incorporação de um display 16×2.
O projeto da caixa plástica pode ser obtido através do site grabcad.
https://grabcad.com/library/box-arduino-1
Sendo a segunda parte a base do projeto.
A eletrônica deste projeto é bem simples.
São poucas peças e com ligações elétricas muito simplificadas.
Usamos em nosso software um display 16×2 com I2C incorporado.
O uso deste simplifica as ligações elétricas.
Para controlar o lcd, utilizamos um arduino nano.
Usamos para simplificar e auxiliar uma base do arduino nano.
Quando montado, fica assim:
A fixação da base necessita de prévia furação na base, porem, após a furação os chanfros das conexão já estarão disponíveis.
Para coletarmos a temperatura e humidade, utilizamos um sensor DHT22, conforme ilustração abaixo:
Todo o projeto está armazenado no GIT, no seguinte repositório
https://github.com/MarceloMaurin/relogio
O Software do arduino pode ser obtido na pasta Arduino/Sensor/
O Projeto deve ser compilado com a lib LiquidCrystal_I2C.h e o SimpleDHT.h.
Como funciona?
O Sensor joga na porta serial as informações de temperatura e humidade constantemente.
Desta forma é possível capturar pelo lazarus os valores e mostrar em interface própria.
O Software para pc foi desenvolvido em Lazarus.
Esta na pasta relogio/relogioX86 para windows e relogio/relogioL86 para linux.
Já a parametrização pode ser baixada setada em Devices IoT.
Existem versões do Software para Linux/Windows/Mac/Linux ARM.
O instalador pode ser visto em relorio/instalador
Para mac o instalador fica em relogio/relogiomac/instalador
Documentação completa do projeto pode ser vista em:
A algum tempo eu montei um projeto chamado displaypc, que nada mais é um casemod para desktop.
Segue foto do Nextion montado.
Neste casemod, eu incluo uma tela touch screen, que entre outras coisas permite a integração com uma tela nextion.
Nele eu usava um nextion de 3.2 polegadas, ligado diretamente ao meu PC, onde montei um casemod para meu workstation.
O Projeto é constituído de 3 etapas:
Segue o link da caixa plástica para impressão:
https://grabcad.com/library/5-inch-pc-cabinet-slap-w-nextion-display-1
Nela imprimimos um suporte, que será colocado no lugar das baias de 5 polegadas. No caso ocupará duas das baias de 5 polegadas.
Por fim usaremos um eletrônica especifica para fixar os dispositivos.
Primeiramente, usaremos uma placa PCI USB, como essa.
Percebam que existem 4 slots usb para fora da maquina, e um para dentro.
Conectaremos neste interno um USB TTL, conforme figura abaixo:
Faremos a ligação, conectando o TX do USB no RX do Nextion, e o RX do USB no TX do Nextion.
As conexões de alimentação, ficam assim:
O GND <-> GND e 5V <-> 5V (USB <-> Nextion);
Pronto, finalizamos toda a ligação elétrica.
Muitos não acreditam, mas o software é sempre a parte mais dificil do projeto. Inclusive esta não terminado.
O protocolo do Nextion pode ser visto a partir deste link:
Depois de bater bastante cabeça eu comecei a entender o projeto.
Primeiro montei um projeto simples, que chamei de displaypc.HMI.
O projeto com extensão HMI, é o padrão do software do nextion, que desenhamos as telas;
A montagem da tela. é muito semelhante as que os programadores usam no Delphi, Visual Studio ou Android Studio.
Então se você usa qualquer uma destas RADS não terá problema em desenvolver neste editor.
Voce pode baixar o Nextion Editor neste link:
O projeto do displaypc.HMI, pode ser baixado no meu git:
https://github.com/MarceloMaurin/relogio.git
O Projeto do Relógio contem vários módulos, mas vc pode baixar os códigos do HMI, dentro da pasta Nextion
Montei um pequeno exemplo em Lazarus que interage com o projeto do displaypc.HMI
Neste tópico vou falar um pouco sobre o programa que montei para testar.
O projeto esta dentro da pasta teste do git.
relogio\teste\lazarus
E pode ser chamado pelo Lazarus 2.0, conforme figura abaixo:
Neste pequeno exemplo faço a integração com lazarus do display Nextion, apresentando como o protocolo do mesmo funciona.
No fragmento abaixo, chamo a page com indice 1.
LazSerial1.WriteData(‘page 1’+#255+#255+#255);
Podemos perceber, que ao final, sempre será necessário incluir o FF FF FF, pois é padrão do protocolo.
Neste pequeno exemplo, fazemos a barra de progresso, sair de 0 ate 100%
procedure TForm1.Button5Click(Sender: TObject);
var
a : integer;
begin
for a:= 0 to 100 do
begin
LazSerial1.WriteData(‘val02.val=’+inttostr(a)+#255+#255+#255);
LazSerial1.WriteData(‘prog02.val=’+inttostr(a)+#255+#255+#255);
sleep(100);
end;
end;
Abaixo, vemos a tela, de status, onde aparece os componentes prog02 e val02.
Em breve falarei mais sobre o casemod, apresentando o exemplo do fonte.
Vida longa e prospera!
Nesta versão já disponibilizamos a leitura e marcação de ponto.
Onde as informações do ponto ficam na janela Working, que pode ser acessada pressionando o botão direito do mouse no icone do relógio.
A Opção Show Working, permite incluir registro de passagem de ponto, que serão gravados em arquivos diários com extensão .dat (DWrkddmmyy.dat)
TIMESTART:16:08:01
TIMESTOP:16:17:56
TIMELAP:00:00:00
O Campo TIMESTART é o Tempo da primeira marcação
O TimeStop o tempo da parada. (Ultima marcação)
O Sistema permite múltiplas paradas, sendo que ao identificar uma retomada, pegara o período entre o TIMESTOP e a presente marcação e acumulará em TIMELAP, Deixando o timestop em branco novamente.
Na Tela Setup Work, marcaremos a Jornada diária.
Na tela abaixo, identificamos que o inicio da atividade se dá pelo botão Start, ao lado do item In/Out Working.
O display de trabalho somente irá surgir se o inicio de um dia for marcado.
Com esta nova versão estamos mais um passo próximo da inclusão de ponto de acesso.
Tambem incluímos a opção de menu no relógio.
Estaremos modificando todos os menus para textos em inglês, pois a ideia do projeto é ser internacional.
Na aba de trabalho pode ser habilitado a função através do menu.
Onde surgirá o menu, para que diga a sua jornada de trabalho:
os apontamentos serão gerados em arquivo workddmmyy.cfg, nos parâmetros TimeStart e TimeStop.