Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Voiture robotique pilotée par Node.js en temps réel : projet IoT sans fil

Composants et fournitures

Arduino UNO ×1
Double pont en H L298 (SparkFun) ×1
Module Bluetooth HC-05 ×1
Fils de câblage (jumper wires) ×1
Batterie 9 V ×2
Moteur DC 12 V ×2

À propos du projet

Idée du projet

Node.js est idéal pour les applications temps réel. Ayant déjà travaillé sur des apps temps réel avec WebSockets, j'ai voulu appliquer le même concept à l'IoT avec un serveur Node.js pour m'auto-former.

Ce rover communique avec mon serveur Node.js via Bluetooth, et l'interface web envoie les commandes au serveur via WebSockets.

Objectif

Étudier et implémenter la communication sans fil entre serveur Node et matériel (le rover), et contrôler le rover à distance via une page web mobile servie par le serveur Node utilisant WebSockets.

Prérequis

Connaissances de base en Node.js, programmation WebSockets, et fonctionnement du pilote moteur L298.

Matériel requis

Étape 1 : Construction du rover

Voiture robotique pilotée par Node.js en temps réel : projet IoT sans fil

La construction n'est pas compliquée : achetez un « kit châssis 2 roues » disponible en ligne avec tous les éléments d'assemblage.

L'Arduino Uno et le L298 sont montés sur le rover, chacun alimenté par une batterie 9 V séparée. L'Arduino alimente le module HC-05 qui communique avec le serveur.

Schéma de câblage

Voiture robotique pilotée par Node.js en temps réel : projet IoT sans fil

Le L298 est alimenté par une batterie 9 V. Ses deux sorties de contrôle moteur sont connectées au Moteur A et B (polarité indifférente, mais vérifier que les deux tournent dans le même sens). Ne pas retirer le cavalier du régulateur 5V.

Attention : Si vous alimentez le L298 avec plus de 12 V, le régulateur 5 V intégré sera détruit.

L'Arduino Uno est aussi alimenté par une batterie 9 V (borne + sur broche Vin, - sur masse commune). L'Arduino alimente le module Bluetooth : Vcc du HC-05 sur 5V de l'Arduino, GND sur masse.

Pour la communication série HC-05 ↔ Arduino : TXD du HC-05 sur RX de l'Arduino, RXD du HC-05 sur TX de l'Arduino.

Pour contrôler le L298 : connecter EN1 et EN2 sur des broches PWM de l'Arduino. Connecter les entrées 1, 2, 3, 4 du L298 sur des broches numériques de l'Arduino.

Transmission des données

Voiture robotique pilotée par Node.js en temps réel : projet IoT sans fil
  1. L'utilisateur accède à la page web servie par le serveur Node (ex: 192.XXX.XXX.129:8080)
  2. Un clic sur un bouton déclenche une fonction côté serveur via WebSockets
  3. Le serveur Node (connecté au HC-05 en Bluetooth) envoie la donnée au module
  4. Le HC-05 transmet à l'Arduino UNO par liaison série
  5. L'Arduino pilote le module L298

Étape 2 : Configuration du serveur

Installer Node.js (version stable, la mienne : 11.15). Installer les packages :

Note : l'installation de « node-gyp » peut être délicate car incompatible avec certaines versions récentes de Node. Mieux vaut utiliser Node 11.15.

Créer un serveur et une page web avec « express » et « EJS ». Concevoir la page avec les contrôles souhaités et configurer les connexions WebSocket via un serveur socket (voir documentation). Pour le Bluetooth, voir la documentation du package « node-bluetooth ». À chaque clic sur un bouton de contrôle, un message est envoyé au module HC-05.

Voici ma page web simple :

Voiture robotique pilotée par Node.js en temps réel : projet IoT sans fil

Étape 3 : Code Arduino

Le Bluetooth communique avec l'Arduino par liaison série. On envoie une chaîne de commande terminée par une lettre de fin (ex: « T »). Exemple : pour avancer, le Bluetooth envoie « forwardT » ; côté Arduino, on capture la chaîne jusqu'au « T ».

Selon la commande reçue, on configure le L298 pour avancer, reculer, tourner, ajuster la vitesse, etc. Code Arduino ci-joint.

Étape 4 : Résultat final

Améliorations et perspectives

Prochaine version

Voir mon prochain projet : « Rover à contrôle vocal par mobile »

Code

Code Arduino du rover Node

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 = "";
    }
  }
}

Schémas

Voiture robotique pilotée par Node.js en temps réel : projet IoT sans fil

Voiture robotique pilotée par Node.js en temps réel : projet IoT sans fil

Processus de fabrication

  1. Construire un véhicule robotique sans fil piloté par capteur IR
  2. Solutions de serveur web efficaces pour microcontrôleurs à ressources contraintes
  3. Déployer un serveur web TLS sur un ESP8266 à 3 $ en moins de 30 minutes
  4. Surveillance température et humidité en temps réel via Web sur Raspberry Pi 4
  5. Ventilateur à contrôle de température : système relais DIY pour refroidissement meuble multimédia
  6. D'une lampe solaire à 4 $ à un nœud capteur sans fil intelligent : MSP430 + nRF24L01+ pour surveillance jardin
  7. Transformez votre Raspberry Pi 4 en serveur web et créez votre propre site
  8. Transformez votre voiture RC en véhicule piloté par Bluetooth
  9. Transformez une vieille voiture RC en véhicule piloté au joystick avec Arduino