Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Carrinho Robótico Controlado por Node.js via Bluetooth: IoT em Tempo Real

Componentes e Materiais

Arduino UNO × 1
Driver de Motor Dual H-Bridge L298 (SparkFun) × 1
Módulo Bluetooth HC-05 × 1
Jumpers (genéricos) × 1
Bateria 9V × 2
Motor DC 12V × 2

Sobre o Projeto

Ideia do Projeto

Node.js é uma das melhores opções para aplicações em tempo real. Já trabalhei com apps real-time usando Sockets e, com o mesmo conceito, decidi criar projetos IoT com servidor Node.js para autoaprendizado.

Este Rover se comunica com meu servidor Node.js via Bluetooth; no front-end, envio comandos ao servidor usando Sockets.

Objetivo

Estudar e implementar comunicação sem fio entre servidor Node e hardware (o Rover), e controlar o Rover remotamente via página web móvel servida pelo Node usando Sockets.

Pré-requisitos

Conhecimento básico de Node, programação com sockets e funcionamento do Driver de Motor L298.

Lista de Materiais

Passo 1: Construindo o Rover

Carrinho Robótico Controlado por Node.js via Bluetooth: IoT em Tempo Real

A montagem não é complicada: compre um "kit chassi 2 rodas" facilmente encontrado online, que já vem com tudo. Arduino Uno e Driver L298 ficam no topo do Rover, cada um alimentado por uma bateria 9V separada. O Arduino alimenta o módulo HC-05 que comunica com o servidor.

Diagrama de Circuito

Carrinho Robótico Controlado por Node.js via Bluetooth: IoT em Tempo Real

O driver L298 é alimentado por bateria 9V; suas saídas de controle de motor conectam aos Motores A e B (polaridade não importa, mas ambos devem girar no mesmo sentido). Não remova o jumper do regulador 5V.

ATENÇÃO: Se alimentar o L298 com mais de 12V, o regulador 5V onboard será danificado.

O Arduino Uno também é alimentado por bateria 9V (positivo no pino Vin, negativo no GND comum). O Arduino por sua vez alimenta o Bluetooth: Vcc do HC-05 no 5V do Arduino, GND no GND.

Para comunicação serial: TXD do HC-05 → RX do Arduino; RXD do HC-05 → TX do Arduino.

Para controlar o L298: conecte EN1 e EN2 a pinos PWM do Arduino; pinos Input 1,2,3,4 a pinos digitais quaisquer.

Transmissão de Dados

Carrinho Robótico Controlado por Node.js via Bluetooth: IoT em Tempo Real
  1. Usuário acessa a página web servida pelo Node (ex.: 192.XXX.XXX.129:8080)
  2. Clique em botão na página → dispara função no servidor via Sockets
  3. Servidor Node (conectado ao HC-05 via Bluetooth) envia dados ao HC-05
  4. HC-05 transmite ao Arduino UNO via serial
  5. Arduino controla o módulo L298

Passo 2: Configurando o Servidor

Instale Node.js (versão estável; usei 11.15). Pacotes necessários:

Nota: Instalação do node-gyp pode ser complicada (não suporta algumas versões novas do Node). Recomendo Node 11.15.

Crie servidor e página web com express e EJS. Desenhe a página com os controles desejados e configure conexões Socket. Para Bluetooth, consulte a documentação do node-bluetooth. A cada clique em botão de controle, uma mensagem é enviada ao HC-05.

Carrinho Robótico Controlado por Node.js via Bluetooth: IoT em Tempo Real

Passo 3: Código do Arduino

O Bluetooth comunica com Arduino via Serial. Enviamos uma string como comando + letra terminadora (T). Ex.: para frente → "forwardT". No Arduino, ao receber T, sabemos que a transmissão terminou.

Com o comando recebido, configuramos o L298 para frente, trás, esquerda, direita, alterar velocidade, etc. Código completo anexo.

Passo 4: Resultado Final

O Rover responde aos comandos da interface web em tempo real via Bluetooth.

Melhorias e Futuro

Próxima Versão

Confira meu próximo projeto: "Rover Controlado por Voz via Mobile"

