Кодты іздеу

Сабақ 89: Үздіксіз немесе 360 серво қозғалтқышын қолдану| Arduino қадамдық курс

Сабақ 89: Үздіксіз немесе 360 серво қозғалтқышын қолдану| Arduino қадамдық курс

Сіз ешқашан стандартты серво сияқты тек алға-артқа қозғалудың орнына, қозғалтқышты қалаған уақытқа дейін екі бағытта да айналдырғыңыз келді ме? Дәл осыны үздіксіз немесе 360 градустық серво қозғалтқышы ұсынады. Белгілі бір бұрышқа (әдетте 0-ден 180 градусқа дейін) қозғалатын стандартты серводан айырмашылығы, үздіксіз серво сағат тілімен немесе сағат тіліне қарсы бағытта шексіз айналады. Бұл оны шағын роботтарды, камера платформаларын немесе үздіксіз айналуды басқаруды қажет ететін кез келген жобаны жасауға өте ыңғайлы етеді.

Бұл жобада біз тек үш түймені пайдаланып, 360 градустық серво үшін басқару жүйесін жасаймыз. Сіз сервоны сағат тілімен, сағат тіліне қарсы айналдыруға немесе кез келген сәтте тоқтатуға бұйрық бере аласыз. Бұл нұсқаулық сізді сымдарды қосу арқылы өткізеді, кодтың пайдаланушы реттейтін бөліктерін түсіндіреді және жүйенің іс-әрекетін тікелей көрсетеді.

Міне, өз жобаларыңызда үздіксіз сервоны пайдаланудың бірнеше практикалық идеялары:

  • Шағын екі доңғалақты робот жасаңыз: Доңғалақтарды жүргізу үшін екі үздіксіз сервоны пайдаланыңыз, бұл алға, артқа және бұрылу қозғалыстарына мүмкіндік береді.
  • Панорамалық және көлбеу камера тірегін жасаңыз: Қауіпсіздік немесе жабайы табиғат камерасын баяу, шексіз панорамалау үшін бір үздіксіз сервоны пайдаланыңыз.
  • Конвейер таспасын автоматтандырыңыз: Заттарды сұрыптау немесе тарату үшін шағын конвейер жүйесін басқарыңыз.
  • Айналмалы дисплей стендін жобалаңыз: Үздіксіз айналатын платформада 3D үлгіні немесе өнімді көрсетіңіз.

Қажетті аппараттық құралдар

  • Arduino тақтасы (Uno, Nano және т.б.)
  • Үздіксіз (360 градустық) серво қозғалтқышы (мысалы, FS90R, DS04-NFC)
  • 3x түйме
  • Жалғау сымдары
  • Breadboard (макет тақтасы)

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

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

  • Серво жері (қараңғы сым): Arduino GND-ге қосыңыз.
  • Серво қуаты (ортаңғы/қызыл сым): Arduino 5V-ке қосыңыз.
  • Серво сигналы (ашық сым): Arduino 9-пиніне қосыңыз.

Үш түйме үшін әр түйменің екі жағы бар. Барлық түймелердің бір жағы бірге қосылып, содан кейін Arduino GND-ге жалғанады. Әр түйменің екінші жағы төменде сипатталғандай (бейнеде 03:40-та) жеке цифрлық пинге қосылады:

  • Сағат тілімен (CW) түймесі: Arduino 2-пиніне қосыңыз.
  • Тоқтату түймесі: Arduino 3-пиніне қосыңыз.
  • Сағат тіліне қарсы (CCW) түймесі: Arduino 4-пиніне қосыңыз.
360 servo 3 push button wiring

Кодты түсіндіру

Код оңай конфигурацияланатындай етіп жасалған. Сізге реттеу қажет болатын ең маңызды бөлік - сервоға оның әрекеттерін басқару үшін жіберілетін нақты PWM мәндерін сақтайтын sc[] массиві. Бұл мәндер әмбебап емес және сіздің нақты серво қозғалтқышыңызға калибрленуі керек (бейнеде 12:23-те).

