Relógio
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.

Relógio
Leitura de temperatura GPUs

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.

Informações de temperatura de forma gráfica

Relógio
Informações da GPU

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.

Leitura de Temperatura da GPU

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.

Blog CUDA Delphi Relógio Sem categoria
Ler Temperatura Placa de Video NVIDIA

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:

nvidia-smi documentation.

O fragmento acima é uma tradução livre do site:

https://developer.nvidia.com/nvidia-system-management-interface

Integração com LAZARUS

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;

Download

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

Dicas Lazarus Relógio Sem categoria
Lendo informações da BIOS

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.

Relógio
Projeto Sensor de Temperatura

O objetivo deste case, é permitir coletar a temperatura e humidade do local, armazenando e mostrando no relógio.

vista do sensor de temperatura e humidade já montado

Para o desenvolvimento.

O desenvolvimento deste hardware, foi composto de 3 Etapas:

Mecânica

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

Caixa superior

Sendo a segunda parte a base do projeto.

Base do case

Eletrônica

A eletrônica deste projeto é bem simples.

São poucas peças e com ligações elétricas muito simplificadas.

Display Lcd 16x2 1602 Fundo Verde
Display LCD 16×2

Usamos em nosso software um display 16×2 com I2C incorporado.

Display Lcd 16x2 1602 Backlight Azul Com Modulo I2c Arduino

I2C incorporado no LCD

O uso deste simplifica as ligações elétricas.

Para controlar o lcd, utilizamos um arduino nano.

 Placa Nano V3 Pino Soldado + Cabo Usb Para Arduino Nano


Usamos para simplificar e auxiliar uma base do arduino nano.

Shield Adaptador Base P/ Expansão Arduiino Nanno V3.0

Shield Adaptador Base  arduino nano

Quando montado, fica assim:

Arduino nano + base.

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:

Projeto sensor de temperatura e humidade com display LCD

PINOUT do sistema

  • A2 – Sensor de Temperatura
  • A4 – SDA do I2C
  • A5 – SCL do I2C
  • 5V<->5V (i2c e Sensor de temperatura)
  • GND<-> GND (i2c e sensor de temperatura)

Software

Todo o projeto está armazenado no GIT, no seguinte repositório

https://github.com/MarceloMaurin/relogio

Software Arduino

O Software do arduino pode ser obtido na pasta Arduino/Sensor/

Dependencias

O Projeto deve ser compilado com a lib LiquidCrystal_I2C.h e o SimpleDHT.h.

Imagem do código já com o fonte do sensor.

Como funciona?

O Sensor joga na porta serial as informações de temperatura e humidade constantemente.

Debug da porta serial

Desta forma é possível capturar pelo lazarus os valores e mostrar em interface própria.

Software PC

O Software para pc foi desenvolvido em Lazarus.

Esta na pasta relogio/relogioX86 para windows e relogio/relogioL86 para linux.

Tela de captura de Temperatura e Humidade

Já a parametrização pode ser baixada setada em Devices IoT.

Existem versões do Software para Linux/Windows/Mac/Linux ARM.

Instalador

O instalador pode ser visto em relorio/instalador

Para mac o instalador fica em relogio/relogiomac/instalador

Documentação

Documentação completa do projeto pode ser vista em:

http://maurinsoft.com.br/index.php/projeto-relogio/

Relógio Sem categoria
CASEMOD em PC

A algum tempo eu montei um projeto chamado displaypc, que nada mais é um casemod para desktop.

Segue foto do Nextion montado.

Nextion montado

Neste casemod, eu incluo uma tela touch screen, que entre outras coisas permite a integração com uma tela nextion.

Tela Lcd Ihm Nextion 3.2  Tft 400x240 Touch Serial Arduino
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:

Impressão 3D

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.

Eletrônica

Por fim usaremos um eletrônica especifica para fixar os dispositivos.

Primeiramente, usaremos uma placa PCI USB, como essa.

Placa Pci Via Com 5 Portas Usb 2.0 Dp-52m

Placa Pci Via Com 5 Portas Usb 2.0 Dp-52m

Percebam que existem 4 slots usb para fora da maquina, e um para dentro.

Conectaremos neste interno um USB TTL, conforme figura abaixo:

Adaptador Usb Ttl Serial Pl2303 5v Rs232 P/ Arduino

Adaptador Usb Ttl Serial Pl2303 5v Rs232 P/ Arduino

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.

Software

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

Exemplo de Código em Lazarus

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!

Relógio
Relógio 2.2.5 – Ponto

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.

Menu de opções 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.

Trabalho

Na Tela Setup Work, marcaremos a Jornada diária.

Atividades e Trabalho

Na tela abaixo, identificamos que o inicio da atividade se dá pelo botão Start, ao lado do item In/Out Working.

Atividades e trabalho

O display de trabalho somente irá surgir se o inicio de um dia for marcado.

Relógio Sem categoria
Relógio Versão 2.2.3

Com esta nova versão estamos mais um passo próximo da inclusão de ponto de acesso.

Registro de horas

Tambem incluímos a opção de menu no relógio.

Opção Show Working

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.

Ativação do working

Onde surgirá o menu, para que diga a sua jornada de trabalho:

ornada de trabalho e menu de ativação

os apontamentos serão gerados em arquivo workddmmyy.cfg, nos parâmetros TimeStart e TimeStop.

maurinsoft.com.br