Projeto Toolkit LabVIEW + Arduino 328

Saudações caros amigos,

estou em um novo projeto, é uma versão que teve origem no FAD e estou criando uma versão comercial. O toolkit para LabVIEW possui vários blocos para comunicação com o Arduino Uno, Duemilanove, Nano ou microcontroladores Atmega328. A conclusão do ToolKit está previsto para primeiro bimestre de 2013, e para melhorar ao máximo preciso de algumas opiniões. Segue algumas imagens dos blocos e uma programação simples para demonstrar, tudo está funcionando:
Alguns Blocos do Toolkit
Pessoal, como da para ver na imagem acima, já existe vários blocos, mas como vocês vão utilizar, preciso saber o que vocês querem a mais no toolkit, como sensores, atuadores, cálculos... 




Os Blocos atuais:
Leitura Digital e Analógica
Escrita Digital e Analógica
Leitura de 2 Sensores Ultra-sônicos
Leitura e Escrita de Servo Motores
Escrita LCD, blink, clear...
Escrita e Leitura de EEprom interna
Módulo Bluetooth nos Pinos 2 e 3
Speaker
Ping em IP
Salvar dados em .txt
Cálculo PID
Cálculo MAP
Conversão temperatura
Entre outros que estão na imagem.

Segue uma programação simples para demonstrar:

Programação com o ToolKit

E é isso pessoal, preciso de sua opinião, o que vocês querem no toolkit?






FAD - Bloco para Leitura e Escrita de EEPROM Interna

Saudações caros amigos,

no inicio dessa semana 20/11/12, terminei mais um bloco importante para o projeto FAD. Os blocos de leitura e escrita na memória interna do hardware do FAD, já que ele é baseado no Atmega328 e bootloader do arduino, a forma de acesso da memória é da mesma forma que o arduino convencional, essas são as funções que utilizei no código (usável em arduino):

#include <EEPROM.h>

void eepromWrite(int endereco, unsigned int valor)
{
  if(valor <=255 && valor >= 0 && endereco <= 1023 && endereco >= 0)
  {
    EEPROM.write(endereco, valor);
  }
}

unsigned int eepromRead(int endereco)
{
  unsigned int valor;
  if(endereco <= 1023 && endereco >= 0)
  {
    valor = EEPROM.read(endereco);
    return (valor);
  }
}

Em LabVIEW a forma de acessar, gravar e ler as informações ficou simples: 
Escrevendo e Lendo dados na Memória EEPROM Interna
É muito importante a uso da EEPROM, pois ela não funciona como a memória RAM, depois de desligar o hardware o que estiver na RAM é apagado. Na EEPROM os dados são mantidos após cortar a energia. Pode ser utilizada sistemas que necessitam de um horário para realizar algo, ou armazenar uma variável que posteriormente será necessária.

O resultado da leitura ficou: 
Leitura da posição 4 da memória


Suporte Display LCD - Projeto FAD

Saudações,

consegui terminar hoje mais alguns blocos, agora são para o módulo Display LCD com suporte a 16x2 e 20x4 caracteres. Segue a imagem do código teste:

Teste do módulo LCD - FAD
Logo mais posto o restante...

Projeto Digitorr Adaptação para o Kinect

Saudações amigos,

projetei no segundo semestre de 2011, um braço robótico controlado e monitorado via PC para um trabalho da faculdade. A matéria não exigia a construção física do projeto, apenas programação, mas como eu gosto de fazer coisas bem feitas e diferentes, optei pelo braço robótico.

No primeiro semestre de 2012, minha professora Luciene, comprou um kinect para estudos de realidade ampliada e emprestou para mim e meu grupo, o projeto agora consistia em controlar o braço robórico pelo kinect. O projeto foi um sucesso, resultou em vários artigos, então para vocês verem os projetos, vou postar alguns vídeos.

Projeto Original:

Adaptação para o Kinect:

Novos Blocos para Multi-thread por Filas - Projeto FAD

Saudações amigos,

o projeto FAD agora está com mais módulos, essa semana fiz os módulos para execução de loops em paralelo. Quando se fala de execução paralela com microcontroladores, sabemos que a maioria dos microcontroladores que utilizamos para estudar, fazer projetos não possui suporte a tal tarefa. O melhor jeito que encontrei para fazer isso foi utilizando fila para comunicar, por software, entre dois loops (no LabVIEW). Apesar de funcionar bem, o microcontrolador continua a executar seus comandos estruturados, sem thread. Pela comunicação serial o labview faz todo o papel de thread, entre várias informações transmitidas pela USB os dados do thread estão no meio, fazendo o usuário ter a sensação de multiprogramação. A seguir podemos ver a paleta reservada a programação paralela entre loops;

