segunda-feira, 28 de março de 2011

Comunicação Serial facil



Umas das coisas mais corriqueiras no ramo de automação seja ela residencial ou industrial, é o envio de comandos do computador para o sistema ao qual se deseja automatizar, onde através de um programa no computador o individuo aperta alguns botões e a tarefa é feita numa máquina do ambiente.
Esta comunicação pode ser facilmente feita pela porta serial RS-232 do computador, onde um programa desenvolvido em alguma linguagem de programação (por exemplo, Java) vai enviar informação para a porta e algum dispositivo eletrônico (por exemplo, um microcontrolador) vai receber esta informação e fazer o que tiver que fazer com esta informação.
Para ajudar ainda mais quem pretende fazer esta comunicação via linguagem Java e utilizando o Netbeans eu desenvolvi uma classe com a intenção de facilitar na hora de fazer a comunicação entre PC e dispositivo. A função da classe é diminuir a complexidade abstraindo toda a configuração necessária para por em funcionamento a porta serial.
O nome da classe é PortaSerial que deve ser incluída no projeto. Além de incluir a classe é necessário também incluir o arquivo RXTXcomm.jar ao projeto e em todas classes lib do jdk e jre. É necessário também incluir na pasta Bin do jdk e jre o rxtxSerial.dll, e também na pasta system32 do Windows.

Feito isso é só usar a classe sem precisar se preocupar com nada a respeito da parte de tratamento das variáveis de entradas e saídas e nem das configurações da porta para o funcionamento, que convenhamos é bem chata e cansativa de se fazer.

Basta ler abaixo como é fácil o manuseio da porta serial


Se a classe PortaSerial não estiver no mesmo pacote da classe principal faça:

import (pacote onde está a classe).PortaSerial

Primeiramente criamos um objeto da classe PortaSerial na sua classe principal

PortaSerial portaserial;

O próximo passo é iniciar o objeto

portaserial = new PortaSerial();

agora com o comando abaixo o método ListaPortasCom da classe PortaSerial é executado.

portaserial.ListaPortasCom();

Quando o método anterior é executado ele carrega duas variáveis globais portascom e é do tipo String vetor[] que é publica e pode ser acessada de qualquer classe esta variável tem o nome de todas as portas seriais encontradas no computador, e numero_de_portas que tem o numero total de portas do computador
Veja abaixo como acessar o conteúdo dessas variáveis:

portaserial.portacom[i];
portaserial.numero_de_portas;

tendo o nome de todas as portas na variável portaserial.portacom[i] o próximo passo é abrir a porta a qual deseja efetuar a comunicação

portaserial.abrir_porta(nome_porta, vel);

O comando acima vai executar o método abrir_porta da classe PortaSerial e deve ser passado o nome da porta serial que deseja abrir na variável “nome_porta” que é do tipo String e deve ser tirada da variável “portaserial.portacom[i]”, e a velocidade da conexão na variável “vel” que é do tipo int.
Para enviar uma mensagem basta executar o seguinte comando:

Portaserial.escreve_mensagem(mensagem);

Onde mensagem é o que se deseja enviar pela porta ou seja são os dados a serem transmitidos e é uma variável do tipo String;
E para ler uma mensagem basta executar o comando

Portaserial.le_mensagem();

Feito isso a mensagem quando chegar será visualizada na variável:

portaserial.strEntrada

que é do tipo String

e para fechar a porta basta o seguinte comando:

portaserial.fechar_porta();


Bom é isso pessoal, quem quiser a classe é só entrar em contato comigo pelos comentários ok.

terça-feira, 22 de março de 2011

Reconhecimento de Padroes

O reconhecimento de padrões pode ser usado em diversas atividades dentre elas temos as seguintes:

  Processamento de sinais de fala
  Atualmente utilizado para atendimento virtual
  Reconhecimento de faces
  Segurança
  Auxilio a deficientes visuais
  Reconhecimento de caracteres

