Pretraži kod

Kontrola serva pomoću potenciometra koristeći Arduino

Kontrola serva pomoću potenciometra koristeći Arduino

U ovom tutorijalu naučit ćemo kako kontrolirati servo motor koristeći potenciometar s Arduinom. Potenciometar nam omogućava da glatko podešavamo ugao serva, dajući nam kontrolu u realnom vremenu nad njegovom pozicijom. Do kraja ovog projekta imat ćete funkcionalnu postavku koja prikazuje vrijednost potenciometra i odgovarajući ugao serva.

Kako se potenciometar okreće, ugao servo motora mijenja se od 0 do 180 stepeni. Koristit ćemo Arduino analogni ulaz za čitanje vrijednosti potenciometra, a zatim mapirati ovu vrijednost na opseg serva koristeći jednostavnu formulu. Ovaj projekat je odličan način da razumijete kako analogni ulazi rade i kako kontrolirati motore s njima (u videu na 01:45).

Objašnjenje hardvera

Za ovaj projekat trebamo Arduino ploču, servo motor i potenciometar. Potenciometar djeluje kao promjenjivi otpornik, pružajući naponski izlaz koji odgovara njegovoj poziciji. Ovaj izlaz čita Arduino analogni ulaz, omogućavajući nam da odredimo koliko treba okrenuti servo.

Servo motor je vrsta motora koji se može pozicionirati pod određenim uglom. Prima kontrolni signal koji mu govori željenu poziciju. Servo će se rotirati na taj ugao na osnovu ulaza koji prima od Arduina, što ga čini korisnim za različite primjene poput robotike i uređaja za daljinsko upravljanje.

Detalji iz tehničke dokumentacije

ProizvođačRazni
Broj dijelaStandardni servo
Logički/IO napon5 V
Napon napajanja4.8 – 6 V
Izlazna struja (po kanalu)Do 1 A
Maksimalna struja (po kanalu)Do 2 A
Smjernice za PWM frekvenciju50 Hz
Logički pragovi ulaza0.8 V (nisko) / 2.0 V (visoko)
Pad napona / RDS(on) / zasićenje0.5 V
Termalna ograničenja85 °C
PakovanjeStandardna veličina
Napomene / varijanteDostupno u različitim veličinama i s različitim obrtnim momentima

  • Osigurajte da je napajanje unutar granica (4.8 – 6 V).
  • Koristite odgovarajuću vrijednost otpornika za potenciometar (preporučuje se 10 kΩ).
  • Provjerite polaritet spojeva kako biste izbjegli obrnuti rad.
  • Budite oprezni s toplinom; osigurajte da servo nije preopterećen.
  • Držite žice kratke kako biste smanjili smetnje.
  • Koristite decoupling kondenzatore preko naponskih ulaza ako je potrebno.
  • Provjerite da je potenciometar pravilno spojen na analogni pin A0.

Upute za povezivanje

Arduino wiring or servo motor with pot
Arduino wiring or servo motor with pot

Za povezivanje komponenti, prvo spojite potenciometar. Srednji pin potenciometra treba spojiti na analogni pin A0 na Arduinu. Lijevi pin treba ići na 5V pin na Arduinu, a desni pin treba spojiti na masu (GND).

Zatim spojite servo motor. Žica za masu (obično crna ili smeđa) sa serva treba biti spojena na Arduino GND. Žica za napajanje (obično crvena) treba se spojiti na 5V pin na Arduinu. Na kraju, kontrolna žica (često žuta ili bijela) treba biti spojena na digitalni pin 9 na Arduinu. Ova postavka omogućit će Arduinu da kontrolira servo na osnovu pozicije potenciometra.

Arduino Schemtic of wiring servo motor with pot

Primjeri koda i objašnjenje

Pogledajmo ključne dijelove koda. Prvo uključujemo Servo biblioteku i kreiramo servo objekat:

#include 
Servo myservo;  // kreiraj servo objekat za kontrolu serva

Ovaj kod inicijalizira servo i priprema ga za kontrolu. Sljedeći korak uključuje čitanje vrijednosti potenciometra:

int val = analogRead(potpin); // čita vrijednost potenciometra

Ovdje se vrijednost pročitana s potenciometra pohranjuje u varijablu val. Vrijednost će biti između 0 i 1023, što odgovara poziciji potenciometra. Zatim mapiramo ovu vrijednost na opseg serva:

val = map(val, 0, 1023, 0, 180); // skaliraj je za upotrebu sa servom

Ovaj red pretvara vrijednost potenciometra u opseg prikladan za servo motor. Na kraju, postavljamo servo na izračunatu poziciju:

myservo.write(val); // postavlja poziciju serva prema skaliranoj vrijednosti

Ova komanda govori servu da se pomakne na specificirani ugao na osnovu pozicije potenciometra. Kompletan kod možete pronaći učitan ispod članka.

Demonstracija / Šta očekivati

Kada pokrenete program, okretanje potenciometra će glatko podešavati ugao servo motora. Trebali biste vidjeti vrijednosti ugla koje se ispisuju u serijskom monitoru dok okrećete dugme. Ako se servo ponaša neočekivano, provjerite svoje povezivanje, posebno spojeve na potenciometar i servo (u videu na 04:30).

Servo bi trebao odmah reagirati na promjene u poziciji potenciometra. Ako primijetite kašnjenje ili trzaje, razmislite o smanjenju kašnjenja u kodu kako biste poboljšali odziv.

Slike

Arduino wiring or servo motor with pot
Arduino wiring or servo motor with pot
Arduino Schemtic of wiring servo motor with pot
Arduino Schemtic of wiring servo motor with pot
SG90_servo_motor-1
SG90_servo_motor-1
SG90_servo_motor-0
SG90_servo_motor-0
96-Controlling a servo position using a potentiometer
Jezik: C++
/*
 Controlling a servo position using a potentiometer (variable resistor)
 by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>

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

 Update by Ahmad Shamshiri for Robojax.com in Ajax, Ontario, Canada
 Watch video for this code at https://youtu.be/X_drE5tLbz0
 This code is taken from http://robojax.com/learn/arduino
*/

#include <Servo.h>

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

int potpin = A0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin

void setup() {
  // Servo knob demo by Robojax.com
  Serial.begin(9600);          //  setup serial
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  // Servo knob demo by Robojax.com
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  Serial.print(val);
  Serial.print(" ");
  val = map(val, 0, 1023, 0, 180);     // scale it to use it with the servo (value between 0 and 180)
  myservo.write(val);                  // sets the servo position according to the scaled value
  // Servo knob demo by Robojax.com
  Serial.print(val);
  Serial.println();
  delay(200);                           // waits for the servo to get there
}

Stvari koje bi vam mogle zatrebati

Resursi i reference

Datoteke📁

Nema dostupnih datoteka.