Paleta Multi-Thread
Ainda há blocos para implementar, com o tempo vou programando eles. Os primeiros que criei foram os que tive necessidade de utilizar, foi a escrita e leitura de dados do tipo int e float, escrita e leitura de strings, escrita e leitura de booleanos, um bloco para finalizar o programa, um bloco Flush para limpar a fila. Um exemplo de código foi o teste que realizei, tive que utilizar duas filas para comunicar entre dois loops, para escrita e leitura, o ideal seria apenas uma fila, com o tempo vou melhorando os códigos...
Teste de códigos
Vou explicar +- com funciona a comunicação via fila no código interno;
Blocos de escrita e leitura de números
O primeiro bloco é o de escrita (insert) de números, ele possui a variável "Nome do componente" que é o código primário para referenciar um objeto, o segundo bloco, que é o de leitura, o "Nome do componente" tem que ser o mesmo da referência para que haja comunicação entre os loops e obtendo os dados. Se isso não acontecer, se houver algum erro de escrita no nome do componente, a fila vai se encher a acontecer um overflow, a interrupção do sistema ainda não está pronta, mais vai ser a próxima etapa para o projeto.


Sonar com LabVIEW, FAD e Sensor Ultra-sônico

Saudações queridos leitores,

esse post é sobre um teste que fiz com o sensor ultra-sônico que mencionei no post anterior, utilizei minha própria biblioteca, que também está disponível no blog. O projeto consiste em desenvolver um sonar (perecido com radar, mais utiliza o som em vez de ondas de rádio), utilizando o projeto FAD, 1 servo motor e um sensor ultra-sônico. 
"A velocidade do sinal ultrasônico é de aproximadamente 340 m/s, assim, se o sensor estiver a uma distância d do objeto, o sinal percorrerá uma distância equivalente a 2d para sair e retornar ao sensor. Sabendo esses conceitos é possível calcularmos a distancia de um objeto pela formula." 
Fonte: http://ferpinheiro.wordpress.com/2011/04/29/meu-primeiro-projeto-arduino-sensor-ultrasonico-hc-sr04/

Painel Frontal do Sonar

Diagrama de Blocos do Projeto FAD
O código em LabVIEW foi programado para incrementar o angulo com 9 graus a cada ciclo do FOR, que possui no total 20 ciclos, completando 180 graus. A precisão pode ser alterada, tendo uma leitura mais precisa a cara incremento de 1 grau, porem o tempo total de leitura será mais demorado.

Um video para mostrar o funcionamento do software/hardware:




Biblioteca Sensor Ultra-Sônico IDE 22 e 1.0.1 - Library Ultrasonic Sensor IDE 22 e 1.0.1

Saudações amigos,

