Сабақ 92: Бірнеше сервоны потенциометрмен басқару| Arduino Қадамдық курс
Бұл жобада сіз Arduino Uno және екі потенциометр көмегімен тәуелсіз, көп арналы серво контроллерін құруды үйренесіз. Бір серво бір тұтқаны ұстанудың орнына, бұл нұсқаулық әр сервоға өзінің жеке аналогтық кірісін беруді көрсетеді, бұл екі—және алтыға дейінгі—серво қозғалтқыштарын тәуелсіз және бір уақытта басқаруға мүмкіндік береді. Бұл бірнеше қозғалатын бөліктерді дәл, қолмен басқаруды қажет ететін кез келген жоба үшін негізгі құрылыс блогы болып табылады.

Бұл қондырғы өте әмбебап. Міне, оны қолданудың бірнеше практикалық жолдары:
- Робототехника: Камера гимбалының пан/тилтін немесе кішкентай роботтың негізі мен қол буындарын басқару.
- Аниматроника: Қуыршақтың немесе аниматрондық кейіпкердің басы мен көздерін тәуелсіз басқару арқылы өмірге ұқсас қозғалыстар жасау.
- Модельді басқару: RC көліктері немесе модельдік ұшақтар үшін қанаттар мен элерондарды дәл реттеуге арналған арнайы контроллер құру.
- Автоматтандыру: Күн трекеріне немесе көп осьті позициялау құрылғысына қолмен басқару станциясын жасау.
Қажетті аппараттық құралдар
- Arduino Uno (немесе кез келген үйлесімді плата)
- 2x Серво қозғалтқыштар (мұнда стандартты 180 градустық серволар қолданылады)
- 2x Потенциометрлер (10kΩ жиі таңдалады)
- Макет тақтасы және жалғау сымдары
- Сыртқы 5В қуат көзі (бірнеше серво үшін ұсынылады)
Сым жалғау нұсқаулығы
Бұл жоба бір серволық қондырғыға қарағанда сәл көбірек сым жалғауды қажет етеді, себебі бірнеше компонентке қуат пен жерді тарату керек. Негізгі мәселе - макет тақтасының қуат шиналарын пайдаланып, ортақ 5В және GND шинасын жасау. Бұл құрылыс үшін сым жалғау диаграммасы өте маңызды.

