Сабақ 86: Потенциометр арқылы сервоқозғалтқыштың орнын басқару
Қарапайым тұтқаны бұрып, механикалық қолдың әрбір қимылыңызды дәл қайталағанын көруді елестетіңіз. Бұл потенциометрді серво қозғалтқышпен біріктірудің сиқыры. Robojax компаниясының Arduino Step by Step курсының бөлігі болып табылатын бұл жоба электроникадағы іргелі және өте пайдалы тұжырымдаманы көрсетеді: аналогтық кірісті дәл физикалық қозғалысқа айналдыру. Сіз потенциометрден айнымалы кернеуді оқуды, бұл мәнді бұрыштар диапазонына кескіндеуді және серво қозғалтқышқа дәл сол позицияға айналуды бұйыруды үйренесіз. Бұл қолмен басқару автоматтандырумен түйісетін интуитивті және интерактивті жобаларды құруға арналған сіздің қақпаңыз.

Бұл дағдының қолдану аясы кең және практикалық. Міне, сізді шабыттандыру үшін бірнеше идея:
- Роботтық қолды басқару: Роботтық қолдың әрбір буынын дәл алу-қою операциялары үшін қолмен орналастыру үшін потенциометрді қолданыңыз.
- Камераны панорамалау және көлбеу жүйесі: Уақыт аралықтары немесе бақылау үшін қашықтан басқарылатын камера тірегін жасаңыз, тұтқаны бұру арқылы тегіс панорамалау және көлбеу.
- Аналогтық өлшеуіш көшірмесі: Сенсор деректеріне негізделген қозғалатын физикалық панель өлшеуішін (спидометр немесе температура тұтқасы сияқты) жасаңыз, потенциометр қолмен басқару немесе калибрлеу құралы ретінде әрекет етеді.
- Интерактивті өнер қондырғылары: Көрермендердің кірісіне жауап беретін кинетикалық мүсіндер жасаңыз, мұнда тұтқаны бұру қозғалатын бөліктердің орнын өзгертеді.
- Модельдік көлік рулі: Модельдік көліктің немесе қайықтың басқару бұрышын қашықтан басқарыңыз, цифрлық түймелерге қарағанда интуитивті және аналогтық сезім береді.
Бұл нұсқаулық Robojax компаниясының Lesson 86: Control position of a servo motor using potentiometer бейне оқулығына негізделген (бейнеде 00:00). Ол сізді сымдарды түсінуден бастап, барлығын жұмыс істейтін кодты түсіндіруге дейінгі барлық процесті бастан өткереді. Бастайық.
Аппараттық құралдар мен компоненттер
Осы жобаны орындау үшін сізге келесі компоненттер қажет:
- Arduino тақтасы (мысалы, Uno, Nano)
- Стандартты серво қозғалтқыш (мысалы, SG90 немесе MG996R)
- Потенциометр (айнымалы резистор, әдетте 10kΩ)
- Жалғау сымдары
- Макет тақтасы (қосымша, оңай қосылу үшін)
Сымдарды түсіну
Бұл жобаның сымдары қарапайым. Негізгісі - серво мен потенциометр үшін дұрыс қуат пен сигнал қосылымдарын қамтамасыз ету. Серво - қуатты көп тұтынатын құрылғы, сондықтан ол қуатын тікелей Arduino-дың 5V түйреуішінен алады. Потенциометр кернеу бөлгіші ретінде әрекет етеді және біз оның орнын анықтау үшін оның сырғытпасындағы (ортаңғы түйреуіштегі) кернеуді оқимыз. (бейнеде 01:05)
Бұл жоба қолданатын ақылды трюк - потенциометрді қуаттандыру үшін цифрлық түйреуіште қосымша 5V көзін жасау, өйткені кейбір Arduino тақталарында тек бір арнайы 5V түйреуіш бар. Бұл кодта цифрлық түйреуішті (8-түйреуіш) HIGH күйіне орнату арқылы жасалады, ол 5V шығарады. (бейнеде 00:39)
Міне, бейнеде айтылған сымдар диаграммасы:
Қосылымдарды бөліп қарастырайық:
- Серво қозғалтқыш:
- Қуат (Қызыл сым) → Arduino 5V түйреуіші
- Жер (Қоңыр/Қара сым) → Arduino GND түйреуіші
- Сигнал (Қызғылт сары/Сары сым) → Arduino 3-түйреуіші (PWM қабілетті түйреуіш)
- Потенциометр:
- Сол жақ түйреуіш → Arduino GND түйреуіші
- Ортаңғы түйреуіш (Сырғытпа) → Arduino аналогтық A0 түйреуіші
- Оң жақ түйреуіш → Arduino 8-түйреуіші (кодта VCC2 ретінде анықталған)
Кодты түсіндіру
Бұл жобаның коды талғампаз түрде қарапайым. Ол потенциометрді оқу және сервоны басқару үшін бірнеше негізгі Arduino функцияларын пайдаланады. Өз жобаларыңыз үшін реттей алатын пайдаланушы конфигурациялайтын бөліктерге назар аударайық. (бейнеде 03:00)
Эскиздің жоғарғы жағында сіз түйреуіштерді анықтайсыз және серво нысанын жасайсыз. Бұл сымдарға негізделген өзгертетін негізгі айнымалылар:
#include <Servo.h>
Servo myservo; // сервоны басқару үшін серво нысанын жасау
int potpin = A0; // потенциометрді қосу үшін қолданылатын аналогтық түйреуіш
int servoPin = 3; // серво үшін цифрлық түйреуішті (PWM бар) анықтау. Тек 3, 5, 6, 9, 10, 11 түйреуіштерін қолдануға болады
int VCC2 = 8;// потенциометр үшін қосымша VCC анықтау
int val; // аналогтық түйреуіштен мәнді оқуға арналған айнымалы
Міне, әр бөліктің не істейтіні:
- Servo myservo;: Бұл жол біздің нақты серво қозғалтқышымызды басқару үшін қолданатын
myservoатты нысанды жасайды. Оны қайта атауға болады, бірақ кейінірек кодта сол атауды қолдану керек. - int potpin = A0;: Бұл потенциометрдің сырғытпасы қосылған аналогтық түйреуішті анықтайды. Сымды басқа аналогтық түйреуішке ауыстырсаңыз, осы нөмірді жаңартуыңыз керек.
- int servoPin = 3;: Бұл сервоның сигнал сымы үшін цифрлық түйреуішті орнатады. PWM қабілетті түйреуішті (әдетте тақтада '~' белгісімен белгіленген) қолдану өте маңызды. Түсініктеме көптеген Arduino үшін жарамды түйреуіштерді тізімдейді.
- int VCC2 = 8;: Бұл потенциометр үшін қосымша 5V көзі ретінде қолданылатын түйреуіш. Бірнеше 5V түйреуіші бар тақта болса, оны тікелей қосып, кодтың осы бөлігін алып тастауға болады.
setup() функциясында код сервоны инициализациялайды және қосымша қуат пинін орнатады. myservo.attach(servoPin) функциясы маңызды, себебі ол Arduino-ға сервоның сигнал сымына қай пин қосылғанын көрсетеді.
void setup() {
Serial.begin(9600); // serial орнату
myservo.attach(servoPin); // сервоны 3-пинге серво объектісіне қосады
pinMode(VCC2, OUTPUT);// 8-пинді шығыс ретінде орнату
digitalWrite(VCC2, HIGH);// 8-пинді HIGH етіп орнату, сонда ол 5V пині ретінде жұмыс істейді
}
Негізгі логика loop() функциясында. Ол потенциометрдің мәнін оқиды, оны бұрышқа масштабтайды және сервоға қозғалуды бұйырады. Мұндағы екі маңызды функция — analogRead() және map(). (видеода 04:27)
void loop() {
val = analogRead(potpin); // потенциометрдің мәнін оқиды (0 мен 1023 арасындағы мән)
val = map(val, 0, 1023, 0, 180); // оны сервомен қолдану үшін масштабтайды (0 мен 180 арасындағы мән)
myservo.write(val); // масштабталған мәнге сәйкес серво орнын орнатады
Serial.print(val);
Serial.println();
delay(50); // сервоның сол жерге жетуін күтеді
}
Міне, ол қалай жұмыс істейді:
- analogRead(potpin): Бұл функция потенциометрдің жылжымалы контактісінен кернеуді оқиды және 0 (0В) мен 1023 (5В) арасындағы мәнді қайтарады.
- map(val, 0, 1023, 0, 180): Бұл бүкіл жобаның кілті. Ол потенциометрден алынған шикі мәнді (0-ден 1023-ке дейін) алып, оны пропорционалды түрде серво бұрышына (0-ден 180 градусқа дейін) түрлендіреді. Мысалы, егер потенциометр 511 мәнін оқыса (шамамен жартысы),
map()функциясы 90 қайтарады, сервоны орталық орнына жылжытады. - myservo.write(val): Бұл функция есептелген бұрышты (енді
val-де сақталған) алып, сервоға сол орынға айналуды бұйырады. - delay(50): Бұл әр циклдің соңында кішкене үзіліс қосады. Ол жаңарту жылдамдығын басқарады. Үлкенірек үзіліс (мысалы, 200мс) сервоны қадамдармен қозғалтады, ал кішірек үзіліс (мысалы, 50мс) қозғалысты өте тегіс етеді. Сіз мұны жауап беру жылдамдығын өзгерту үшін реттей аласыз. (видеода 07:26)
Тірі Жоба Демонстрациясы
Видеода жобаның іс-әрекетін көре аласыз. Потенциометр тұтқасы бұрылғанда, серво қозғалтқышының қолы оның орнын пропорционалды түрде ұстанады. Serial мониторы ағымдағы бұрышты басып шығарады, бұл карталаудың дұрыс жұмыс істеп тұрғанын растайды. Потенциометр ең төменгі орнында болғанда, серво 0 градуста. Тұтқаны максимумға бұрғанда, серво тегіс 180 градусқа айналады. (видеода 06:33)
Бұл нақты уақыттағы кері байланыс циклі аналогтық сенсордың цифрлық жетекпен үздіксіз интеграциясын көрсетеді, жауап беретін және интуитивті басқару жүйесін жасайды.
Бөлімдер
- [00:00] Кіріспе және Жоба Шолуы
- [01:05] Схема және Сым Диаграммасы
- [02:07] Физикалық Сым Демонстрациясы
- [03:00] Кодты Түсіндіру
- [06:33] Тірі Демонстрация және Тестілеу
- [07:26] Серво Жауап Жылдамдығын Реттеу
/*
* Lesson 88: Controlling Servo motor a with Potentiometer
* 📚⬇️ Download and resource page https://robojax.com/RJT763
watch full video tutroial: https://www.youtube.com/watch?v=ntRW77mNFFk
Controlling a servo position using a potentiometer (variable resistor)
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
modified on 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Knob
Update by Ahmad Shamshiri on Jan 01, 2019 in Ajax, Ontario, Canada
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = A0; // analog pin used to connect the potentiometer
int servoPin = 3; // define a digital pin (with PWM) for servo. Can use only pin 3, 5, 6,9, 10, 11
int VCC2 = 8;// define extra VCC for potentiometer
int val; // variable to read the value from the analog pin
void setup() {
//
Serial.begin(9600); // setup serial
myservo.attach(servoPin); // attaches the servo on pin 3 to the servo object
pinMode(VCC2, OUTPUT);// set pin 8 as output
digitalWrite(VCC2, HIGH);// set pin 8 HIGH so it acts as 5V pin
}
void loop() {
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
Serial.print(val);
Serial.println();
delay(50); // waits for the servo to get there
}
Сізге қажет болуы мүмкін нәрселер
-
Амазонка
-
Амазонка
-
eBay
-
AliExpressPurchase SG90 servo motor 180 or 360 from AliExpresss.click.aliexpress.com
Ресурстар мен сілтемелер
Файлдар📁
Басқа файлдар
-
SG90 Seroo моторының деректер парағы
robojax-servo-SG90_datasheet.pdf0.12 MB