Modification de la voiture « Lego » Fiat 500 de chez Clementoni – Partie 1

J’ai reçu une voiture de type « Lego » Fiat 500 de la marque Clementoni. Par défaut, ce jouet dispose d’un interrupteur permettant de commander les roues (marche avant/arrière) et de diriger manuellement les roues avant pour tourner à gauche ou à droite. Cependant, je souhaite rendre cette voiture télécommandable via mon téléphone ou mon ordinateur.

Objectif

Le but de ce projet est de transformer la Fiat 500 en une voiture télécommandée en utilisant un microcontrôleur ESP32 D1 Mini. L’ESP32 permettra de créer une interface web accessible depuis un téléphone ou un ordinateur pour contrôler la voiture. Ce projet implique un peu d’électroniques et de programmation.

Matériel Nécessaire

  1. ESP32 D1 Mini : Un microcontrôleur avec des capacités Wi-Fi intégrées.
  2. Pilote de moteur DRV8833 : Pour contrôler le moteur DC de la voiture.
  3. Moteur DC : Déjà présent dans la voiture pour la propulsion.
  4. Servo moteur : Pour contrôler la direction des roues avant, j’avais chez moi un servo M90G.
  5. Alimentation : Je vais utilisé l’alimentation d’origine de la voiture si possible.
  6. Fils de connexion et autres composants électroniques : Pour les connexions et l’assemblage.

Schéma de Branchement

  1. ESP32 D1 Mini
    • Alimentation en 5V et GND.
    • Contrôle des moteurs via les broches GPIO.
  2. Pilote de moteur DRV8833
    • VCC : Connecté à l’alimentation du moteur (5V).
    • GND : Connecté à la masse commune.
    • AIN1 et AIN2 : Connectés aux GPIO de l’ESP32 pour le contrôle du moteur.
    • AO1 et AO2 : Connectés au moteur DC.
  3. Servo moteur
    • Signal : Connecté à un GPIO de l’ESP32.
    • VCC : Connecté à une alimentation 5V.
    • GND : Connecté à la masse commune.

Programmation avec Arduino

  1. Configuration Wi-Fi :
    • Connexion de l’ESP32 au réseau Wi-Fi pour permettre l’accès à distance.
  2. Serveur Web :
    • Création d’un serveur web sur l’ESP32 pour servir une interface de commande.
  3. Contrôle des Moteurs :
    • Utilisation de signaux PWM pour contrôler le moteur DC et le servo moteur via le pilote DRV8833.

Exemple de Code Arduino

Voici un exemple de code Arduino pour initialiser le serveur web et contrôler la voiture :

#include <WiFi.h>
#include <WebServer.h>
#include <ESP32Servo.h>

// Pin definitions
const int motorPin1 = 13;
const int motorPin2 = 12;
const int servoPin = 14;

// WiFi credentials
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";

// Create a web server on port 80
WebServer server(80);

// Create a servo object
Servo myServo;

void setup() {
  // Initialize serial communication
  Serial.begin(115200);
  
  // Initialize motor pins
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);

  // Initialize servo
  myServo.attach(servoPin);

  // Connect to Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");

  // Define web server routes
  server.on("/", handleRoot);
  server.on("/forward", handleForward);
  server.on("/backward", handleBackward);
  server.on("/left", handleLeft);
  server.on("/right", handleRight);
  server.onNotFound(handleNotFound);

  // Start the web server
  server.begin();
  Serial.println("Web server started");
}

void loop() {
  // Handle client requests
  server.handleClient();
}

void handleRoot() {
  String html = "<html>\
                  <head>\
                    <title>Fiat 500 Control</title>\
                  </head>\
                  <body>\
                    <h1>Control your Fiat 500</h1>\
                    <button onclick=\"location.href='/forward'\">Forward</button>\
                    <button onclick=\"location.href='/backward'\">Backward</button>\
                    <button onclick=\"location.href='/left'\">Left</button>\
                    <button onclick=\"location.href='/right'\">Right</button>\
                  </body>\
                </html>";
  server.send(200, "text/html", html);
}

void handleForward() {
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  server.send(200, "text/plain", "Moving forward");
}

void handleBackward() {
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  server.send(200, "text/plain", "Moving backward");
}

void handleLeft() {
  myServo.write(0); // Adjust this value based on your servo's range
  server.send(200, "text/plain", "Turning left");
}

void handleRight() {
  myServo.write(180); // Adjust this value based on your servo's range
  server.send(200, "text/plain", "Turning right");
}

void handleNotFound() {
  server.send(404, "text/plain", "Not Found");
}

Conclusion

Ce projet permet de transformer ce jouet en une voiture télécommandée via une interface web accessible depuis un téléphone ou un ordinateur. En utilisant un ESP32 D1 Mini, un pilote de moteur DRV8833 et un servo moteur, vous pouvez contrôler facilement la direction et la vitesse de la voiture. Ce projet combine des compétences en électronique et en programmation, offrant une excellente opportunité d’apprentissage et de personnalisation des jouets.

N’hésitez pas à poser des questions ou à partager vos propres modifications et améliorations du projet dans les commentaires !