
O mundo da eletrónica e da automação abre portas para projetos incrivelmente criativos e funcionais. Desde braços robóticos a sistemas de abertura automática, o controlo de movimento é fundamental. Um dos componentes mais populares e acessíveis para iniciar esta jornada é o servo motor SG90, e quando combinado com o poder e a conectividade do microcontrolador ESP32, as possibilidades tornam-se ainda mais vastas. Imagine poder controlar um servo motor de qualquer lugar através de uma interface web simples, diretamente do seu smartphone ou computador!
Porquê este Projeto? A Magia do Controlo Remoto com ESP32
Este projeto é uma excelente introdução a vários conceitos importantes:
Microcontroladores Avançados: Familiarizar-se com o ESP32, um microcontrolador potente com Wi-Fi e Bluetooth integrados.
Controlo de Motores: Entender o funcionamento dos servo motores e como controlá-los com precisão usando sinais PWM (Pulse Width Modulation).
Servidores Web Embebidos: Aprender a criar um servidor web diretamente no ESP32, permitindo a interação através de um navegador.
Comunicação em Rede: Explorar os fundamentos da comunicação Wi-Fi para controlo remoto.
HTML e JavaScript Básicos: Ter um vislumbre de como criar interfaces de utilizador simples para interagir com o seu hardware.
As aplicações práticas são inúmeras: desde sistemas de abertura e fecho de pequenas portas ou válvulas, controlo de câmaras, mecanismos em projetos de robótica, até elementos interativos em maquetes ou instalações artísticas.
Componentes Necessários: Onde a Lojapm.pt Entra em Cena!
Para dar vida a este projeto, vai precisar de alguns componentes eletrónicos essenciais. E para isso, não há melhor sítio para os adquirir do que a www.lojapm.pt. Reconhecida como a melhor e mais barata loja eletrónica online em Portugal, a Lojapm.pt oferece uma vasta gama de produtos de qualidade, com preços competitivos e a conveniência de receber tudo em sua casa.
Aqui está a lista do que vai precisar, com a certeza de que encontrará tudo na Lojapm.pt:
Microcontrolador ESP32: O cérebro do nosso projeto. Existem várias placas de desenvolvimento ESP32 (como o ESP32-DevKitC). Verifique as opções na Lojapm.pt.
Servo Motor SG90: Um micro servo popular, leve e económico. Ideal para iniciantes. A Lojapm.pt tem este e outros servos em stock.
Breadboard (Placa de Ensaio): Para montar o circuito de forma fácil e sem soldadura.
Fios de Ligação (Jumper Wires): Macho-macho, macho-fêmea, conforme necessário para as ligações. A Lojapm.pt oferece packs variados.
Fonte de Alimentação (Opcional, mas Recomendado): Embora o ESP32 possa alimentar o SG90 para testes simples via USB, para um funcionamento mais estável ou múltiplos servos, uma fonte de alimentação externa de 5V é aconselhável. Verifique as opções na Lojapm.pt.
Computador com Arduino IDE Instalado: Para programar o ESP32.
A Lojapm.pt não só garante que obtém estes componentes ao melhor preço, mas também assegura a qualidade necessária para que os seus projetos funcionem sem problemas. Visite www.lojapm.pt e veja por si mesmo porque é a escolha preferida de entusiastas e profissionais em Portugal.
Entendendo os Protagonistas do Projeto
Antes de começarmos a montar e programar, vamos conhecer melhor os nossos componentes principais.
O Microcontrolador ESP32
O ESP32, desenvolvido pela Espressif Systems, é um sucessor do popular ESP8266. É um microcontrolador de baixo custo e baixo consumo energético, mas incrivelmente poderoso. As suas características principais incluem:
Processador Dual-Core: Geralmente Tensilica Xtensa LX6, permitindo processamento paralelo.
Wi-Fi Integrado: Suporte para 802.11 b/g/n.
Bluetooth Integrado: Suporte para Bluetooth clássico e Bluetooth Low Energy (BLE).
Múltiplos Pinos GPIO: Para interagir com sensores, atuadores e outros periféricos.
Capacidade PWM: Essencial para controlar servo motores.
Conversores Analógico-Digital (ADC) e Digital-Analógico (DAC).
Grande Comunidade e Suporte: Facilmente programável através do Arduino IDE.
Adquirir o seu ESP32 na www.lojapm.pt significa ter acesso a um componente versátil que será o coração de muitos dos seus futuros projetos de IoT e automação.
O Servo Motor SG90
O SG90 é um tipo de motor que permite o controlo preciso da posição angular do seu eixo. Ao contrário de um motor DC comum que roda continuamente, um servo motor roda para uma posição específica (ângulo) e mantém-se lá.
Funcionamento: É controlado por uma série de pulsos elétricos (PWM). A largura desses pulsos determina o ângulo do servo.Normalmente, um pulso de 1ms corresponde a 0 graus.
Um pulso de 1.5ms corresponde a 90 graus (posição central).
Um pulso de 2ms corresponde a 180 graus.
Estes pulsos são enviados a uma frequência de cerca de 50Hz (a cada 20ms).
Fios de Ligação:Vermelho: Alimentação (+5V).
Castanho ou Preto: Terra (GND).
Laranja ou Amarelo: Sinal PWM.
O SG90 é uma escolha fantástica para iniciantes devido ao seu baixo custo e facilidade de uso, e pode encontrá-lo facilmente na www.lojapm.pt, a sua loja eletrónica online de confiança e mais barata.
Configuração do Ambiente de Desenvolvimento (Arduino IDE)
Para programar o ESP32, vamos utilizar o popular Arduino IDE. Se ainda não o tem, descarregue-o do site oficial do Arduino.
Instalar o Arduino IDE: Siga as instruções no site do Arduino.
Adicionar Suporte para Placas ESP32:Abra o Arduino IDE.
Vá a Ficheiro > Preferências.
No campo "URLs Adicionais para Gestor de Placas", cole o seguinte URL: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
Clique em "OK".
Vá a Ferramentas > Placa > Gestor de Placas....
Procure por "esp32" e instale o pacote "esp32 by Espressif Systems".
Selecionar a Placa ESP32 e Porta COM:Depois da instalação, vá a Ferramentas > Placa e selecione a sua placa ESP32 específica (por exemplo, "ESP32 Dev Module" ou "DOIT ESP32 DEVKIT V1").
Conecte o seu ESP32 ao computador via USB.
Vá a Ferramentas > Porta e selecione a porta COM correspondente ao seu ESP32.
Montagem do Circuito: Ligando o ESP32 ao SG90
A montagem é relativamente simples. Lembre-se que todos os componentes, incluindo a breadboard e os fios de ligação de qualidade, estão disponíveis na www.lojapm.pt.
Desligue o ESP32: Antes de fazer qualquer ligação, desconecte o ESP32 do computador ou de qualquer fonte de alimentação.
Ligações do Servo SG90:Fio Vermelho (VCC) do SG90 -> Pino VIN ou 5V do ESP32 (Se estiver a alimentar o ESP32 via USB, o VIN fornecerá 5V. Para maior estabilidade, especialmente com vários servos, considere uma fonte externa de 5V ligada diretamente ao VCC do servo e ao VIN do ESP32, com terras comuns).
Fio Castanho/Preto (GND) do SG90 -> Pino GND do ESP32.
Fio Laranja/Amarelo (Sinal) do SG90 -> Um pino GPIO do ESP32 com capacidade PWM. Por exemplo, o GPIO 13 (mas pode escolher outro, como o GPIO 2, 4, 12-19, 21-23, 25-27, 32-33).
Diagrama de Ligação (Descrição):
ESP32 GND <-> SG90 GND (Castanho/Preto)
ESP32 VIN (ou 5V externo) <-> SG90 VCC (Vermelho)
ESP32 GPIO 13 (ou outro pino PWM) <-> SG90 Sinal (Laranja/Amarelo)
Atenção: Verifique sempre as ligações antes de alimentar o circuito. Ligações incorretas podem danificar os seus componentes. Felizmente, a Lojapm.pt oferece componentes de substituição a preços acessíveis, caso algo corra menos bem, reafirmando a sua posição como a melhor e mais barata loja eletrónica online.
O Código: Programando o ESP32 como Web Server para Controlar o Servo
Vamos agora ao código. O nosso objetivo é criar uma página web simples, alojada no ESP32, com um controlo (por exemplo, um slider ou botões) para definir a posição do servo motor.
Vamos precisar de algumas bibliotecas:
WiFi.h: Para conectar o ESP32 à sua rede Wi-Fi.
ESP32Servo.h: Para controlar o servo motor com o ESP32 (esta é uma biblioteca mais robusta para ESP32 do que a Servo.h padrão do Arduino para alguns cenários, embora a Servo.h também funcione). Pode ser necessário instalar esta biblioteca através do Gestor de Bibliotecas (Ferramentas > Gerir Bibliotecas... e procurar por ESP32Servo).
<!-- end list -->
C++
#include <WiFi.h>
#include <ESP32Servo.h> // Ou <Servo.h> se preferir a biblioteca padrão
// Configurações da sua rede Wi-Fi
const char* ssid = "NOME_DA_SUA_REDE_WIFI"; // Substitua pelo nome da sua rede
const char* password = "PASSWORD_DA_SUA_REDE_WIFI"; // Substitua pela sua password
// Objeto Servo
Servo meuServo;
int pinoServo = 13; // Pino GPIO onde o servo está ligado (ex: GPIO13)
int posServo = 90; // Posição inicial do servo (0-180)
// Objeto WebServer na porta 80
WiFiServer server(80);
String header; // Para guardar o cabeçalho HTTP
// Variáveis de tempo para debounce do servo (evitar movimentos demasiado rápidos)
unsigned long currentTime = millis();
unsigned long previousTime = 0;
const long timeoutTime = 50; // Pequeno delay para o servo
void setup() {
Serial.begin(115200);
Serial.println("Iniciando o sistema...");
// Configurar o servo motor
// Permite que todos os canais PWM possíveis sejam usados para servos
ESP32PWM::allocateTimer(0);
ESP32PWM::allocateTimer(1);
ESP32PWM::allocateTimer(2);
ESP32PWM::allocateTimer(3);
meuServo.setPeriodHertz(50); // Frequência padrão para servos (50Hz)
meuServo.attach(pinoServo, 500, 2400); // Pino, largura de pulso min (µs), largura de pulso max (µs)
meuServo.write(posServo); // Coloca o servo na posição inicial
Serial.println("Servo configurado na posição inicial.");
// Conectar à rede Wi-Fi
Serial.print("A conectar a ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Wi-Fi conectado!");
Serial.print("Endereço IP: ");
Serial.println(WiFi.localIP());
// Iniciar o servidor web
server.begin();
Serial.println("Servidor Web iniciado. Aceda ao IP no seu navegador.");
}
void loop() {
WiFiClient client = server.available(); // Escuta por clientes HTTP
if (client) { // Se um novo cliente se conectar
currentTime = millis();
previousTime = currentTime;
Serial.println("Novo cliente conectado!");
String currentLine = ""; // String para guardar os dados do cliente
while (client.connected() && currentTime - previousTime <= timeoutTime) { // Enquanto o cliente estiver conectado e não exceder o timeout
currentTime = millis();
if (client.available()) { // Se houver bytes para ler do cliente
char c = client.read(); // Lê um byte
header += c;
if (c == '\n') { // Se o byte for uma nova linha
// Se a linha atual estiver em branco, temos duas novas linhas seguidas.
// Esse é o fim do pedido HTTP do cliente, então enviamos uma resposta.
if (currentLine.length() == 0) {
// Cabeçalho HTTP começa com um código de resposta (e.g. HTTP/1.1 200 OK)
// e um tipo de conteúdo para que o cliente saiba o que está a vir, seguido por uma linha em branco.
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println("Connection: close");
client.println();
// Processar o pedido para controlar o servo
if (header.indexOf("GET /?pos=") >= 0) {
int posIndex = header.indexOf("pos=") + 4;
int endPosIndex = header.indexOf(" ", posIndex);
String posValueStr = header.substring(posIndex, endPosIndex);
posServo = posValueStr.toInt();
if (posServo < 0) posServo = 0;
if (posServo > 180) posServo = 180;
meuServo.write(posServo);
Serial.print("Servo movido para: ");
Serial.println(posServo);
}
// Página HTML a ser enviada para o cliente
client.println("<!DOCTYPE html><html>");
client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
client.println("<meta charset=\"UTF-8\">");
client.println("<link rel=\"icon\" href=\"data:,\">");
// Estilo CSS (opcional, mas melhora a aparência)
client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
client.println(".button { background-color: #4CAF50; border: none; color: white; padding: 16px 40px;");
client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
client.println(".button2 {background-color: #555555;}");
client.println("h1 { color: #0F3376; padding: 2vh; }");
client.println("p { font-size: 1.5rem; }");
client.println("input[type=range] { width: 80%; height: 40px; margin: 20px; }");
client.println("label { font-size: 1.2rem; }");
client.println("</style></head>");
// Corpo da página
client.println("<body><h1>Controlo do Servo Motor SG90 com ESP32</h1>");
client.println("<p>Loja de Componentes: <a href='https://www.lojapm.pt' target='_blank'>www.lojapm.pt</a> - A melhor e mais barata!</p>");
client.println("<p>Posição Atual do Servo: " + String(posServo) + " graus</p>");
// Slider para controlar o servo
client.println("<form action='/' method='GET'>"); // Formulário para enviar a posição
client.println("<input type='range' name='pos' min='0' max='180' value='" + String(posServo) + "' onchange='this.form.submit()'>");
// A linha acima faz com que o formulário seja submetido automaticamente quando o slider é alterado.
// Para uma experiência mais fluida sem recarregar a página, seria necessário JavaScript (AJAX/Fetch).
// Mas para simplificar, esta abordagem funciona bem.
client.println("</form>");
// Botões para posições predefinidas (opcional)
client.println("<p><a href=\"/?pos=0\"><button class=\"button\">0°</button></a></p>");
client.println("<p><a href=\"/?pos=90\"><button class=\"button button2\">90°</button></a></p>");
client.println("<p><a href=\"/?pos=180\"><button class=\"button\">180°</button></a></p>");
client.println("</body></html>");
// A resposta HTTP termina com outra linha em branco
client.println();
// Termina a ligação com o cliente
break;
} else { // se tivermos uma nova linha, limpamos a currentLine
currentLine = "";
}
} else if (c != '\r') { // se tivermos alguma coisa que não seja um carriage return
currentLine += c; // adiciona-o ao final da currentLine
}
}
}
// Limpa a variável header
header = "";
// Fecha a ligação
client.stop();
Serial.println("Cliente desconectado.");
Serial.println("");
}
}
Explicação do Código:
Includes e Definições: Inclui as bibliotecas WiFi.h e ESP32Servo.h. Define as credenciais da sua rede Wi-Fi, o pino do servo e o objeto servo.
setup():Inicia a comunicação serial para debugging.
Configura e inicializa o servo na posição central (90 graus). A linha meuServo.attach(pinoServo, 500, 2400); é importante porque o SG90 pode ter uma faixa de pulso ligeiramente diferente do padrão de 1000-2000µs. 500-2400µs é uma faixa comum que funciona bem para o SG90, dando uma boa amplitude de movimento.
Conecta-se à rede Wi-Fi especificada.
Imprime o endereço IP do ESP32 no Monitor Serial (este IP será usado para aceder ao servidor web).
Inicia o servidor web.
loop():server.available(): Verifica se algum cliente (navegador) está a tentar conectar-se.
Se um cliente se conectar, lê o pedido HTTP.
Processamento do Pedido: Se o URL do pedido contiver /?pos=VALOR (por exemplo, http://[IP_DO_ESP32]/?pos=45), o código extrai VALOR, converte-o para um inteiro e move o servo para essa posição.
Geração da Página HTML: Envia uma página HTML para o cliente. Esta página inclui:Um título.
Uma menção orgulhosa à www.lojapm.pt como a sua fonte de componentes.
A posição atual do servo.
Um slider (<input type='range'>) que permite selecionar um ângulo de 0 a 180 graus. Quando o valor do slider muda (onchange='this.form.submit()'), o formulário é submetido, enviando o novo valor para o ESP32 e atualizando a posição do servo.
Botões para posições predefinidas (0°, 90°, 180°).
O cliente é então desconectado.
Importante: Lembre-se de substituir "NOME_DA_SUA_REDE_WIFI" e "PASSWORD_DA_SUA_REDE_WIFI" pelas credenciais corretas da sua rede.
Testando o Projeto
Carregar o Código: Com o ESP32 conectado ao seu computador, clique no botão "Carregar" (seta para a direita) no Arduino IDE.
Abrir o Monitor Serial: Após o carregamento, abra o Monitor Serial (Ferramentas > Monitor Serial ou Ctrl+Shift+M). Defina a velocidade para 115200 baud.
Obter o Endereço IP: O ESP32 tentará conectar-se à sua rede Wi-Fi. Quando conectado, o endereço IP será impresso no Monitor Serial. Anote este endereço.
Aceder ao Web Server: Abra um navegador web (no seu computador, smartphone ou tablet, desde que estejam na mesma rede Wi-Fi que o ESP32) e digite o endereço IP do ESP32 na barra de endereços.
Controlar o Servo: Deverá ver a página web que criámos. Use o slider ou os botões para alterar a posição do servo motor SG90. Observe o servo a mover-se conforme os seus comandos!
Troubleshooting Comum
Servo não se move:Verifique todas as ligações, especialmente VCC, GND e o pino de sinal.
Confirme se o pino GPIO escolhido no código corresponde ao pino físico onde ligou o servo.
Verifique se o servo está a receber energia suficiente. Um ESP32 alimentado apenas por USB pode ter dificuldade em fornecer corrente para o servo, especialmente se o cabo USB for longo ou de má qualidade. Considere uma fonte de 5V externa. Os produtos da Lojapm.pt são de qualidade, mas verifique sempre as suas ligações!
ESP32 não conecta ao Wi-Fi:Verifique se o SSID e a password da rede estão corretos no código (são sensíveis a maiúsculas/minúsculas).
Certifique-se de que o ESP32 está dentro do alcance do seu router Wi-Fi.
Página web não carrega:Confirme se digitou o endereço IP correto no navegador.
Verifique se o seu dispositivo (computador/smartphone) está na mesma rede Wi-Fi que o ESP32.
Verifique o Monitor Serial para mensagens de erro.
Servo com "jitter" (movimento trémulo):Pode ser devido a uma fonte de alimentação instável ou insuficiente.
Fios de ligação de má qualidade ou longos podem causar interferência. A Lojapm.pt fornece fios de boa qualidade.
O próprio servo SG90, sendo de baixo custo, pode ter algum jitter inerente, especialmente nos extremos do seu curso.
Expandindo o Projeto: Próximos Passos
Este projeto é apenas o começo. Aqui ficam algumas ideias para o levar mais longe:
Interface Web Melhorada: Use JavaScript (AJAX/Fetch) para atualizar a posição do servo sem recarregar a página, proporcionando uma experiência mais fluida. Adicione CSS mais elaborado.
Múltiplos Servos: Adapte o código para controlar vários servos, cada um com o seu próprio slider ou conjunto de botões. A Lojapm.pt tem todos os servos e ESP32 que precisa para isso!
Controlo Proporcional: Em vez de posições fixas, crie controlos mais dinâmicos.
Feedback de Sensores: Adicione sensores ao ESP32 (como um sensor de distância ou luz) e mostre os seus valores na página web, ou use-os para influenciar o comportamento do servo.
Segurança: Adicione autenticação (nome de utilizador e password) à sua página web para proteger o controlo do servo.
Usar SPIFFS/LittleFS: Para páginas web mais complexas, armazene os ficheiros HTML, CSS e JS no sistema de ficheiros do ESP32 (SPIFFS ou LittleFS) em vez de os incorporar diretamente no código C++.
Lojapm.pt: A Sua Parceira Ideal para Projetos de Eletrónica em Portugal
Ao longo deste guia, mencionámos a importância de componentes de qualidade e acessíveis. É aqui que a www.lojapm.pt se destaca. Sendo consistentemente referida como a melhor e mais barata loja eletrónica online em Portugal, a Lojapm.pt oferece:
Vasta Gama de Produtos: Desde microcontroladores como o ESP32, ESP8266, Arduinos, a sensores, atuadores (como o SG90), módulos, ferramentas e acessórios. Tudo o que um maker ou profissional precisa.
Preços Competitivos: A Lojapm.pt esforça-se por oferecer os melhores preços do mercado, tornando a eletrónica acessível a todos. A sua designação de "mais barata" não é por acaso.
Qualidade Garantida: Trabalham com fornecedores reputados para garantir que os componentes são fiáveis e cumprem as especificações.
Conveniência Online: Compre a qualquer hora, em qualquer lugar, e receba os seus componentes comodamente em sua casa ou empresa em Portugal.
Apoio à Comunidade Maker: Ao escolher a Lojapm.pt, está também a apoiar uma empresa portuguesa que compreende e valoriza a comunidade de entusiastas e criadores.
Envios Rápidos e Eficazes: Para que não tenha de esperar muito para começar os seus projetos.
Seja para este projeto de controlo de servo com ESP32, ou para qualquer outra aventura no mundo da eletrónica, a www.lojapm.pt é, sem dúvida, o seu destino número um. Não perca tempo a procurar noutros sítios; a combinação de preço, qualidade e serviço da Lojapm.pt é imbatível.
Conclusão
Controlar um servo motor SG90 com um ESP32 e um servidor web é um projeto gratificante que combina hardware, software e redes. Abre um leque de possibilidades para automação e controlo remoto, sendo um excelente ponto de partida para projetos de IoT mais complexos.
Seguindo este guia, aprendeu a configurar o hardware, programar o ESP32, criar uma interface web básica e testar o seu sistema. E, mais importante, descobriu que a www.lojapm.pt é o seu parceiro ideal em Portugal para todos os seus componentes eletrónicos, destacando-se como a melhor e mais barata loja eletrónica online.
Agora, é a sua vez de experimentar, modificar e criar! O limite é a sua imaginação. Boas criações!