Байланыстарды бөліп қарастырайық, бейнеде түсіндірілгендей (бейнеде 02:23). Алдымен қуат шиналарын орнатыңыз: Arduino-ның 5V пинін макет тақтасының оң шинасына, ал GND пинін теріс шинаға қосыңыз. Бұл барлық компоненттерге қуатқа оңай қол жеткізуге мүмкіндік береді.
Потенциометрлер: Әр потенциометр кернеу бөлгіші ретінде жұмыс істейді. Әр потенциометрдің оң жақ пинін 5V шинасына, ал сол жақ пинін GND шинасына қосыңыз. Ортаңғы пин - "сырғытпа" және айнымалы кернеуді қамтамасыз етеді. Бірінші потенциометрдің ортаңғы пинін аналогтық кіріс A0-ге, ал екіншісінің ортаңғы пинін A1-ге қосыңыз (бейнеде 03:22).
Серво қозғалтқыштар: Әр сервоның үш сымы бар. Қараңғы түсті сымды (әдетте қара немесе қоңыр) GND шинасына қосыңыз. Ортаңғы сымды (әдетте қызыл) 5V шинасына қосыңыз. Соңында, сигнал сымын (әдетте қызғылт сары немесе сары) Arduino-дағы PWM қолдайтын пинге қосыңыз. Бірінші сервоның сигнал сымы 3 пиніне, ал екінші сервоның сигнал сымы 5 пиніне қосылады (бейнеде 04:01). Есіңізде болсын, сервоны басқару үшін PWM қолдайтын пиндерді (Uno-да "~" белгісімен белгіленген) пайдалану керек.
Кодты түсіндіру
Код Arduino IDE-дегі стандартты "Knob" мысалына негізделген, бірақ екі сервоны өңдеу үшін өзгертілген. Логика қарапайым: потенциометрден аналогтық мәнді оқыңыз, оны бұрышқа кескіндеңіз және сервоға сол бұрышқа қозғалуды бұйырыңыз. Кодтың жоғарғы жағындағы конфигурация бөлімі - барлық реттеулерді жасайтын жер.
Міне, пиндерді анықтайтын және серво объектілерін жасайтын пайдаланушы конфигурациялайтын бөлім:
#include <Servo.h>
//**** серво 1 параметрлері
Servo servo1;
const int servo1PotPin = A0;
const int servo1Pin = 3;// PWM қолдайтын пин болуы керек
int servo1Value;
//**** серво 1 параметрлері СОҢЫ
//**** серво 2 параметрлері
Servo servo2;
const int servo2PotPin = A1;
const int servo2Pin = 5;// PWM қолдайтын пин болуы керек
int servo2Value;
//**** серво 1 параметрлері СОҢЫ
Бұл конфигурацияның негізі. Үшінші серво қосу үшін "серво 2 параметрлері" блогын көшіріп, барлық "2" сандарын "3"-ке өзгертіп, жаңа аналогтық пин (мысалы, A2) және жаңа PWM пинін (мысалы, 9) тағайындау керек. Servo класы Arduino IDE-ге кіріктірілген, сондықтан қосымша кітапханалар қажет емес.
setup() функциясында servo.attach(pin) командасы Arduino-ға әр сервоның сигнал сымына қай пин қосылғанын айтады. Әр серво үшін бір жол болуы керек.
void setup() {
//Robojax.com бірнеше серво
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
}
loop() функциясында код потенциометр мәнін оқиды, оны 0-180 градус диапазонына кескіндейді және сол бұрышты сервоға жазады. Соңындағы delay(5) - реттеу параметрі. Бейнеде көрсетілгендей, бұл мәнді 15 миллисекундтан 5 миллисекундқа дейін азайту серво қозғалысын әлдеқайда тегіс етеді және дірілді жояды (бейнеде 12:00).
Тірі жоба демонстрациясы
Схеманы сыммен жалғап, кодты жүктегеннен кейін демонстрация бірден басталады. Arduino-ны қуаттандырған кезде, әр серво өзінің сәйкес потенциометрінің ағымдағы параметрімен анықталған позицияға қозғалады. Тұтқаны айналдырған кезде, оның сервосы қозғалысты тегіс ұстанады. Бейне екі сервоның толығымен тәуелсіз жұмыс істейтінін көрсетеді, бұл күрделі, бір уақыттағы қозғалыстарға мүмкіндік береді. Егер діріл немесе тербеліс байқасаңыз, циклдегі delay() мәнін реттеу - бірінші кезекте сынайтын нәрсе.
Тараулар
- [00:00] Кіріспе және жобаға шолу
- [00:56] Сервоқозғалтқыштарды түсіну
- [02:23] Екі серво мен потенциометрлерге арналған сым схемасы
- [04:15] Сым жалғау туралы егжей-тегжейлі түсіндірме
- [06:49] Кодты түсіндіру: конфигурация және орнату
- [09:15] Кодты түсіндіру: басқару логикасы және карталау
- [11:15] Тікелей демонстрация және баптау
/*
* Control two or more servo motors
* using potentiometers.
* Modified by Ahmad Shamshiri on Oct 17, 2019 at 20:13
* in Ajax, Ontario, Canada . www.Robojax.com
* This code on robojax https://robojax.com/RJT766
*
* Original code from Arduino IDE: File->Examples->Servo->knob
*
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
* Get this code and other Arduino codes from Robojax.com
* * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <Servo.h>
//**** servo 1 settings
Servo servo1;
const int servo1PotPin =A0;
const int servo1Pin = 3;// Must use PWM enabled pin
int servo1Value;
//**** servo 1 settings END
//**** servo 2 settings
Servo servo2;
const int servo2PotPin =A1;
const int servo2Pin = 5;// Must use PWM enabled pin
int servo2Value;
//**** servo 1 settings END
void setup() {
//Robojax.com multiple servo
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
}
void loop() {
//Robojax.com multiple servo
servo1Value = analogRead(servo1PotPin);
servo1Value = map(servo1Value, 0, 1023, 0, 180);
servo1.write(servo1Value);
servo2Value = analogRead(servo2PotPin);
servo2Value = map(servo2Value, 0, 1023, 0, 180);
servo2.write(servo2Value);
delay(5);
//Robojax.com multiple servo
}// loop end
Сізге қажет болуы мүмкін нәрселер
-
Амазонка
-
Амазонка
-
eBay
-
AliExpressPurchase SG90 Servo motor 180 or 360 from AliExpresss.click.aliexpress.com
Ресурстар мен сілтемелер
Әлі ресурстар жоқ.
Файлдар📁
Басқа файлдар
-
SG90 Seroo моторының деректер парағы
robojax-servo-SG90_datasheet.pdf0.12 MB