Partilhar: WhatsApp
aulify · Sebenta
UC · Unidade de Competência · UC02647

UC02647 · Configurar e programar microcontroladores

Arduino e ESP32 — GPIO, sensores, actuadores, comunicação, IoT e instalações interactivas
25h · 2.25 pontos crédito Curso: T. Multimédia ↗ Referencial oficial SNQ
Índice

Introdução

Um microcontrolador é um computador completo num único chip, capaz de ler o mundo físico através de sensores e de o influenciar através de actuadores. Para um técnico de multimédia, é a ponte entre o digital e o físico: permite criar instalações interactivas, peças que reagem ao público (movimento, luz, som) com respostas visuais e sonoras.

Esta UC (25h) cobre, numa abordagem prática: - Arquitectura e plataformas (Arduino, ESP32, Raspberry Pi Pico). - Programação em C/C++ no IDE Arduino. - Sensores e actuadores. - Comunicação (Serial, I2C, displays). - Conectividade IoT (WiFi, HTTP, MQTT). - Projectos interactivos multimédia.


1. Microcontroladores

1.1 Conceito

Um microcontrolador integra num só chip: CPU, memória (Flash para o programa, RAM para dados) e periféricos de I/O (pinos, temporizadores, conversores). Ao contrário de um PC, é dedicado a uma tarefa, consome pouco e é barato.

Modelo mental fundamental:

SENSOR (entrada) → MICROCONTROLADOR (decisão) → ACTUADOR (saída)

1.2 Plataformas

Placa Núcleo Tensão lógica Conectividade Linguagem típica
Arduino Uno ATmega328 8-bit 5 V C/C++ (Arduino)
ESP32 Xtensa dual-core 32-bit 3.3 V WiFi + Bluetooth C/C++ (Arduino)
Raspberry Pi Pico RP2040 32-bit 3.3 V — (Pico W tem WiFi) C/C++ ou MicroPython

Para projectos multimédia ligados à rede, o ESP32 é a escolha recomendada (WiFi integrado, mais memória e velocidade).

1.3 GPIO, ADC e PWM

1.4 Alimentação e segurança eléctrica


2. Programação

2.1 IDE e estrutura do sketch

O Arduino IDE compila e carrega o programa (sketch) para a placa. Todo o sketch tem duas funções obrigatórias:

void setup() {
  // executa uma vez ao ligar/reiniciar
}

void loop() {
  // executa repetidamente, para sempre
}

2.2 Variáveis e tipos

const int LED = 13;   // constante: pino do LED
int contador = 0;     // inteiro
float temp = 23.5;    // número decimal
bool ligado = false;  // verdadeiro/falso

Usar const int para os pinos torna o código legível e centraliza alterações.

2.3 Saída e entrada digital

const int LED = 13;
const int BOTAO = 2;

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(BOTAO, INPUT_PULLUP);  // resistência interna
}

void loop() {
  // botão com INPUT_PULLUP: LOW quando premido
  if (digitalRead(BOTAO) == LOW) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
}

INPUT_PULLUP evita leituras instáveis (estados "flutuantes") sem resistência externa.

2.4 Leitura analógica

void setup() { Serial.begin(9600); }

void loop() {
  int valor = analogRead(A0);   // 0..1023 (Arduino)
  Serial.println(valor);
  delay(100);
}

Permite ler sensores que produzem uma tensão variável (potenciómetro, LDR, TMP36).

2.5 Estruturas de controlo

Construção Uso
if / else Decisões
for Repetir n vezes
while Repetir enquanto condição
map(x, a, b, c, d) Reescalar valores
constrain(x, min, max) Limitar intervalo

Exemplo de map (de 0-1023 para 0-255):

int brilho = map(analogRead(A0), 0, 1023, 0, 255);
analogWrite(9, brilho);

3. Sensores e actuadores

3.1 Tabela de componentes

Componente Tipo Como se lê/controla
Botão Entrada digital digitalRead (INPUT_PULLUP)
Potenciómetro Entrada analógica analogRead
LDR (luz) Entrada analógica analogRead (divisor com resistência)
TMP36 / DHT11 Temperatura analogRead / biblioteca
PIR Movimento digitalRead
LED Saída digitalWrite / analogWrite (PWM)
Buzzer Saída (som) tone()
Servo Saída (movimento) biblioteca Servo
Relé Saída (cargas) digitalWrite

