2 – entender a escrita em porta lógica digital (acender um LED) + introdução ao Arduino

Podemos resumir simplificadamente o arduino, ou qualquer outro microcontrolador, em um leitor e escritor de portas digitais.  Ou seja, temos uma lógica interna, um programa, que executará algum algoritmo baseado em informações de entrada (porta serial ou leitura de portas digitais) e vai produzir um comportamento, ou uma saída (através da porta serial ou da escrita em portas digitais). Existem outros tipos de leitura e escritas no arduino (analógico, pwm, interrupções) mas não vamos tratar desses recursos nessa serie de tutoriais.

2-1
Figura 2.1 – funcionamento simplificado de um microcontrolador

A idéia dessa etapa é entender a escrita na porta digital e, através dela, acender e apagar um LED seguindo uma lógica pré definida (1 segundo ligada, 1 segundo desligada, por exemplo).  Ou seja, do desenho acima, nosso exemplo terá:

2-2
Figura 2.2 – Expectativa de configuração do nosso exemplo, ligar e desligar um LED através da escrita de porta digital.

Quando se fala em porta digital, lembramos de lógica digital, ou seja, 0 e 1, TRUE e FALSE, ligado ou desligado, lógica booleana. Uma porta digital tem portanto, dois estados, análogo a lógica booleana, que são LOW (equivalente a 0, false, desligado) e HIGH (equivalente a 1, true, ligado).  Podemos ler o estado das portas digitais (próximo tutorial) ou escrever nosso estado nelas e alterar o valor ao longo do tempo.  (veja figura abaixo)

2-3
Figura 2.3 – Possíveis variações do estado de uma porta lógica ao longo do tempo.

No arduino, temos diversas portas digitais. Podemos configurá-las para ler ou escrever. Para começar a traduzir essa teoria em parte física, podemos ver na figura abaixo todas as portas digitais disponíveis no arduino Uno.

2-4
Figura 2.4 – Portas digitais de um arduino UNO. Repare na imagem, as potas de 0 a 13 são marcadas como digitais. (as portas 0 e 1 são separadas para comunicação serial, mas podem ser usadas como portas digitais caso a comunicação serial não seja necessaria no projeto). Imagem: http://arduino.cc

Bom, mas antes de entrar de vez na parte física, ou seja, a parte eletrônica/hardware, vamos nos atear ainda a parte software/teórica. Como vimos na figura 2.1, um microcontrolador possui uma lógica interna quem, dado uma entrada (que pode ser nula), executa um algoritmo e gera uma saída.  Normalmente, você não vai querer que seu microcontrolador  execute sua lógica somente uma vez  e desligue, você provavelmente vai querer ele funcionando como um autômato, ou seja, em um ciclo indefinido de leitura, execução e saída. Algo parecido com essa figura abaixo:

2-5
Figura 2.5 – Ciclo de execução simplificado de um microcontrolador.

Os criadores do arduino simplificaram esse ciclo de vida do microcontrolador na hora de estruturar o código que vamos gravar no microcontrolador. Um programa para arduino deve ter duas funções, setup e loop.

Função setup – executada na inicialização do arduino, serve para configurar o microcontrolador. Por exemplo, configurar quais portas lógicas serão de leitura, quais serão de escrita, o estado inicial das portas de escrita/saída, qual a velocidade de transmissão da porta serial, etc.

Função loop – representa o ciclo de execução descrito na figura 2.5. Essa função será chamada indefinidamente e é aqui que colocamos nossa lógica, ou seja, onde lemos as entradas de dados, processamos nossa lógica e configuramos uma saída.

Um código inicial seria o trecho abaixo.

// função executada na inicialização do arduino
void setup() {

}

// função executada indefinidamente, contendo a lógica
//do microcontrolador
void loop() {

}

Quadro 2.6 – código inicial programa arduino.

Nosso objetivo é acender e apagar um LED. O LED precisa de uma determinada voltagem e corrente elétrica para acender.  Mas como vamos usar a saída da porta digital para ligar o LED?

Quando subimos (HIGH) ou baixamos (LOW) o sinal de uma porta lógica, fisicamente, estamos mexendo com a voltagem da porta. HIGH faz com que a porta tenha a voltagem de 5V e a corrente base do arduino (Xma). LOW faz com que a porta seja ligada no GND (terra), ou seja, tenha 0V.