No caso de processamento de fala, uma das principais utilizações são os tele atendimentos virtuais onde em vez daqueles: “para reclamações digite um, para novos aparelhos digite dois e etc”, simplesmente diga o que você  deseja, ou também para controle remoto via fala, como apagar a luz, ligar tv, etc.
Em segurança pode ser feito busca por criminosos através de imagens obtidas de câmeras de segurança e fazer uma busca em banco de dados para reconhecer o criminoso.
E para os deficientes visuais pode ser usado para leituras de caracteres, de o reconhecimento é feito e é convertido para áudio facilitando a vida do deficiente visual.
Uma definição que temos que ter bem claro é o que é padrão ao contrario do que muitos possam pensar padrão não é um padre muito alto, padrão é um modelo, algo a ser seguido, é um molde. Por exemplo, o metro, é um molde, e a partir daí as réguas são feitas a partir deste molde que é o metro.
Outra definição importante é o conceito de classe que nada mais é do que um conjunto de objetos com mesmas características, cor, densidade, ângulos, perímetros, etc.
Abaixo estão as etapas necessárias para o reconhecimento de padrões e a devida classificação de um objeto em reconhecimento de imagens

Porem nem todas características da imagem são usadas, por exemplo, o fundo da imagem, então usa se um algoritmo para detecção de bordas, para separar a imagem do fundo da imagem.
Não é necessária também a influência que as diversas fontes de luz tem sobre a imagem, para isso utiliza-se um processo chamado homo-mórfico. A incidência de luz e sombras pode ocultar algumas características necessárias a serem utilizadas no processo de classificação.
Nesta mesma etapa faz se a transformação das coordenadas da imagem para coordenadas polares para tornar o reconhecimento independente de rotação, e passa a transformada de MELLIN para fazer esta tarefa.
Resumindo, na fase de pré-processamento nos estaremos passando filtros, para eliminar ou diminuir os ruídos.
Após este processo sai da etapa de pré processamento uma matriz com coeficientes numéricos para o processo de extração de características.
É importante saber escolher características das formas, em muitos casos não se pode escolher características como perímetro, área, largura ou comprimento, pois variam com a rotação, translação ou escalonamento das formas a serem reconhecidos os padrões.
A cor, por exemplo, não sofre influência da rotação, translação ou escaling de um objeto, se desejar separar folhas de arvores de galhos das arvores esta seria uma característica interessante a ser extraída das formas das figuras.
Uma das técnicas usadas para extração das características é a matriz dos pixels representada por números equivalentes a cada pixel, facilitando medidas de distancias na hora de extrair características e classificá-los.


A classificação nada mais é que usar as características obtidas do processo de extração de características e considerar quais as distâncias entre estas características e o padrões armazenados previamente.
Um exemplo é classificar um tumor como maligno ou benigno.




Então temos a imagem já passada os filtros e precisamos extrair as características intrínsecas. No caso do tumor benigno ele é mais parecido com uma elipse, e o maligno é cheio de espiculos, pontas disformes

Neste caso pode ser usado um extrator eliptic variance que é usado para verificar quão parecido com uma elipse o contorno se parece e assim determinar se é maligno(se parecer muito com uma elipse) ou se é maligno(não se parecer com a elipse).


sexta-feira, 4 de março de 2011

Automação Residencial baseada em tecnologia Zigbee

Alunos da Loughborough University no Reino Unido, desenvolveram um sistema de automação residencial utilizando-se da tecnologia zigbee para controle de equipamentos numa residência. A idéia era diminuir custos de instalação e permitir a interoperabilidade entre as tecnologias zigbee e wi-fi, ou seja, colocar duas tecnologias juntas, com protocolos diferentes, porém trabalhando na mesma freqüência.
Segundo pesquisas feita por eles as tecnologias que usam a mesma freqüência no caso do bluetooth, zigbee, e wi-fi (2,4GHz), quando utilizadas em conjunto acabam causando interferências umas nas outras, no caso do Bluetooth usado com zigbee ou com wifi houve grande interferência, no entanto zigbee com wi-fi, houve só uma diminuição na taxa de transferência do zigbee de aproximadamente 10%.
Com a utilização do wi-fi em conjunto com o zigbee há a possibilidade de aumentar o sistema para aplicações multimídia, que exigem taxas de transferências maiores que o zigbee pode suportar. Essa junção das duas tecnologias é feita por meio de um gateway.


O gerenciador zigbee é responsável por iniciar a rede zigbee, encontrar os equipamentos em seu alcance e gerenciar os equipamentos conectados na rede, e é responsável também por permitir o acesso de novos equipamentos entrantes na rede e fornecer endereços a eles. Os dispositivos finais que são os equipamentos na rede são responsáveis por enviar informações sobre seu estados, como por exemplo interruptor ligado ou interruptor desligado.


