Кодты іздеу

Arduino сервомоторын потенциометр арқылы басқару

Arduino сервомоторын потенциометр арқылы басқару

Бұл оқулықта біз Arduino көмегімен потенциометрді пайдаланып сервомоторды қалай басқаруға болатынын зерттейміз. Мақсат - потенциометрдің айналдыруына негізделген сервомотордың позициясын реттейтін қарапайым схеманы жасау. Осы жобаның соңында сіз потенциометрді айналдырған кезде сервомотордың бұрышын 0-ден 180 градусқа дейін тегіс өзгертуге мүмкіндік беретін жұмыс істейтін модельге ие боласыз. Бұл Arduino-да аналогтық кіріс пен сервоконтрольдің негіздерін түсінудің тамаша тәсілі.

Бұл мақсатқа жету үшін біз Arduino тақтасын, сервомоторды және потенциометрді қолданамыз. Потенциометр айнымалы резистор ретінде қызмет етеді, Arduino-ға аналогтық кіріс береді, ол сервомотордың орнын сәйкесінше анықтайды. Бұл жоба тек көңілді ғана емес, сонымен қатар білім беретін, өйткені ол электроника мен бағдарламалаудағы негізгі ұғымдарды көрсетеді. Толығырақ түсінік алу үшін бейнені қарауды ұмытпаңыз (бейне 00:00-де).

Аппараттық құралдар түсіндірілді

Бұл жобада негізгі компоненттер Arduino тақтасы, сервомотор және потенциометр болып табылады. Arduino операцияның миы, кірістерді өңдеп, шығыстарды басқарады. Сервомотор Arduino-дан алған командаларға сәйкес физикалық түрде қозғалады. Потенциометр 1k омнан 1M омға дейін болуы мүмкін, ол пайдаланушыларға сервомотор қозғалысына айналатын өзгермелі кіріс беруге мүмкіндік береді.

Серво моторы PWM (Импульстық Кеңдік Модуляциясы) сигналы арқылы жұмыс істейді, ол қажетті позицияны көрсетеді. Потенциометрді айналдырғанда, оның кедергісі өзгереді, бұл Arduino-да аналогтық кернеу ретінде оқылады. Серво мотор 5В-мен жұмыс істейді. 3.3В-мен жұмыс істемейді. Бұл кернеу серво моторының қозғалыс диапазонына сәйкес келеді, 0 градусдан 180 градусқа дейін тегіс қозғалыс жасауға мүмкіндік береді.

SG90 сервомоторының деректер парағының мәліметтері

ӨндірушіПараллакс
Бөлшек нөміріSG90
Логика/Кернеу5 В
Жабдықтау кернеуі4.8-6 В
Шығыс токы (арна бойынша)~500 мА
Шың ток (арна бойынша)1 A
PWM жиілігі бойынша нұсқаулық50 Гц
Кіріс логика шектер0.5 В (төмен), 2.5 В (жоғары)
Кернеу түсуі / RDS(қосулы)/ қанығу0.5 В 500 мА
Жылу шектеулері0°C-тан 60°C-қа дейін
ПакетСтандартты 9г сервомотор
Ескертпелер / нұсқаларRC қолданбаларында жиі пайдаланылады

  • Сервоның максималды ток рейтингінен аспауын қамтамасыз етіңіз.
  • Серво жоғары жүктемелерде үздіксіз жұмыс істесе, жылу алмасушыны пайдаланыңыз.
  • Потенциометрді дәл өлшемдер үшін аналогтық пинге қосыңыз.
  • Серво басқару үшін PWM сигналдарының уақытын бақылаңыз.
  • Сервоның қозғалыс диапазонын физикалық кедергілерден аулақ болу үшін тексеріңіз.

Сымдарды қосу нұсқаулары

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

Бұл конфигурация үшін компоненттерді келесідей қосу қажет:

Потенциометрдің ортаңғы пинін (сүргі) Ардуиноның аналогтық пиніне қосыңыз.A0Потенциометрдің басқа екі пині қосылуы керек5VжәнеGNDArduino-да. Серво мотор үшін қызыл сымды қосыңыз5Vқара сымғаGND, және сары немесе ақ сымды цифрлық пинге9Arduino-да. Бұл құрылым потенциометрге Arduino-ға аналогтық кіріс беруге мүмкіндік береді, ол осы кіріс негізінде сервомотордың орнын басқарады.

Барлық қосылымдарды тексеріп, сервомотордың қозғалыс диапазонында кедергісіз екеніне көз жеткізіңіз. Егер басқа Arduino моделін қолдансаңыз, аналогтық кіріс пен сервомотордың шығысы үшін пин тағайындауларының үйлесімділігін растаңыз.

Код мысалдары мен нұсқаулықтар

Төменде сервоны іске қосатын және потенциометр мәнін оқитын кодтың үзіндісі берілген:


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

Бұл кодта біз Servo кітапханасын қосып, servo объектісін жасаймыз.myservoСерво пинге бекітілген.9, бұл бізге оны осы пин арқылы басқаруға мүмкіндік береді.


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
}

Цикл функциясында біз потенциометрдің мәнін пиннен оқимыз.A0және оны диапазонынан (0-1023) сервомотордың диапазонына (0-180 градус) ауыстырыңыз.myservo.write(pos)команда содан кейін сервоны потенциометрдің айналуына негізделген қажетті позицияға жылжытады.

Көрсетілім / Не күту керек

Бұл бағдарламаны іске қосқанда, потенциометрді айналдырған кезде сервомотордың 0-ден 180 градусқа дейін тегіс қозғалуы керек. Егер сервомотор күтілгендей қозғалмаса, сымдарды тексеріп, потенциометрдің дұрыс жұмыс істеп тұрғанына көз жеткізіңіз. Сонымен қатар, Ардуиноның дұрыс қуатталғанына және кодтың қателерсіз жүктелгеніне көз жеткізіңіз. Сервомотордың потенциометрдің позициясын нақты уақыт режимінде (02:00 видеода) көрсететінін күтуге болады.

Бейне уақыт белгілері

  • 00:00- Жобамен танысу
  • 01:30- Аппараттық жабдықтау түсіндірмесі
  • 03:45- Сымдарды қосу нұсқаулары
  • 05:00- Кодты қарау
  • 07:30- Дайын жобаның демонстрациясы

Суреттер

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
Тіл: 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
  }
}

Ресурстар мен сілтемелер

Әлі ресурстар жоқ.

Файлдар📁

Техникалық сипаттама (pdf)