3.2 LED com brilho (PWM)

const int LED = 9;  // pino com PWM (~)
void loop() {
  for (int b = 0; b <= 255; b++) { analogWrite(LED, b); delay(5); }
  for (int b = 255; b >= 0; b--) { analogWrite(LED, b); delay(5); }
}

3.3 LDR — luz automática

const int LDR = A0;
const int LED = 9;
void loop() {
  int luz = analogRead(LDR);
  int brilho = map(luz, 0, 1023, 255, 0); // mais escuro = mais brilho
  analogWrite(LED, brilho);
}

3.4 Buzzer (som)

tone(8, 440, 500);   // pino 8, 440 Hz (Lá), 500 ms

3.5 Servo (movimento)

#include <Servo.h>
Servo s;
void setup() { s.attach(9); }
void loop() {
  for (int a = 0; a <= 180; a++) { s.write(a); delay(15); }
}

4. Comunicação

4.1 Serial

A porta Serial é o canal entre a placa e o computador, essencial para depuração e para enviar/receber dados:

void setup() { Serial.begin(9600); }
void loop() {
  Serial.print("Sensor: ");
  Serial.println(analogRead(A0));
  delay(500);
}

O Serial Monitor e o Serial Plotter do IDE mostram os valores. A mesma Serial pode levar dados a software multimédia (Processing, TouchDesigner, Unity).

4.2 I2C

O I2C liga vários dispositivos com apenas dois fios partilhados:

4.3 Displays

Display Interface Característica
LCD 16×2 I2C ou paralelo Texto, económico
OLED 128×64 I2C Nítido, gráficos, baixo consumo
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(128, 64, &Wire);
// ...
display.clearDisplay();
display.setCursor(0, 0);
display.println("Temperatura: 23C");
display.display();

As bibliotecas escondem a complexidade — basta enviar texto/formas.


5. Conectividade IoT

5.1 WiFi no ESP32

#include <WiFi.h>
void setup() {
  Serial.begin(115200);
  WiFi.begin("MinhaRede", "password");
  while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
  Serial.println(WiFi.localIP());
}

5.2 HTTP

A placa pode actuar como cliente: - GET para ler de uma API (ex: meteorologia). - POST para enviar leituras a um servidor/dashboard.

Padrão típico de IoT: o sensor envia dados periódicos para a cloud, que os regista e visualiza.

5.3 MQTT (básico)

MQTT é um protocolo leve por mensagens, ideal para IoT:

Conceito Significado
Broker Servidor central que distribui mensagens
Tópico Canal nomeado (ex: instalacao/luz)
Publish Enviar para um tópico
Subscribe Receber de um tópico

Vantagens para multimédia interactiva: várias placas e dispositivos reagem entre si em tempo real e com baixa latência. Ex: um sensor de movimento publica em palco/entrada, e o computador que controla os visuais está subscrito a esse tópico.


6. Projectos interactivos multimédia

6.1 O padrão interactivo

ENTRADA (sensor)  →  REGRA (código)  →  SAÍDA (resposta multimédia)
movimento/luz/som     condição/mapeamento   luz, som, vídeo, visuais

6.2 Exemplos

Instalação Sensor Resposta
Luz que segue PIR / distância Fita LED acende na zona
Parede sonora Distância (HC-SR04) Notas/sons variam com a mão
Visual reactivo Microfone/LDR Animação no ecrã muda
Espelho interactivo PIR Vídeo/efeito inicia ao aproximar

6.3 Ligar ao software multimédia

Assim, um gesto físico pode disparar vídeo, som ou gráficos generativos.

6.4 Do protótipo à instalação final

  1. Esquema do circuito (sensores, actuadores, alimentação, GND comum).
  2. Código modular — testar cada componente isoladamente antes de juntar.
  3. Montagem robusta — fixar componentes, arrumar cabos, prever uso público.
  4. Teste com utilizadores e ajuste de limiares (sensibilidade).
  5. Documentação — esquema, código comentado, foto/vídeo de demonstração.

Conclusão

Os microcontroladores dão ao técnico de multimédia o poder de criar experiências físicas interactivas. Dominar o ciclo entrada-processamento-saída, a leitura de sensores, o controlo de actuadores e a ligação por Serial/MQTT a software multimédia abre a porta a instalações que reagem ao público em tempo real. O ESP32, com WiFi integrado, é a plataforma ideal para projectos ligados e interactivos.