Arduino - Multi-Function Shield

Este tutorial ensina como usar o Arduino com o Multi-Function Shield. Em detalhes, vamos aprender:

Arduino Multi-Function Shield

Assista a este tutorial em vídeo passo a passo que demonstra todos os exemplos do Multi-Function Shield. Observe que o vídeo mostra o Arduino Uno R4, mas funciona da mesma forma para o Arduino Uno R3:

Sobre o Multi-Function Shield

O Multi-Function Shield é um shield tudo-em-um para aprendizado e prototipagem, projetado para as placas Arduino Uno e Mega. Ele reúne vários componentes comuns em uma única placa, eliminando a necessidade de ligações complexas.

O shield inclui os seguintes componentes:

  • Display de 7 Segmentos de 4 Dígitos: Controlado por um registrador de deslocamento 74HC595. Mostra números, texto (A–Z) e caracteres especiais como o símbolo de grau (°).
  • 3 Botões de Pressão (S1, S2, S3): Ativos em LOW, com resistores de pull-up internos. Úteis para entrada do usuário e navegação em menus.
  • 4 LEDs (D1, D2, D3, D4): Ativos em LOW. Podem ser acesos, apagados, alternados ou piscar de forma independente ou todos juntos.
  • Buzzer: Ativo em LOW. Pode produzir bipes com duração configurável e com atraso opcional.
  • Potenciômetro: Conectado ao pino analógico A0. Lê um valor de 0 a 1023 (ou porcentagem de 0–100%).
  • Sensor de Temperatura LM35: Conectado ao pino analógico A4. Lê a temperatura em Celsius. É necessário remover o jumper J1.

Para placas no formato do Arduino Uno (como o Arduino Uno ou o Mega), o Multi-Function Shield encaixa diretamente na placa, sendo uma solução realmente plug-and-play — sem protoboard ou fios jumper. Para placas no formato Uno, mas com nomes de pinos diferentes (como o DIYables ESP32-S3 Uno), a biblioteca suporta mapeamento de pinos personalizado.

Mapeamento de Pinos

Função Pino do Arduino Função Pino do Arduino
LED D1 13 Botão S1 A1
LED D2 12 Botão S2 A2
LED D3 11 Botão S3 A3
LED D4 10 Potenciômetro A0
Buzzer 3 Sensor de Temperatura LM35 A4
Display LATCH 4
Display CLOCK 7
Display DATA 8
Pinagem do Multi-Function Shield

Diagrama de Ligação

Conectar o Arduino ao Multi-Function Shield é simples. Basta encaixar o Multi-Function Shield no Arduino, garantindo o alinhamento correto com os pinos de conexão, como mostrado na imagem abaixo.

Diagrama de ligação do Arduino com Multi-Function Shield

This image is created using Fritzing. Click to enlarge image

Instalação da Biblioteca

  • Conecte a placa Arduino ao seu computador com um cabo USB.
  • Abra o Arduino IDE, selecione a placa e a porta corretas.
  • Vá até o ícone Libraries na barra esquerda do Arduino IDE.
  • Pesquise "DIYables_MultiFuncShield" e encontre a biblioteca DIYables_MultiFuncShield da DIYables.
  • Clique no botão Install para instalar a versão mais recente da biblioteca.
Biblioteca do Multi-Function Shield para Arduino

Observação: Esta biblioteca é independente e não tem dependências externas.

Estrutura Básica

Todo sketch que usa o Multi-Function Shield segue esta estrutura básica:

#include <DIYables_MultiFuncShield.h> void setup() { MFS.begin(); // Initialize all components } void loop() { MFS.loop(); // Must be called every loop iteration }

MFS.begin() inicializa todos os componentes (display, botões, LEDs, buzzer). MFS.loop() atualiza a multiplexação do display, o debounce dos botões, o piscar dos LEDs e o tempo do buzzer. As duas chamadas são obrigatórias.

Código Arduino - Display de 7 Segmentos

