Pretraži kod

Kontrola servo motora Arduino pomoću potenciometra

Kontrola servo motora Arduino pomoću potenciometra

U ovom tutorijalu istražićemo kako kontrolisati servo motor koristeći potenciometar sa Arduinom. Cilj je stvoriti jednostavnu sklop gdje se pozicija serva podešava na osnovu rotacije potenciometra. Na kraju ovog projekta, imaćete funkcionalni model koji glatko menja ugao serva od 0 do 180 stepeni dok okrenete potenciometar. Ovo je odličan način da razumete osnove analognog ulaza i kontrole serva u Arduinu.

Da bismo to postigli, koristićemo Arduino ploču, servo motor i potenciometar. Potenciometar deluje kao promenljivi otpornik, pružajući analogni ulaz Arduino-u, koji će zatim odrediti poziciju servo motora u skladu s tim. Ovaj projekat nije samo zabavan, već i edukativan, jer prikazuje ključne koncepte u elektronici i programiranju. Za detaljnije objašnjenje, obavezno pogledajte video (u videu na 00:00).

Objašnjena oprema

U ovom projektu, glavni sastavni dijelovi su Arduino ploča, servo motor i potenciometar. Arduino je mozak operacije, obrađujući ulaze i kontrolirajući izlaze. Servo motor je ono što će fizički pomjerati na osnovu komandi koje prima od Arduina. Potenciometar može biti od 1k ohm do 1M ohm i omogućava korisnicima da pruže varijabilni ulaz koji se prevodi u kretanje serva.

Servo motor radi na osnovu PWM (modulacija širine impulsa) signala koji označava željenu poziciju. Potentiometar, kada se okrene, menja svoju otpornost, koju Arduino očitava kao analogni napon. Servo motor radi sa 5V. Ne radi sa 3.3V. Ovaj napon se zatim mapira na opseg kretanja servo motora, omogućavajući glatko kretanje od 0 stepeni do 180 stepeni.

Tehnički podaci za SG90 servo motor

ProizvođačParalaksa
Broj dijelaSG90
Logika/IO napon5 V
Napon napajanja4.8-6 V
Izlazna struja (po kanalu)~500 mA
Vrhunski trenutni (po kanalu)1 A
Upute za PWM frekvenciju50 Hz
Ulazne logičke granice0.5 V (nisko), 2.5 V (visoko)
Napon pada / RDS(on)/ zasićenje0,5 V pri 500 mA
Termalne granice0°C do 60°C
PakovanjeStandard 9g servo
Napomene / varijanteČesto se koristi u RC aplikacijama

  • Osigurajte da servo ne premaši svoju maksimalnu struju.
  • Koristite hladnjak ako servo neprekidno radi pod visokim opterećenjima.
  • Povežite potenciometar na analogni pin za tačna očitavanja.
  • Budite oprezni s vremenom PWM signala za kontrolu serva.
  • Provjerite opseg kretanja serva kako biste izbjegli fizičke prepreke.

Uputstva za povezivanje

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

Za ovu postavku, trebate povezati komponente na sljedeći način:

Povežite srednju pin potenciometra (brisač) na analogni pin Arduina.A0. Ostale dvije pinove potenciometra treba povezati na5ViGNDna Arduinu. Za servo motor, povežite crvenu žicu na5V, crna žica naGND, a žuta ili bijela žica na digitalni pin9na Arduinu. Ova postavka omogućava potenciometru da pruži analogni ulaz Arduinu, koji će kontrolisati položaj servo motora na osnovu tog ulaza.

Provjerite sve veze i osigurajte da servo nije blokiran u svom opsegu kretanja. Ako koristite drugi model Arduina, potvrdite da su dodijeljeni pinovi za analogni ulaz i servo izlaz kompatibilni.

Primjeri koda i vodič

Ispod je izvadak koda koji inicijalizuje servo i čita vrijednost potenciometra:


#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
}

U ovom kodu uključujemo Servo biblioteku i kreiramo servo objekat nazvanmyservoServo je priključen na pin9, što nam omogućava da njime upravljamo koristeći ovu iglu.


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
}

U funkciji petlje, čitamo vrijednost potenciometra sa pinaA0i mapirajte iz njegovog opsega (0-1023) u opseg servomotora (0-180 stepeni).myservo.write(pos)komanda zatim pomiče servo na željenu poziciju na osnovu rotacije potenciometra.

Demonstracija / Šta očekivati

Kada pokrenete ovaj program, trebali biste vidjeti servo motor kako glatko prelazi od 0 do 180 stepeni dok okrenete potenciometar. Ako se servo ne pomiče kako se očekuje, provjerite ožičenje i osigurajte da potenciometar ispravno radi. Također, provjerite je li Arduino ispravno napajan i je li kod učitan bez grešaka. Možete očekivati da će servo odražavati položaj potenciometra u stvarnom vremenu (u videu u 02:00).

Video vremenski oznaci

  • 00:00- Uvod u projekat
  • 01:30- Objašnjenje postavke hardvera
  • 03:45- Uputstva za povezivanje
  • 05:00- Prolazak kroz kod
  • 07:30- Demonstracija završenog projekta

Slike

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
Jezik: 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
  }
}

Resursi i reference

Još nema resursa.

Datoteke📁

Tehnički list (pdf)