Código

Código Arduino do Node Rover Arduino
const int en1 = 9; const int en2 = 3;
const int inp1 = 2; const int inp2 = 4;
const int inp3 = 7; const int inp4 = 8;
char charRead;
String inputString = "";

void setup() {
  Serial.begin(9600);
  pinMode(en1, OUTPUT); pinMode(en2, OUTPUT);
  pinMode(inp1, OUTPUT); pinMode(inp2, OUTPUT);
  pinMode(inp3, OUTPUT); pinMode(inp4, OUTPUT);
}

void loop() {
  if (Serial.available()) {
    charRead = Serial.read();
    if (charRead != 'T') {
      inputString += charRead;
    } else {
      if (inputString == "forward") {
        digitalWrite(inp1, HIGH); digitalWrite(inp2, LOW);
        digitalWrite(inp3, HIGH); digitalWrite(inp4, LOW);
      } else if (inputString == "backward") {
        digitalWrite(inp1, LOW); digitalWrite(inp2, HIGH);
        digitalWrite(inp3, LOW); digitalWrite(inp4, HIGH);
      } else if (inputString == "fleft") {
        digitalWrite(inp1, HIGH); digitalWrite(inp2, LOW);
        digitalWrite(inp3, LOW); digitalWrite(inp4, LOW);
      } else if (inputString == "fright") {
        digitalWrite(inp1, LOW); digitalWrite(inp2, LOW);
        digitalWrite(inp3, HIGH); digitalWrite(inp4, LOW);
      } else if (inputString == "bleft") {
        digitalWrite(inp1, LOW); digitalWrite(inp2, LOW);
        digitalWrite(inp3, LOW); digitalWrite(inp4, HIGH);
      } else if (inputString == "bright") {
        digitalWrite(inp1, LOW); digitalWrite(inp2, HIGH);
        digitalWrite(inp3, LOW); digitalWrite(inp4, LOW);
      } else if (inputString == "break") {
        analogWrite(en1, 50); analogWrite(en2, 50);
        delay(550);
        digitalWrite(inp1, LOW); digitalWrite(inp2, LOW);
        digitalWrite(inp3, LOW); digitalWrite(inp4, LOW);
        analogWrite(en1, 150); analogWrite(en2, 150);
      } else if (inputString == "maxspeed") {
        analogWrite(en1, 250); analogWrite(en2, 250);
      } else if (inputString == "medspeed") {
        analogWrite(en1, 180); analogWrite(en2, 180);
      } else if (inputString == "lowspeed") {
        analogWrite(en1, 90); analogWrite(en2, 90);
      } else {
        digitalWrite(inp1, LOW); digitalWrite(inp2, LOW);
        digitalWrite(inp3, LOW); digitalWrite(inp4, LOW);
      }
      inputString = "";
    }
  }
}

Esquemáticos

Carrinho Robótico Controlado por Node.js via Bluetooth: IoT em Tempo Real Carrinho Robótico Controlado por Node.js via Bluetooth: IoT em Tempo Real

Processo de manufatura

  1. Construa um Veículo Robótico sem Fio Controlado por Sensor IR
  2. Soluções Eficientes de Servidor Web para Microcontroladores com Recursos Restritos
  3. Implante um Servidor Web com TLS em um ESP8266 de $3 em Menos de 30 Minutos
  4. Monitoramento em Tempo Real de Temperatura e Umidade via Web no Raspberry Pi 4
  5. Ventilador Controlado por Temperatura: Sistema DIY com Relé para Resfriamento de Móveis de Mídia
  6. De Luz Solar de $4 a Nó de Sensor Sem Fio Inteligente: MSP430 + nRF24L01+ para Monitoramento de Jardim
  7. Transforme seu Raspberry Pi 4 em um Servidor Web e Crie Seu Próprio Site
  8. Transforme Seu Carro RC em um Veículo Controlado por Bluetooth
  9. Transforme um Carro RC Antigo em Veículo Controlado por Joystick com Arduino
  10. Carro RC Wi-Fi com Carregamento Qi: Construa um Kit de Carro Controle Remoto Sem Fio