LusoRobótica - Robótica em Português

Sistemas específicos => Arduino / AVR => Tópico iniciado por: samuelpereira em 04 de Julho de 2011, 22:40

Título: [Projecto] .NET Arduino Firmata Control
Enviado por: samuelpereira em 04 de Julho de 2011, 22:40
[Em actualização]

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fdl.dropbox.com%2Fu%2F12667720%2FArduino%2FFirmata%2520Control%2FScreenshots%2FFirmataControl.png&hash=ce11a70cb027c0ab995bd8bb06b40c038bbe1d2d)

Projecto
- Arduino Firmata Control for .NET, por Samuel Pereira.

O que é?
- DLL/Componente para .NET
- Um devaneio de uma noite sem sono

Para que serve?
- Controlar um Arduino através de uma linguagem .NET, recorrendo à biblioteca Firmata v2.2.

Funcionalidades
- Controlar as saídas digitais (High/Low e Pwm);
- Ler os valores nas entradas digitais(High/Low);
- Ler os valores nas entradas analógicas(0-1023);
- Detecta automaticamente a porta à qual o Arduino está ligado;
- Detecta alterações nas entradas digitais(High --> Low, Low --> High) e dispara o respectivo evento;
- Detecta alterações nas entradas analógicas(x --> !x) e dispara o respectivo evento;
- Virtualiza luzes Rx/Tx;
- ... [Em actualização]


Exemplos
- Este snippet em c# permite ligar e apagar um Led, e resume-se a:
Código: [Seleccione]
firmataControl1.Connect("COM1", 57600);
firmataControl1.PinMode(13, FirmataControl.PinModes.OUTPUT);
firmataControl1.DigitalWrite(13, 1);
//aguardar x tempo
firmataControl1.DigitalWrite(13, 0);


No futuro...
- Criação de uma outra dll/componente que permite controlar este componente através do protocolo tcp/ip.
Aplicação .net --> Socket --> 123.1.1.123:1234 --> Socket --> Aplicação .net --> Serial --> Arduino com firmata
Aplicação .net <-- Socket <-- 111.0.0.111:4321 <-- Socket <-- Aplicação .net <-- Serial <-- Arduino com firmata

Download
.NET Arduino Firmata Control (beta)
- [Em actualização]

Screenshots

Design do componente
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fdl.dropbox.com%2Fu%2F12667720%2FArduino%2FFirmata%2520Control%2FScreenshots%2Fscreenshot1.png&hash=08223711569cc536066f3b0edd488c1f0ef06555)

Componente na Toolbox
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fdl.dropbox.com%2Fu%2F12667720%2FArduino%2FFirmata%2520Control%2FScreenshots%2Fscreenshot2.png&hash=0fbaab32f480e697996f73614f880a0e88d5b401)

Exemplo de um digitalWrite
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fdl.dropbox.com%2Fu%2F12667720%2FArduino%2FFirmata%2520Control%2FScreenshots%2Fscreenshot3.png&hash=9f3957ae10473a42cc7035972f75cf4a64f33de9)

Exemplo de um analogWrite
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fdl.dropbox.com%2Fu%2F12667720%2FArduino%2FFirmata%2520Control%2FScreenshots%2Fscreenshot4.png&hash=042f621864b9d54cf93fdbb2c6bcc0b9972d31ec)

Algumas propriedades da lista de pinos digitais
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fdl.dropbox.com%2Fu%2F12667720%2FArduino%2FFirmata%2520Control%2FScreenshots%2Fscreenshot5.png&hash=87e254fe5f3ecc97a668ade328503a7946cf0277)

Changelog
- 04/07/2011: Publicação do artigo e disponibilização dos primeiros detalhes e imagens do projecto.
- 05/07/2011: Actualização dos detalhes do projecto.

