Interface LCD 20×4 + Motor Driver L293D LED · Programação e Robótica · Arduino UNO Rev3 compatível
PR.FT9_5 L293D · 600 mA

Display LCD 20×4 · Motor Driver L293D · Arduino UNO

Interface Visual
e Controlo de
Movimento

Recursos educativos do programa LED — Laboratórios de Educação Digital. A placa PR.FT9_5 reúne dois subsistemas num só shield: um LCD 20×4 azul negativo para output visual rico e um controlador de motores L293D para motores DC, servos e motores de passo — tudo encaixado diretamente no Arduino UNO Rev3.

LCD 20×4 azul negativo Retroiluminação branca Interface I2C L293D (ou compat.) Motor DC · 600 mA max Servo · Motor de passo
20×4 Caracteres
LCD
I2C Interface
LCD
L293D Chip Motor
Driver
600mA Corrente
max. por canal
3 Tipos de
motor
PR.FT9_5 LED Portugal
Temp: 24.3C Hum: 61%
Motor A: FWD PWM: 180
Status: OK
20 colunas 4 linhas Azul negativo Retro branca I2C addr 0x27 Caracteres 5×8 Chars custom Arduino + RPi
L293D — Motor Driver
Chip L293D ou compatível
Corrente DC (por canal) 600 mA máx.
Motores DC até 2 canais
Servo motors ✔ compatível
Motor de passo ✔ compatível
Tensão de saída 5 V (Arduino)
Controlo PWM ✔ velocidade

🔍 Os Dois Subsistemas

Uma placa, duas capacidades

🖥️ LCD 20×4 — Interface Visual

  • 20 colunas × 4 linhas de caracteres alfanuméricos
  • Fundo azul negativo com retroiluminação branca — alta legibilidade
  • Comunicação I2C — apenas 2 fios (SDA/SCL) do Arduino
  • Endereço I2C padrão: 0x27 (ajustável com jumpers)
  • Biblioteca LiquidCrystal_I2C — fácil de programar
  • Suporte a caracteres personalizados (8 chars CGRAM)
  • Controlo de brilho retroiluminação via potenciómetro onboard
  • Compatível com Arduino e Raspberry Pi

⚙️ L293D — Controlo de Motores

  • L293D (ou equivalente) — H-bridge dual para motores DC
  • Controlo de 2 motores DC com PWM (direção + velocidade)
  • Corrente máxima: 600 mA por canal
  • Controlo de servos com sinal PWM standard 50 Hz
  • Controlo de motores de passo (unipolar/bipolar)
  • Proteção integrada contra corrente inversa (díodos)
  • Interface via pinos digitais e PWM do Arduino
  • Biblioteca AFMotor (Adafruit Motor Shield v1)

📚 Programa de Formação

Progressão lógica — LCD primeiro, depois motores
1

🔍 Introdução à Placa PR.FT9_5

Visão geral dos dois subsistemas. Como a placa se encaixa no Arduino UNO Rev3. Instalação das bibliotecas LiquidCrystal_I2C e AFMotor. Pinagem I2C e motor driver.

Início obrigatório · Instalação de bibliotecas
2

🖥️ Biblioteca LiquidCrystal_I2C

Inicializar o LCD, escrever texto com lcd.print(), posicionar cursor com lcd.setCursor(), limpar ecrã, controlar retroiluminação e criar os primeiros displays de dados.

Fundamentos do LCD · I2C
3

🔤 Caracteres Personalizados no LCD

Criar caracteres bitmap 5×8 na CGRAM com lcd.createChar(). Desenhar ícones (grau °, seta, barra de progresso) para enriquecer a interface visual.

CGRAM · Gráficos no LCD
4

⚙️ Motor DC — Direção e Velocidade

Controlar um motor DC com o L293D via AFMotor. Definir direção (FORWARD / BACKWARD), velocidade (0–255 via PWM) e paragem (RELEASE). Ligar estado ao LCD em tempo real.

Motor DC · H-bridge · PWM
5

🦾 Servo Motor

Controlar a posição angular de um servo com a placa. Usar a biblioteca Servo ou AFMotor. Mostrar o ângulo atual no LCD e controlar com potenciómetro ou sensor.

Servo · PWM 50 Hz · Posição angular
6

🔄 Motor de Passo

