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
-
[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:
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)
-
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.
-
provavelmente deve enviar um valor e que por sua vez faz ligar ou desligar uma saída, caso seja isto
-
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.
-
é tipo o que eu disse
-
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?
-
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).
-
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?
-
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.
-
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
-
ahhhhhhhhhhhh!!!! Já estava eu aqui todo contente a pensar que dava... :) Bom, mas parabéns pelo que fizeste porque é bastante util tb, sem duvida!
-
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 ?
-
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#... :)
-
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();
}
}
-
:D :D
-
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,
-
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... :)
-
É fazeres uma bilbioteca do lado do arduino que receba os comandos.
-
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
-
Okei.
-
Era a esse tipo de biblioteca que te estavas a referir ? :)
-
Sim. A nivel do pc podias era fazer um script parser e ainda direcionar a porta com para ficar em rede usando sockets.
-
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
-
Sim isso
-
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
-
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.