Search Code

Ovládanie servomotora Arduino pomocou potenciometra

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ýrobcaParalaxa
Číslo dieluSG90
Logika/IO napätie5 V
Napájacie napätie4.8-6 V
Výstupný prúd (na kanál)~500 mA
Špičkový prúd (na kanál)1 A
Pokyny pre PWM frekvenciu50 Hz
Vstupné logické prahy0,5 V (nízke), 2,5 V (vysoké)
Pokles napätia / RDS(on)/ saturácia0,5 V pri 500 mA
Tepelné limity0°C až 60°C
BalíkŠtandardný 9g servomotor
Poznámky / variantyBež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

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

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

Images

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

Resources & references

No resources yet.

Files📁

Datasheet (pdf)