Controlar um motor de passo unipolar/bipolar com o L293D. Modos de passo completo e meio-passo. Calcular passos por rotação. Mostrar posição e direção no LCD.

Stepper · Passos · Microstepping

🖥️ Exercícios LCD 20×4

Dominar o display — do texto ao gráfico
👋

Olá, LCD! — Primeiros Textos

Inicializar o LCD 20×4 via I2C. Escrever texto estático e dinâmico. Usar setCursor() para posicionar nas 4 linhas. Ativar/desativar retroiluminação.

⬤ Iniciante lcd.begin() · lcd.print()
🌡️

Dados de Sensores no LCD

Apresentar valores de sensores em tempo real — temperatura, luz, distância. Formatar os dados com rótulos e unidades nas 4 linhas. Atualizar sem flickering.

⬤ Iniciante Sensores + LCD · Formatação
📜

Scroll e Animações de Texto

Fazer scroll horizontal de mensagens longas com scrollDisplayLeft(). Criar animações de carga, barras de progresso e transições entre ecrãs.

⬤ Intermédio scrollDisplayLeft() · Animação
🎨

Caracteres Bitmap Personalizados

Definir até 8 caracteres 5×8 na CGRAM. Criar ícones de termómetro, seta, coração, grau °, barra de nível. Usar uma ferramenta geradora de bitmap online.

⬤ Intermédio createChar() · CGRAM 5×8
📋

Menu Navegável com Botões

Criar um menu de 4 opções navegável com botões cima/baixo. Usar o cursor personalizado "▶" para indicar seleção. Executar ações ao pressionar OK.

⬤ Intermédio Menu UI · Botões · Navegação
🕐

Relógio e Cronómetro

Implementar um relógio digital e cronómetro com millis(). Mostrar horas, minutos e segundos no LCD com formatação HH:MM:SS. Botão de reset.

⬤ Avançado millis() · Temporizadores · HH:MM:SS

⚙️ Exercícios de Controlo de Motores

L293D — DC, Servo e Motor de Passo
🔄

Motor DC — Básico

Ligar um motor DC ao L293D. Arrancar, parar, inverter direção com FORWARD / BACKWARD / RELEASE. Mostrar estado no LCD.

⬤ Iniciante AFMotor · FORWARD · BACKWARD
📈

Motor DC — Controlo de Velocidade

Variar a velocidade de um motor DC com setSpeed(0–255). Usar um potenciómetro ou sensor LDR para controlo analógico. Exibir RPM estimados no LCD.

⬤ Iniciante setSpeed() · PWM · analogRead()
🤖

Dois Motores DC Independentes

Controlar dois motores DC em simultâneo com direções e velocidades independentes — base para um chassi de robô diferencial. Menu de comandos no LCD.

⬤ Intermédio Motor1 · Motor2 · Diferencial
🦾

Servo Motor — Posição Precisa

Controlar ângulo de 0° a 180° via placa. Usar potenciómetro para varredura manual. Mostrar ângulo atual e alvo no LCD. Programar sequências de movimentos.

⬤ Intermédio Servo · write(angle) · PWM 50 Hz
🔩

Motor de Passo — Controlo Preciso

Controlar motor de passo com modo passo completo (full step) e meio-passo (half step). Definir rotações, passos e RPM. Mostrar posição angular acumulada no LCD.

⬤ Avançado Stepper · Full/half step · RPM
📡

Motor Controlado por Sensor

Usar sensor de distância (ultrassónico ou IR) para controlar automaticamente a velocidade/direção de um motor DC. Sistema de paragem de emergência ao detetar obstáculo.

⬤ Avançado Sensor → Motor · Realimentação

📐 Pinagem e Ligações