O código a seguir demonstra como mostrar números inteiros, decimais, texto e caracteres especiais no display de 7 segmentos de 4 dígitos.

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-multi-function-shield */ /* * Multi-Function Shield - Display Example * * Cycles through display features every 3 seconds: * 1. Integer number * 2. Integer with leading zeros * 3. Float number * 4. Text string with letters * 5. Text string with dot * 6. Degree symbol + C (special chars) * 7. Dashes * * Hardware: DIYables Multi-Function Shield * * COMPATIBLE Multi-Function Shield: * - https://diyables.io/products/multi-function-shield-for-arduino-uno-mega * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4 Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - DIYables ESP32 S3, Uno-form factor: https://diyables.io/esp32-s3-uno * - It is expected to work with other boards */ #include <DIYables_MultiFuncShield.h> uint8_t step = 0; unsigned long lastUpdate = 0; void setup() { MFS.begin(); } void loop() { MFS.loop(); if (millis() - lastUpdate >= 3000) { lastUpdate = millis(); switch (step) { case 0: // Integer: " 42" MFS.display.print(42); break; case 1: // Integer with leading zeros: "0042" MFS.display.print(42, true); break; case 2: // Float with 2 decimals: "3.14" MFS.display.print(3.14, 2); break; case 3: // Text string: "HELP" MFS.display.print("HELP"); break; case 4: // Text with dot: "Ab.Cd" MFS.display.print("Ab.Cd"); break; case 5: // Degree + C using special chars: "25°C" MFS.display.clear(); MFS.display.setNumber(1, 2); MFS.display.setNumber(2, 5); MFS.display.setChar(3, SegChars::DEGREE); MFS.display.setChar(4, SegChars::C); MFS.display.show(); break; case 6: // Dashes: "----" MFS.display.print("----"); break; } step = (step + 1) % 7; } }

Passos Rápidos

  • Encaixe o Multi-Function Shield na placa Arduino.
  • Conecte a placa Arduino ao seu computador com um cabo USB.
  • Abra o Arduino IDE, selecione a placa e a porta corretas.
  • Copie o código acima e cole no editor do Arduino IDE.
  • Clique no botão Upload no Arduino IDE para carregar o código no Arduino.

O display passa por 7 modos a cada 3 segundos: inteiro, zeros à esquerda, decimal, texto, texto com ponto, símbolo de grau e traços.

Resumo da API do Display

Método Descrição Exemplo
print(int) Mostra um número inteiro MFS.display.print(42)
print(int, true) Inteiro com zeros à esquerda MFS.display.print(42, true) → 0042
print(float, dp) Decimal com casas decimais MFS.display.print(3.14, 2)
print(text) Mostra texto (A-Z, 0-9, -, _) MFS.display.print("HELP")
setNumber(pos, val) Define um único dígito (pos 1-4) MFS.display.setNumber(1, 5)
setChar(pos, ch) Define um caractere na posição MFS.display.setChar(2, 'A')
setChar(pos, SegChars) Define um caractere especial MFS.display.setChar(3, SegCharsDEGREE)
setDot(pos) Adiciona um ponto na posição MFS.display.setDot(2)
clear() Limpa todos os dígitos e pontos MFS.display.clear()
show() Aplica as alterações manuais MFS.display.show()

Observação: Os métodos print() chamam show() automaticamente. Use clear(), setNumber(), setChar(), setDot() e depois show() para controle manual.

Caracteres especiais disponíveis via SegChars: DASH (-), UNDERSCORE (_), C, E, F, DEGREE (°).

Código Arduino - Botões

O código a seguir detecta quando os botões são pressionados e soltos, e imprime os eventos no Serial Monitor.

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-multi-function-shield */ /* * Multi-Function Shield - Buttons Example * * Detects button presses and releases, prints to Serial Monitor. * * Hardware: DIYables Multi-Function Shield * * COMPATIBLE Multi-Function Shield: * - https://diyables.io/products/multi-function-shield-for-arduino-uno-mega * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4 Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - DIYables ESP32 S3, Uno-form factor: https://diyables.io/esp32-s3-uno * - It is expected to work with other boards */ #include <DIYables_MultiFuncShield.h> void setup() { Serial.begin(9600); MFS.begin(); } void loop() { MFS.loop(); if (MFS.button1.isPressed()) Serial.println("Button 1 pressed"); if (MFS.button1.isReleased()) Serial.println("Button 1 released"); if (MFS.button2.isPressed()) Serial.println("Button 2 pressed"); if (MFS.button2.isReleased()) Serial.println("Button 2 released"); if (MFS.button3.isPressed()) Serial.println("Button 3 pressed"); if (MFS.button3.isReleased()) Serial.println("Button 3 released"); }

Passos Rápidos

  • Copie o código acima e cole no editor do Arduino IDE.
  • Clique no botão Upload no Arduino IDE para carregar o código no Arduino.
  • Abra o Serial Monitor.
  • Pressione e solte os botões S1, S2 e S3 no shield para ver a saída.

