Search Code

Controlul motorului servo Arduino folosind un potentiometru

Controlul motorului servo Arduino folosind un potentiometru

În acest tutorial, vom explora cum să controlăm un motor servo folosind un potențiometru cu un Arduino. Scopul este de a crea un circuit simplu în care poziția servo-ului este ajustată în funcție de rotația potențiometrului. La finalul acestui proiect, veți avea un model funcțional care variază lin unghiul servo-ului de la 0 la 180 de grade pe măsură ce rotiți potențiometrul. Aceasta este o modalitate excelentă de a înțelege bazele intrării analogice și controlului servo în Arduino.

Pentru a realiza acest lucru, vom folosi o placă Arduino, un motor servo și un potențiometru. Potențiometrul acționează ca un rezistor variabil, oferind o intrare analogică plăcii Arduino, care va determina apoi poziția motorului servo în consecință. Acest proiect nu este doar distractiv, ci și educativ, deoarece demonstrează concepte cheie în electronică și programare. Pentru o explicație mai detaliată, asigurați-vă că verificați videoclipul (în videoclip la 00:00).

Hardware explicat

În acest proiect, componentele principale sunt placa Arduino, motorul servo și potentiometrul. Arduino este creierul operațiunii, procesând intrările și controlând ieșirile. Motorul servo este ceea ce se va mișca fizic în funcție de comenzile primite de la Arduino. Potentiometrul poate fi de 1k ohm până la 1M ohm, permițând utilizatorilor să ofere o intrare variabilă care se traduce în mișcarea servo.

Motorul servo funcționează prin primirea unui semnal PWM (Modulație în Lățime de Puls) care indică poziția dorită. Potentiometrul, atunci când este rotit, își schimbă rezistența, care este citită de Arduino ca o tensiune analogică. Motorul servo funcționează cu 5V. Nu funcționează cu 3.3V. Această tensiune este apoi mapată la intervalul de mișcare al motorului servo, permițând o mișcare lină de la 0 grade la 180 de grade.

Detalii fișă tehnică pentru motorul servo SG90

ProducătorParalaxă
Număr de parteSG90
Tensiune logică/IO5 V
Tensiune de alimentare4.8-6 V
Curent de ieșire (pe canal)~500 mA
Curent de vârf (pe canal)1 A
Ghid pentru frecvența PWM50 Hz
Praguri logici de intrare0,5 V (scăzut), 2,5 V (ridicat)
Cădere de tensiune / RDS(on)/ saturație0,5 V la 500 mA
Limite termice0°C până la 60°C
PachetServo standard de 9g
Note / varianteUtilizat frecvent în aplicații RC

  • Asigurați-vă că servomotorul nu depășește valoarea maximă a curentului său.
  • Folosiți un radiator dacă servomotorul funcționează continuu la sarcini mari.
  • Conectează potentiometrul la un pin analogic pentru citiri precise.
  • Fii atent la sincronizarea semnalului PWM pentru controlul servo.
  • Verifica intervalul de mișcare al servo-ului pentru a evita obstrucțiile fizice.

Instrucțiuni de cablare

Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for servo motor
Arduino wiring for servo motor

Pentru această configurație, va trebui să conectați componentele astfel:

Conectează pinul din mijloc al potentiometrului (wiper) la pinul analogic al Arduino-ului.A0Celelalte două pini ale potentiometrului ar trebui să fie conectate la5VșiGNDpe Arduino. Pentru motorul servo, conectați firul roșu la5V, firul negru laGND, iar firul galben sau alb la pinul digital9pe Arduino. Această aranjare permite potentiometrului să ofere o intrare analogică către Arduino, care va controla poziția motorului servo pe baza acelei intrări.

Asigurați-vă că verificați toate conexiunile și că servomotorul nu este obstrucționat în intervalul său de mișcare. Dacă folosiți un model Arduino diferit, confirmați că atribuirea pinilor pentru intrarea analogică și ieșirea servomotorului sunt compatibile.

Exemple de cod și ghiduri

Mai jos este un extras din codul care inițializează servomotorul și citește valoarea potentiometrului:


#include 

Servo myservo;  // create servo object to control a servo
int pos = 0;    // variable to store the servo position

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

În acest cod, includem biblioteca Servo și creăm un obiect servo numitmyservo. Servomotorul este atașat la pin9, care ne permite să-l controlăm folosind acest pin.


void loop() {
  int sensorValue = analogRead(A0);  // read the potentiometer
  pos = map(sensorValue, 0, 1023, 0, 180);  // map to servo position
  myservo.write(pos);  // move servo to position
  delay(15);  // waits 15ms for the servo to reach the position
}

În funcția loop, citim valoarea potentiometrului de pe pin.A0și îl mapăm de la intervalul său (0-1023) la intervalul servomotorului (0-180 grade).myservo.write(pos)comanda apoi mută servomotorul în poziția dorită pe baza rotației potentiometrului.

Demonstrație / Ce să aștepți

Când rulați acest program, ar trebui să vedeți motorul servo mișcându-se lin de la 0 la 180 de grade pe măsură ce rotiți potentiometrul. Dacă servo-ul nu se mișcă așa cum era de așteptat, verificați cablajul și asigurați-vă că potentiometrul funcționează corect. De asemenea, asigurați-vă că Arduino este alimentat corespunzător și că codul este încărcat fără erori. Puteți aștepta să vedeți servo-ul reflectând poziția potentiometrului în timp real (în video la 02:00).

Marcaje temporal video

  • 00:00- Introducere în proiect
  • 01:30- Explicație a configurării hardware
  • 03:45- Instrucțiuni de cablare
  • 05:00- Prezentare cod
  • 07:30- Demonstrarea proiectului finalizat

Imagini

Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for servo motor
Arduino wiring for servo motor
11-Controlling a servo position using a potentiometer using Arduino
Limba: C++
/**
*Original source: Arduino IDE
* Arduino Project: Controlling the servo position
* This code is used with a video tutorial for Robojax.com
* Published on April 24, 2017, from Ajax, ON, Canada.
* Written/Edited by Ahmad Shamshiri
* Watch the video on YouTube: https://youtu.be/kZ9b31gVemc
* View tutorial page for this code https://robojax.com/RJT8
* Controlling a servo position using a potentiometer (variable resistor)
*/



#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

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

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}

Resurse și referințe

Încă nu sunt resurse.

Fișiere📁

Fișă tehnică (pdf)