Referência técnica para Arduino UNO Rev3
Pino Arduino Função na placa Tipo de sinal Notas
▸ SUBSISTEMA LCD 20×4 — Interface I2C
A4 (SDA) Dados I2C — LCD I2C · DATA Endereço padrão 0x27 — ajustável com jumpers A0/A1/A2
A5 (SCL) Relógio I2C — LCD I2C · CLK Resistências pull-up 4.7 kΩ incluídas no módulo I2C
5V / GND Alimentação LCD Alimentação Consumo típico com retroiluminação: ~30 mA
▸ SUBSISTEMA MOTOR DRIVER — L293D
D3 (PWM) Velocidade Motor 1 PWM · Analógico analogWrite(3, 0–255) — controlo de velocidade
D4 Direção Motor 1 — IN1 Digital OUT HIGH = FORWARD / LOW = BACKWARD (combinado com D8)
D8 Direção Motor 1 — IN2 Digital OUT Complementar de D4 para controlo H-bridge
D11 (PWM) Velocidade Motor 2 PWM · Analógico analogWrite(11, 0–255)
D7 Direção Motor 2 — IN3 Digital OUT Par de controlo H-bridge para Motor 2
D2 Direção Motor 2 — IN4 Digital OUT Complementar de D7
D9 / D10 Servos 1 e 2 PWM · 50 Hz Sinal PWM standard para servos SG90/MG90S
5V / GND Alimentação L293D Alimentação Para cargas ≥ 600 mA considerar alimentação externa no terminal VM

💻 Exemplos de Código Fundamentais

Arduino IDE · Biblioteca LiquidCrystal_I2C + AFMotor
Inicialização LCD 20×4 via I2C — sketch completo mínimo
#include <Wire.h> #include <LiquidCrystal_I2C.h> // addr 0x27, 20 colunas, 4 linhas LiquidCrystal_I2C lcd(0x27, 20, 4); void setup() { lcd.init(); // inicializar lcd.backlight(); // ligar retroiluminação lcd.setCursor(0, 0); // col 0, linha 0 lcd.print("PR.FT9_5 LED"); lcd.setCursor(0, 1); lcd.print("Temp: "); } void loop() { float temp = analogRead(A0) * 0.48828; lcd.setCursor(6, 1); // a seguir a "Temp: " lcd.print(temp, 1); lcd.print(" C "); // espaços limpam dígito anterior delay(500); }
Motor DC com AFMotor — direção e velocidade
#include <AFMotor.h> #include <LiquidCrystal_I2C.h> AF_DCMotor motor(1); // Motor 1 (canais M1) LiquidCrystal_I2C lcd(0x27, 20, 4); void setup() { lcd.init(); lcd.backlight(); motor.setSpeed(200); // velocidade 0–255 motor.run(FORWARD); // FORWARD | BACKWARD | RELEASE lcd.setCursor(0,0); lcd.print("Motor: FORWARD"); lcd.setCursor(0,1); lcd.print("Speed: 200/255"); } void loop() { } // motor continua até nova instrução

🚀 Projetos Integrados — LCD + Motores

Combinar os dois subsistemas em sistemas completos
🎮

Painel de Controlo de Motor

LCD mostra velocidade, direção e modo do motor em tempo real. Potenciómetro controla velocidade. Botões invertem direção. Caracteres personalizados para seta de direção.

LCD 20×4Motor DCPotenciómetroBotõesChars custom
🤖

Robô com Telemetria no LCD

Chassis diferencial com dois motores DC. O LCD exibe em tempo real: velocidade esquerda/direita, modo (AUTO/MANUAL), distância ao obstáculo e direção atual.

2× Motor DCLCD telemetriaSensor obstáculosDiferencial
🦾

Braço Servo com Interface LCD

Dois servos controlam juntas de um mini-braço. LCD mostra ângulo de cada junta e modo (MANUAL / SEQUÊNCIA). Joystick (do Kit B 37) para controlo em tempo real.

2× ServoLCD 20×4JoystickPosição angular
🌤️

Estação Meteorológica com Dashboard

Temperatura, humidade e luminosidade distribuídas pelas 4 linhas do LCD com ícones bitmap. Alertas visuais quando valores ultrapassam limiares. Scroll automático de avisos.

LCD 20×4DHTLDRChars customAlertas
🔩

Posicionador de Precisão

Motor de passo move uma plataforma linear. O LCD exibe posição em mm (calculada a partir dos passos), destino e velocidade. Botões definem destino. Base conceptual de CNC.

Motor passoLCD posiçãoPassos → mmBotões
🗑️

Caixote Inteligente Avançado

Sensor de distância deteta aproximação → servo abre tampa → LCD conta utilizações e mostra "Obrigado!". Motor DC activa compressor simulado. Versão avançada do cenário LED oficial.

ServoMotor DCLCDHC-SR04Cenário LED