Interface entre Microcontrolador PC – Parte 2
No seguimento do último post, e como já sabemos comunicar entre PC e Micro-controlador, surge outro desafio: Controlar os outputs e visualizar o estado dos inputs do nosso Arduino, através do computador.
Para exemplificar como fazer, vamos usar neste exemplo o Arduino Mega.
Ferramentas necessárias:
- Visual Basic 2008
- Programa de programação do Arduíno Mega
Passo 1 – Programação o Arduino – pinos Digitais
O Arduíno Mega possui 53 pinos. Para este exemplo iremos usar desde o pino 22 até ao 53.
Como exemplo, configuraremos os pinos da seguinte maneira:
- Pino 22 até 37 – definir como inputs (entradas).
- Pino 38 até 53 – definir como outputs (saídas).
Exemplo para um input (pino 22) e um output (pino 40):
Declaração de variáveis:
O Arduino permite que um determinado pino digital possa ser input ou output, para tal, existe uma função que permite essa configuração.
pinMode () - http://arduino.cc/en/Reference/pinMode
Definidos os nossos pinos, de seguida pretendemos comanda-los. Os inputs (entradas) ler o estado deles, e os outputs (saídas) ligar ou desligar.
Protocolo de comunicação que iremos estabelecer entre o Computador e o Micro-controlador
Funções necessárias na programação do arduino
digitalRead() – permite ler o estado de um pino;
digitalWrite() – permite alterar o estado do pino;
Esquema exemplo:
- input no pino 22;
- output no pino 40;
Passo 2 – Programação o Arduino – pinos Analógicos
O Arduíno Mega possui 16 pinos analógicos (A0 – A15). Para este exemplo iremos usar dois pinos A0 e A8.
Protocolo de comunicação que iremos estabelecer entre o Computador e o Micro-controlador.
Funções necessárias na programação do arduino
analogRead() – permite ler o valor de um pino analógico;
Passo 3 – Programação VB
Layout exemplo
Código VB
Botão d22 para receber o estado do pino digital como sendo input:
Private Sub d22_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles d22.Click
Dim receber As String
Try
SerialPort1.Write("a")
System.Threading.Thread.Sleep(500)
receber = SerialPort1.ReadExisting()
TextBox_22.Text = receber
Catch
End Try
End Sub
Botão para colocar o pino 40 a on
Private Sub on_40_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles on_40.Click
SerialPort1.Write("s")
End Sub
Botão para colocar o pino 40 a off:
Private Sub on_40_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles on_40.Click SerialPort1.Write("s") End Sub
Botão para visualizar o input analógico 0:
Private Sub ana_0_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ana_0.Click
Dim receber As Integer
Dim progressbar As Integer
Try
SerialPort1.Write("A")
System.Threading.Thread.Sleep(500)
receber = SerialPort1.ReadExisting()
tb_1.Text = receber
progressbar = receber
progressbar = (receber * 100) / 1023
MyVerticalProgressBar1.Value = progressbar
Catch
End Try
End Sub
Botão para visualizar o input analógico 0:
Private Sub ana_8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ana_8.Click Dim receber As Integer Dim progressbar As Integer Try SerialPort1.Write("I") System.Threading.Thread.Sleep(500) receber = SerialPort1.ReadExisting() tb_9.Text = receber progressbar = receber progressbar = (receber * 100) / 1023 MyVerticalProgressBar9.Value = progressbar Catch End Try End Sub
Conclusão
A plataforma Arduíno caracteriza-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!
Artigos relacionados
- Conhece a plataforma de desenvolvimento Arduino?
- Programe no Arduíno – Alerta para gelo na estrada
- Comunicação entre PC e Arduino
Download: Código Fonte
Este artigo tem mais de um ano
Antes de mais muitos parabéns pela iniciativa, gostaria de dar a sugestão, ja a tempo ando com um projecto pessoal de criar um interface de domotica caseiro, mas preciso de mais bases de programação, será possível fazerem um tutorial de como criar um interface controlado a partir do browser usando modulo de ethernet shield ou mesmo em wireless zigbee ? Desta forma poderiamos criar um interface web para comunicar com o arduino e colocar tirando a dependência do PC. um abraço e muitos parabens Pedro Pinto
Também ando com várias experiências “caseiras” com o arduino, mas o que não tenho é conhecimento de electrónica.
tens um pequeno exemplo aqui: http://arduino.cc/en/Tutorial/WebServer
mas com uma pesquisa, consegues arranjar código de programas mais elaborados.
Se quiseres fazer esse projecto recorrendo a módulos ele irá ficar muito caro e ocupará muito espaço. A forma barata de o fazer requer conhecimentos mais avançados de electrónica e programação tanto de uC como da própria parte da UI de controlo no Browser.
Teria de ser realmente um tutorial muito extenso!
O sistema Arduino é bom para protótipos, para implementar ideias, mas não para sistemas finais. A não ser que se use a base Arduino numa nova PCB dedicada, mas mesmo assim a programação C para uCs não é difícil e permite mais margem de manobra.
Aconselharia a fazeres uma lista de componentes e ficarás espantado com o preço.
O sistema ZigBee é o ideal para domótica e é menos complexo. Para além de que quando usado com Transceivers de 2.4 GHz permitem reduzir o tamanho da antena e utilizar módulos mais pequenos.
Cumprimentos
boas .. a ideia é fazer por exemplo controlo de temperatura de uma sala conseguir ligar um aquecedor (por exemplo) e luzes.. no minha pesquisa ja tenho o material todo.. arduino , ethernet shield (por cabo mas tem vantagens) uma carta de 4 reles que activam a 5v (220v a 10A cada), sensor de temperatura e de luminosidade. pronto depois ja estao a ver a coisa.. o meu problema é como criar interface e guardar o “site” dentro do arduino para nao precisar de um pc.. tenho o ethernet shield mas ja vi que nao fiz a melhor escolha pois nao tem o sdcard como o WizNet… alguem que tenha alguma sugestao de como fazer a ligaçaõ do arduino e ir buscar o interface a um servidor externo que diga..
esqueci-me de dizer ao todo gastei uns 45€ (ebay rulezz) nao acho que seja assim tao caro montar um sistema de domotica como este..
Até que não ficou muito caro, porque se trata de algo simples.
O sistema Gumstix ou outro do género parece ser o indicado para o teu caso. Mas fica caro quando usado apenas para isso.
http://www.gumstix.com/
Em relação ao interface:
PHP + C -> comunicação por sockets
boas..
no teu caso usava apenas C num ambiente multithread…o que procuras é criar um servior certo?
cmps
boas a todos a ideia é mesmo o arduino ser o server (se possivel) independente de qualquer maquina… mas o conteudo do interface( imagens flash etc) poderia ir buscar a rede…. tendo na rom apenas o indispensabilidade para ler as temperatura e estados dos reles…
parece interessantemas realmente mt caro… 😛
é disto que procuras então: http://snifasoldas.blogspot.com/2011/02/1-projecto-arduino-controlo-de.html
tens que “injectar” o codigo…cuidado com o espaço do micro
é mesmo isto.. 😛 obrigado pela referencia
Ja aprendi coisas novas com estas explicaçoes, muito bom, pois tenho um arduino, tenho de aprender visual basic para começar a brincar com isto 🙂
Se não souberes mais nenhuma linguagem de programação VB é uma linguagem boa e simples para iniciantes, mas se souberem alguma linguagem e já estiveres habituado a ela basicamente desde que tenhas acesso a uma parta “Serial”…
Boas..
eu acho pessoalmente que seria uma melhor jogada investir numa linguagem que seja livre de drm…
cmps
Viva pessoal
Ha já uns tempos que também tenho um arduino e ethernet shield. Já fiz uns trabalhos utilizando PICs, mas realmente o arduino é muito mais versátil e fácil de implementação para um prototipo. A parte interessante é realmente realizar projecto com interface web.
Minha pergunta, alguém me poderia dizer como posso ter acesso ao meu Arduino (IP=192.168.1.XXX) que está após o router, via internet (isto a partir de um pc fora da rede). O arduino tem IP fixo, e está ligado via RJ45? Quando digo aceder é aceder ao webserver que está no Arduino.
Cumps e Parabens pelo tema.
Tens que configurar o Router de modo a que os pedidos externos (quando é utilizado o IP atribuído pelo ISP) sejam encaminhados para um determinado IP (no caso o IP que a shield ethernet tem).
Problema: saber o IP do ISP (facilmente contornavel) e não tens segurança nenhuma.
Obrigado pela dica. É que existem varios software que fazem o mesmo
(Ex: TeamViewer, diga-se de passagem Muito Bom 🙂 ), e queria aplicar o mesmo conceito ao arduino.
Cumprimentos
Um aparte . Arduino Vs Netduino qual o melhor?
estou fazendo dois projetos de mecatrônica, e não conhecia o arduino…lendo seus posts pudde ver q ele se encaixava perfeitamente nos meu projetos, mas a minha maior dúvida é a seguinte: é possível controla lo via internet? Ou melhor, fazer com q ele acione atuadores via internet?
qual a senha de administrador para alterar as configurações do aplicativo?