Categoria Ferramentas

porRicardo Jorge

TensorFlow.js – introdução a machine learning

Neste artigo sobre TensorFlow.js – introdução a machine learning, será feita uma introdução a este poderoso Framework para machine learning ( ou Aprendizado de máquina em português ).

Até bem recentemente, apenas começar a escrever sua primeira linha de código de aprendizado de máquina exigia um grande investimento inicial em tempo e dinheiro.

A boa notícia é que para iniciar o aprendizado de máquina, nunca foi tão fácil.

Na verdade, se você está lendo este artigo, significa que já tem as ferramentas de que precisa para mergulhar de cabeça.

Agora você pode aprender a estrutura de aprendizado de máquina TensorFlow diretamente no seu navegador, usando Javascript.

O TensorFlow.js foi lançado no Google I / O 2018.

Executar o aprendizado de máquina no navegador abre um mundo de casos de uso e é uma ótima oportunidade de usar Javascript para aprender sobre os conceitos e estruturas de aprendizado de máquina.

Dando os primeiros passos

Tudo que você precisa para executar o Tensorflow.js é seu navegador WEB.

É fácil perder de vista toda a conversa sobre transpiladores, empacotadores e demais ferramentas, mas tudo que você precisa é um navegador da WEB para executar TensorFlow.js.

O código que você desenvolve localmente é o mesmo código que você poderá enviar aos usuários para executar em seus navegadores.

Se você é novo no Javascript ou se já faz um tempo desde que escreveu qualquer código de front-end, algumas das mudanças recentes nas linguagens podem confundi-lo.

Um pouco da história do Javascript

À medida que nossas expectativas para os aplicativos da web aumentaram na última década, o ecossistema de front-end explodiu em complexidade.

A linguagem Javascript, em particular, amadureceu muito como linguagem de programação, adotando uma série de mudanças com visão de futuro para a linguagem, enquanto continua a oferecer suporte a uma das maiores bases de usuários de qualquer linguagem de programação.

Novas alterações nas especificações da linguagem Javascript são referenciadas com acrônimos como ES5, ES6, ES2015, E2016.

ES significa ECMAScript e Javascript é baseado neste padrão. 5 e 6 eram tradicionalmente usados ​​para se referir a versões do padrão, mas hoje em dia os anos são usados ​​para maior clareza.

Nem todos os navegadores WEB suportam da mesma forma as várias versões de ECMAScript e alguns problemas de compatibilidade podem ocorrer.

Por que os modelos de código em JavaScript

Muitos modelos foram implementados em Python porque Python é uma escolha popular entre cientistas de dados e tem o melhor suporte em termos de funções.

No entanto, a ampla adoção do aprendizado profundo ( deep learning ) em todos os tipos de aplicativos atraiu desenvolvedores de diferentes origens em linguagens de programação.

Além disso, as práticas de implementação de modelos tornaram-se mais bem compreendidas e amplamente disponíveis, permitindo que mais desenvolvedores construam seu próprio modelo que se adapta melhor a sua aplicação.

Felizmente, o TensorFlow foi projetado para oferecer suporte a diferentes vinculações de linguagem, em particular, programação Python, C, R, JavaScript e Java ™.

Como cada linguagem oferece seu próprio conjunto de vantagens, os desenvolvedores têm seus motivos para escolher a linguagem de programação.

Portanto, é importante permitir que os desenvolvedores permaneçam com seus ambientes de programação familiares, em vez de exigir que eles aprendam uma nova linguagem.

Por que APIs de alto nível ?

Codificar um modelo em uma API de alto nível permite que você seja mais produtivo, concentrando-se no design de alto nível e evitando as porcas e parafusos da implementação de baixo nível.

O código é muito mais curto e fácil de ler e manter.

O que são os Tensores ?

Os tensores são os principais blocos de construção do TensorFlow.

Eles são contêineres de dados n-dimensionais. Você pode pensar neles como arrays multidimensionais em linguagens como PHP, JavaScript e outras.

O que isso significa é que você pode usar tensores como valores escalares, vetoriais e matriciais, uma vez que são uma generalização deles.

Cada tensor contém as seguintes propriedades

  • rank – número de dimensões
  • shape – tamanho de cada dimensão
  • dtype – tipo de dados dos valores

