terça-feira, dezembro 06, 2016

Multifunction Shield - Parte 1

Me emprestaram recentemente esta plaquinha para uso com o Arduino e compatíveis (que você encontra nos seus fornecedores habituais na China). Ela agrupa em uma única placa vários componentes e conectores para permitir exercitar várias capacidades do Arduino. Com um pouco de imaginação ela pode ser usada para alguns aplicações reais.


Nesta primeira parte vamos ver os componentes mais simples.

LEDs

Qualquer projeto sobre microcontroladores deve começar piscando LEDs. É a lei. A multifuncion shield não nega fogo neste quesito, possuindo quatro LEDs ligados ao pinos digitais 10, 11, 12 e 13. Entretanto, ao contrário do costume, os LEDs são acesos quando o pino está em nível baixo. Abaixo uma brincadeira básica obrigatória:
// Exemplo de uso da Multi Function Shield - LEDs
// DQ, dez/2016
// http://dqsoft.blogspot.com

const int pinLed1 = 10;
const int pinLed2 = 11;
const int pinLed3 = 12;
const int pinLed4 = 13;

const int leds[] = { pinLed1, pinLed2, pinLed3, pinLed4 };
#define NLEDS (sizeof(leds) / sizeof(leds[0]))

void setup() {
  for (int i = 0; i < NLEDS; i++) {
    pinMode (leds[i], OUTPUT);
    digitalWrite (leds[i], HIGH);
  }
}

void loop() {
  for (int i = 0; i < NLEDS; i++) {
    digitalWrite (leds[i], LOW);
    delay (500);
    digitalWrite (leds[i], HIGH);
  }
}

Botões

A placa possui três botões, ligados aos pinos A1, A2 e A3, com resistores de pullup (ou seja, a leitura é 0 com a chave apertada e 1 com a chave solta). Não custa lembrar que os pinos analógicos do Ardino podem também ser usados como digitais. Os resistores de pullup podem ser deligados abrindo o jumper J2 do shield. O exemplo abaixo usa os botões para controlar três dos LEDs.
// Exemplo de uso da Multi Function Shield - Botoes
// DQ, dez/2016
// http://dqsoft.blogspot.com

const int pinLed1 = 10;
const int pinLed2 = 11;
const int pinLed3 = 12;
const int pinLed4 = 13;

const int pinBotao1 = A1;
const int pinBotao2 = A2;
const int pinBotao3 = A3;

const int leds[] = { pinLed1, pinLed2, pinLed3, pinLed4 };
#define NLEDS (sizeof(leds) / sizeof(leds[0]))

const int botoes[] = { pinBotao1, pinBotao2, pinBotao3 };
#define NBOTOES (sizeof(botoes) / sizeof(botoes[0]))

const int nAcoes = min(NLEDS, NBOTOES);

void setup() {
  for (int i = 0; i < NLEDS; i++) {
    pinMode (leds[i], OUTPUT);
    digitalWrite (leds[i], HIGH);
  }
}

void loop() {
  for (int i = 0; i < nAcoes; i++) {
    digitalWrite (leds[i], digitalRead(botoes[i]));
  }
  delay (50);
}
Existe ainda um quarto botão para Reset do Arduino.

Buzzer

Um buzzer piezoelétrico está ligado, através de um transistor, ao pino digital 3. Na placa que usei é um buzzer com oscilador interno (ou seja, você apenas o liga ou desliga conforme o nível for LOW ou HIGH), mas vi referência na internet a um modelo com um buzzer sem oscilador (você precisa gerar o som, por exemplo usando a função tone). Um exemplo que usa um botão para controlar o buzzer:
// Exemplo de uso da Multi Function Shield - Buzzer
// DQ, dez/2016
// http://dqsoft.blogspot.com

const int pinBotao1 = A1;
const int pinBuzzer = 3;

void setup() {
  pinMode (pinBuzzer, OUTPUT);
  digitalWrite (pinBuzzer, HIGH);
}

void loop() {
  digitalWrite (pinBuzzer, digitalRead(pinBotao1));
}

Potenciômetro

Fechando a parte básica, temos um potenciômetro com extremidades ligadas a +5 e GND e a parte central ligada ao pino A0. No caso da minha placa é um potenciômetro multi-volta, o que dá uma boa precisão mas não é muito didático.

O exemplo padrão AnalogReadSerial pode ser usado para testar o potenciômetro.

Referências

Os meus programas estão no meu github.

Existe uma quantidade razoável de informações sobre este shield na internet. Abaixo as que eu usei:

http://makbit.com/web/firmware/multi-function-shield-for-arduino/
Lista as conexões, descreve LEDs e buzzer, link para documentação em chinês.

http://www.cohesivecomputing.co.uk/hackatronics/arduino-multi-function-shield/
Link para uma biblioteca específica para o shielde para um mini eBook com informações.

http://arduinolearning.com/code/multi-function-shield-examples.php
Alguns exemplos interessantes.

Atualizado para mencionar o jumper J2 que controla os pullups dos botões.





Nenhum comentário: