domingo, 19 de julho de 2009

Hello Arduino World: Parte 1

Para ilustrar o funcionamento básico do Arduino preparei uma sequência de exemplos com alguns códigos, fotos e videos. Neste post apenas tratarei do primeiro exemplo que implementa um programa bem simples e representa uma unidade de código que usa uma porta digital como saída do Arduino conectado a um LED (diodo emissor de luz). O programa que será instalado no Arduino apenas acenderá e apagará este LED ininterruptamente com uma pequena pausa.

Clique aqui para ampliar!A foto ao lado ilustra os dois componentes usados neste primeiro exemplo. O LED vermelho está à esquerda e um resistor de 10k ohms está à direita. O LED tem polaridade, onde o fio metálico mais comprido é o positivo e o curto é o negativo. O resistor não tem polaridade.

Clique aqui para ampliar!Com um barramento para montar circuitos eletrônicos (protoboard) uma das pontas do resistor está ligada ao fio metálico de polaridade negativa do LED. A polaridade positiva do LED será ligada à porta digital de numero 9 do Arduino. O outro fio metálico do resistor será ligado à porta de aterramento (GND - ground).

Clique aqui para ampliar!A programação para o Arduino é realizada através da IDE implementada em Java chamada de Processing que pode ser baixada do site arduino.cc. Como ferramenta é implementada em Java, pressupõe-se ter um JRE devidamente instalado na máquina e com a variável PATH configurada para localizar este JRE. Contudo, os programas rodam dentro do microcontrolador do Arduino. Portanto, um compilador C externo a esta IDE é usado. Então, será necessário instalar o compilador avr-gcc antes de tentar escrever e compilar qualquer código para o Arduino através da IDE. Todos os passos necessários para configurar este ambiente estão disponíveis no site do Arduino.

A figura abaixo é um snapshot desta ferramenta com o código usado para controlar a porta 9 do Arduino para acender e apagar o LED.

Clique aqui para ampliar!
Um programa simples para rodar no Arduino deve ter as funções "setup()" e "loop()". A primeira função será executada apenas uma vez pelo Arduino no início da execução do programa. Esta função é usada para conter instruções para inicialização. Pode inicializar variáveis ou configurar as portas do Arduino. A segunda função será executada num loop infinito. Esta será a parte principal do programa.

#define portaLED 9

int pausa = 500;

void setup() {
pinMode(portaLED, OUTPUT);
}

void loop() {
digitalWrite(portaLED, HIGH);
delay(pausa);
digitalWrite(portaLED, LOW);
delay(pausa);
}

Clique aqui para ampliar!O código da função "setup()" ilustrada acima chama a função "pinMode(...)" que configura a porta 9 como saída digital. Com esta configuração será possível ativar esta porta para mudar o estado de ligado para desligado ou vice-versa (do estado 1 para 0 ou HIGH para LOW). A função "loop()" usa as funções "digitalWrite()" e "delay()" para mudar o estado da porta 9 e realizar uma pequena pausa para que a mudança de estado seja percebida. Como o programa roda numa velocidade aproximada de 16KHz, sem a pausa não seria possível observar o LED conectado a esta porta acender e apagar. A linha 10 deste código muda o estado da porta 9 para HIGH. Ou seja, a porta 9 passa a ter a tensão de 5 volts que representa o bit igual a 1. Em seguinda, ocorre uma pausa de 500 milissegundos antes de mudar o estado da porta para LOW (equivalente a zero volts). Daí uma nova pausa antes de voltar a acender o LED quando o Arduino executa novamente a função "loop()".

O video a seguir ilustra a execução do programa já compilado e instalado no Arduino através da IDE.

video
Na parte 2 (num novo post) será ilustrada uma evolução deste exemplo ao adicionar uma sequência de LEDs e um programa com loop para acender e apagar esta sequência.

2 comentários:

Antonio Celso disse...

Spock, uma dúvida, o microcontrolador Arduíno, pelo que vi brevemente no site do fabricante, não tem implementado a pilha do TCP/IP. Atualmente, as aplicações embarcadas necessitam desse suporte, por exemplo, o equipamento pode ser acessado remotamente pelo fabicante para verificar seu desempenho ou detectar falhas.

Att
Antonio Celso

Dr. Spock disse...

Olá Antonio Celso,
Realmente não tem TCP/IP embutido no Arduino. Contudo, é possível fazer aplicações com redes sem fio para comunicar um Arduino com outro ou com um computador usando o XBee (http://www.ladyada.net/make/xbee/arduino.html).