2-7
Figura 2.7 – HIGH joga 5V na porta lógica. LOW joga 0V (neutro).

Logo, se ligarmos a porta digital no LED, poderemos suprir a voltagem e corrente necessária para o LED acender. Como o LED precisa de 3v de tensão e 0,02A de corrente, para não queimá-lo, precisamos adicionar um resistor em serie para diminuir a tensão e não queimar o LED. Vamos escolher uma porta aleatória para nosso exemplo, a porta 4. Para calcular o valor do resistor, é só usar física elétrica básica, U = RI, no exemplo usei 100ohm  (  5-3 = R * 0.02). Então, nossa configuração ficará a seguinte:

2-8
Figura 2.8 – Configuração do nosso exemplo.

Montamos a parte física, agora falta gravar a lógica no nosso microcontrolador. Vendo o quadro 2.6, temos que preencher as funções de setup e loop. Na função setup, precisamos inicializar a porta 4, que escolhemos acima, configurando-a para ser de escrita/saída, e iniciando ela no estado desligado (LOW).  Isso pode ser feito pelo trecho abaixo:

void setup() {                
  // inicializa a porta 4 como porta de saída / escrita.
  pinMode(4, OUTPUT); 
  // escreve o estado da porta 4 como LOW / desligado
  digitalWrite(4, LOW); 
}

Quadro 2.9 – configuração inicial do exemplo. Configurando porta 4 como saída e inicializando-a como desligada. Você pode saber mais sobre as funções pinMode (link http://arduino.cc/en/Reference/pinMode)  e digitalWrite (http://arduino.cc/en/Reference/digitalWrite) no site do arduino.

Agora precisamos programar a função loop, que seria executada indefinidamente. Como queremos que o LED fique 1 segundo ligado e depois 1 segundo desligado, piscando, podemos montar nosso código da seguinte maneira:

void loop() {
  // liga o LED mudando o estado da porta 4 para HIGH (5volts)
  digitalWrite(4, HIGH);
  // espera por 1 segundo (ou 1000 milésimos de segundo)
  delay(1000);
  // desliga o LED mudando o estado da porta 4 para LOW (0volts)
  digitalWrite(4, LOW); 
  // espera por 1 segundo (ou 1000 milésimos de segundo)
  delay(1000);
}

Quadro 2.10 – lógica do exemplo, fazendo piscar o led em intervalo de 1 segundo, indefinidamente, alterando o estado da porta 4. Para saber mais sobre a função delay, acesse a referencia no site do arduino (http://arduino.cc/en/Reference/delay)

Quando esse  código estiver executando no arduino, teremos basicamente esse comportamento na porta digital 4:

2-11
Figura 2.11 – Representação do funcionamento da lógica do microcontrolador

O código completo é o seguinte:

void setup() {                
  // inicializa a porta 4 como porta de saída / escrita.
  pinMode(4, OUTPUT); 
  // escreve o estado da porta 4 como LOW / desligado
  digitalWrite(4, LOW); 
}

void loop() {
  // liga o LED mudando o estado da porta 4 para HIGH (5volts)
  digitalWrite(4, HIGH);
  // espera por 1 segundo (ou 1000 milésimos de segundo)
  delay(1000);
  // desliga o LED mudando o estado da porta 4 para LOW (0volts)
  digitalWrite(4, LOW); 
  // espera por 1 segundo (ou 1000 milésimos de segundo)
  delay(1000);
}

Quadro 2.12 – Código completo do exemplo.

Com o código (software) e a parte física (hardware) prontos, falta só gravar no Arduino. A IDE do arduino compila e faz o upload do programa, basta conectar o Arduino via porta serial, copiar o código e clicar no botão de upload.

2-13
Figura 2.13 – Botao de upload em destaque

Veja abaixo o vídeo do upload e do exemplo funcionando.

O próximo tutorial cobrirá a leitura da porta digital, ou seja, como ler uma entrada de algum tipo de sensor, processar a entrada e ter uma saída correspondente. Clique aqui para a próxima etapa.

Anúncios

Deixe um comentário

Arquivado em Arduino, Automação Doméstica, Desenvolvimento, Eletrônica, Geek

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s