Piloter un treuil pour un bateau avec un ESP32

De Wiki de Mémoire Vive
Aller à la navigation Aller à la recherche

C'est le petit jeu du jour, il s'agit de simuler le mouvement d'un treuil pour border puis choquer les voiles d'un voilier radiocommandé. Avant d'implanter le treuil dans le bateau pour naviguer.

Avec la vidéo de démonstration, où on voit les 3 fils qui sortent de l'ESP32 pour alimenter le treuil : https://youtube.com/shorts/Byju1J4KVjE?si=6XNSDmRLjH-AZsWE

- un pour le +5V

- un pour la masse

- un pour le signal

Le code,

#include <ESP32Servo.h>
#define PIN_w5513 12  // Broche de sortie utilisée pour le servo
#define LED_PIN 2    // Définir le numéro de broche pour la LED

Servo w5513; // on crée un objet servo appelé w5513

void setup() {
  Serial.begin(115200);
  pinMode(LED_PIN, OUTPUT);          // Configurer la broche de la LED en mode sortie
  w5513.setPeriodHertz(50);           // Fréquence PWM pour le w5513
  w5513.attach(PIN_w5513);  // on attache la PIN du servo 
}

void loop() {
  // signal de départ = clignote 3 fois
  digitalWrite(LED_PIN, HIGH);  // Allumer la LED
  delay(200);
  digitalWrite(LED_PIN, LOW);  // eteindre la LED
  delay(200);
  digitalWrite(LED_PIN, HIGH);  // Allumer la LED
  delay(200);
  digitalWrite(LED_PIN, LOW);  // eteindre la LED
  delay(200);
  digitalWrite(LED_PIN, HIGH);  // Allumer la LED
  delay(200);
  digitalWrite(LED_PIN, LOW);  // eteindre la LED
  //remise à zéro
  w5513.write(0); // on déplace le servo à la position 0º
  delay(1000);  // pause de 1 seconde

// tour de 0 à 180º
  for (int i = 0; i <= 180; i++){
    w5513.write(i); // angle demandé au servo
    Serial.print("Angle:  ");
    Serial.println(i);
    Serial.print("Angle lu:  ");
    Serial.println(w5513.read()); // angle lu du servo
    digitalWrite(LED_PIN, HIGH);  // Allumer la LED
    delay(40);
    digitalWrite(LED_PIN, LOW);  // éteindre la LED
    delay(40);

  }
 // tour de 180 a 0º
  for (int i = 179; i > 0; i--){
    w5513.write(i);
    Serial.print("Angle:  ");
    Serial.println(i);
    Serial.print("Angle lu:  ");
    Serial.println(w5513.read());
    digitalWrite(LED_PIN, HIGH);  // Allumer la LED
    delay(40);
    digitalWrite(LED_PIN, LOW);  // eteindre la LED
    delay(40);
  }

}

Et un extrait de ce qui s'affiche sur la console,

<pre>
22:01:41.428 -> Angle:  0
22:01:41.428 -> Angle lu:  -1
22:01:41.504 -> Angle:  1
22:01:41.504 -> Angle lu:  0
22:01:41.659 -> Angle:  2
22:01:41.659 -> Angle lu:  0
22:01:41.699 -> Angle:  3
22:01:41.699 -> Angle lu:  2
22:01:41.782 -> Angle:  4
22:01:41.782 -> Angle lu:  2
22:01:41.861 -> Angle:  5
22:01:41.861 -> Angle lu:  4
22:01:41.930 -> Angle:  6
22:01:41.930 -> Angle lu:  4
22:01:42.011 -> Angle:  7
22:01:42.011 -> Angle lu:  6
22:01:42.096 -> Angle:  8
22:01:42.096 -> Angle lu:  7
22:01:42.176 -> Angle:  9
22:01:42.176 -> Angle lu:  7
22:01:42.244 -> Angle:  10
22:01:42.244 -> Angle lu:  9
22:01:42.315 -> Angle:  11
22:01:42.315 -> Angle lu:  9