Conclusão : TensorFlow.js é um Framework que permite inúmeras possibilidades e neste artigo foi feita apenas uma breve introdução, deixando links para materiais que podem ser consultados para uma experiência mais completa sobre este assunto.

É importante conhecer e saber que existem várias opções, quando o assunto é “aprendizado de máquina”.


Material consultado :

Hello World with Tensorflow.js

Coding a deep learning model using TensorFlow.js

Getting Started with TensorFlow.js

Introduction to Tensorflow.js and Machine Learning


Artigos relacionados :

Pare de chamar tudo de Inteligência Artificial

IoT o que fazer após a instalação?

IoT e os dados dos sensores e do CLP


Image by Gerd Altmann from Pixabay
porRicardo Jorge

Linguagem C dicas sobre programação

No artigo Linguagem C dicas sobre programação será mostrado que algumas opções de programação podem gerar efeitos diferentes do esperado.

Ao longo dos anos de uso e com a experiência adquirida, acabamos definindo nossas formas prediletas de codificação.

Entretanto, em alguns casos é necessário avaliar se o resultado será consistente e principalmente, o que esperamos.

Além disto, algumas formas de codificação melhoram o desempenho do código, permitindo que aquele hardware mais “simples”, possa ser usado em nosso projeto.

A linguagem C é bastante flexível e expressiva; essas são algumas das razões pelas quais ela tem sido bem-sucedida e resiliente à substituição por linguagens “melhores”.

Um exemplo de sua flexibilidade é a possibilidade de escrever uma expressão de várias maneiras que são funcionalmente equivalentes.

Isso permite que o estilo de codificação seja adaptado às necessidades pessoais.

No entanto, há um problema: às vezes, o código aparentemente equivalente tem diferenças sutis.

Isso pode ocorrer no código mais simples e exploraremos algumas possibilidades neste artigo.

É comum para linguagem C, fornecer várias maneiras diferentes de fazer algo, sendo todas equivalentes.

Por exemplo, dado que x é uma variável do tipo integer ( int ), cada uma das seguintes instruções fará exatamente o mesmo trabalho:

x = x + 1;
x += 1;
x++;
++x;

Em todos os casos, 1 será adicionado a x.

A única diferença é que dependendo do compilador, um código ligeiramente melhor poderá ser gerado para as duas últimas opções.

As duas formas de uso do operador ++, produzem o mesmo resultado.

No entanto, se o valor da expressão for usado, o pré-incremento e o pós-incremento são diferentes, assim:

y = x++;   // y terá o valor de x antes do incremento
y = ++x;   // y terá o valor de x após o incremento

Curiosamente, o pós-incremento é um pouco mais “pesado”, pois o armazenamento precisa ser alocado para manter o valor antigo de x.

No entanto, um compilador provavelmente otimizaria isso.

Se o armazenamento for alocado quando o valor da expressão não for usado, siginifica que o compilador usado não é o mais indicado !

Se, em vez de ser um int, x fosse um ponteiro para int, adicionar 1 teria o efeito de adicionar 4 (em uma máquina de 32 bits).

No entanto, às vezes, construções que parecem ser equivalentes têm diferenças muito sutis.

Provavelmente, a coisa mais simples que você pode fazer em qualquer linguagem de programação é atribuir um valor a uma variável.

Neste caso, poderíamos escrever o seguinte em C :

alpha = 99;
beta = 99;
gamma = 99;

Claro, uma forma mais compacta ficaria assim:

alpha = beta = gamma = 99;

Será que estas duas formas descritas são 100% equivalentes ?

Na maioria das vezes, essas duas construções são inteiramente equivalentes, mas existem (pelo menos) quatro situações em que escolher uma ou outra pode fazer a diferença:

Em primeiro lugar, e de forma mais comum, cada variável é separada e talvez um comentário indicando por que ela está definida com esse valor seja apropriado.

Em segundo lugar, é sempre bom escrever código sustentável.

Talvez, em algum momento no futuro, o código precise ser alterado para que todas as três variáveis ​​não sejam definidas com o mesmo valor.

O primeiro formato se presta mais facilmente a modificações.

O terceiro motivo está relacionado a compiladores abaixo do padrão, que podem gerar código como este para a primeira construção:

