Controllare un servomotore con un potenziometro e un LCD1602 usando Arduino

Controllare un servomotore con un potenziometro e un LCD1602 usando Arduino

In questo tutorial impareremo come controllare un servomotore utilizzando un potenziometro e visualizzare il valore del potenziometro così come l'angolo del servomotore su uno schermo LCD1602. Questo progetto è un ottimo modo per combinare più componenti e capire come possano lavorare insieme per creare un sistema interattivo. Alla fine di questo tutorial avrai una configurazione funzionante che ti permette di regolare l'angolo del servomotore con una manopola visualizzando contemporaneamente i valori sullo schermo LCD1602.

Prima di addentrarci nel cablaggio e nel codice, è utile comprendere i componenti che useremo. Il potenziometro funge da resistore variabile che può regolare la tensione in uscita in base alla sua posizione; lo useremo per determinare l'angolo del servo. L'LCD1602 mostrerà il valore corrente del potenziometro e l'angolo corrispondente del servo. Puoi fare riferimento al video (nel video a :00) per una guida visiva dell'intero processo.

L'hardware spiegato

I componenti principali che utilizzeremo in questo progetto sono:

  • Scheda Arduino:Questo fungerà da controller per l'intero sistema, elaborando i segnali provenienti dal potenziometro e controllando la posizione del servomotore in base a tali segnali.
  • Potenziometro:Un potenziometro da 10 kΩ verrà usato per fornire un ingresso analogico all'Arduino. Ha tre terminali: uno collegato a 5V, uno a massa e quello centrale collegato a un pin analogico (A0) sull'Arduino.
  • Servomotore:Questo servo sarà controllato inviandogli un angolo in base alla posizione del potenziometro. Il filo del segnale si collega a un pin digitale dell'Arduino (pin 9).
  • Display LCD1602:Questo display mostrerà il valore del potenziometro e l'angolo del servomotore. Si collega a diversi pin digitali dell'Arduino per il controllo.

Il potenziometro funziona variando la resistenza e quindi la tensione al suo terminale centrale, che l'Arduino legge come ingresso analogico. Il servomotore viene comandato inviandogli un segnale specifico di modulazione di larghezza d'impulso (PWM) corrispondente all'angolo desiderato. L'LCD1602 utilizza una libreria che ci permette di controllarne facilmente il display e di visualizzare informazioni riguardanti il potenziometro e il servomotore.

Dettagli della scheda tecnica

Produttorevari
Numero di parteLM016L
Tensione logica/IO5 V
Tensione di alimentazione4.5 - 5.5 V
Corrente di uscita (per canale)fino a 2 mA
Corrente di picco (per canale)20 mA
Linee guida sulla frequenza PWM50 Hz
Soglie logiche di ingresso0.3 × Vcc(basso), 0.7 x Vcc(alto)
Caduta di tensione / RDS(in conduzione)/ saturazione0,2 V massimo
Limiti termici85 °C
PacchettoDIP a 16 pin
Note / variantidisplay a 2 righe da 16 caratteri

  • Collega il pin centrale del potenziometro al pin analogico A0.
  • Assicurati che il servo sia alimentato a 5 V e collegato al pin digitale 9.
  • Usa la libreria appropriata per il display LCD e assicurati che sia inclusa nell'IDE di Arduino.
  • Fai attenzione al cablaggio per evitare cortocircuiti, soprattutto con i collegamenti del servo.
  • Verifica che l'LCD sia inizializzato correttamente nel codice per evitare problemi di visualizzazione.
Arduino wiring for LCD1602 12wires servo and pot
Arduino wiring for LCD1602 12wires servo and pot

Istruzioni di cablaggio

Per collegare i componenti tra loro, inizia collegando il potenziometro. Collega uno dei pin esterni del potenziometro al pin 5V dell'Arduino, e l'altro pin esterno alla massa (GND). Il pin centrale va al pin analogicoA0.

Successivamente, per il servomotore, collegare il filo marrone o nero a massa, il filo rosso al pin 5V e il filo giallo o arancione al pin digitale9sull'Arduino. Per l'LCD1602, collegare ilVDDpin a 5V,RWa terra, eV0al terminale centrale del potenziometro per la regolazione del contrasto. CollegareRSfissare12,ENfissare11,D4fissare5,D5fissare4,D6fissare3, eD7fissare2.

Si raccomanda inoltre di inserire un resistore da 220 ohm in serie con il LED, se ne state usando uno, collegandolo all'alimentazione a 5V. Inoltre, un condensatore da 470 µF può essere collegato tra alimentazione e massa del servomotore per filtrare eventuali rumori durante il funzionamento.

Esempi di codice e guida passo passo

Il codice inizia includendo le librerie necessarie e inizializzando i pin per l'LCD e il servomotore. L'estratto seguente mostra la configurazione dell'LCD e del servomotore:

void setup() {
  lcd.begin(16, 2);
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Robojax Servo Knob");
  delay(2000);
}

Questo frammento di codice inizializza l'LCD per 16 colonne e 2 righe, collega il servo al pin 9 e visualizza un messaggio di benvenuto sul LCD. Illcd.clear()La funzione garantisce che eventuali messaggi precedenti vengano rimossi.

Successivamente, il ciclo legge continuamente il valore del potenziometro e aggiorna la posizione del servomotore e il display LCD:

void loop() {
  val = analogRead(potpin);            // reads the value of the potentiometer
  angle = map(val, 0, 1023, 0, 180);     // scale it to use it with the servo
  myservo.write(angle);                  // sets the servo position according to the scaled value
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Pot. Value:");
  lcd.setCursor(11, 0);
  lcd.print(val);
  lcd.setCursor(0, 1);
  lcd.print("Angle     :");
  lcd.setCursor(11, 1);
  lcd.print(angle);
  delay(500);
}

Questo ciclo legge il valore del potenziometro, lo mappa su un angolo corrispondente per il servo e aggiorna il display LCD mostrando sia il valore del potenziometro sia l'angolo del servo. Ildelay(500)Alla fine del ciclo impedisce che il display si aggiorni troppo rapidamente.

Dimostrazione / Cosa aspettarsi

Quando accendi il sistema, il display LCD mostrerà Robojax Servo Knob per 2 secondi, seguito dal valore del potenziometro e dall'angolo del servo. Mentre ruoti il potenziometro, l'angolo del servo cambierà di conseguenza e il nuovo valore del potenziometro verrà visualizzato sul display LCD. Se riscontri comportamenti imprevisti, come il servo che si muove nella direzione sbagliata, controlla il cablaggio del potenziometro e le connessioni del servo (nel video a 10:00).

Immagini

SG90_servo_motor-1
SG90_servo_motor-1
SG90_servo_motor-0
SG90_servo_motor-0
Arduino wiring for LCD1602 12wires servo and pot
Arduino wiring for LCD1602 12wires servo and pot
97-This is the Arduino code for controlling a servo with a potentiometer and an LCD1602.
Lingua: C++
Copia!

Risorse e riferimenti

File📁

Nessun file disponibile.