Search Code

Ẹkọ 89: Lílo Continuous tabi 360 Servo motor | Arduino Ìgbésẹ̀-ọ̀nà Ẹ̀kọ́ Lílọ̀kanlẹ̀

Ẹkọ 89: Lílo Continuous tabi 360 Servo motor | Arduino Ìgbésẹ̀-ọ̀nà Ẹ̀kọ́ Lílọ̀kanlẹ̀

Ṣé o ti fẹ́ láti yí motor kan padà sí ìtọ́nà méjèèjì fún bí àkókò tí o bá fẹ́, dípò kí o kàn máa gbá a padà síwájú àti ẹ̀yìn bíi servo àròwọ́? Èyí ni gangan ohun tí servo motor tí ń lọ ní gbogbo ìgbà tàbí 360-degree servo motor ń ṣe. Yàtọ̀ sí servo àròwọ́ tí ń lọ sí igun pàtó kan (ní gbogbogbòò 0 sí 180 ìwọ̀n), servo tí ń lọ ní gbogbo ìgbà ń yí padà ní gbogbo ìgbà ní ìtọ́nà aago tàbí lòdì sí aago. Èyí jẹ́ kí ó pérfect fún kíkọ́ àwọn robot kéékèèké, àwọn pẹpẹ kamẹra, tàbí èyíkéyìí project tí ó nílò ìṣàkóso yíyí padà ní gbogbo ìgbà.

Nínú project yìí, a óò kọ́ ètò ìṣàkóso fún 360-degree servo kan ní lílo àwọn bọ́tìnnì tí ń tẹ̀ síwájú mẹ́ta péré. Ìwọ yóò ní agbára láti pàṣẹ fún servo láti yí padà ní ìtọ́nà aago, lòdì sí aago, tàbí láti dúró ní àkókò èyíkéyìí. Ìtọ́sọ́nà yìí yóò ṣàlàyé bí a ṣe ń so àwọn okun wọ̀nyí pọ̀, ṣàlàyé àwọn apá tí o lè yí padà nínú kóòdù, àti fi ìfihàn ààyè kan hàn ọ́ bí ètò náà ṣe ń ṣiṣẹ́.

Èyí ni àwọn èròǹgbà díẹ̀ tí ó wúlò fún lílo servo tí ń lọ ní gbogbo ìgbà nínú àwọn project tirẹ:

  • Kọ́ robot kékeré tí ó ní kẹ̀kẹ́ méjì: Lo àwọn servo tí ń lọ ní gbogbo ìgbà méjì láti gbé àwọn kẹ̀kẹ́, tí ó ń jẹ́ kí ó lọ síwájú, sẹ́yìn, àti yíyí padà.
  • Ṣẹ̀dá àgàrí kamẹra tí ń yí padà: Lo servo tí ń lọ ní gbogbo ìgbà kan fún yíyí padà lọ́làájú láìdáwọ́dúró ti kamẹra aabo tàbí ẹranko.
  • Ṣe àtúnṣe bẹ́lùtì gbígbé: Ṣàkóso ètò bẹ́lùtì kékeré kan fún yíyan tàbí fífún àwọn nkan jáde.
  • Ṣe àpẹ̀rẹ̀ àgàrí ìfihàn tí ń yí padà: Fi àwòkọ́ṣe 3D tàbí ọjà hàn lórí pẹpẹ kan tí ń yí padà ní gbogbo ìgbà.

Ohun èlò Tí A Nílò

  • Arduino board (Uno, Nano, àti bẹ́ẹ̀ bẹ́ẹ̀ lọ)
  • Servo motor tí ń lọ ní gbogbo ìgbà (360-degree) (bíi FS90R, DS04-NFC)
  • 3x Bọ́tìnnì tí ń tẹ̀ síwájú
  • Àwọn okun Jumper
  • Breadboard

Ìtọ́sọ́nà So Okun Pọ̀

