Skip to main content

Programmation de la voiture

Préparer Arduino IDE

  • Installez les cartes ESP32 depuis le gestionnaire de cartes.
  • Installez la bibliothèque ESP32Servo.
  • BluetoothSerial est déjà incluse avec les cartes ESP32.

Comprendre le programme

Le smartphone envoie une lettre par Bluetooth. La carte lit cette lettre et agit :

Lettre Action
F Avancer
B Reculer
S Stop
L Tourner à gauche
R Tourner à droite
C Roues droites

Attention : chaque voiture doit avoir un nom Bluetooth différent. Avant de téléverser, changez NOM_VOITURE (VOITURE-01, VOITURE-02…).

Code

// =====================================================
//   VOITURE RADIOCOMMANDÉE - ATELIER NORIA
// =====================================================
//
//  Comment ça marche ?
//  1. Le téléphone envoie UNE LETTRE par Bluetooth.
//  2. La carte ESP32 lit cette lettre.
//  3. Selon la lettre, elle fait tourner le moteur
//     ou tourner les roues avec le servomoteur.
//
//  Les lettres :
//    F = avancer        B = reculer        S = stop
//    L = gauche         R = droite         C = roues droites
//
// =====================================================

#include "BluetoothSerial.h"   // Outils pour le Bluetooth
#include <ESP32Servo.h>        // Outils pour le servomoteur


// ----- 1. LE NOM DE LA VOITURE -----
// Chaque groupe met un numéro différent,
// sinon les téléphones ne savent pas quelle voiture choisir !
const char* NOM_VOITURE = "VOITURE-01";


// ----- 2. LE CÂBLAGE : sur quelle broche est branché chaque fil ? -----
const int MOTEUR_A = 17;   // Broche D10 -> borne A-IA du pont en H
const int MOTEUR_B = 16;   // Broche D11 -> borne A-IB du pont en H
const int SERVO    = 13;   // Broche D7  -> fil ORANGE du servomoteur


// ----- 3. LES ANGLES DU SERVOMOTEUR (en degrés) -----
// Si les roues ne sont pas droites, changez ANGLE_CENTRE.
const int ANGLE_CENTRE = 90;    // roues droites
const int ANGLE_GAUCHE = 55;    // roues tournées à gauche
const int ANGLE_DROITE = 125;   // roues tournées à droite


BluetoothSerial bluetooth;   // la liaison Bluetooth
Servo direction;             // le servomoteur qui tourne les roues


// ----- 4. LES ACTIONS DU MOTEUR -----
// Le pont en H fait tourner le moteur dans un sens ou dans l'autre
// selon quelle broche est allumée (HIGH) ou éteinte (LOW).

void avancer() {
  digitalWrite(MOTEUR_A, HIGH);
  digitalWrite(MOTEUR_B, LOW);
}

void reculer() {
  digitalWrite(MOTEUR_A, LOW);
  digitalWrite(MOTEUR_B, HIGH);
}

void arreter() {
  digitalWrite(MOTEUR_A, LOW);   // les deux éteintes = le moteur s'arrête
  digitalWrite(MOTEUR_B, LOW);
}


// ----- 5. DÉMARRAGE : s'exécute UNE SEULE FOIS à l'allumage -----
void setup() {
  // Les broches du moteur ENVOIENT du courant : ce sont des sorties.
  pinMode(MOTEUR_A, OUTPUT);
  pinMode(MOTEUR_B, OUTPUT);
  arreter();                       // sécurité : la voiture ne démarre pas toute seule

  direction.attach(SERVO);         // on relie le servomoteur à sa broche
  direction.write(ANGLE_CENTRE);   // roues droites au départ

  bluetooth.begin(NOM_VOITURE);    // la voiture apparaît dans le Bluetooth du téléphone
}


// ----- 6. BOUCLE : se répète EN PERMANENCE -----
void loop() {

  // Est-ce qu'une lettre est arrivée du téléphone ?
  if (bluetooth.available()) {

    char lettre = bluetooth.read();   // on lit la lettre
    lettre = toupper(lettre);         // on la met en majuscule (f devient F)

    // On regarde quelle lettre c'est, et on agit :
    if (lettre == 'F') { avancer(); }
    if (lettre == 'B') { reculer(); }
    if (lettre == 'S') { arreter(); }

    if (lettre == 'L') { direction.write(ANGLE_GAUCHE); }
    if (lettre == 'R') { direction.write(ANGLE_DROITE); }
    if (lettre == 'C') { direction.write(ANGLE_CENTRE); }
  }
}