Tutoriale ESP32 17/55 - Controllo del Servo Motore utilizzando ESP32 e Potenziometro - Kit di apprendimento IoT ESP32

Tutoriale ESP32 17/55 - Controllo del Servo Motore utilizzando ESP32 e Potenziometro - Kit di apprendimento IoT ESP32

In questo tutorial, impareremo a controllare un servomotore utilizzando un microcontrollore ESP32 e un potenziometro del kit di apprendimento IoT ESP32 di SunFounder. Alla fine di questo progetto, sarai in grado di regolare l'angolo del servomotore in modo fluido utilizzando il potenziometro, consentendo un controllo preciso. Questo è un ottimo modo per esplorare le capacità dell'ESP32 e come si interfaccia con i motori.

Man mano che approfondiamo i dettagli, tratteremo i componenti hardware necessari, le istruzioni di cablaggio e i codici di esempio per far funzionare tutto. Per una rappresentazione più visiva, assicurati di controllare il video associato a questo tutorial (nel video a 0:30).

Hardware Spiegato

I componenti principali di questo progetto includono il microcontrollore ESP32, un servomotore (SG90) e un potenziometro. L'ESP32 è un potente microcontrollore che offre Wi-Fi e Bluetooth integrati, rendendolo adatto per progetti IoT. È in grado di controllare vari dispositivi, inclusi i motori, con alta precisione.

Il servomotore SG90 è un componente ampiamente utilizzato che può ruotare circa 270 gradi. Funziona con un segnale a modulazione di larghezza d'impulso (PWM), dove l'angolo di rotazione è determinato dalla larghezza dell'impulso inviato. Il potenziometro funge da resistore variabile, consentendo di regolare la tensione inviata all'ESP32, che a sua volta controlla la posizione del servomotore.

Dettagli della scheda dati

Produttore SG
Numero di parte SG90
Tensione di logica/ingresso uscita 3,3 V (ESP32)
Tensione di alimentazione 5 V
Corrente di uscita (per canale) 1.2 A
Corrente di picco (per canale) 2,5 A
Linee guida sulla frequenza PWM 50 Hz
Soglie logiche di ingresso 0,2 V (basso), 2,5 V (alto)
Caduta di tensione / RDS(on)/ saturazione 0,5 V
Limiti termici 85 °C max
Pacchetto Plastica
Note / varianti Disponibile in diverse tipologie di attrezzatura

  • Assicurati che il servo sia alimentato con una tensione adeguata (5V).
  • Collega il ground del servo al ground dell'ESP32 per un riferimento comune.
  • Utilizza segnali PWM appropriati per controllare la posizione del servo.
  • Essere consapevoli dei requisiti di corrente del servo; utilizzare un'alimentazione esterna se necessario.
  • Controlla le assegnazioni dei pin corrette durante il cablaggio per evitare misconfigurazioni.

Istruzioni di cablaggio

ESP32-17-Sevo_motor-wiring

Per collegare il servo motore e il potenziometro all'ESP32, inizia collegando il filo di massa del servo (solitamente nero o marrone) a uno dei pin di massa sull'ESP32. Successivamente, collega il filo di alimentazione (solitamente rosso) del servo al pin 5V sull'ESP32. Infine, collega il filo del segnale (solitamente arancione o bianco) dal servo al pin25sull'ESP32.

Per il potenziometro, collega un pin esterno al pin 3.3V sull'ESP32 e l'altro pin esterno a terra. Il pin centrale del potenziometro deve essere collegato al pin34sull'ESP32. Questa configurazione consente all'ESP32 di leggere l'uscita di tensione variabile dal potenziometro, che verrà utilizzata per controllare la posizione del servomotore.

Esempi di codice e guida passo passo

Il seguente frammento di codice inizializza il servo e imposta i parametri per controllarne il movimento:

#include 

Servo myServo;
const int servoPin = 25;
const int minPulseWidth = 500; // 0.5 ms
const int maxPulseWidth = 2500; // 2.5 ms

void setup() {
  myServo.attach(servoPin, minPulseWidth, maxPulseWidth);
  myServo.setPeriodHertz(50); // Standard 50Hz servo
}

In questo codice, includiamo ilESP32Servolibreria e crea un'istanza del servo con il nomemyServoDefiniamo il numero di pin per il servo e impostiamo le larghezze di impulso minima e massima che corrispondono ai limiti angolari del servo.

ESP32_servo_lib

Successivamente, diamo un'occhiata al ciclo che muove continuamente il servo avanti e indietro:

void loop() {
  for (int angle = 0; angle <= 180; angle++) {
    int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
    myServo.writeMicroseconds(pulseWidth);
    delay(15);
  }
  for (int angle = 180; angle >= 0; angle--) {
    int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
    myServo.writeMicroseconds(pulseWidth);
    delay(15);
  }
}

Questo ciclo cambia gradualmente l'angolo da 0 a 180 gradi e poi di nuovo, usando ilmapfunzione per convertire l'angolo nella corrispondente larghezza di impulso per il servo. Ogni cambiamento è seguito da un breve ritardo per consentire al servo di raggiungere la sua nuova posizione in modo fluido.

Dimostrazione / Cosa Aspettarsi

Una volta che tutto è collegato e il codice è caricato, dovresti vedere il servo motore muoversi dolcemente da 0 a 180 gradi e ritorno. Se regoli il potenziometro, il servo dovrebbe riflettere la nuova posizione in base alla tensione fornita dal potenziometro. Fai attenzione alla polarità inversa durante il cablaggio, poiché potrebbe danneggiare i tuoi componenti (nel video alle 3:45).

Timestamp video

  • 00:00 Inizio
  • 1:56 Cos'è un servomotore
  • 5:00 Pagina dei documenti
  • 6:33 Spiegazione del cablaggio per servo
  • 7:45 Selezionare la porta COMP per ESP32 in Arduino IDE
  • 9:27 Codice Arduino spiegato
  • 14:31 Dimostrazione del controllo servo utilizzando ESP32
  • 16:04 Alimentazione di un servo diversa da 5V
  • 18:47 Controllo del servo senza il ciclo
  • 20:15 Controllo del servo con potenziometro
  • 21:37 Spiegazione del codice Arduino per servo con potenziometro

Immagini

ESP32-17-Sevo_motor-schematic
ESP32-17-Sevo_motor-schematic
ESP32-17-Sevo_motor-wiring
ESP32-17-Sevo_motor-wiring
ESP32_servo_lib
ESP32_servo_lib
816-ESP32 Tutorial 17/55- Arduino code for controling servo motor
Lingua: C++
Copia!

File📁

Scheda tecnica (pdf)

Altri file