Resumo da API dos Botões

Método Descrição
isPressed() Retorna true uma vez quando o botão é pressionado
isReleased() Retorna true uma vez quando o botão é solto
setDebounceTime(ms) Define o tempo de debounce (padrão 50 ms)

Os botões têm debounce embutido e usam lógica ativa em LOW com resistores de pull-up internos. Você pode acessar os botões pelo nome (MFS.button1, MFS.button2, MFS.button3) ou pelo índice (MFS.button(1) a MFS.button(3)).

Código Arduino - LEDs

O código a seguir acende os LEDs um por um e depois faz todos piscarem juntos.

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-multi-function-shield */ /* * Multi-Function Shield - LEDs Example * * Demonstrates turn on, turn off, and blink for each LED. * * Hardware: DIYables Multi-Function Shield * * COMPATIBLE Multi-Function Shield: * - https://diyables.io/products/multi-function-shield-for-arduino-uno-mega * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4 Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - DIYables ESP32 S3, Uno-form factor: https://diyables.io/esp32-s3-uno * - It is expected to work with other boards */ #include <DIYables_MultiFuncShield.h> void setup() { Serial.begin(9600); MFS.begin(); // Turn on all LEDs one by one Serial.println("Turn ON LEDs one by one"); for (uint8_t i = 1; i <= 4; i++) { MFS.led(i).turnON(); delay(500); } delay(1000); // Turn off all LEDs one by one Serial.println("Turn OFF LEDs one by one"); for (uint8_t i = 1; i <= 4; i++) { MFS.led(i).turnOFF(); delay(500); } delay(1000); // Blink individual LED (LED 1 only) Serial.println("Blink LED 1 individually"); MFS.led(1).blink(300); unsigned long start = millis(); while (millis() - start < 3000) MFS.loop(); MFS.led(1).turnOFF(); delay(1000); // Blink all LEDs together Serial.println("Blink all LEDs together"); MFS.allLedsBlink(500); } void loop() { MFS.loop(); }

Passos Rápidos

  • Copie o código acima e cole no editor do Arduino IDE.
  • Clique no botão Upload no Arduino IDE para carregar o código no Arduino.

Os LEDs acendem em sequência com um atraso de 500 ms, e depois os 4 LEDs piscam juntos.

Resumo da API dos LEDs

Método Descrição
turnON() Acende o LED
turnOFF() Apaga o LED
toggle() Alterna o estado do LED
blink(interval) Pisca com tempos iguais de ligado/desligado
blink(onTime, offTime) Pisca com tempos de ligado/desligado separados
isOn() Retorna true se o LED estiver aceso no momento

Métodos de conveniência em MFS:

Método Descrição
allLedsOn() Acende os 4 LEDs
allLedsOff() Apaga os 4 LEDs
allLedsBlink(interval) Faz todos os LEDs piscarem juntos
allLedsBlink(onTime, offTime) Faz todos piscarem com tempos de ligado/desligado separados

Os LEDs são ativos em LOW. Acesse pelo nome (MFS.led1 a MFS.led4) ou pelo índice (MFS.led(1) a MFS.led(4)).

Código Arduino - Buzzer

O código a seguir faz o buzzer apitar a cada 2 segundos.

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-multi-function-shield */ /* * Multi-Function Shield - Buzzer Example * * Beeps the buzzer every 2 seconds. * * Hardware: DIYables Multi-Function Shield * * COMPATIBLE Multi-Function Shield: * - https://diyables.io/products/multi-function-shield-for-arduino-uno-mega * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4 Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - DIYables ESP32 S3, Uno-form factor: https://diyables.io/esp32-s3-uno * - It is expected to work with other boards */ #include <DIYables_MultiFuncShield.h> unsigned long lastBeep = 0; void setup() { MFS.begin(); } void loop() { MFS.loop(); if (millis() - lastBeep >= 2000) { lastBeep = millis(); MFS.buzzer.beep(100); } }

Passos Rápidos

  • Copie o código acima e cole no editor do Arduino IDE.
  • Clique no botão Upload no Arduino IDE para carregar o código no Arduino.

Você vai ouvir um bipe curto a cada 2 segundos.

Resumo da API do Buzzer

Método Descrição
beep(ms) Apita pela duração especificada
beep(ms, delayMs) Espera delayMs e depois apita por ms
stop() Para o buzzer imediatamente
isBeeping() Retorna true se o buzzer estiver ligado no momento

