Search Code

Somo la 89: Kutumia Motor ya Servo Inayoendelea au 360| Kozi ya Arduino Hatua kwa Hatua

Somo la 89: Kutumia Motor ya Servo Inayoendelea au 360| Kozi ya Arduino Hatua kwa Hatua

Umewahi kutaka kuzungusha motor katika mwelekeo wowote kwa muda mrefu kama unavyotaka, badala ya kusonga na kurudi tu kama servo ya kawaida? Hii ndiyo hasa inayotolewa na motor ya servo inayoendelea au ya digrii 360. Tofauti na servo ya kawaida inayosogea kwenye pembe maalum (kawaida digrii 0 hadi 180), servo inayoendelea huzunguka bila kikomo katika mwelekeo wa saa au kinyume cha saa. Hii inafanya kuwa bora kwa kujenga roboti ndogo, majukwaa ya kamera, au mradi wowote unaohitaji udhibiti wa mzunguko unaoendelea.

Katika mradi huu, tutajenga mfumo wa udhibiti wa servo ya digrii 360 kwa kutumia vitufe vitatu tu vya kushinikiza. Utaweza kuamuru servo kuzunguka kwa mwelekeo wa saa, kinyume cha saa, au kusimama wakati wowote. Mwongozo huu utakupitia uunganishaji wa nyaya, kuelezea sehemu zinazoweza kubadilishwa na mtumiaji za msimbo, na kukuonyesha onyesho la moja kwa moja la mfumo ukifanya kazi.

Hapa kuna mawazo machache ya vitendo ya kutumia servo inayoendelea katika miradi yako mwenyewe:

  • Jenga roboti ndogo ya magurudumu mawili: Tumia servo mbili zinazoendelea kuendesha magurudumu, kuruhusu mwendo wa mbele, nyuma, na kugeuka.
  • Unda mlima wa kamera wa pan-and-tilt: Tumia servo moja inayoendelea kwa mzunguko wa polepole usio na kikomo wa kamera ya usalama au wanyamapori.
  • Otomatisha ukanda wa conveyor: Dhibiti mfumo mdogo wa conveyor kwa kupanga au kusambaza vitu.
  • Sanifu stendi ya kuonyesha inayozunguka: Onyesha mfano wa 3D au bidhaa kwenye jukwaa linalozunguka kwa kuendelea.

Vifaa Vinavyohitajika

  • Bodi ya Arduino (Uno, Nano, n.k.)
  • Motor ya servo inayoendelea (digrii 360) (mfano, FS90R, DS04-NFC)
  • Vitufe 3 vya kushinikiza
  • Nyaya za jumper
  • Breadboard

Mwongozo wa Uunganishaji wa Nyaya

Uunganishaji wa nyaya kwa mradi huu ni rahisi. Motor ya servo ina nyaya tatu: kwa kawaida nyeusi kwa ardhi (GND), ya kati (mara nyingi nyekundu) kwa nguvu (5V), na nyepesi (machungwa, njano, au nyeupe) kwa ishara. Kama inavyoonyeshwa kwenye video, servo imeunganishwa kwenye Arduino kama ifuatavyo:

  • Ardhi ya Servo (nyaya nyeusi): Unganisha kwenye GND ya Arduino.
  • Nguvu ya Servo (nyaya ya kati/nyekundu): Unganisha kwenye 5V ya Arduino.
  • Ishara ya Servo (nyaya nyepesi): Unganisha kwenye pin 9 ya Arduino.

Kwa vitufe vitatu vya kushinikiza, kila kitufe kina pande mbili. Upande mmoja wa vitufe vyote umeunganishwa pamoja na kisha kwenye GND ya Arduino. Upande mwingine wa kila kitufe umeunganishwa kwenye pin tofauti ya dijiti, kama ilivyoelezwa hapa chini (kwenye video saa 03:40):

  • Kitufe cha mwelekeo wa saa (CW): Unganisha kwenye pin 2 ya Arduino.
  • Kitufe cha kusimama: Unganisha kwenye pin 3 ya Arduino.
  • Kitufe cha kinyume cha saa (CCW): Unganisha kwenye pin 4 ya Arduino.
360_Serrvo_3_push_button_wiring

Maelezo ya Msimbo

Msimbo umeundwa kuwa rahisi kubadilisha. Sehemu muhimu zaidi utakayohitaji kurekebisha ni safu ya sc[], ambayo inashikilia thamani maalum za PWM zinazotumwa kwenye servo kudhibiti vitendo vyake. Thamani hizi si za jumla na lazima zirekebishwe kwa motor yako maalum ya servo (kwenye video saa 12:23).

int sc[]={106, 58, 0};// amri za servo ziko kwa mpangilio
        //CCW, STOP,CW