Sensor Ultra-Sônico US - 020
essa semana chegou para mim um pedido que realizei na Deal Extreme, um sensor ultra-sônico (http://dx.com/p/ultrasonic-sensor-distance-measuring-module-for-arduino-148659?item=4). Achei seu funcionamento incrível, mas deparei com um problema de versões, como a biblioteca não é da própria fabricante os códigos não funcionavam na IDE 1.0.1 do Arduino, por ser uma IDE nova as funcionalidade da antiga (022) não funcionavam na nova. Então programei uma versão, baseada na antiga, que roda tanto nas IDEs antigas como na nova, com exemplos em .pde e .ino . Os testes foram feitos com esse sensor. 

Download da Library Ultrasonic Sensor: Library Ultrasonic Sensor.zip

Um exemplo básico de código é esse: 



/* Ultrasonic - Library for HR-SC04 Ultrasonic Ranging Module.
/  Camilo de Lellis Barreto Junior - Computer engineer
/  Uberlandia - Minas Gerais - Brazil
/  10/2012
/  e-mail: <barretojuniormail@gmail.com>
/  blog: http://roboticlabview.blogspot.com.br
*/

#include <Ultrasonic.h>

Ultrasonic ultrasonic; 

void setup() {
  Serial.begin(9600); 
  ultrasonic.attach(9,8); // (Trig PIN,Echo PIN)
}

void loop()
{
  Serial.print(ultrasonic.Ranging(CM)); // CM or INC
  Serial.println(" cm" );
  delay(100);
}

O sensor US - 020 teve um alcance máximo entre 160 e 150 cm, achei a distância de alcance muito boa. Os resultados são bem exatos, com uma precisão incrível. 

Recebendo a distancia em cm - Serial Monitor

Sensor Ultra-Sônico

Bom, não podia faltar a integração com o LabVIEW e adicionar mais um componente para o projeto FAD. Fiz mais um bloco para leitura do sensor, minha idéia é criar um radar ultra-sônico para mapear uma área com obstáculos e mostrar esses obstáculos na tela, como se fosse uma tela de radar, como a dos filmes. Isso pode ser aplicado em robôs de reconhecimento, autônomos, entre outros. Um primeiro teste foi feito, ainda há melhorias a fazer: 

Tela em construção do Radar Ultra-Sônico


Códigos em LabVIEW

Ainda está no começo, quero adicionar um servo motor para movimentar o sensor de 0 a 180 graus, a cada grau o sensor faz a leitura de distância, e plotar isso no radar. Futuramente postarei atualizações.


Implementando os Blocos Kinect LabVIEW

Saudações caros amigos, esse video é um exemplo da utilização dos blocos que modifiquei para integrar o Kinect com o LabVIEW.

Sistema embarcado da STRATOS

Saudações caros amigos,

hoje, 14 de outubro de 2012, Felix Baumgartner bateu vários recordes, um deles foi saltar de uma capsula com uma altitude de 39 mil metros. Mais um acontecimento entra para história. A missão é bem parecida com uma viagem a outros planetas, a diferença é o dinheiro investido, equipe com menos pessoas, apenas um tripulante e o retorno a terra. Bom, para que a missão seja realizada sem nenhum contra tempo, o equipamento e a capsula necessitam de uma atenção maior, software's avançados e sem erros. Hoje assistindo alguns vídeos me deparei com uma imagem bem conhecida por mim, e fiquei orgulhoso por eu ter noção e conhecimento desse software incrível: LabVIEW.
Felix Preparado para Pular
LabVIEW é Utilizado na Capsula STRATOS
Sim pessoal, a equipe da Stratos optaram por utilizar o labview para ser o sistema da capsula, na imagem podemos observar os "Goungs" típicos do programa, o gráfico, os slides... Observando o controle, podemos ver o monitoramento de carga das baterias, LEDs de Oxigênio Alto e Baixo, gráfico de altitude em relação ao tempo, altitude em pés, relógio da missão, temperatura de refrigeração, recepção de dados (RX data), Comm Port cortado, entre outros. O uso do LabVIEW em projetos é realmente destacável, seja em projetos espaciais quanto projetos de faculdade.

Kinect in LabVIEW

Saudações,

como sempre de costume, tenho mais um projeto da faculdade, mas esse é bem especial pois pode ser meu TCC. Bem, no segundo semestre de 2011 fiz um projeto do Braço Robótico Digitorr (http://www.youtube.com/watch?v=Fum_yxm7v9I), ele é controlado via Arduino e PC, no video podemos observar que quando coloco um barril de óleo  nos quadradinhos frontal, automaticamente o braço se move e pega o barril e o deposita nos quadrados ao lado. Todo essa transação é visualizada e controlada no computador, cada barril que é colocado na "mesa" é salvo data/hora/local no banco de dados. 

O projeto foi um sucesso, todos gostaram. No primeiro semestre de 2012, eu e 2 amigos tivemos a proposta de desenvolver um projeto com Kinect para RA ou Reconhecimento de Gestos. Então tive a idéia de usar meu projeto anterior, bom, falar e pensar é fácil, o difícil é fazer. Projeto já definido, comecei a pesquisar como programar o kinect, qual SDK? Qual Linguagem? Qual SO? Não foi nada fácil, tive que aprender C#, que no entanto só tinha conhecimento básico em C, Java e VB, depois de aprender um pouco da linguagem C# comecei a programar para o kinect, sua API não é nada fácil, tive que usar a versão beta porque não foi fácil achar material na internet sobre a programação. Altos e baixos, depois de alguns meses o projeto ficou pronto, funcionando perfeitamente, lindo. Fomos apresentar no SIT Uniube (Simpósio de Inovações Tecnológicas ), e por incrível que pareça, nossa banca ficou lotada, todo mundo ficou impressionado, ninguém tinha visto uma coisa assim. O sucesso foi tão grande que apresentamos nosso artigo em várias Universidades e workshop's. E ainda estamos apresentando. Video feito no dia do SIT, bem no final da noite: http://www.youtube.com/watch?v=34eT4T5KX2k&feature=plcp

Blocos Programação Kinect LabVIEW
O kinect é uma ferramenta incrível, ele possui 2 câmeras uma RGB e outra infravermelho, a câmera infravermelha trabalha em conjunto com um emissor infra vermelho. O emissor emite pontos infravermelhos no ambiente que é captado pela câmera, a intensidade dos pontos capturados indicam a profundidade do ambiente, transformando esses dados em uma imagem de 3Dimensões. Possui também vários microfones para anular ruídos do ambiente. Não vou dar detalhes sobre o projeto que estou em mente, mas já comecei a criar blocos em LabVIEW para programar o Kinect, esses códigos foram distribuídos na internet de forma muito complexas, todos os blocos que fiz foram modificações dos originais, modificações para melhorar o entendimento e utilizar os recursos que eu preciso que não tinham. Esses são alguns blocos que já comecei a fazer.

Código para Teste
Quero usar o LabVIEW porque estou cansado de utilizar códigos contextuais, para fazer a função ou método para ler a câmera RGB preciso no mínimo 10 linhas de código C#, em labVIEW eu utilizo 2 blocos, um para leitura e outro para exibir a imagem. Não que o labVIEW seja mais fácil, cada bloco possui uma série de códigos dentro tão complexos quanto em C#, os blocos são como classes em linguagens orientada a objeto. Alem disso, o labVIEW me da suporte a conexão serial, banco de dados,  mult-loop (Threads) com maior velocidade, PID, GUI, Gauges, etc. Esse é um código que fiz para testar uma parte dos blocos que criei.


A imagem acima foi o resultado que obtive com os blocos que criei, a primeira imagem é o Frame em 3D, eu posso rotacionar a tela para ver as dimensões, observando, podemos ver meu braço e a mão, no fundo minha guitarra encima da cama. A segunda tela é a tela de cores para a profundidade, quanto mais longe o kinect mais branco fica, quanto mais perto mais escuro fica, isso é muito interessante, pois podemos calcular a distancia do kinect a um objeto pela cor. A terceira tela é a imagem da câmera RGB. 

Logo mais, posto atualizações.!


Conhecendo a Ferramenta FAD

Painel frontal LabVIEW - FAD 
Paleta de Blocos do FAD
Paleta de Blocos do FAD
Bem pessoal, faz algum tempo que iniciei um projeto que eu estava muito interessado, o projeto consistia em utilizar o LabVIEW para programar o arduino. Mas de certa forma, programar para o arduino utilizando labVIEW seria impossível, o labVIEW é do tipo de programa feito para programar apenas em blocos, utilizando apenas o hardware da fabricante (National Instruments), outra coisa fundamental seria um interpretador e compilador para gerar o código em C do arduino, que o labVIEW não possui. Então a melhor forma de fazer isso, seria criar blocos de comunicação serial. Comecei a criar meu próprio protocolo de comunicação, onde é possível trocar informações  entre software/hardware, fiz várias padronizações de códigos e melhorei ao máximo, a comunicação é extremamente importante, podemos fazer uma analogia com o cérebro e os neurônios. Tanto em C quanto em labVIEW a programação foi extensa e complexa, cada linguagem possui suas dificuldades, mais a mas empolgante é a linguagem labVIEW, essa ferramenta é extraordinária, a maneira de criar variáveis, criar registradores, loops, cases, for's, multi-loops... é incrível. Bem depois de criar os primeiros blocos de inicialização, comecei os testes... claro, nada funciona na primeira vez. Fiz vários ajustes e modificações, logo a coisa começou a funcionar. Foi incrível, parecia bruxaria kkkk. Beleza, então comecei a desenvolver os blocos de leitura e escrita analógico e digital, fiz testes, melhorias e ajustes, tudo funcionou conforme o planejado...(kkk não planejei nada). Então chegou um ponto que tudo que eu utilizava em meus projetos, transformava em VI (Instrumentos Virtuais), e fui integrando com o projeto e ficou muito legal. Para engenheiros esse tipo de ferramenta é a ideal, pois, um engenheiro não tem todo tempo do mundo para sentar e programar um software simples que demora um mês para sua conclusão. O nome que dei ao projeto foi FAD (Ferramenta de Aquisição de Dados). Veja a paleta de blocos do FAD.

O microcontrolador utilizado foi um Atmega 328, baseado em arduino. Não utilizei as barras de pinos padrão do arduino, quis fazer diferente, então utilizei um cabo IDE, serviu como uma luva. Nos pinos superiores são as conexões de entrada e saida, +5v, +3v3, e todos os pinos na parte inferior são GND.
Para a comunicação serial via USB utilizei um módulo FTDI que comprei por 10 dólares no DX. Fiz a adaptação para o case, comprei um cabo USB (custou o olho da cara). Tudo terminado, case pronto, pré programação (chamo assim porque a programação real vem agora), agora é só ligar os jumpers, os componentes, módulos e vamos brincar um pouco. Cada dia tento criar algo novo, comprei um módulo bluetooth na DX e integrei ao FAD, e ficou muito bom. Agora o FAD pode ser apenas monitorado  a distância. Bem, a seguir, algumas imagens de programações com os blocos que criei.

Hardware FAD