Referências
Arduino (http://www.arduino.cc)
Firmata Protocol (http://firmata.org/wiki/Protocol)
Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: SJD22 em 04 de Julho de 2011, 23:39
Ha uma coisa que nao percebi: se estás a controlar o arduino por uma aplicação .NET como fazes o upload do firmware? Ou seja, sempre que carregas num botão, um novo firmware é enviado?

Estou confuso, mas acho isso interessante.
Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: andre_f_carvalho em 04 de Julho de 2011, 23:45
provavelmente deve enviar um valor e que por sua vez faz ligar ou desligar uma saída, caso seja isto

Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: samuelpereira em 04 de Julho de 2011, 23:48
Passo a explicar: o sketch que envias para o arduino é o do Firmata 2.2, que já vem com o IDE do Arduino em FIle>Examples>Firmata>StandardFirmata

No entanto aconselho sempre a utilizarem a última versão oficial do Firmata (http://at.or.at/hans/pd/Firmata-2.2.zip (http://at.or.at/hans/pd/Firmata-2.2.zip)).
Só precisas de fazer upload deste Sketch uma vez.

Esse sketch será a ponte entre a tua aplicação feita numa linguagem .net(c#,vb.net, etc...) e o hardware do teu Arduino.
Em vez de programares directamente o Arduino, fazes a tua aplicação em c# usando este componente, e podes controlar em tempo real o teu Arduino.
Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: andre_f_carvalho em 04 de Julho de 2011, 23:52
é tipo o que eu disse

Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: SJD22 em 04 de Julho de 2011, 23:55
Entao com essa tua aplicação posso fazer programas mais complexos do que simplesmente acender leds, correcto? Por exemplo, como defino o ciclo loop() com o teu controlo?
Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: samuelpereira em 05 de Julho de 2011, 00:03
Entao com essa tua aplicação posso fazer programas mais complexos do que simplesmente acender leds, correcto? Por exemplo, como defino o ciclo loop() com o teu controlo?

Sim, claro.
Num dos testes que fiz hoje, fiz uma placa com 2 servos e 2 rodas a serem controlados com um xBee.
Toda a programação foi feita numa aplicação C#, portanto todo o controlo era feito pela aplicação de C#.

App(PC) --> Master xBee (xBee + xBee explorer) --> ......... -->Slave xBee(Arduino + Firmata + xBee) --> Robot

O limite é mesmo a imaginação de cada um...
Podia colocar um sensor na entrada de minha casa, e tinha uma aplicação a correr no meu computador que me avisava quando o sensor disparasse. Tudo isto numa aplicação feita em .net. Se algum dia quisesse alterar o programa, não teria de ir à rua buscar o arduino. Bastava apenas alterar o código da minha aplicação .net e estava tudo pronto a funcionar de novo.

Não se me fiz entender  :D

Edit: Quanto ao ciclo loop... A vantagem disto tudo é mesmo essa, não é necessário existir um ciclo loop, já que todas as alterações que ocorrem no hardware fazem disparar o respectivo evento. Mas se mesmo assim forem necessários ciclos loop(), tudo isso pode ser feito no .Net com um timer por exemplo para não sobrecarregar a comunicação com um while(true).
Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: SJD22 em 05 de Julho de 2011, 00:08
Então será possível programar o arduino em C#, uploadar o codigo de alguma forma e ficar residente no arduino e correr sem qq contacto com o PC?
Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: samuelpereira em 05 de Julho de 2011, 00:13
Então será possível programar o arduino em C#, uploadar o codigo de alguma forma e ficar residente no arduino e correr sem qq contacto com o PC?

Não, não é possível programar o Arduino em c#.
No entanto é possível usares uma dll como esta que faz a ligação da tua aplicação em c# (a correr num computador) com o Arduino.

Imagina que fazes um jogo tipo snake em .NET .Colocas 4 botões de pressão no teu Arduino, e sempre que pressionas/largas um botão, é disparado o respectivo evento que te diz qual foi o botão pressionado/largado.
Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: CBX em 05 de Julho de 2011, 00:16
já existe semelhante: netduino, fez panda\domino, mas estes têm o .NET Micro framework embutido no firmware, é demasiado grande e come demasiados recursos para um simples micro controlador de 8bits

mesmo assim, talvez seja possível escrevendo um core do 0, tipo o actual do arduino
Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: SJD22 em 05 de Julho de 2011, 00:16
ahhhhhhhhhhhh!!!! Já estava eu aqui todo contente a pensar que dava... :) Bom, mas parabéns pelo que fizeste porque é bastante util tb, sem duvida!
Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: samuelpereira em 05 de Julho de 2011, 00:20
ahhhhhhhhhhhh!!!! Já estava eu aqui todo contente a pensar que dava... :) Bom, mas parabéns pelo que fizeste porque é bastante util tb, sem duvida!

De uma maneira muito genérica, no Arduino só trabalhas com números e caracteres(que acabam por ser números...adiante...).
O que precisas do c# que o c/c++ do Arduino não tem? A finalidade deste meu projecto não é programar o arduino numa linguagem .net(??????) mas sim controlar o Arduino através de uma aplicação feita em .net. Compreendes ?
Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: SJD22 em 05 de Julho de 2011, 00:24
Sim, já compreendi. Acontece que eu e o C# temos uma relação muito intimia já há alguns anos... :) Só por acaso é que os meus filhos não sao programados em C#... :)
Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: samuelpereira em 05 de Julho de 2011, 00:27
Sim, já compreendi. Acontece que eu e o C# temos uma relação muito intimia já há alguns anos... :) Só por acaso é que os meus filhos não sao programados em C#... :)

const bool obedecer=true;

loop()
{
if(obedecer)
{
fazeroqueopaimanda();
}
}
Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: SJD22 em 05 de Julho de 2011, 00:31
 :D :D
Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: GnGz em 05 de Julho de 2011, 13:07
Agora é fazeres uma biblioteca  para arduino para que este obedeça bastando este estar defenida no programa.

Já existe projectos semelhantes em processing. Ja pensei fazer é um interpretador para controlar a porta com e mesmo disponibilizar em rede.

Cumprimentos,
Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: samuelpereira em 05 de Julho de 2011, 14:46
Agora é fazeres uma biblioteca  para arduino para que este obedeça bastando este estar defenida no programa.

Já existe projectos semelhantes em processing. Ja pensei fazer é um interpretador para controlar a porta com e mesmo disponibilizar em rede.

Cumprimentos,

Desculpa, mas acho que não compreendi o que querias dizer...  :)
Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: GnGz em 05 de Julho de 2011, 15:08
É fazeres uma bilbioteca do lado do arduino que receba os comandos.
Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: samuelpereira em 05 de Julho de 2011, 15:11
Essa biblioteca já está feita.
É a biblioteca Firmata.
Todo este projecto funciona em torno dela. É ela que recebe, interpreta e executa os comandos enviados pela aplicação .net
Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: GnGz em 05 de Julho de 2011, 15:15
Okei.
Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: samuelpereira em 05 de Julho de 2011, 15:17
Era a esse tipo de biblioteca que te estavas a referir ?  :)
Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: GnGz em 05 de Julho de 2011, 15:37
Sim. A nivel do pc podias era fazer um script parser e ainda direcionar a porta com para ficar em rede usando sockets.
Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: samuelpereira em 05 de Julho de 2011, 18:13
Sim. A nivel do pc podias era fazer um script parser e ainda direcionar a porta com para ficar em rede usando sockets.

