Comunicação entre PC e Arduino

49 Comentários

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:

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!

Partilhar:
Tags:

Comentários

49

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de daniel
    daniel

    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

  2. Avatar de Fábio Oliveira

    O arduino é uma exelente plataforma de desenvolvimento de ideias.

    1. Avatar de bigkax
      bigkax

      Verdade, esta na minha lista de coisas a explorar…

  3. Avatar de bigkax
    bigkax

    Estava a pensar se alguém já tinha pensado nisso para smartphone e encontrei isto https://market.android.com/details?id=re.serialout

  4. Avatar de Vitor
    Vitor

    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…

  5. Avatar de lmx
    lmx

    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

  6. Avatar de Tiago
    Tiago

    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! 🙂

    1. Avatar de José Antunes
      José Antunes

      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

  7. Avatar de Ricardo Saraiva

    Até hoje só tenho realizado experiências com o Xbee – Zigbee.

  8. Avatar de António Ferreira
    António Ferreira

    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

  9. Avatar de jpegpt
    jpegpt

    Boas!

    Alguem faz ideia como é que é possivel controlar um interruptor de luz com o arduino? (como ligar a placa ao dito…)

    Abr

    1. Avatar de Pedro Pinto

      Boas @jpegpt

      Já temos esse artigo feito pelo Filipe Kaetano pronto a sair :). Vai estando atento 🙂

      1. Avatar de jpegpt
        jpegpt

        Ok! Vou estar atento.

        Obrigado. [[]]

        1. Avatar de Carlos
          Carlos

          Fico à espera desse artigo !!!

    2. Avatar de xtrender
      xtrender

      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

  10. Avatar de wolfytuga

    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…

    1. Avatar de Cristiano Silva
      Cristiano Silva

      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.

  11. Avatar de Nuno Carvalho

    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

  12. Avatar de S Pimenta

    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.

    1. Avatar de Antonio Ferreira
      Antonio Ferreira

      No Porto, tenta a Aquário.

      António Ferreira

    2. Avatar de Manuel
      Manuel

      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.

    3. Avatar de Ivan Pereira

      Antes demais, Parabéns Cristiano pelo artigo.
      Para material electrónico: http://loja.cyz.pt

    4. Avatar de Julio Freitas
      Julio Freitas

      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

  13. Avatar de Manuel
    Manuel

    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.

  14. Avatar de RMartins
    RMartins

    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

    1. Avatar de Vitor
      Vitor

      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

  15. Avatar de kimOaz
    kimOaz

    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

    1. Avatar de bigkax
      bigkax

      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

    2. Avatar de Miguel Sequeira
      Miguel Sequeira

      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.

      1. Avatar de lmx
        lmx

        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

  16. Avatar de kimOaz
    kimOaz

    Era mesmo isto que queria!
    Muito obrigado!

  17. Avatar de joao
    joao

    “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 😉

    1. Avatar de bigkax
      bigkax

      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.

    2. Avatar de David
      David

      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.sitedev.pt/?s=arduino
      O artigo referido deve ser este:
      https://pplware.sitedev.pt/hardware/conhece-a-plataforma-de-desenvolvimento-arduino/

      Cumprimentos,

  18. Avatar de Iago Melo
    Iago Melo

    Para quem não conhece:

    http://www.modk.it/

    Tenho um Arduino UNO à 1 semana… encontrei a minha nova paixão.

  19. Avatar de José Antunes
    José Antunes

    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

  20. Avatar de Pedro
    Pedro

    Boas

    Eu tenho a placa Arduino Duemilanove com um pequeno workshop..

    E dá para fazer projectos bem engraçados 😉

    Cumps

  21. Avatar de Luis
    Luis

    Alguém poderia postar os códigos para iniciar ou parar a comunicação da porta serial?

    obrigado.
    Att.
    Luis

  22. Avatar de António
    António

    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

  23. Avatar de JsCoelho

    Boas, está excelente…
    Muitos parabéns!
    Mas será que da para disponibilizar toda a aplicação VB como esta ilustrada acima?
    Obrigado

  24. Avatar de JsCoelho

    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

  25. Avatar de JsCoelho

    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
    ——————————–

  26. Avatar de wagner

    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

  27. Avatar de wagner

    muito bom! me ajudou d+.
    Fiz um projeto com o arduino e um android, da uma olhada ai
    http://automatudo.blogspot.com.br/

  28. Avatar de Ricardo Pereira
    Ricardo Pereira

    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

  29. Avatar de José Coelho
    José Coelho

    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.

  30. Avatar de rodrigo
    rodrigo

    Ola boa noite, tem como disponibilizar para dowload os códigos dos programas ?

  31. Avatar de Cezar Rossi
    Cezar Rossi

    ola pessoal do ppliware da mesma forma que consigo comunicar ele por windows via c# tenho como fazer isso em linux usando o python ?