Cerca codice

Lezione 92: Controllare più servo ciascuno con potenziometro | Corso Arduino Passo Dopo Passo

Lezione 92: Controllare più servo ciascuno con potenziometro | Corso Arduino Passo Dopo Passo

In questo progetto, imparerai a costruire un controllore servo indipendente e multi-canale utilizzando un Arduino Uno e due potenziometri. Invece di un singolo servo che segue un singolo manopola, questa guida ti mostra come fornire a ciascun servo il proprio ingresso analogico dedicato, permettendo di controllare due e fino a sei motori servo in modo indipendente e simultaneo. Questo è un elemento fondamentale per qualsiasi progetto che richieda un controllo preciso e manuale di più parti mobili.

Questo setup è incredibilmente versatile. Ecco alcuni modi pratici in cui puoi usarlo:

  • Robotica:Controllare l'inclinazione e la rotazione di un gimbal per fotocamera o le articolazioni della base e del braccio di un piccolo robot.
  • Animatronics:Creare movimenti realistici per un burattino o un personaggio animatronico controllando indipendentemente la sua testa e i suoi occhi.
  • Controllo del modello:Costruire un controller personalizzato per veicoli RC o modelli di aerei per regolare con precisione le flaps e gli alettoni.
  • Automazione:Creazione di una stazione di override manuale per un inseguitore solare o un dispositivo di posizionamento multi-assiale.

Hardware richiesto

  • Arduino Uno (o qualsiasi scheda compatibile)
  • 2 motori servo (qui vengono utilizzati servo standard a 180 gradi)
  • 2x Potenziometri (10kΩ è una scelta comune)
  • Placca per circuiti e cavi jumper
  • Alimentazione esterna 5V (consigliata per più servi)

Guida al cablaggio

Questo progetto richiede un po' più di cablaggio rispetto a un'impostazione con un solo servo, principalmente perché è necessario distribuire alimentazione e massa a più componenti. La chiave è utilizzare le barre di alimentazione della breadboard per creare un bus comune da 5V e GND. Un diagramma di cablaggio è essenziale per questa costruzione.

Two_or_more_Servo_pot_bb

Analizziamo le connessioni, come spiegato nel video (nel video alle 02:23). Prima, imposta i tuoi binari di alimentazione: collega l'Arduino.5Vfissare al binario positivo della breadboard e ilGNDcollegalo al binario negativo. Questo ti offre un facile accesso all'alimentazione per tutti i tuoi componenti.

Potentiometri:Ogni potenziometro funge da divisore di tensione. Collega il pin destro di ogni pot a5Vrota e il perno sinistro a GNDrail. Il pin centrale è il "wiper" e fornisce una tensione variabile. Collega il pin centrale del primo potenziometro all'ingresso analogicoA0e il pin centrale del secondo aA1(in video al 03:22).

Motori passo-passo:Ogni servo ha tre fili. Collega il filo scuro (di solito nero o marrone) alGNDferro. Collega il filo centrale (solitamente rosso) a5Vferroviaria. Infine, collega il filo del segnale (solitamente arancione o giallo) a un pin abilitato PWM sull'Arduino. Il filo del segnale del primo servo va al pin3, e il filo del segnale del secondo servo va al pin5(nel video alle 04:01). Ricorda, devi utilizzare i pin abilitati PWM (contrassegnati con una tilde "~" sull'Uno) per il controllo del servo.

Spiegazione del codice

Il codice si basa sull'esempio standard "Knob" dell'Arduino IDE, ma è modificato per gestire due servomotori. La logica è semplice: leggere il valore analogico da un potenziometro, mappare il valore a un angolo e comandare il servomotore a muoversi verso quell'angolo. La sezione di configurazione in cima al codice è dove apporterai tutte le tue modifiche.

Ecco la sezione configurabile dall'utente che definisce i pin e crea gli oggetti servo:


#include <Servo.h>

//**** servo 1 settings
Servo servo1; 
const int servo1PotPin = A0;
const int servo1Pin = 3;// Must use PWM enabled pin
int servo1Value;
//**** servo 1 settings END

//**** servo 2 settings
Servo servo2; 
const int servo2PotPin = A1;
const int servo2Pin = 5;// Must use PWM enabled pin
int servo2Value;
//**** servo 1 settings END