int sc[]={106, 58, 0};// серво командалары ретімен
        //CCW, STOP,CW

Бұл массив калибрлеудің негізі болып табылады. Мәндер келесі ретпен пайдаланылады:

  • sc[0] = 106: Бұл мән сервоны сағат тіліне қарсы айналдыру үшін жіберіледі.
  • sc[1] = 58: Бұл "тоқтату" мәні. Ішкі тізбекке байланысты қозғалтқышты тоқтататын нақты мән әртүрлі болады. Сіздің сервоңыз бұл команда жіберілгенде де баяу айналуы мүмкін, сондықтан қозғалтқышыңыз үшін нақты "толық тоқтау" мәнін табу үшін бұл санды аздап реттеу қажет болуы мүмкін.
  • sc[2] = 0: Бұл мән сервоны максималды жылдамдықпен сағат тілімен айналдырады.

Айналу жылдамдығын өзгерту үшін sc[] массивіндегі мәндерді реттеуге болады. Мысалы, sc[0] мәнін 70-ке қою сағат тіліне қарсы айналуды баяулатады. Мән "тоқтату" мәніне (58) неғұрлым жақын болса, қозғалтқыш сол бағытта соғұрлым баяу айналады. 58-ден алыс мәндер жылдамдықты максималды шекке дейін арттырады.

Сондай-ақ өзгерту қажет болуы мүмкін бірнеше негізгі айнымалылар бар. servoPin 9-ге орнатылған, бұл Arduino-да PWM қолдайтын пин болуы керек. Түйме пиндері кодтың басында анықталған және қажет болса өзгертілуі мүмкін.

int servoPin = 9;// бұл пин PWM ~ барлардың бірі болуы керек

#define STOPpin 3 // STOP үшін түйме пині
#define CWpin 2 //  CW үшін түйме
#define CCWpin 4 // CCW үшін түйме

Соңында, scText[] массиві Serial Monitor-ға жөндеу үшін басып шығарылатын жолдарды сақтайды. Қаласаңыз, әртүрлі хабарламаларды көрсету үшін оларды өзгерте аласыз.

Кодты қалай пайдалану керек

Ұсынылған кодты Arduino тақтаңызға жүктеңіз. Күй хабарламаларын көру үшін Serial Monitor-ды (9600 бодқа орнатылған) ашыңыз. Енді сервоны үш түймені пайдаланып басқара аласыз:

  • CW түймесін басып тұрыңыз: Серво сағат тілімен айнала бастайды. Serial Monitor "CW" және жіберілетін мәнді көрсетеді.
  • CCW түймесін басып тұрыңыз: Серво сағат тіліне қарсы айнала бастайды. Serial Monitor "CCW" және жіберілетін мәнді көрсетеді.
  • Тоқтату түймесін басыңыз: Серво тоқтауға тырысады. Serial Monitor "Stop" көрсетеді.

Егер сервоңыз «Тоқтату» түймесі басылғанда толық тоқтамаса, sc[] массивіндегі sc[1] мәнін калибрлеу қажет болады. Мәнді аздап өзгертіп көріңіз (мысалы, 58-ден 54 немесе 52-ге) және мотор толық қозғалыссыз қалғанша кодты қайта жүктеңіз.

Тікелей демонстрация

Бейнежазбада жүргізуші толық жүйені көрсетеді. Түймелерді басуға байланысты сервоның екі бағытта да айналатынын көре аласыз. Serial Monitor шығысы да көрсетіледі, онда ағымдағы күй («CW», «Stop» немесе «CCW») және сервоға жіберілетін нақты мән көрсетіледі. Бұл жеке моторыңыз үшін тамаша калибрлеу мәндерін табуға және қателерді жоюға арналған тамаша құрал. Демонстрация сонымен қатар sc[] массивіндегі мәндерді реттеу мотордың жылдамдығына, баяу қозғалыстан максималды айналу жылдамдығына дейін тікелей әсер ететінін көрсетеді.