mov r0, #99
mov alpha, r0
mov r0, #99
mov beta, r0
mov r0, #99
mov gamma, r0

A segunda construção dá a dica de que r0 só precisa ser carregado uma vez.

Novamente, um compilador melhor não precisaria da dica.

Por último, há a questão da ordem de execução.

Na primeira construção, é totalmente claro que alfa será atribuído primeiro e gama por último.

Um compilador interpretará a segunda construção assim:

alpha = (beta = (gamma = 99));

Isso significa que a ordem de atribuição foi invertida.

Será que isso importa?

Na maioria das vezes, não.

Mas se fossem registradores de dispositivos, não variáveis ​​comuns, isso poderia fazer uma grande diferença.

É muito comum que o hardware precise que os valores de configuração sejam carregados em uma sequência precisa.

Portanto, eu diria que as atribuições múltiplas em uma construção de instrução devem ser evitadas.

No geral, embora C seja uma linguagem pequena, pode-se argumentar que ela poderia ser ainda menor, fornecendo menos maneiras de fazer as coisas.

O resultado pode ser um código mais claro e sustentável.

Artigo baseado nesta publicação.

Artigos relacionados

Função switch e a máquina de estado – state machine

arduino – como melhorar a precisão da entrada analógica



Photo by Niclas Illg on Unsplash
porRicardo Jorge

Multímetro com LoZ e a tensão fantasma

Você acabou de adquirir um multímetro, e no seletor de funções aparece uma opção “LoZ” e ficou curioso para saber qual é a relação desta função com a tensão fantasma ?

Neste artigo será feita uma introdução a função “LoZ” e a tensão fantasma.

A tensão fantasma é um efeito que pode ser muito mais comum do que parece, principalmente quando utilizamos multímetros digitais, também conhecidos como DMM – Digital Multi Meter

O que são tensões fantasmas

As tensões fantasmas ocorrem quando temos uma fiação energizada próxima a outra fiação não energizada, sendo que ambas estão dentro e próximas de um mesmo conduíte ou canaleta.

Esta condição forma um capacitor e permite o acoplamento capacitivo entre a fiação energizada e a fiação não energizada adjacente.

Ao colocar as pontas de medição do multímetro, entre o circuito aberto e o condutor neutro, você efetivamente completa o circuito por meio da entrada do multímetro.

A capacitância entre o condutor conectado a uma fase e o condutor flutuante, forma um divisor de tensão em conjunto com a impedância de entrada do multímetro.

Sendo assim, O multímetro mede e exibe o valor de tensão resultante.

A maioria dos multímetros digitais disponíveis no mercado, tem uma impedância de entrada alta o suficiente para mostrar a tensão capacitivamente acoplada, dando uma falsa impressão de um condutor vivo ( alimentado ).

O medidor está, na verdade, medindo a tensão acoplada ao condutor desconectado.

O valor da tensão fantasma poderá representar um valor até próximo ao da tensão real de um condutor conectado à fase.

Se esta tensão não for reconhecida como uma tensão fantasma, o profissional poderá investir tempo e esforço fazendo um diagnóstico desnecessário no circuito AC.

Funçao LoZ e a tensão fantasma

LoZ significa Low Impedance (Z), ou baixa impedância em português.

Este recurso apresenta uma entrada de baixa impedância para o circuito em teste.

Isso reduz a possibilidade de leituras falsas devido a tensões fantasmas e melhora a precisão ao testar para determinar a ausência ou presença de tensão.

Noções básicas de impedância

A maioria dos multímetros digitais vendidos hoje para teste de sistemas industriais, elétricos e eletrônicos tem circuitos de entrada de alta impedância maiores que 1 megohm.

Isto siginifica que, quando o DMM ( Multímetro Digital ) é colocado em um circuito para uma medição, ele terá pouco impacto no desempenho do circuito.

Este é o efeito desejado para a maioria das aplicações de medição de tensão e é especialmente importante para eletrônicos sensíveis ou circuitos de controle.

Instrumentos mais antigas, como multímetros analógicos, geralmente têm circuitos de entrada de baixa impedância em torno de 10 kilohms ou menos.

Estes instrumentos mais antigos não são “enganados” pela tensão fantasma, mas só devem ser utilizados onde a baixa impedância não afetará negativamente ou alterará o desempenho do circuito sob medição.

