Questo tutorial è parte di: Servomotori
Tutti i video correlati ai servomotori sono elencati qui. I link ad altri video si trovano sotto questo articolo.
Codice Arduino e video per il controller per servomotori PCA9685 a 16 canali e 12 bit V1
In questo tutorial esploreremo come utilizzare il controller per servomotori PCA9685 a 16 canali e 12 bit di NXP Semiconductor. Questo modulo consente di controllare fino a 16 servomotori o di regolare l'intensità di un banco di LED con precisione utilizzando la modulazione di larghezza d'impulso (PWM). Al termine di questo tutorial avrai una configurazione funzionante in grado di controllare più servomotori singolarmente o contemporaneamente.

Per chiarire ulteriormente il contenuto del tutorial, ti invito a guardare il video di accompagnamento (nel video alle 00:00) per una dimostrazione visiva della configurazione e del processo di codifica.
Hardware spiegato
Il modulo PCA9685 è una scheda compatta che può controllare più servomotori tramite comunicazione I2C. Dispone di 16 canali, consentendo di collegare fino a 16 servomotori, ciascuno con il proprio segnale di controllo. Il modulo funziona con alimentazione a 5V ed è progettato per gestire segnali PWM, essenziali per controllare con precisione la posizione dei servomotori.
La scheda include pin dedicati per l'alimentazione (VCC), la massa (GND) e la comunicazione (SDA e SCL). Il pin SDA viene utilizzato per la trasmissione dei dati, mentre il pin SCL è il segnale di clock, entrambi collegati rispettivamente ai pin analogici A4 e A5 dell'Arduino. Questa configurazione garantisce una comunicazione affidabile tra l'Arduino e il modulo PCA9685.
Dettagli della scheda tecnica
| Produttore | NXP Semiconductor |
|---|---|
| Numero di parte | PCA9685 |
| Tensione logica/I/O | da 3,3 V a 5,5 V |
| Tensione di alimentazione | da 2.3 V a 5.5 V |
| Corrente di uscita (per canale) | 25 mA max |
| Corrente di picco (per canale) | 100 mA massimo |
| Linee guida sulla frequenza PWM | Da 24 Hz a 1,6 kHz |
| Soglie logiche di ingresso | 0.3 V (basso) / 0.7 V (alto) |
| Caduta di tensione / RDS(on)/ saturazione | 0,5 V max |
| Limiti termici | da -40 °C a 125 °C |
| Pacchetto | HTSSOP-28 |
| Note / varianti | Controllore PWM a 16 canali |
- Assicurati di avere un'alimentazione a 5 V con corrente sufficiente (1 A consigliata).
- Non alimentare i servomotori direttamente dall'Arduino per evitare danni.
- Usare i pin I2C corretti: SDA su A4 e SCL su A5.
- Adatta i valori della larghezza d'impulso ai tuoi servomotori specifici.
- Controllare il cablaggio per la polarità corretta: GND, VCC e segnale.
- Considera l'uso di dissipatori di calore per applicazioni ad alta corrente.
Istruzioni di cablaggio

Per collegare il PCA9685 al tuo Arduino, inizia collegando alimentazione e massa. Collega il pin VCC del PCA9685 all'uscita 5V dell'Arduino. Poi collega il pin GND del PCA9685 al GND dell'Arduino. Successivamente, collega il pin SDA del PCA9685 al pin A4 dell'Arduino e il pin SCL al pin A5.
Per i servomotori, collega il filo del segnale al canale corrispondente sul PCA9685 (ad es., CH0 per il primo servo), il filo di alimentazione a un'alimentazione separata (poiché i servomotori potrebbero richiedere più corrente di quella che l'Arduino può fornire) e il filo di massa alla massa comune condivisa con il PCA9685. Assicurati che i fili di segnale, alimentazione e massa siano collegati correttamente per evitare di danneggiare i componenti.
Esempi di codice e guida passo passo
Nella sezione di configurazione del codice, inizializziamo il modulo PCA9685 conpwm.begin()e impostare la frequenza PWM conpwm.setPWMFreq(60);. Questo imposta la frequenza di comunicazione per i servomotori.
void setup() {
Serial.begin(9600);
Serial.println("16 channel Servo test!");
pwm.begin();
pwm.setPWMFreq(60); // Analog servos run at ~60 Hz updates
}All'interno del ciclo, controlliamo i servomotori impostando i valori PWM corrispondenti agli angoli desiderati. La funzioneangleToPulse(int ang)Mappa l'angolo alla larghezza d'impulso appropriata, essenziale per il posizionamento accurato del servomotore.
void loop() {
for( int angle =0; angle<181; angle +=20){
delay(500);
pwm.setPWM(0, 0, angleToPulse(angle) );
}
}Infine, la funzioneangleToPulse(int ang)converte l'angolo in larghezza dell'impulso usando i valori minimo e massimo di durata dell'impulso definiti. Questo ti permette di controllare facilmente la posizione del servo in base all'angolo che vuoi ottenere.
int angleToPulse(int ang){
int pulse = map(ang,0, 180, SERVOMIN,SERVOMAX);
Serial.print("Angle: ");Serial.print(ang);
Serial.print(" pulse: ");Serial.println(pulse);
return pulse;
}Dimostrazione / Cosa aspettarsi
Una volta che tutto è collegato correttamente e il codice è stato caricato, dovresti vedere il servo muoversi attraverso gli angoli specificati con incrementi di 20 gradi. Se il servo non si comporta come previsto, controlla i collegamenti per verificare che siano corretti e assicurati che l'alimentazione sia adeguata (nel video a 12:30).
Marcatori temporali del video
- 00:00- Introduzione al PCA9685
- 02:30- Istruzioni per il cablaggio
- 05:00- Analisi del codice
- 10:15- Dimostrazione del controllo del servomotore
- 12:30- Risoluzione dei problemi comuni
Questo tutorial è parte di: Servomotori
- Controllare un servomotore con pulsanti usando Arduino
- Control a Servo Motor with a Push Button: Move Servo and Return SPB-1
- Control a Servo Motor with a Push Button: Move Servo in One Direction SPB-2
- Controlling a Servo Motor with a Push Button: Move Servo While Button Is Pressed (SPB-3)
- Controllare un servomotore con un potenziometro usando Arduino
- Controllare un servomotore con un potenziometro e un LCD1602 usando Arduino
- Controllare i servomotori utilizzando un telecomando a infrarossi con Arduino
- Controllo del Motore Servo Arduino Utilizzando un Potenziometro
- Controllare la posizione del servo con gesti della mano per Arduino
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- How to Use Continuous 360° Servo with Arduino
- Build an Arduino Servo Toggle Switch with a Push Button
Risorse e riferimenti
Nessuna risorsa ancora.
File📁
Nessun file disponibile.