Bí a ṣe ń so àwọn okun pọ̀ fún project yìí rọrùn. Motor servo náà ní àwọn okun mẹ́ta: ọ̀kan tí ó dúdú fún ilẹ̀ (GND), ọ̀kan tí ó wà ní àárín (tí ó sábà máa ń pupa) fún agbára (5V), àti ọ̀kan tí ó wúwo (ọsàn, ofeefee, tàbí funfun) fún àmì ìfiranṣẹ́. Gẹ́gẹ́ bí a ṣe fi hàn nínú fídíò, a so servo náà sí Arduino báyìí:

  • Ilẹ̀ Servo (okun dúdú): So pọ̀ sí GND Arduino.
  • Agbára Servo (okun àárín/pupa): So pọ̀ sí 5V Arduino.
  • Àmì ìfiranṣẹ́ Servo (okun wúwu): So pọ̀ sí pin 9 Arduino.

Fún àwọn bọ́tìnnì tí ń tẹ̀ síwájú mẹ́ta náà, bọ́tìnnì kọ̀ọ̀kan ní ẹ̀gbẹ́ méjì. Ẹ̀gbẹ́ kan ti gbogbo bọ́tìnnì ni a so pọ̀ papọ̀ àti lẹ́yìn náà sí GND Arduino. Ẹ̀gbẹ́ kejì ti bọ́tìnnì kọ̀ọ̀kan ni a so sí pin oní nọ́ńbà ọ̀tọ̀ọ̀tọ̀, gẹ́gẹ́ bí a ṣe ṣàpèjúwe rẹ̀ nísàlẹ̀ (nínú fídíò ní 03:40):

  • Bọ́tìnnì ìtọ́nà aago (CW): So pọ̀ sí pin 2 Arduino.
  • Bọ́tìnnì ìdúró: So pọ̀ sí pin 3 Arduino.
  • Bọ́tìnnì lòdì sí aago (CCW): So pọ̀ sí pin 4 Arduino.
360_Serrvo_3_push_button_wiring

Àlàyé Kóòdù

A ṣe kóòdù náà ní ọ̀nà tí ó rọrùn láti yí padà. Apá tí ó ṣe pàtàkì jùlọ tí o yóò ní láti ṣàtúnṣe ni sc[] array, tí ó ní àwọn iye PWM pàtó tí a fi ń ránṣẹ́ sí servo láti ṣàkóso àwọn ìgbésẹ̀ rẹ̀. Àwọn iye wọ̀nyí kì í ṣe gbogbogbòò, wọ́n gbọ́dọ̀ jẹ́ kíkálibrate fún motor servo pàtó rẹ (nínú fídíò ní 12:23).

int sc[]={106, 58, 0};// àwọn àṣẹ servo wà ní ìtòlẹ́sẹẹsẹ
        //CCW, STOP,CW

Array yìí ni ọkàn ìkálibrate náà. A lo àwọn iye wọ̀nyí ní ìtòlẹ́sẹẹsẹ yìí:

  • sc[0] = 106: A rán iye yìí láti jẹ́ kí servo yí padà lòdì sí aago.
  • sc[1] = 58: Èyí ni iye "ìdúró". Nítorí àwọn ẹ̀rọ inú, iye pàtó tí ó mú motor dúró yàtọ̀. O lè rí i pé servo rẹ ń yí padà díẹ̀díẹ̀ pàápàá nígbà tí a bá rán àṣẹ yìí, o sì ní láti ṣàtúnṣe nọ́ńbà yìí díẹ̀ láti rí iye "ìdúró gidi" fún motor rẹ.
  • sc[2] = 0: Iye yìí jẹ́ kí servo yí padà ní ìtọ́nà aago ní ìyára tí ó pọ̀ jùlọ.

O lè ṣàtúnṣe àwọn iye nínú sc[] array láti yí ìyára yíyí padà. Fún àpẹẹrẹ, ṣíṣe sc[0] sí 70 yóò jẹ́ kí yíyí padà lòdì sí aago rọra. Bí iye náà ṣe súnmọ́ iye "ìdúró" (58), bẹ́ẹ̀ ni motor yóò rọra yí padà ní ìtọ́nà yẹn. Àwọn iye tí ó jìnnà sí 58 yóò mú ìyára pọ̀ sí i títí dé ìwọ̀n tí ó pọ̀ jùlọ.

Àwọn àṣàyàn oníyebíye mìíràn tún wà tí o lè ní láti yí padà. servoPin ti ṣeto sí 9, èyí tí ó gbọ́dọ̀ jẹ́ pin tí ó ní agbára PWM lórí Arduino rẹ. A ti ṣàlàyé àwọn pin bọ́tìnnì ní ìbẹ̀rẹ̀ kóòdù náà, o sì lè yí wọ́n padà bí a bá nílò rẹ̀.