Қорытынды

Бұл жоба үздіксіз серво моторды басқарудың қарапайым және тиімді тәсілін ұсынады. «Тоқтату» мәнін калибрлеу процесін түсіну арқылы өз робототехника және автоматтандыру жобаларыңызда дәл басқаруды қамтамасыз ете аласыз.

Бейне тараулары

  • [00:05] Үздіксіз серво моторға кіріспе
  • [02:02] Сервоның аппараттық шолуы
  • [02:40] Сымдар схемасы және қосылымдар
  • [05:07] Код түсіндірмесі: айнымалылар және орнату
  • [08:03] Код түсіндірмесі: негізгі цикл логикасы
  • [09:56] servoCommand() функциясы
  • [10:54] Тікелей демонстрация және Serial Monitor шығысы
  • [12:23] Серво жылдамдығы мен тоқтату мәндерін калибрлеу

Суреттер

360 servo 3 push button wiring
360 servo 3 push button wiring
209-How to control a 360 servo with push buttons
Тіл: C++
++
/*
 *  S05-13 Servo with 3 push buttons
 *  Demonstration of Controlling a Continuous Servo (360 servo)
 *  This code allows you to control a 360-degree servo using push buttons
 *
 * Modified by Ahmad Shamshiri for Robojax Robojax.com
 * on Jan 17, 2019 at 22:42 in Ajax, Ontario, Canada
 Watch the video instruction for this sketch: https://youtu.be/hVe4TSRV4ww

 Watch Introduction to  360 Servo video with code: https://youtu.be/b_xvu6wWafA
 You can get the wiring diagram from my Arduino Course at Udemy.com
 Learn Arduino step by step with all libraries, codes, and wiring diagrams all in one place
 visit my course now http://robojax.com/L/?id=62

 If you found this tutorial helpful, please support me so I can continue creating
 content like this. 
 or make a donation using PayPal http://robojax.com/L/?id=64

 Original code by BARRAGAN <http://barraganstudio.com>
 *
 * Code is available at http://robojax.com/learn/arduino

 * 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 downloaded 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 myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

int servoPin = 9;// this pin must be one of those with PWM ~


#define STOPpin 3 // push button pin  for STOP
#define CWpin 2 //  push button for CW
#define CCWpin 4 // push button for CCW

int sc[]={106, 58, 0};// servo commands are in order
        //CCW, STOP,CW

String scText[]={"CCW","Stop","CW"};// define texts for 3 actions
int statusText;
int CWBS, CCWBS, SBS;
      //CW button status (CWBS)
      //CCW button status (CCWBS)
      //stop button status (SBS)

void setup() {
  Serial.begin(9600);
  pinMode(STOPpin,INPUT_PULLUP);// set pin for push button STOP
  pinMode(CCWpin,INPUT_PULLUP);// set pin for push button CCW
  pinMode(CWpin,INPUT_PULLUP);// set pin for push button CW

  myservo.attach(servoPin);  // attaches the servo on pin 9 to the servo object
  myservo.write(sc[1]);// send STOP command
  statusText=1;// initial value is STOP
}



void loop() {

    CCWBS = digitalRead(CCWpin);// read status of button CCW
    SBS = digitalRead(STOPpin);// read status of button STOP
    CWBS = digitalRead(CWpin);// read status of button CW

    if(CCWBS ==LOW)
    {
      servoCommand(0);
    }else if(SBS ==LOW)
    {
      servoCommand(1);
    }else if(CWBS ==LOW)
    {
      servoCommand(2);
    }

  Serial.println(scText[statusText]);
  delay(50);
}// loop



void servoCommand(int n)
{
   statusText = n;
   myservo.write(sc[n]);
   Serial.print("Going to  ");
   Serial.print(scText[n]);
   Serial.print( "(");
   Serial.print(sc[n]);
   Serial.println(")");
}

Сізге қажет болуы мүмкін нәрселер

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

Файлдар📁

Басқа файлдар