Código Arduino - Potenciômetro

O código a seguir lê o potenciômetro e imprime o valor e a porcentagem no Serial Monitor.

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-multi-function-shield */ /* * Multi-Function Shield - Potentiometer Example * * Reads the potentiometer and shows the percentage on the display. * * NOTE: The potentiometer on the shield is a multi-turn trimmer. * You need to rotate it MANY turns to go from 0% to 100%. * If the value stays at 0% or 100%, rotate in the opposite direction. * * Hardware: DIYables Multi-Function Shield * * COMPATIBLE Multi-Function Shield: * - https://diyables.io/products/multi-function-shield-for-arduino-uno-mega * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4 Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - DIYables ESP32 S3, Uno-form factor: https://diyables.io/esp32-s3-uno * - It is expected to work with other boards */ #include <DIYables_MultiFuncShield.h> unsigned long lastUpdate = 0; float lastPct = -1; void setup() { Serial.begin(9600); MFS.begin(); Serial.println("Rotate potentiometer knob (multi-turn trimmer)."); Serial.println("It requires many turns to go from 0% to 100%."); } void loop() { MFS.loop(); if (millis() - lastUpdate >= 500) { lastUpdate = millis(); int raw = MFS.readPot(); float pct = MFS.readPotPercent(); Serial.print("Raw: "); Serial.print(raw); Serial.print(" Percent: "); Serial.print(pct, 1); Serial.print("%"); if (pct <= 0.1) Serial.print(" ← MIN (rotate clockwise to increase)"); else if (pct >= 99.9) Serial.print(" ← MAX (rotate counter-clockwise to decrease)"); Serial.println(); lastPct = pct; } }

Passos Rápidos

  • Copie o código acima e cole no editor do Arduino IDE.
  • Clique no botão Upload no Arduino IDE para carregar o código no Arduino.
  • Abra o Serial Monitor.
  • Gire o botão do potenciômetro e observe o valor mudar no Serial Monitor.

Resumo da API do Potenciômetro

Método Retorna Descrição
readPot() int Valor bruto do ADC (0–1023 no Uno)
readPotPercent() float Porcentagem (0.0 – 100.0)

Código Arduino - Sensor de Temperatura (LM35)

O código a seguir lê o sensor de temperatura LM35 e mostra o valor em Celsius no display e no Serial Monitor.

Importante: Você deve remover o jumper J1 do shield para usar o sensor de temperatura LM35 (o pino A4 é compartilhado com o SDA do I2C).

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-multi-function-shield */ /* * Multi-Function Shield - Temperature Example * * Reads the LM35 temperature sensor and shows Celsius on the display. * Note: Requires jumper J1 removed (pin A4). * * Hardware: DIYables Multi-Function Shield * * COMPATIBLE Multi-Function Shield: * - https://diyables.io/products/multi-function-shield-for-arduino-uno-mega * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4 Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - DIYables ESP32 S3, Uno-form factor: https://diyables.io/esp32-s3-uno * - It is expected to work with other boards */ #include <DIYables_MultiFuncShield.h> unsigned long lastUpdate = 0; void setup() { Serial.begin(9600); MFS.begin(); MFS.display.print(0); } void loop() { MFS.loop(); if (millis() - lastUpdate >= 500) { lastUpdate = millis(); float temp = MFS.readTemperature(); MFS.display.print(temp, 1); Serial.print("Temp: "); Serial.print(temp, 1); Serial.println(" C"); } }

Passos Rápidos

  • Remova o jumper J1 do Multi-Function Shield.
  • Copie o código acima e cole no editor do Arduino IDE.
  • Clique no botão Upload no Arduino IDE para carregar o código no Arduino.
  • Abra o Serial Monitor.
  • Observe a leitura de temperatura no display e no Serial Monitor.

A leitura de temperatura usa uma média móvel de 4 amostras para obter valores estáveis. O buffer é preenchido automaticamente na primeira leitura para evitar erros de partida a frio.

Arduino Multi-Function Shield - Demonstração Completa

Abaixo está um tutorial em vídeo passo a passo que demonstra todos os exemplos do Multi-Function Shield. Observe que o vídeo mostra o Arduino Uno R4, mas funciona da mesma forma para o Arduino Uno R3:

Plataformas Suportadas

A biblioteca suporta todas as plataformas Arduino (architectures=*).

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!