int servoPin = 9;// pin yìí gbọ́dọ̀ jẹ́ ọ̀kan nínú àwọn tí ó ní PWM ~

#define STOPpin 3 // pin bọ́tìnnì fún STOP
#define CWpin 2 //  bọ́tìnnì fún CW
#define CCWpin 4 // bọ́tìnnì fún CCW

Níkẹyìn, scText[] array ní àwọn ọ̀rọ̀ tí a tẹ̀ jáde sí Serial Monitor fún ìwádìí. O lè yí wọ́n padà bí o bá fẹ́ láti fi àwọn ifiranṣẹ́ ọ̀tọ̀ọ̀tọ̀ hàn.

Bí A Ṣe Lo Kóòdù Náà

Gbé kóòdù tí a pèsè sílẹ̀ sí Arduino board rẹ. Ṣí Serial Monitor (ṣeto sí 9600 baud) láti rí àwọn ifiranṣẹ́ ipò. O lè ṣàkóso servo nísisìyìí ní lílo àwọn bọ́tìnnì mẹ́ta:

  • Tẹ CW bọ́tìnnì mọ́lẹ̀: Servo yóò bẹ̀rẹ̀ sí yí padà ní ìtọ́nà aago. Serial Monitor yóò fi "CW" àti iye tí a ń rán hàn.
  • Tẹ CCW bọ́tìnnì mọ́lẹ̀: Servo yóò bẹ̀rẹ̀ sí yí padà lòdì sí aago. Serial Monitor yóò fi "CCW" àti iye tí a ń rán hàn.
  • Tẹ Stop bọ́tìnnì: Servo yóò gbìyànjú láti dúró. Serial Monitor yóò fi "Stop" hàn.

Ti servo rẹ ko ba da duro patapata nigbati a tẹ bọtini Duro, iwọ yoo nilo lati ṣatunṣe iye sc[1] ninu akojọpọ sc[]. Gbiyanju lati yi iye naa pada die-die (fun apẹẹrẹ, lati 58 si 54 tabi 52) ki o si tun gbe koodu naa soke titi motor naa yoo fi duro ni pipe laisi gbigbe.

Ifihan Laaye

Ninu fidio naa, olufihan naa ṣe afihan eto naa ni kikun. O le rii bi servo naa ṣe n yi ni awọn itọnisọna mejeeji da lori titẹ bọtini. Awọn abajade Serial Monitor naa tun han, ti o n ṣafihan ipo lọwọlọwọ ("CW", "Duro", tabi "CCW") ati iye pato ti a n fi ranṣẹ si servo naa. Eyi jẹ ọpa ti o dara pupọ fun ṣiṣe iwadii ati wiwa awọn iye isatunṣe pipe fun motor rẹ pato. Ifihan naa tun ṣe afihan bii ṣiṣatunṣe awọn iye ninu akojọpọ sc[] ṣe n ni ipa taara lori iyara motor naa, lati jijẹra rara si iyara yiyi ti o pọju.

Ipari

Ise agbese yii pese ọna ti o rọrun ati ti o munadoko lati ṣakoso motor servo ti o n lọ ni igbagbogbo. Nipa oye ilana isatunṣe fun iye "duro", o le rii iṣakoso pipe ninu awọn ise agbese roboti ati adaṣe tirẹ.

Awọn Abala Fidio

  • [00:05] Ifihan si Motor Servo Ti O N Lọ Ni Igbagbogbo
  • [02:02] Akopọ Ohun elo ti Servo naa
  • [02:40] Awoṣe Asopọ ati Awọn Asopọ
  • [05:07] Alaye Koodu: Awọn Oniyipada ati Iṣeto
  • [08:03] Alaye Koodu: Ilana Akọkọ Loop
  • [09:56] Iṣẹ servoCommand()
  • [10:54] Ifihan Laaye ati Awọn Abajade Serial Monitor
  • [12:23] Ṣiṣatunṣe Iyara Servo ati Awọn Iye Duro

Aworan

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

Ohun ti o le nilo

Orisun & itọkasi

Fáìlìs📁

Awọn faili miiran