Come controllare un servomotore SG90 tramite Bluetooth con ESP32

Introduzione

Se stai cercando di controllare un servomotore SG90 tramite Bluetooth, l’ESP32 è una soluzione ideale. L’ESP32 è un microcontrollore molto potente che offre funzionalità Bluetooth integrate, che lo rendono perfetto per i progetti di controllo remoto. In questo articolo, ti guiderò passo-passo attraverso il processo di configurazione dell’ESP32 per controllare un servomotore SG90 tramite Bluetooth. Scoprirai come utilizzare l’applicazione Serial Bluetooth Terminal di Kai Morich per inviare comandi al tuo servomotore SG90, e vedrai come realizzare un progetto completo che ti consentirà di controllare il movimento del tuo servomotore da remoto. Con questa guida, sarai in grado di creare un sistema di controllo remoto personalizzato che ti permetterà di controllare i tuoi dispositivi da qualsiasi luogo.

Ma cos’è un servomotore?

Un servomotore è un tipo di motore elettrico che utilizza un segnale di controllo per posizionare un albero o un braccio in una posizione specifica e mantenere quella posizione stabile. È composto da un motore, un circuito di controllo e un dispositivo di feedback, come un potenziometro o un encoder, che misura la posizione dell’albero o del braccio e la invia al circuito di controllo. I servomotori sono comunemente utilizzati in applicazioni che richiedono un controllo preciso della posizione, come robotica, automazione industriale, aeromodellismo e controllo di dispositivi meccanici. Il servomotore SG90 che utilizzeremo qui ha 3 fili di collegamento: due per l’alimentazione a 5V e il terzo per il suo controllo. Essendo piccolo e poco potente è adatto per agire su carichi piccoli.

Di quali componenti abbiamo bisogno?

La lista dei componenti non è particolarmente lunga:

Realizzazione del progetto

Lo schema elettrico

Prima di realizzare il circuito vero e proprio diamo un’occhiata al pinout della board:

Pinout della ESP32
Pinout della ESP32

Mentre il servomotore si presenta così:

Il servomotore SG90 utilizzato in questo progetto
Il servomotore SG90 utilizzato in questo progetto

Da notare i colori inusuali utilizzati per i fili di collegamento. In particolare abbiamo:

  • il filo marrone andrà alla massa
  • il filo rosso andrà al pin 5V dell’ESP32
  • il filo arancio è quello di controllo e lo collegheremo al GPIO 19 dell’ESP32

Ecco, nell’immagine seguente, lo schema di collegamento realizzato con Fritzing:

Schema di collegamento del servomotore con l'ESP32
Schema di collegamento del servomotore con l’ESP32

Come vedi il collegamento è abbastanza semplice. In realtà potresti anche fare a meno della breadboard, a meno che non voglia aggiungere qualche altro componente. L’unica cosa a cui fare attenzione è il fatto che il colore dei fili è particolare (con le convenzioni dette sopra).

Lo sketch

Creiamo il progetto PlatformIO

Abbiamo già visto la procedura di creazione di un progetto PlatformIO nell’articolo Come creare un progetto per NodeMCU ESP8266 con PlatformIO.

Anche se si riferisce alla board ESP8266, la procedura è simile.
Semplicemente, nella scelta della piattaforma, dovrai scegliere la AZ-Delivery ESP-32 Dev Kit C V4.

Non installare le librerie indicate in quell’articolo perché non ci servono in questo progetto. Però devi, seguendo la procedura indicata nell’articolo, installare la libreria ServoESP32 by Jaroslav Paral:

Installazione della libreria ServoESP32 by Jaroslav Paral
Installazione della libreria ServoESP32 by Jaroslav Paral

Installa poi la libreria BluetoothSerial by Seeed come mostrato nell’immagine seguente:

Installazione della libreria BluetoothSerial
Installazione della libreria BluetoothSerial

Ora modifica il file platformio.ini per aggiungere queste due righe:

monitor_speed = 115200
upload_speed = 921600