Através do uso da função “LoZ”, os técnicos terão mais segurança para detectar problemas em circuitos eletrônicos, bem como em circuitos que podem conter tensões fantasmas.

Considerações

É fundamental utilizarmos os recursos adequados para que nosso trabalho seja feito com qualidade e segurança.

Também precisamos conhecer as várias funções dos instrumentos que usamos, para podermos escolher a mais adequada para cada caso de uso.

Dada a variedade e complexidade dos requisitos de medição e teste encontrados na maioria das instalações atuais, é importante contar com um medidor ( multímetro ) que permita à você, optar pelo tipo adequado de impedância para sua medição.

Existem medidores no mercado com entrada de impedância dupla e automática.

Enquanto outros tem uma função “LoZ” para escolha manual.

Agora que você já sabe como utilizar a função LoZ do seu multímetro para identificar uma tensão fantasma, terá mais segurança, precisão e qualidade no seu trabalho.


Referências :

Low impedance voltage testing (LoZ)

Artigos relacionados :

Introdução aos filtros EMI e filtros de linha

Sistemas Off-Grid – Monitorando resultados



Image by Alex Kuimov from Pixabay

porRicardo Jorge

arduino – Monitor para energia solar e eólica – Parte 1

Porque um monitor de energia solar ou eólica?

A resposta é muito simples : desenvolver um monitor para energia solar ou gerador eólico, utilizando arduino, é algo viável e com excelentes resultados práticos.

Após a fase do protótipo, podemos evoluir criando uma placa de circuito impresso, integrando os módulos que serão descritos nesta série de artigos.

Embora o título mencione “arduino”, é possível utilizar ESP8266, NodeMCU, ESP32 e similares.

O interesse no desenvolvimento de um monitor, surgiu pouco após iniciar minhas pesquisas com energia solar, quando percebi que não existiam boas opções para monitorar o sistema que eu havia montado.

Pesquisei na Internet e encontrei os famosos wattímetros AC e os amperímetros DC.

E nenhum deles consegue comunicar com o outro !

Também fica difícil ou talvez até impossível, registar as medições ao longo dos dias, semanas, meses e estações do ano.

Ou seja, ou você fica olhando para o painel, ou nunca saberá o que está acontecendo, ou o que aconteceu.

Decidi criar um monitor mais ambicioso, onde seria possível integrar as medições da etapa AC com as medições da etapa DC.

Como este projeto tem vários detalhes, não seria possível apresentar tudo em um único artigo.

Criarei uma série, onde poderemos avaliar e debater melhor, o que foi feito, e o que poderá ser melhorado.

Iniciaremos pelo módulo DC, que é menos comum de ser encontrado no mercado.

Até mesmo projetos com arduino, são mais comuns para a etapa AC.

Antes de iniciarmos, é necessário entender um pouco mais sobre o próprio arduino e porque algumas opções foram escolhidas, ao longo do desenvovlimento deste projeto.

Vamos aos principais tópicos :

  • Precisão da entrada analógica
  • Medição de corrente – Low-side
  • Medição de corrente – High-side

Precisão da entrada analógica

Tratarei este assunto com mais detalhes em outro artigo, mas farei uma rápida introdução agora.

Já vi inúmeros debates na Internet, sobre a “pouca” precisão que “apenas” 10 bits proporcionam.

Não direi que é a melhor precisão possível, mas na maioria das vezes, e no nosso caso também, é suficiente para atender nossas necessidades.

O grande ponto é que, na maioria das vezes, a faixa sendo medida é menor do que a entrada analógica espera.

Vejamos alguns tipos mais comuns de módulos :

MóduloFaixa da Tensão analógica
arduino – UNO ( 5V )0 – 5V
arduino – Pró Mini ( 5V )0 – 5V
arduino – Pró Mini ( 3V3 )0 – 3.3V
ESP82660 – 1V
NodeMCU0 – 3.3V

Sem entender esta relação, muitas vezes um ADC externo é instalado, ao invés de fazermos o condicionamento do sinal analógico a ser medido.

Medição de corrente – Low-side

Nesta opção, a amostra de corrente é obtida através da ligação de um resistor shunt entre a carga e o ponto negativo ( terra ) do circuito.