Safu hii ni kiini cha urekebishaji. Thamani zinatumika kwa mpangilio huu:

  • sc[0] = 106: Thamani hii inatumwa kufanya servo kuzunguka kinyume cha saa.
  • sc[1] = 58: Hii ni thamani ya "kusimama". Kutokana na mzunguko wa ndani, thamani halisi inayofanya motor kusimama inatofautiana. Unaweza kugundua servo yako inazunguka polepole hata wakati amri hii inatumwa, na utahitaji kurekebisha nambari hii kidogo kupata thamani halisi ya "kusimama kabisa" kwa motor yako.
  • sc[2] = 0: Thamani hii inafanya servo kuzunguka kwa mwelekeo wa saa kwa kasi ya juu.

Unaweza kurekebisha thamani katika safu ya sc[] kubadilisha kasi ya mzunguko. Kwa mfano, kuweka sc[0] kuwa 70 kutafanya mzunguko wa kinyume cha saa kuwa polepole. Kadiri thamani inavyokaribia thamani ya "kusimama" (58), ndivyo motor itakavyozunguka polepole katika mwelekeo huo. Thamani zilizo mbali zaidi na 58 zitaongeza kasi hadi kikomo cha juu.

Pia kuna vigezo vingine muhimu ambavyo unaweza kuhitaji kubadilisha. servoPin imewekwa kuwa 9, ambayo lazima iwe pin inayoweza kutumia PWM kwenye Arduino yako. Pini za vitufe zimefafanuliwa juu ya msimbo na zinaweza kubadilishwa ikihitajika.

int servoPin = 9;// pin hii lazima iwe mojawapo ya zile zilizo na PWM ~

#define STOPpin 3 // pin ya kitufe cha STOP
#define CWpin 2 //  kitufe cha CW
#define CCWpin 4 // kitufe cha CCW

Hatimaye, safu ya scText[] inashikilia nyuzi zinazochapishwa kwenye Serial Monitor kwa ajili ya utatuzi. Unaweza kuzibadilisha ikiwa unataka kuonyesha ujumbe tofauti.

Jinsi ya Kutumia Msimbo

Pakia msimbo uliotolewa kwenye bodi yako ya Arduino. Fungua Serial Monitor (weka kwenye 9600 baud) kuona ujumbe wa hali. Sasa unaweza kudhibiti servo kwa kutumia vitufe vitatu:

  • Bonyeza na ushikilie kitufe cha CW: Servo itaanza kuzunguka kwa mwelekeo wa saa. Serial Monitor itaonyesha "CW" na thamani inayotumwa.
  • Bonyeza na ushikilie kitufe cha CCW: Servo itaanza kuzunguka kinyume cha saa. Serial Monitor itaonyesha "CCW" na thamani inayotumwa.
  • Bonyeza kitufe cha Stop: Servo itajaribu kusimama. Serial Monitor itaonyesha "Stop".

Ikiwa servo yako haisimami kabisa wakati kitufe cha Stop kinapobonyezwa, utahitaji kusawazisha thamani ya sc[1] katika safu ya sc[]. Jaribu kubadilisha thamani kidogo (kwa mfano, kutoka 58 hadi 54 au 52) na upakishe tena msimbo hadi motor ibaki tuli kabisa.

Maonyesho ya Moja kwa Moja

Katika video, mtangazaji anaonyesha mfumo mzima. Unaweza kuona servo ikizunguka katika pande zote mbili kulingana na kubonyeza kwa vitufe. Pato la Serial Monitor pia linaonyeshwa, likionyesha hali ya sasa ("CW", "Stop", au "CCW") na thamani mahususi inayotumwa kwa servo. Hii ni zana nzuri ya kutatua matatizo na kupata thamani bora za kusawazisha kwa motor yako mahususi. Maonyesho pia yanaonyesha jinsi kurekebisha thamani katika safu ya sc[] kunavyoathiri moja kwa moja kasi ya motor, kutoka kwa kutambaa polepole hadi kasi yake ya juu ya mzunguko.

Hitimisho

Mradi huu unatoa njia rahisi na yenye ufanisi ya kudhibiti motor ya servo inayoendelea. Kwa kuelewa mchakato wa kusawazisha thamani ya "stop", unaweza kuhakikisha udhibiti sahihi katika miradi yako ya robotiki na otomatiki.

Sura za Video

  • [00:05] Utangulizi wa Motor ya Servo Inayoendelea
  • [02:02] Muhtasari wa Vifaa vya Servo
  • [02:40] Mchoro wa Wiring na Miunganisho
  • [05:07] Maelezo ya Msimbo: Vigezo na Usanidi
  • [08:03] Maelezo ya Msimbo: Mantiki ya Kitanzi Kikuu
  • [09:56] Kazi ya servoCommand()
  • [10:54] Maonyesho ya Moja kwa Moja na Pato la Serial Monitor
  • [12:23] Kusawazisha Kasi ya Servo na Thamani za Stop

Bilder

360_Serrvo_3_push_button_wiring
360_Serrvo_3_push_button_wiring
209-How to control a 360 servo with push buttons
Språk: 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(")");
}

Tänker att du kanske behöver

Resurser och referenser

Filer📁

Andra filer