in modo che il file abbia un aspetto del genere:

[env:az-delivery-devkit-v4]
platform = espressif32
board = az-delivery-devkit-v4
monitor_speed = 115200
upload_speed = 921600
framework = arduino
lib_deps = 
	roboticsbrno/ServoESP32@^1.0.3
	mbed-seeed/[email protected]+sha.f56002898ee8

Ovviamente puoi scaricare il progetto dal link seguente:

Sostituisci il file main.cpp del progetto che hai creato con quello presente nel file zip.

Vediamo ora come funziona lo sketch.

Lo sketch inizia con l’inclusione delle librerie necessarie per la gestione del servomotore e del Bluetooth:

#include <Arduino.h>

#include "BluetoothSerial.h"

#include <Servo.h>

Vengono poi definiti l’oggetto myServo, il GPIO a cui è collegato e la variabile servoPosition che conserva il valore angolare della posizione del servomotore:

Servo myServo;  // create servo object to control a servo

#define SERVO_GPIO 19         

int servoPosition = 0;    // variable to store the servo position

Viene poi definito l’oggetto SerialBT che gestirà il Bluetooth e la variabile BTData in cui transiteranno i dati attraverso la porta seriale:

BluetoothSerial SerialBT;
byte BTData;

A questo punto incontriamo la funzione setup che inizialmente setta la velocità della porta seriale:

Serial.begin(115200);
delay(2000);

Poi inizializza l’oggetto myServo collegandolo al GPIO 19:

myServo.attach(SERVO_GPIO);  // attaches the servo on pin 19 to the servo object

Viene poi attivato il Bluetooth:

SerialBT.begin();
Serial.println("Bluetooth Started! Ready to pair...");

Se desideri assegnare un nome specifico al dispositivo Bluetooth ESP32 è necessario specificarlo come argomento della funzione SerialBT.begin(). Ad esempio, se vuoi chiamarlo myESP32BT, inserisci SerialBT.begin(“myESP32BT”).
Se lasci il comando senza un parametro, ad esempio SerialBT.begin(), verrà applicato il nome predefinito ESP32.

Incontriamo ora la funzione loop.

La prima parte legge il carattere inviato dall’applicazione sul cellulare (che vedremo in seguito) verso l’ESP32 e lo stampa sul Serial Monitor:

if(SerialBT.available())
{
  BTData = SerialBT.read();
  Serial.write(BTData);
}

Segue la decodifica dei comandi:

if(BTData == '0')
{
  servoPosition = 20;
}

if(BTData == '+')
{
  servoPosition++;
}

if(BTData == '-')
{
  servoPosition--;
}

if(BTData == 'A')
{
  servoPosition -= 10;
}

if(BTData == 'B')
{
  servoPosition += 10;
}

if(BTData == 'C')
{
  servoPosition = 180;
}

Vediamo ora come funzionano questi comandi:

  • se il Bluetooth riceve 0 setta l’angolo a 20 gradi
  • se il Bluetooth riceve + aumenta l’angolo di 1 grado
  • se il Bluetooth riceve diminuisce l’angolo di 1 grado
  • se il Bluetooth riceve A diminuisce l’angolo di 10 gradi
  • se il Bluetooth riceve B aumenta l’angolo di 10 gradi
  • se il Bluetooth riceve C setta l’angolo a 180 gradi

Perché abbiamo imposto un limite minimo di 20 gradi invece di impostare 0 gradi? Perché abbiamo notato che tutti i servo SG90 a nostra disposizione cominciano a vibrare in maniera incontrollata quando l’angolo viene impostato a 20 gradi o a valori inferiori.

Dopo la decodifica dei comandi c’è la loro esecuzione:

if((servoPosition >= 20) && (servoPosition <= 180))
{
  myServo.write(servoPosition);
  delay(100);
}