A rede criada tem a possibilidade de controle de forma remota pela internet através de um gateway, e controle local com um controle zigbee específico. Munida de um sensor de presença, um interruptor e uma válvula de ar condicionado que comunica ao gerenciador zigbee sobre seus estados, e este por sua vez atualiza os dados contidos em uma espécie de casa virtual, que é onde ficam armazenados todos os estados de todos os equipamentos da rede, e que é um software desenvolvido em linguagem C, e somente depois atualiza os estados dos equipamentos efetivamente.


segunda-feira, 28 de fevereiro de 2011

Lógica Fuzzy

A lógica fuzzy introduzida por Lotfi Zadeh, ao contrario da lógica binária onde algo é verdadeiro ou falso, pode assumir valores intermediários entre um extremo e outro. Como exemplo a temperatura na lógica binária pode ser tratada como quente e frio, já na lógica fuzzy, você pode ter temperaturas como, quente, pouco quente, médio, pouco frio e frio. Note que há a possibilidade trabalhar com valores imprecisos.
Mas devido a esta imprecisão há uma grande complexidade em converter estes valores para números. Com estas variáveis imprecisas é possível criar regras para controle de temperatura, por exemplo: SE temperatura pouco quente ENTAO velocidade vento pouco rápida. Assim sendo, teremos varias regras seguindo o escopo SE ... ENTÃO ... e é essas regras que irão controlar e determinar como o sistema irá funcionar.
Para o controle através da lógica fuzzy é necessário seguir três etapas fundamentais que são:
A fuzzificação é o processo pelo qual as variáveis de entrada são convertidas em números fuzzy.
Após é feita toda a parte de inferência baseada nas regras definidas no controlador fuzzy e obtém se os valores dos termos das variáveis de saída.



A ultima etapa consiste na defuzzificação que é responsável por converter os dados imprecisos em números precisos.
Segundo Bittencourt e Osório (2002), a teoria fuzzy tem sido aplicada com sucesso em diversas áreas, destacando-se o uso em controladores fuzzy de usinas nucleares, refinarias, processos biológicos e químicos, em produtos como máquina de lavar, câmeras fotográficas, sistemas de ventilação, na área médica, econômica, ou seja, em qualquer área aonde é necessário trabalhar com incertezas.

quinta-feira, 24 de fevereiro de 2011

Computação Ubiqua



        Já se foi a época em que tínhamos um computador para ser usado por varias pessoas, que era os chamados mainframes, depois cada pessoa passou a ter seu próprio computador e esta fase já está sendo passada para trás a algum tempo. O que acontece hoje em dia é o caso em que uma pessoa possui dois ou mais computadores.
A idéia da computação ubíqua é relacionar a computação móvel com a computação pervasiva. Na computação móvel o usuário pode desfrutar de todo a comodidade das redes wireless, dos mouses e teclados sem fio, das transferências de fotos ou vídeos do celular para o computador entre outras. Já na computação pervasiva o computador não seria mais só uma maquina em cima de uma mesa, mas está em todos os lugares, em aplicações de sensoriamentos e interações com outros dispositivos e com as pessoas no ambiente, ou seja você estará usando de computação sem querer, será uma necessidade, porem sempre de forma amigável e de fácil interface, tão fácil quanto apertar um interruptor para acender uma lâmpada.
A computação ubíqua é então a capacidade de integrar a mobilidade da computação móvel com um sistema de presença distribuído no ambiente em grande parte imperceptível e inteligente, visando melhorar em beneficio dos usuários no que diz respeito a utilizações de suas aplicações.
Conhecida como Ubicomp, só será possível seu total discernimento com avanços na capacidade de comunicação entre humanos e computadores da forma mais natural e corriqueira possível. Posto isto um grande desafio aos desenvolvedores é criar interfaces que sejam capazes de reconhecer fala, escrita, gestos expressões corporais e aliar a alguma ação, ou resumindo, computador terá que ser capaz de aprender com as experiências que for obtendo e não simplesmente realizar funções automáticas.