Ainda ontem me lembrei de algo do género.
Em princípio vou fazer um outro componente que consegue controlar remotamente o que foi aqui apresentado, usando um protocolo tcp/ip.

Algo deste género:
RemoteFirmata1.Connect("127.0.0.1",12345);
RemoteFirmata1.DigitalWrite(13,1);
...
RemoteFirmata1.DigitalWrite(13,0);
RemoteFirmata1.Disconnect();

aplicaçao .net --> 127.0.0.1:12345 -->aplicação .net --> serial --> arduino com firmata
Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: GnGz em 05 de Julho de 2011, 18:44
Sim isso
Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: coelho69 em 26 de Março de 2012, 15:31
Boas
Eu tenho aqui uma dúvida!
Como posso importar este DLL para o VB 2010?
Já fiz o Download da versão mais actualizada e agora?
Obrigado

Coelho69
Título: Re: [Projecto] .NET Arduino Firmata Control
Enviado por: SJD22 em 26 de Março de 2012, 17:29
Para importares uma DLL em ambiente Visual Studio .NET tens do lado direito em Solution Explorer tens o nome do teu projecto (abaixo da solução) e em baixo tens References. Aí fazes ADD REFERENC e escolhes o DLL em questão.

Depois em código, é so chamares os métodos dele atraves dos namespaces correctos.