Il blocco if controlla che il valore dell’angolo rientri nell’intervallo appropriato. In caso affermativo viene eseguita la scrittura dell’angolo sul servo (questo è il vero e proprio comando al servomotore) e si aspettano 100ms per dargli il tempo di eseguire il movimento

L’applicazione Serial Bluetooth Terminal

Per mandare i comandi Bluetooth verso l’ESP32 ho scelto di usare l’applicazione Serial Bluetooth Terminal di Kai Morich. Puoi scaricarla dal Play Store.

Ora attiva il Bluetooth nel tuo smartphone e cerca i dispositivi Bluetooth. Dovresti vedere un elenco di Dispositivi associati e Dispositivi disponibili. Vai su Dispositivi disponibili.

Seleziona ESP32 nel caso tu abbia lasciato nello sketch la riga SerialBT.begin() senza parametro, altrimenti scegli il dispositivo col nome che hai messo come parametro in quella riga. Il tuo cellulare ti chiederà se vuoi accoppiarlo con ESP32 (o col nome che gli hai impostato). A questo punto dai OK. Non c’è bisogno di password.

Apri l’applicazione Serial Bluetooth Terminal e clicca nel punto indicato nell’immagine seguente:

Clicca nel punto indicato per far uscire il menu
Clicca nel punto indicato per far uscire il menu

Seleziona la voce Devices come indicato nella figura sotto:

Seleziona la voce Devices
Seleziona la voce Devices

Si aprirà un altro menu dal quale dovrai selezionare il tuo dispositivo (per esempio ESP32):

Seleziona il dispositivo
Seleziona il dispositivo

Clicca ora nel punto indicato nell’immagine seguente per connettere l’applicazione al dispositivo selezionato:

Connetti l'applicazione al dispositivo
Connetti l’applicazione al dispositivo

Se tutto va bene dovrebbe stabilirsi la connessione:

Connessione avvenuta
Connessione avvenuta

A questo punto devi registrare i comandi da inviare al dispositivo con delle macro nell’applicazione. Tieni premuto il tasto M1. Si aprirà il menu per editarlo:

Realizziamo la prima macro
Realizziamo la prima macro

Al posto di M1, nel campo Name metti il carattere + e riempi il campo Value sempre con il carattere +, poi salva premendo nel punto indicato:

La prima macro è pronta
La prima macro è pronta

Ripetendo la stessa identica procedura esegui le seguenti associazioni:

  • su M2 metti il carattere nei campi Name e Value
  • su M3 metti la scritta -10 nel campo Name e il carattere A nel campo Value
  • su M4 metti la scritta +10 nel campo Name e il carattere B nel campo Value
  • su M5 metti la scritta 0 nel campo Name e il carattere 0 nel campo Value
  • su M6 metti la scritta 180 nel campo Name e il carattere C nel campo Value

Alla fine dovresti avere una schermata come questa:

Ecco come appare la schermata dopo aver registrato tutte le macro
Ecco come appare la schermata dopo aver registrato tutte le macro

Premendo i tasti + o farai aumentare o diminuire di un grado la posizione dell’albero del servomotore. Premendo i tasti +10 o -10 farai aumentare o diminuire di 10 gradi la posizione dell’albero del servomotore. Premendo il tasto 0 porterai all’angolo iniziale (come già spiegato corrispondente a 20 gradi) l’alberino del servomotore, premendo il tasto 180 lo porterai all’angolo finale (corrispondente a 180 gradi).

Video dimostrativo del funzionamento del servomotore SG90

Ecco un breve video che mostra il controllo del servomotore SG90 tramite Bluetooth:

Il servomotore controllato tramite Bluetooth

Newsletter

Se vuoi essere aggiornato sui nuovi articoli, iscriviti alla newsletter. Prima dell’iscrizione alla newsletter leggi la pagina Privacy Policy (UE)

Se ti vuoi disiscrivere dalla newsletter clicca sul link che troverai nella mail della newsletter.

Inserisci il tuo nome
Inserisci la tua email
0 0 votes
Valutazione articolo
guest
0 Commenti
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
Torna in alto