This tutorial is part of: Servomotory
Všetky videá súvisiace so servomotormi sú uvedené tu. Odkazy na ďalšie videá nájdete pod týmto článkom.
Ovládanie servomotora Arduino pomocou potenciometra
V tomto tutoriále preskúmame, ako ovládať servomotor pomocou potenciometra s Arduinom. Cieľom je vytvoriť jednoduchý obvod, kde sa poloha serva upravuje na základe otáčania potenciometra. Na konci tohto projektu budete mať funkčný model, ktorý plynulo mení uhol serva od 0 do 180 stupňov, keď otáčate potenciometrom. Toto je skvelý spôsob, ako pochopiť základy analógového vstupu a ovládania serva v Arduine.
Aby sme to dosiahli, použijeme dosku Arduino, servomotor a potenciometer. Potenciometer funguje ako variabilný odpor, ktorý poskytuje analógový vstup do Arduina, ktoré následne určí polohu servomotora. Tento projekt je nielen zábavný, ale aj vzdelávací, pretože demonštruje kľúčové koncepty v elektronike a programovaní. Pre podrobnejšie vysvetlenie sa určite pozrite na video (vo videu o 00:00).
Vysvetlenie hardvéru
V tomto projekte sú hlavnými komponentmi doska Arduino, servomotor a potenciometer. Arduino je mozgom operácie, spracováva vstupy a ovláda výstupy. Servomotor je to, čo sa fyzicky pohne na základe príkazov, ktoré dostáva od Arduina. Potenciometer môže byť od 1k ohm do 1M ohm a umožňuje používateľom poskytovať variabilný vstup, ktorý sa prekladá do pohybu serva.
Servomotor funguje prijímaním signálu PWM (modulácia šírky pulzu), ktorý indikuje požadovanú polohu. Potenciometer, keď sa otočí, mení svoj odpor, ktorý Arduino číta ako analógové napätie. Servomotor pracuje s 5V. Nepracuje s 3,3V. Toto napätie je potom mapované na rozsah pohybu servomotora, čo umožňuje plynulý pohyb od 0 stupňov do 180 stupňov.
Technické údaje pre servomotor SG90
| Výrobca | Paralaxa |
|---|---|
| Číslo dielu | SG90 |
| Logika/IO napätie | 5 V |
| Napájacie napätie | 4.8-6 V |
| Výstupný prúd (na kanál) | ~500 mA |
| Špičkový prúd (na kanál) | 1 A |
| Pokyny pre PWM frekvenciu | 50 Hz |
| Vstupné logické prahy | 0,5 V (nízke), 2,5 V (vysoké) |
| Pokles napätia / RDS(on)/ saturácia | 0,5 V pri 500 mA |
| Tepelné limity | 0°C až 60°C |
| Balík | Štandardný 9g servomotor |
| Poznámky / varianty | Bežne používané v RC aplikáciách |
- Zabezpečte, aby servomotor neprekročil svoj maximálny prúdový výkon.
- Použite chladič, ak servomotor pracuje nepretržite pri vysokých zaťaženiach.
- Pripojte potenciometer k analógovému pinu pre presné merania.
- Buďte opatrní na časovanie PWM signálu pre ovládanie serva.
- Skontrolujte rozsah pohybu serva, aby ste predišli fyzickým prekážkam.
Inštrukcie na zapojenie


Pre tento setup budete musieť pripojiť komponenty nasledovne:
Pripojte stredný pin potenciometra (stierač) k analógovému pinu Arduina.A0. Ostatné dva piny potenciometra by mali byť pripojené k5VaGNDna Arduine. Pre servomotor pripojte červený vodič k5V, čierny drôt kGNDa žltý alebo biely vodič k digitálnemu pinu9na Arduine. Toto usporiadanie umožňuje potenciometru poskytovať analógový vstup do Arduina, ktoré bude ovládať polohu servomotora na základe tohto vstupu.
Uistite sa, že ste overili všetky pripojenia a zabezpečte, aby servo nebolo obmedzené vo svojom rozsahu pohybu. Ak používate iný model Arduina, potvrďte, že priradenia pinov pre analógový vstup a výstup serva sú kompatibilné.
Príklady kódu a návod
Nižšie je úryvok kódu, ktorý inicializuje servomotor a číta hodnotu 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
}
V tomto kóde zahrnieme knižnicu Servo a vytvoríme objekt servo s názvommyservoServomotor je pripojený k pinu9, čo nám umožňuje ovládať ho pomocou tohto pinu.
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
}
V slučkovej funkcii čítame hodnotu potenciometra z pinuA0a mapujte ho z jeho rozsahu (0-1023) na rozsah serva (0-180 stupňov).myservo.write(pos)príkaz potom posunie servo na požadovanú pozíciu na základe otáčania potenciometra.
Demonštrácia / Čo očakávať
Keď spustíte tento program, mali by ste vidieť, ako sa servomotor hladko pohybuje od 0 do 180 stupňov, keď otáčate potenciometrom. Ak sa servomotor nepohybuje podľa očakávania, skontrolujte zapojenie a uistite sa, že potenciometer funguje správne. Okrem toho sa uistite, že Arduino je správne napájané a kód je nahraný bez chýb. Môžete očakávať, že servomotor bude v reálnom čase odrážať polohu potenciometra (vo videu o 02:00).
Časové pečiatky videa
- 00:00- Úvod do projektu
- 01:30- Vysvetlenie hardvérovej konfigurácie
- 03:45- Pokyny na zapojenie
- 05:00- Prezentácia kódu
- 07:30- Prezentácia dokončeného projektu
This tutorial is part of: Servomotory
- Controlling a Servo with Push Buttons Using Arduino
- Control a Servo Motor with a Push Button: Move Servo and Return SPB-1
- Control a Servo Motor with a Push Button: Move Servo in One Direction SPB-2
- Controlling a Servo Motor with a Push Button: Move Servo While Button Is Pressed (SPB-3)
- Controlling a Servo with a Potentiometer Using Arduino
- Controlling a Servo with Potentiometer and LCD1602 using Arduino
- Controlling Servo Motors Using an Infrared Remote with Arduino
- Ovládanie pozície serva pomocou gest rúk pre Arduino
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- Ako používať kontinuálny 360° servomotor s Arduinom
- Arduino Code and Video for PCA9685 16-Channel 12-Bit Servo Controller V1
- Build an Arduino Servo Toggle Switch with a Push Button
/**
*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
}
}
Resources & references
No resources yet.
Files📁
Datasheet (pdf)
-
sg90_serveo_motor_datasheet
sg90_serveo_motor_datasheet.pdf0.13 MB