Questo è il cuore della configurazione. Per aggiungere un terzo servo, dovresti copiare il blocco "impostazioni servo 2", cambiare tutti i "2" in "3", assegnare un nuovo pin analogico (ad es.,A2) e un nuovo pin PWM (ad es.,9. LaServola classe è integrata nell'IDE Arduino, quindi non sono necessarie librerie aggiuntive.

Nellasetup()funzione, ilservo.attach(pin)Il comando indica all'Arduino quale pin è collegato a ciascun filo di segnale del servo. Devi avere una riga per ogni servo che stai utilizzando.


void setup() {
  //Robojax.com multiple servo
  servo1.attach(servo1Pin); 
  servo2.attach(servo2Pin);   
}

Nellaloop(), il codice legge il valore del potenziometro, lo mappa a un intervallo di 0-180 gradi e scrive quell'angolo nel servo. Ildelay(5)alla fine è un parametro di regolazione. Come dimostrato nel video, ridurre questo valore da 15 a 5 millisecondi rende il movimento del servocomando molto più fluido ed elimina le vibrazioni (nel video alle 12:00).

Dimostrazione di Progetto dal Vivo

Una volta che il circuito è cablato e il codice caricato, la dimostrazione è immediata. Quando accendi l'Arduino, ciascun servomotore si muoverà in una posizione determinata dall'impostazione attuale del relativo potenziometro. Mentre ruoti una manopola, il suo servomotore seguirà dolcemente il movimento. Il video dimostra che i due servomotori operano completamente in modo indipendente, consentendo movimenti complessi e simultanei. Se noti tremori o vibrazioni, regolando ildelay()il valore nel ciclo è la prima cosa da provare.

Capitoli

  • [00:00] Introduzione e Panoramica del Progetto
  • [00:56] Comprendere i motori passo-passo
  • Schema di cablaggio per due servomotori e potenziometri
  • [04:15] Spiegazione dettagliata del cablaggio
  • [06:49] Spiegazione del Codice: Configurazione e Impostazione
  • [09:15] Spiegazione del codice: Logica di controllo e mappatura
  • [11:15] Dimostrazione dal vivo e messa a punto

Immagini

Multiple Servo uno pot.: Configurazione principale
Multiple Servo uno pot.: Configurazione principale
Multiple Servo uno pot.: Vista dall'alto della configurazione principale
Multiple Servo uno pot.: Vista dall'alto della configurazione principale
Più servo con un potenziometro: Creare un'ulteriore alimentazione a 5V dall'Arduino su breadboard.
Più servo con un potenziometro: Creare un'ulteriore alimentazione a 5V dall'Arduino su breadboard.
SG90 Mini Servo Motor
SG90 Mini Servo Motor
Two_or_more_Servo_pot_bb
Two_or_more_Servo_pot_bb
888-Lesson 92: Controlling Multiple servo motors
Lingua: C++
/*
 * Control two or more servo motors 
 * using potentiometers.
 * Modified by Ahmad Shamshiri on Oct 17, 2019 at 20:13
 * in Ajax, Ontario, Canada . www.Robojax.com
 * This code on robojax https://robojax.com/RJT766
 *  
 * Original code from Arduino IDE: File->Examples->Servo->knob
 *  
 Controlling a servo position using a potentiometer (variable resistor)
 by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>

 modified on 8 Nov 2013
 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Knob


 * Get this code and other Arduino codes from Robojax.com



 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
#include <Servo.h>

//**** servo 1 settings
Servo servo1; 
const int servo1PotPin =A0;
const int servo1Pin = 3;// Must use PWM enabled pin
int servo1Value;
//**** servo 1 settings END

//**** servo 2 settings
Servo servo2; 
const int servo2PotPin =A1;
const int servo2Pin = 5;// Must use PWM enabled pin
int servo2Value;
//**** servo 1 settings END

void setup() {
  //Robojax.com multiple servo
  servo1.attach(servo1Pin); 
  servo2.attach(servo2Pin);   
}

void loop() {
  //Robojax.com multiple servo
  servo1Value = analogRead(servo1PotPin); 
  servo1Value = map(servo1Value, 0, 1023, 0, 180);
  servo1.write(servo1Value);

  servo2Value = analogRead(servo2PotPin); 
  servo2Value = map(servo2Value, 0, 1023, 0, 180);
  servo2.write(servo2Value);
  
  delay(5);
 //Robojax.com multiple servo  
}// loop end

Risorse e riferimenti

Nessuna risorsa ancora.

File📁

Altri file