UC02647 · Configurar e programar microcontroladores
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
- GPIO (General Purpose Input/Output): pinos digitais que podem ser entrada (ler 0/1) ou saída (escrever 0/1).
- ADC (Analog-to-Digital Converter): pinos analógicos que convertem uma tensão num número (Arduino: 0-1023; ESP32: 0-4095).
- PWM (Pulse Width Modulation): liga/desliga muito depressa para simular uma saída analógica (brilho de LED, posição de servo, velocidade de motor).
1.4 Alimentação e segurança eléctrica
- Alimentar por USB (5 V) ou fonte externa adequada.
- Tensão lógica importa: 5 V no Arduino, 3.3 V no ESP32/Pico. Ligar um sinal de 5 V a um pino de 3.3 V pode danificar a placa.
- Corrente máxima por pino ~20-40 mA. Cargas maiores (motores, fitas LED) usam transístor, MOSFET ou relé e fonte própria.
- GND comum entre todos os componentes.
- Usar sempre resistência em série com LEDs.
- Nunca controlar 220 V sem relé apropriado e cuidados de segurança.
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:
- SDA (dados) e SCL (relógio), mais GND comum.
- Cada dispositivo tem um endereço único.
- Permite ligar sensores, displays e expansores na mesma "linha".
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
- Serial → Processing/TouchDesigner/Unity: a placa envia números que controlam visuais/som.
- MQTT/HTTP → página web: a placa publica eventos e uma página reage (com JavaScript).
Assim, um gesto físico pode disparar vídeo, som ou gráficos generativos.
6.4 Do protótipo à instalação final
- Esquema do circuito (sensores, actuadores, alimentação, GND comum).
- Código modular — testar cada componente isoladamente antes de juntar.
- Montagem robusta — fixar componentes, arrumar cabos, prever uso público.
- Teste com utilizadores e ajuste de limiares (sensibilidade).
- 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.