Como principal desvantagem podemos citar a interferência da conexão da carga ao terra da alimentação

Como principal vantagem, temos a baixa tensão no modo comum do amplificador de corrente.

Medição de corrente – High-side

Como principal vantagem, temos que a carga sempre estará conectada ao terra da fonte.

Contudo, nesta opção, a tensão no modo comum do amplificador é elevada, podendo dificultar e encarecer a criação do circuito sensor de corrente.

Definições para este projeto :

  • Medição de corrente Low-side através de “shunt”
  • Utilização de amplificador para o sinal de tensão proveniente do “shunt”
  • Sistema de “bias” DC, pois desejamos medições bidirecionais de corrente
    • Usando o “bias” o sinal ficará no centro da faixa analógica
  • Voltímetro DC usando divisor resistivo

Através do modelo proposto, conseguimos medir a corrente entrante e sainte no banco de baterias e saberemos, por exemplo :

  • Tensão de carga
  • Corrente de carga
  • Tempo em flutuação
  • Corrente de descarga

Artigos relacionados :

arduino – Monitor para energia solar e eólica – Parte 2

Introdução aos filtros EMI e filtros de linha

IoT – protocolo MQTT – introdução

Sistemas Off-Grid – Monitorando resultados

Matriz Energética e Elétrica

Medição de corrente Low Side e High Side

porRicardo Jorge

Node-RED – apresentação

Conhecendo Node-RED

Node-RED é uma ferramenta de desenvolvimento baseada em fluxos e foi originalmente criada pela IBM para interconexão de dispositivos de hardware, APIs e serviços online, tendo como foco aplicações IoT.

Todo o acesso ao ambiente de desenvolvimento é feito através de uma interface WEB.

Através desta interface, é possível desenvolver inúmeras aplicações utilizando várias bibliotecas já disponíveis, denominadas “nós”, ou programando diretamente em JavaScript.

Utilizo Node-RED faz alguns anos tanto para prototipagem, como em produção, juntamente com MQTT, JSON, arduino, Raspberry, “família” ESP8266, mosquitto e muitas outras ferramentas e recursos.

Acesse o site Node-RED e saiba mais.

Devido a sua versatilidade, inúmeros projetos focados em IoT utilizam Node-RED.

Mas nem só de IoT vive o Node-RED, já que, através do uso de APIs e acesso a serviços online, é possível criar muita coisa interessante.

Posso citar alguns casos de uso ( próprio ) :

  • Integração com Twitter
  • Gerenciador de bot para Telegram
  • Sistema de automação residencial
  • Conector para armazenamento de dados ( bancos de série histórica )
  • Automação de processos, como por exemplo : rotinas de backup

Devido a forma de programação ser orientada por fluxos, tudo o que você “escreve” e desenvolve, fica auto documentado de maneira visual.

É claro que existem algumas técnicas para evitar a “poluição” visual e facilitar o entendimento do fluxo.

Nos próximos artigos, abordaremos mais detalhes e formas de uso de Node-RED.

Fique ligado !

porRicardo Jorge

Curso WordPress Essencial iConectado

Para escrever este blog, pesquisei sobre o funcionamento e a operação do WordPress, e assim encontrei o Curso de WordPress Essencial iConectado

Como o material deste curso foi muito útil para mim, desejo registrar meus agradecimentos e também deixar uma referência para outras pessoas.

Eu acredito no poder e na importância do compartilhamento do conhecimento.

Veja abaixo, o link para a aula introdutória do curso WordPress Essencial.

Espero que você tenha gostado desta dica e que volte várias vezes aqui em meu blog, que trata sobre vários assuntos relacionados a tecnologia, IoT, Big Data, arduino, ESP8266, LoRa, MQTT e muito mais.

Não deixe de acompanhar também, as várias dicas sobre monitoramente de energias renováveis, como solar e eólica, usando arduino / ESP8266.

Conheça também, nosso coletor para Indústria 4.0, e seu caso de uso :

IoT na Indústria 4.0 – caso JGK

Alguns outros temas de nosso blog :

IoT – coletores para todos os perfis de uso

Indústria 4.0 – Introdução

arduino – como melhorar a precisão da entrada analógica

Nota : O material usado para referência e as fotos para ilustração, não representam associação com as marcas, nem mesmo patrocíonio. Use com critério.