Comunicação entre PC e Arduino
Numa sociedade, todo o indivíduo necessita de comunicar com os restantes. Para tal, desenvolveu e adquiriu, ao longo na sua vida, formas e protocolos de comunicação. Na electrónica e na informática não é menos verdade essa realidade. Cada vez mais a sociedade exige que haja comunicação entre homem/máquina e máquina/máquina.
O que se pretende demonstrar com um pequeno exemplo são, as várias fases que teremos que ter em conta quando temos que comunicar com um Micro-controlador e o nosso PC. Neste caso o Micro-controlador escolhido foi o Arduino, do qual já falamos aqui no pplware.
Elaboramos um pequeno guia prático para dar a conhecer mais sobre o Arduino e sobre dispositivos de interacção tecnológica. São simples exemplos que tenho desenvolvido e têm sido alvo de estudo para os meus alunos. Espero que gostem.
Ferramentas necessárias:
- Visual Basic 2008 (Versão Express gratuita)
- Programa de programação do Arduino
- Protocolo de Comunicação
Pretende-se enviar um comando do nosso computador para o Arduino e que este responda ao pedido.
Exemplo: enviar o caracter “a” para o Micro-controlador e que este responda com o caracter “b”.
Passo 1 – programar o Arduíno
Fazer download do programa Arduino 0022 do site www.arduino.cc. Descompactar a pasta e executar o aplicativo arduino.
Escolher qual é a versão do arduino que vamos programar: exemplo Arduino Mega
Para fazer um programa no arduino ele terá que pelo menos ter duas funções: void setup() onde se faz a configuração no nosso arduino e a função void loop() onde se escreve propriamente o programa que irá ser executado. As declarações de variáveis podem ser declaradas logo no inicio.
int variavel;
No exemplo em particular, teremos que definir a velocidade de comunicação da porta série que será de 9600 bps na função void setup().
void setup() { Serial.begin(9600); } |
De seguida, teremos que colocar o arduino à “escuta” na porta série e no caso de receber algo guardar numa variável que se deu o nome de variável.
if (Serial.available() > 0) { variavel = Serial.read(); } |
Por fim o teste. Se o que recebemos na porta é mesmo um pedido, ou seja, testar neste caso se o que recebemos de facto é o caracter “a”. Isto remete-nos para outro assunto: tabela Ascii – o caracter “a” em decimal é o número 97. Sendo assim testamos se o que recebemos é igual a 97, se for igual envia o cartarer “b”. Se não for igual não responde nada.
if (variavel == 97) { Serial.print("b"); } |
De seguida compilar o programa.
Se não houver nenhum erro na programação dará a seguinte mensagem:
Programar o Micro-controlador
Escolher a serial port que o nosso Arduino está conectado
Enviar o programa para o Arduino:
Pode usar a consola do programa arduino para testar o programa.
Podemos verificar, em baixo, que se inserir o caracter “a” a resposta será o caracter “b”
Passo 2 – programar Visual Basic
Layout exemplo:
Código botão Enviar em VB
Private Sub ana_0_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ana_0.Click Dim enviar As String Dim receber As String enviar = tb_1.Text SerialPort1.Write(enviar) receber = SerialPort1.ReadExisting() TextBox1.Text = receber End Sub |
Conclusão
A plataforma Arduíno caractríza-se pela versatilidade e facilidade de implementar qualquer tipo de projecto que necessite de uma componente electrónica. Com uma "simples" placa, podemos dar "asas a imaginação" e desenvolver projectos fantásticos. Esperamos que este artigo ajude os mais novatos a entrarem no mundo do Arduíno e contamos com experts para explorar esta área. Aguardem pelos próximos artigos!
Este artigo tem mais de um ano
eu tenho um arduino pois usei o quando fiz um projecto electronico na minha escola mas depois parei, mas acho que vou voltar a fazer umas brincadeiras enquanto estou no desemprego LOL quanto a programaçao do arduino, havia um programa que tinha codigo ja pre-escrito que uma pessoa so precisava de meter variaveis e valores, era muito intuitivo para quem nao sabe programaçao, se alguem souber algum assim que poste aqui o link 😉
Obrigado e parabens pelo artigo
O arduino é uma exelente plataforma de desenvolvimento de ideias.
Verdade, esta na minha lista de coisas a explorar…
Estava a pensar se alguém já tinha pensado nisso para smartphone e encontrei isto https://market.android.com/details?id=re.serialout
Apesar de vir de informática, nunca tive contacto com electrónica, e o Arduino é sem duvida ESPETACULAR….dá pa fazer muitas brincadeiras engraçadas…
Boas…
Boa Aporta vitor,estes kits fazem perder a cabeça a quem se interesse pelo assunto… 🙂
estou morto por arranjar tempo e adquirir um…mas …quero um potente :), ou que corra arm ou pic 32/64bits quero lá um linux a bombar…
mas e tempo 🙂
cmps
Olá,
Tenho uma pergunta acerca do programa VB:
Que tipo de variável é “SerialPort1”? Como é que esse tipo é incluído nos tipos permitidos pelo VB? É definido por alguma DLL?
Se calhar até é bastante óbvio, mas falhou-me totalmente essa parte do programa VB.
Obrigado! 🙂
http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx
Sim é verdade, falta referir no tutorial a parte do VB utilizada para iniciar a comunicação com a porta serial.
De resto o tutorial está 5*.
Abr
Até hoje só tenho realizado experiências com o Xbee – Zigbee.
Viva,
O Arduino é a minha plataforma de testes de comunicações, a nível profissional (Domótica e Automação Industrial) e um hobbie a nível particular.
A minha sugestão é que usem a placa ethernet que existe para o arduino – comunicação com PCs, iDevices, etc.
Boas programações.
António Ferreira
Boas!
Alguem faz ideia como é que é possivel controlar um interruptor de luz com o arduino? (como ligar a placa ao dito…)
Abr
Boas @jpegpt
Já temos esse artigo feito pelo Filipe Kaetano pronto a sair :). Vai estando atento 🙂
Ok! Vou estar atento.
Obrigado. [[]]
Fico à espera desse artigo !!!
sim, podes controlar um relay que controle o interruptor.
Se for a ensinar como se acende um led, ou uma pequena lampada, vou ficar desiludido. xD
Olá,
Vi que no artigo está a ser usada uma variável do tipo INTEIRO em vez do tipo CHAR (8 bit == 1 byte) numa comunicação de 8 bit e que o objectivo é enviar a letra «a», logo a variável e o programa podiam resultar nisto:
/****************************/
char variavel;
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (Serial.available() > 0)
{
variavel = Serial.read();
}
if (variavel == ‘a’) // ‘a’ em vez de 97 (nota1)
{
Serial.print(“b”);
}
}
/****************************/
Ou a função «Serial.read()» apenas retorna um valor do tipo INTEIRO?
Cumprimentos e continuem com o bom trabalho 🙂
_________________
nota1: Para os iniciantes se calhar é mais fácil de compreender…
Olá boa noite.
O exemplo que apresenta também é uma solução para o problema. O artigo também queria levantar o “véu” para a codificação de carateres – ASCII.
Tenho actualmente um projecto em curso baseado em Arduino.
Espero que em breve veja a luz do dia.
Tenho o Arduino UNO e aquilo é de facto potente. O potencial daquilo acaba muito depois da nossa imaginação.
NC
Realmente o Arduino muito potente, o limite é a nossa imaginação. Encomendei o Arduino UNO, e tenho ha dias, mas a minha dificuldade agora é arranjar material, tipo resistencias, transistors, etc, ou seja material para poder usar o Arduino no seu potencial.
Não sabem lojas (fisicas (sou da zona do Porto) ou online) boas onde se comprar?
Vejo cada video no YouTube que até fico parvo… Eu sei muito bem programação, mas estou limitado pois queria fazer algo, mas não tenho material… Já pensei em começar a desmontar e desoldar coisas que tenho para aqui antigas, para começar a fazer algo engraçado.
No Porto, tenta a Aquário.
António Ferreira
Eu costumo comprar esse tipo de material, na Aquário, que tem loja na Areosa (uma espécie de super mercado de electrónica onde encontras de tudo) e na rua da alegria (www.aquarionet.com)
Ou na SuperTécnica, na Rua de Santa Catarina. Existem outras, onde costumo ir, mas mais viradas para electrónica de potência.
Antes demais, Parabéns Cristiano pelo artigo.
Para material electrónico: http://loja.cyz.pt
Eu costumo mandar vir as minhas coisas de HongKong, fica mais barato 🙂
No Porto tenta a inmotion (www.inmotion.pt). O dono (Filipe Valpereiro, prof.universitario) é porreiro e pode ajudar-te a dar os primeiros passos. Ele organiza workshops com alguma frequência.
Se precisares de alguma coisa diz.
Abraço
Eu já programo Atmegas á uns anos, e naquele tempo, fazia-se o que se podia, com o que se tinha, e era bem caro fazer meia duzia de boards ao estilo do arduino, para se ter uma plataforma decentemente apresentável.
Felizmente alguém teve uma ideia brilhante, e criou o Arduino, que além de ter um design atraente, tem uma grande comunidade que o ajuda a melhorar, e o software, que para os menos entendidos em programação de microcontroladores acreditem que facilita muito a entrada neste mundo do controlar coisas através de um computador, e fazer “pequenas” e “grandes” brincadeiras com ele. Isto tudo a um preço bem acessível.
Mesmo para mim, o facto de ter um Hardware já pronto e mais que testado, além de robusto, e um software que permite prototipagem mais rápida, é um dos grandes ganhos em usar o Arduino.
Simples, Rápido, Barato e Eficaz.
Boas,
Quando vi este artigo, não pude deixar de poder comentar. O arduino é uma plataforma que tem inúmeras aplicações, como estão descritas em inúmeros sites, que podem ser facilmente encontrados. Na minha tese final de curso utilizei-o como plataforma de testes para o desenvolvimento de um oxímetro de Pulso para uma aplicação futura no Pulso.
Aqui deixo o link da minha tese, penso que poderá ser útil para futuros projectos relacionados.
http://hdl.handle.net/10316/14086
Cumprimentos,
Rui Martins
Boa tarde.
Cara poderia me auxiliar na programação que você fez com o arduino.
Vi na foto em sua tese que usou o DS100.
vitor.gomes92@yahoo.com.br
Interessante!
Mas alguém sabe a melhor maneira de comunicar com o Arduino em Linux
usando JAVA por exemplo. Procurei na net e não me pareceu assim tão fácil.
Obrigado
http://www.arduino.cc/playground/Interfacing/Java
Não parece ser assim tão difícil…
Aproveita e dá uma vista de olhos nisto: http://macpod.net/misc/android_robot/android_robot.php
Em java tens o exemplo na net.
Agora a pergunta de qual é melhor maneira de comunicar com o Arduino em Linux… isso já é subjectivo
A minha opinião: é claro que é em C/C++. Além de não ter akele desgaste de memória da JVM, é mais fácil de usar bibliotecas etc.
Para comunicar com Arduino ou qualquer outro micro .. é igual.
Se quiseres algo mais em C/C++ é usar uma emulação usb/porta série. Se realmente tiveres dúvidas nisso eu posso esclarecer, tenho isso feito e a funcionar no meu robot.
Boas..
para o que vais fazer…penso que Java ou C não é relevante, mas a nível de comunicação intensiva…claro que C é mais rápido do que c++ java,c#,python,…..óbvio.
a implementação em Java é igual as outras linguagens, nem é melhor nem pior, em relação a emulação USB/serie…penso que não seja preciso emular nada.
Em linux tens é que usar o device correcto… em /dev…fazes comunicação via USB e o dispositivo conversor faz a passagem para serie e vice-versa.
Deves no entanto ter um cabo USB/SERIe full duplex.
Mas…para que conversão usb/serie…temos entrada usb no kit…
cmps
Era mesmo isto que queria!
Muito obrigado!
“escolhido foi o Arduino, do qual já falamos aqui no pplware.”
bom… eu tentei procurar o artigo anterior usando o search..
Ja tentaram ? experimentem carregar nos links que apresenta…
simplesmente muito mau esse search…
So uma dica para melhorarem 😉
Acabei de experimentar e estão a funcionar perfeitamente, não sei de que é que te estas a queixar. Tira um PrintScreen e mostras qual o problema.
Não sei se reparaste, mas existem 2 locais de pesquisa: um na barra azul em cima e outro na barra lateral. Neste último a pesquisa retorna os artigos desejados:
https://pplware.sapo.pt/?s=arduino
O artigo referido deve ser este:
https://pplware.sapo.pt/hardware/conhece-a-plataforma-de-desenvolvimento-arduino/
Cumprimentos,
Para quem não conhece:
http://www.modk.it/
Tenho um Arduino UNO à 1 semana… encontrei a minha nova paixão.
Alguém me pode dizer como fazer a parte da comunicação serial no código VB? Estive a tentar e não consegui?
Abr
Boas
Eu tenho a placa Arduino Duemilanove com um pequeno workshop..
E dá para fazer projectos bem engraçados 😉
Cumps
Alguém poderia postar os códigos para iniciar ou parar a comunicação da porta serial?
obrigado.
Att.
Luis
Pessoal eu tenho arduino é pouco tempo,e tenho um projecto na escola que é comunicar um carrinho com o pc e que atraves do pc controlar o carrinho(como se fosse carro telecomandado,mas no pc).se calhar ja tem aqui algo sobre isso,mas tou perdido.
Alguem me pode ajudar?como comunicar,qual o softwar etc.
obrigado
Boas, está excelente…
Muitos parabéns!
Mas será que da para disponibilizar toda a aplicação VB como esta ilustrada acima?
Obrigado
Boas
Eu tenho andado a estudar, varias soluções que permitem enviar caracteres para o arduino e obter uma resposta caso o caracter enviado seja o correcto!
Enviar esta a funcionar a 100% já o receber a resposta não funciona!
Será que me podem ajudar?
Obrigado
Código VB que estou a utilizar:
…
Sub SendSerialData(ByVal enviar As String)
Using variavel As IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort(COM)
variavel.WriteLine(enviar)
variavel.Close()
End Using
End Sub
Private Sub ReceiveSerialData()
Dim resposta As String = “”
Using variavel As IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort(COM)
resposta = variavel.ReadExisting()
variavel.Close()
End Using
MsgBox(“resposta”)
txtResposta.Text = resposta
End Sub
…
Onde variável é a COM onde esta ligado o Arduino em minúsculas (com4)
E onde COM e onde esta a designação da COM em maiúsculas (COM4)
Obrigado
Já está resolvido…
Fiz algumas modificações no código, criando um código mais simples.
Depois vou disponibilizar este projecto completo!
Obrigado
JsCoelho
——————————–
http://www.jscoelho.comuf.com
——————————–
cara, aqui funcionou blz!!
só um detalhe: se vc der read na serial logo após mandar… não da certo não, coloca um delay no vb, no caso um Theading.thread.sleep(100) já ta bom, se não n fufa não.
O vb le a porta e ela ainda está vazia, mas se espera 100ms o arduino já mandou a informação. Bom pelo menos foi isso que aconteceu comigo, e deu certo! bem legal. Abraço a todos.
Dim receber As String
SerialPort1.Open()
SerialPort1.Write(“a”)
Threading.Thread.Sleep(100)
receber = SerialPort1.ReadExisting()
If receber = “” Then
TextBox1.Text = “sem resposta”
SerialPort1.Close()
Else
TextBox1.Text = receber
SerialPort1.Close()
End If
muito bom! me ajudou d+.
Fiz um projeto com o arduino e um android, da uma olhada ai
http://automatudo.blogspot.com.br/
Boa tarde,
Alguém me podia disponibilizar o código em VB da comunicação, ou dar-me o caminho.
Assim era mais fácil escolher as portas.
Obrigado
Para quem ainda não tinha visto, aqui está o meu projecto completo.
http://tecnodomos.blogspot.pt/2012/04/comunicacao-pc-vs-arduino.html
Espero que seja útil.
Bom trabalho
Cps.
Ola boa noite, tem como disponibilizar para dowload os códigos dos programas ?
ola pessoal do ppliware da mesma forma que consigo comunicar ele por windows via c# tenho como fazer isso em linux usando o python ?