Search Code

Arduino Servo Motor Beheer met 'n Potensiometer

Arduino Servo Motor Beheer met 'n Potensiometer

In hierdie tutorial gaan ons ondersoek hoe om 'n servo-motor te beheer met 'n potensiometer met 'n Arduino. Die doel is om 'n eenvoudige stroombaan te skep waar die posisie van die servo aangepas word op grond van die rotasie van die potensiometer. Teen die einde van hierdie projek sal jy 'n werkende model hê wat die servo-hoek glad van 0 tot 180 grade verander soos jy die potensiometer draai. Dit is 'n uitstekende manier om die basiese beginsels van analoog insette en servo-beheer in Arduino te verstaan.

Om dit te bereik, sal ons 'n Arduino-bord, 'n servo-motor en 'n potensio-meter gebruik. Die potensio-meter funksioneer as 'n veranderlike weerstand, wat 'n analoog inset aan die Arduino bied, wat dan die posisie van die servo-motor ooreenkomstig sal bepaal. Hierdie projek is nie net pret nie, maar ook opvoedkundig, aangesien dit sleutelkonsepte in elektronika en programmering demonstreer. Vir 'n meer diepgaande verduideliking, maak seker om die video te kyk (in video by 00:00).

Hardeware verduidelik

In hierdie projek is die hoofkomponente die Arduino-bord, die servo-motor en die potensiometer. Die Arduino is die brein van die operasie, wat insette verwerk en uitsette beheer. Die servo-motor is wat fisies sal beweeg op grond van die opdragte wat dit van die Arduino ontvang. Die potensiometer kan 1k ohm tot 1M ohm wees en stel gebruikers in staat om 'n veranderlike inset te verskaf wat in servo-beweging vertaal.

Die servo-motor werk deur 'n PWM (Pulse Width Modulation) sein te ontvang wat die verlangde posisie aandui. Die potensiometer, wanneer dit gedraai word, verander sy weerstand, wat deur die Arduino as 'n analoog spanning gelees word. Servo-motor werk met 5V. Dit werk nie met 3.3V nie. Hierdie spanning word dan in die bewegingsbereik van die servo-motor gekarteer, wat gladde beweging van 0 grade tot 180 grade moontlik maak.

Datasheet besonderhede vir SG90 servo motor

FabrikantParallax
Onderdeel nommerSG90
Logika/IO spanning5 V
Voorsienings spanning4.8-6 V
Uitsetstroom (per kanaal)~500 mA
Piekstroom (per kanaal)1 A
PWM frekwensie riglyne50 Hz
Invoerlingsdrempels0.5 V (laag), 2.5 V (hoog)
Spanningstoename / RDS(on)/ versadiging0.5 V by 500 mA
Termiese perke0°C tot 60°C
PakketStandaard 9g Servo
Notas / varianteGemeenlik gebruik in RC-toepassings

  • Verseker dat die servo nie sy maksimum stroomgrens oorskry nie.
  • Gebruik 'n hitte-afvoer as die servo voortdurend by hoë laste werk.
  • Koppel die potensiometer aan 'n analoogpen vir akkurate lesings.
  • Wees versigtig vir die PWM sein tydsberekening vir die servo beheer.
  • Kontroleer die servo se bewegingsbereik om fisiese hindernisse te vermy.

Bedrading Instruksies

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

Vir hierdie opstelling sal jy die komponente soos volg moet aansluit:

Koppel die middelpen (wiper) van die potensiometer aan die Arduino se analoge pen.A0Die ander twee penne van die potensio-meter moet gekoppel word aan5VenGNDop die Arduino. Vir die servo-motor, koppel die rooi draad aan5V, die swart draad naGND, en die geel of wit draad na digitale pen9op die Arduino. Hierdie rangskikking laat die potensiometer toe om 'n analoog inset aan die Arduino te verskaf, wat die servo-motor se posisie op grond van daardie inset sal beheer.

Maak seker dat jy al die verbindings verifieer en verseker dat die servo nie in sy bewegingsbereik verstop is nie. As jy 'n ander Arduino-model gebruik, bevestig dat die pen toewysings vir die analoog inset en servo-uitset versoenbaar is.

Kode Voorbeelde & Stapsgewijze Uitleg

Hieronder is 'n uittreksel van die kode wat die servo initaliseer en die potensio-meterwaarde lees:


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

In hierdie kode sluit ons die Servo-biblioteek in en skep 'n servo-objek genaamdmyservoDie servo is aan die pen geheg.9, wat ons toelaat om dit te beheer met hierdie pen.


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
}

In die lusfunksie lees ons die potensiaalmeterwaarde van penA0en kaart dit van sy reeks (0-1023) na die servo se reeks (0-180 grade). Diemyservo.write(pos)die opdrag beweeg dan die servo na die gewenste posisie gebaseer op die potensiometer se rotasie.

Demonstraie / Wat om te verwag

Wanneer jy hierdie program uitvoer, behoort jy die servo-motor glad van 0 tot 180 grade te sien beweeg soos jy die potensiometer draai. As die servo nie soos verwag beweeg nie, kyk na die bedrading en verseker dat die potensiometer korrek funksioneer. Boonop, verseker dat die Arduino behoorlik van krag voorsien word en dat die kode sonder foute opgelaai is. Jy kan verwag om die servo in werklike tyd die potensiometer se posisie te sien reflekteer (in video om 02:00).

Video Tydstempels

  • 00:00- Inleiding tot die projek
  • 01:30- Toerusting opstelling verduideliking
  • 03:45- Bedrading instruksies
  • 05:00- Kode deurloop
  • 07:30- Demonstrasie van die voltooide projek

Beelde

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

Hulpbronne en verwysings

Geen hulpbronne nog.

Lêers📁

Datasheet (pdf)