Porem alguns cuidados devem ser tomados, primeiro porque tem que ter segurança nos equipamentos, com firewall embarcado para proteger de acessos não autorizados, segundo que tem que ter o cuidado para que os aparelhos não sejam muito complexos a ponto de sobrecarregar o usuários entre outros cuidados com privacidade por exemplo.
Aos poucos a automação residencial vem dando dicas de que precisa da computação ubíqua e caminhando cada vez mais para este novo método de interação com os seres humanos, desprezando se o usuário tem ou não tem conhecimentos de computação e se escondendo o máximo possível, se tornando invisível ao usuário.

segunda-feira, 21 de fevereiro de 2011

Aprendizagem Artificial



        Redes neurais têm a capacidade de aprender através de exemplos, para ajustar os parâmetros de uma RNA é utilizado um algoritmo de aprendizado. Porém existem vários tipos diferentes de algoritmos de aprendizado e o que diferencia um do outro é a forma como cada um ajusta os pesos da RNA.
Podemos classificar num âmbito geral o treinamento como sendo supervisionado ou não supervisionado.
No aprendizado supervisionado a entrada e a saída são fornecidas por uma espécie de professor externo, que tem por objetivo ajustar os pesos da rede a fim de relacionar ao par entrada saída. A saída desejada é comparada com a saída efetiva da rede neural e é então calculada qual é a diferença entre elas, essa diferença é chamada de erro. Para medirmos o desempenho da RNA, ou seja, saber se a RNA é uma boa aluna ou não é usado a soma dos erros quadráticos de todas as saídas da rede.


Porém uma das desvantagens do aprendizado supervisionado é que na ausência do professor a rede se torna ineficiente no caso de aparecer exemplos que não estavam incluídas na fase de treinamento.
O exemplo mais famoso de algoritmo de aprendizado supervisionado é o algoritmo backpropagation que será estudado com mais detalhes futuramente.
O erro é matematicamente apresentado pela seguinte fórmula:

e(t) = d(t) - y(t),

Onde d(t) é a saída desejada e y(t) é a resposta calculada pela rede no instante de tempo t.
Em posse do e(t) que é o erro obtido, ele é usado para ajuste do peso da RNA da seguinte maneira:

wi(t + 1) = wi(t) +ne(t)xi(t)

Onde n é a taxa de aprendizado e xi(t) é a entrada para o neurônio i no tempo t.

sexta-feira, 18 de fevereiro de 2011

Neurônio Biológico X Neurônio Artificial

Um neurônio se comunica com outros neurônios através de sinapses, estas sinapses sao reações eletroquímicas geradas dentro do corpo do neurônio.
Há uma diferença de potencial entre o interior e o exterior do neurônio, ocasionado por reações quimicas entre o potássio no interior, com o sódio do exterior do neurônio, os íons de potássio concentrados no interior do neurônio acaba criando uma diferença de potencial de -70mV. Conforme é feita as ligações entre as células neuronais, essa tensão tende a aumentar ou diminuir, quando o impulso elétrico que vem de outros neurônios chegam contribuem para a tensao de limiar (que é de -50mV), e os canais que ligam o interior do neurônio com a parte exterior são abertos e o sódio acaba entrando na célula, tornando o interior com um potencial positivo, e essa energia sim é responsavel por transmitir o pulso até as conexões sinápticas através dos axônios.
            Deixando a parte neurofisiológica de lado e partindo para a representação neuronal artificial que tem como objetivo copiar as funções exercidas pelos neurônios biológicos, temos os terminais de entrada x1,x2,...,xn que representam os dendritos, e apenas um terminal de saida y que representa o axônio, junto ao terminal de entrada tem os pesos w1,w2,...wn que representam as sinapses.
            O corpo do neurônio é representado por um somatório que faz a soma ponderada xi.wi e o limiar é uma referência estabelecida. Assim quando a soma atingir valores superiores à referência estabelecida o neurônio conduz a informação ou nao conduz, colocando em sua saida y, nivel 1 ou 0 respectivamente.
            Falando termos matemáticos que é o que importa para a engenharia temos a seguinte fórmula:

                                                   
            Onde ɵ é a tensão de limiar previamente estabelecida e n é o número de entradas. A representação completa do neurônio artificial desenvolvida Por Mc Culloch e Pitts pode ser vista na figura abaixo:


A partir desses neuronios artificiais é possivel criar varias estruturas de redes de uma ou mais camadas, com ou sem feedback.