Wa Koodu

Ẹkọ 85: Ìfihàn sí Servo Motors | Arduino Ìgbésẹ̀-Ẹ̀kọ́ Ní Ìtẹ̀síwájú

Ẹkọ 85: Ìfihàn sí Servo Motors | Arduino Ìgbésẹ̀-Ẹ̀kọ́ Ní Ìtẹ̀síwájú

Ìtọ́sọ́nà iṣẹ́ yìí ṣe àfihàn rẹ sí àgbáyé ti awọn servo motor yíyí tí ń lọ̀nà kíkọ̀ọ́kan, tí a mọ̀ sí 360-degree servos. Kò dàbí awọn servo ti a ṣe deede tí ń gbé sí igun kan pàtó (bíi 0 sí 180 degree), awọn motor wọ̀nyí ń yí kíkọ̀ọ́kan ní ìtọ́sọ́nà méjèèjì. Èyí jẹ́ kí wọ́n dára fún kíkọ́ awọn roboti kéékèèké, tank treads, tàbí èyíkéyìí iṣẹ́ tí ó nílò awọn motor drive tí ó rọrùn, tí kò gbowó. Ìtọ́sọ́nà yìí yóò fi hàn ọ́ bí a ṣe lè ṣàkóso ọ̀kan nínú wọn pẹ̀lú Arduino àti àwọn bọ́tìnì títẹ̀ díẹ̀, tí yóò fún ọ ní ìṣàkóso ọwọ́ lórí ìtọ́sọ́nà àti ìyára rẹ̀.

Àwọn ìlò tí ó wúlò díẹ̀ fún 360-degree servo ni:

  • Kíkọ́ ọkọ̀ roboti kékeré tí ó ní kẹ̀kẹ́ méjì.
  • Ṣíṣẹ̀dá pan-and-tilt camera mount tí ń yí láìdákẹ́yìn.
  • Ìṣàkóso conveyor belt tàbí winch kékeré.
  • Ṣíṣe pẹ̀pẹ̀ radar tàbí sensor tí ń ṣe àyẹ̀wò.

Ohun èlò àti Àwọn Ẹ̀yà

Fún iṣẹ́ yìí, ìwọ yóò nílò àwọn ẹ̀yà wọ̀nyí:

  • Arduino board (bíi Uno)
  • Continuous rotation servo motor (bíi FS90R tàbí irú rẹ̀)
  • Bọ́tìnì títẹ̀ mẹ́ta
  • Jumper wires
  • Breadboard (kò pọn dandan, fún ìrọ̀rùn ìsopọ̀)

Ìtọ́sọ́nà Ìsopọ̀

Ìsopọ̀ fún iṣẹ́ yìí rọrùn. Servo motor náà ní wáyà mẹ́ta: nígbà gbogbo brown (ground), pupa (power), àti orange tàbí yellow (signal). Àwọn bọ́tìnì títẹ̀ ni a so pọ̀ ní ìtòlẹ́sẹẹsẹ tí ó rọrùn.

Èyí ni ìpínkiri àwọn ìsopọ̀:

  • Servo Motor:
    • Wáyà Brown (Ground) sopọ̀ sí pin GND ti Arduino.
    • Wáyà Red (Power) sopọ̀ sí pin 5V ti Arduino.
    • Wáyà Orange/Yellow (Signal) sopọ̀ sí pin 9 ti Arduino.
  • Bọ́tìnì Títẹ̀:
    • Ẹ̀gbẹ́ kan ti bọ́tìnì kọ̀ọ̀kan sopọ̀ sí pin GND ti Arduino.
    • Ẹ̀gbẹ́ kejì ti bọ́tìnì "Counter-Clockwise" sopọ̀ sí pin 2.
    • Ẹ̀gbẹ́ kejì ti bọ́tìnì "Stop" sopọ̀ sí pin 3.
    • Ẹ̀gbẹ́ kejì ti bọ́tìnì "Clockwise" sopọ̀ sí pin 4.

Nínú fídíò náà, ẹlẹ́dàá náà tẹnu mọ́ ọn pé wáyà signal ti servo gbọ́dọ̀ sopọ̀ sí pin PWM ti Arduino, èyí tí a sábà máa ń fi àmì tilde (~) sàmì sí. Pin 9 jẹ́ ọ̀kan nínú àwọn pin wọ̀nyí. Àwọn bọ́tìnì títẹ̀ lo àwọn resistor pull-up inú Arduino, èyí tí ó rọrùn ìsopọ̀ nípa yíyọ ìwúlò àwọn resistor òde kúrò (nínú fídíò ní 07:02).

Àlàyé Kóòdù

Kóòdù náà jẹ́ àpẹẹrẹ láti ka ipò àwọn bọ́tìnì títẹ̀ mẹ́ta àti láti fi àṣẹ tí ó bá mu ranṣẹ́ sí servo motor. Ẹ jẹ́ kí a tú àwọn apá tí olùmúlò lè ṣàtúnṣe.

Ṣiṣètò Àwọn Pin àti Àwọn Àṣẹ

Ní ìbẹ̀rẹ̀ kóòdù náà, ìwọ yóò rí àwọn ìtumọ̀ fún àwọn pin àti àwọn iye ìṣàkóso servo. Èyí ni ibi tí ìwọ lè ṣe àdáṣe ìwà iṣẹ́ rẹ.


const int servoPin = 9;    // PWM pin fún signal servo
const int stopPin = 3;     // Pin fún bọ́tìnì stop
const int cwPin = 4;       // Pin fún bọ́tìnì clockwise
const int ccwPin = 2;      // Pin fún bọ́tìnì counter-clockwise

Àwọn ìtumọ̀ wọ̀nyí ṣàlàyé èyí tí àwọn pin Arduino ti sopọ̀ sí àwọn bọ́tìnì àti servo. Bí o bá lo àwọn pin ọ̀tọ̀ọ̀tọ̀ fún àwọn bọ́tìnì rẹ, ìwọ yóò yí àwọn nọ́ńbà wọ̀nyí padà níbí. servoPin gbọ́dọ̀ jẹ́ pin tí ó ní agbára PWM.


const int csServoCommand[3] = {106, 52, 0};  // {CCW, STOP, CW}
const String csServoCommandText[3] = {"Counter Clockwise", "Stopped", "Clockwise"};

Èyí ni apá tí ó ṣe pàtàkì jùlọ láti lóye àti láti túnṣe. Àkójọpọ̀ csServoCommand ní àwọn iye tí a fi ranṣẹ́ sí servo. Fún servo tí ń lọ̀nà kíkọ̀ọ́kan, àwọn iye wọ̀nyí kò dúró fún igun kan ṣùgbọ́n fún ìyára àti ìtọ́sọ́nà.

  • 106 ni iye fún yíyí Counter-Clockwise ní ìyára kíkún.
  • 52 ni iye fún ìdúró pátápátá.
  • 0 ni iye fún yíyí Clockwise ní ìyára kíkún.

Àwọn iye wọ̀nyí kì í ṣe gbogbo àgbáyé. Nítorí àwọn ìyàtọ̀ nínú iṣẹ́ ṣíṣe, iye "stop" (52) lè nílò àtúnṣe. Bí servo rẹ bá ń rọra yí nígbà tí o tẹ bọ́tìnì stop, ìwọ yóò ní láti tún iye yìí ṣe dáradára. Fídíò náà ṣe àfihàn ìlànà yìí, ní fífi hàn bí yíyí iye padà sí 54 tàbí 51 ṣe lè ní ipa lórí ìwà motor (nínú fídíò ní 13:45).

Ìwọ lè tún ṣàtúnṣe àwọn iye fún yíyí láti yí ìyára motor padà. Fún àpẹẹrẹ, ṣiṣeto iye counter-clockwise sí 70 yóò jẹ́ kí ó yí lọ́ra ju ní 106 lọ (nínú fídíò ní 12:23).

Àkójọpọ̀ csServoCommandText ní àwọn ọ̀rọ̀ tí a tẹ̀ jáde sí Serial Monitor láti fi ipò àṣẹ lọ́wọ́lọ́wọ́ hàn.

Iṣẹ́ Àdáni: servoCommand()

Kóòdù náà lo iṣẹ́ àdáni láti ṣàkóso ìtòlẹ́sẹẹsẹ àṣẹ. Iṣẹ́ yìí gba nọ́ńbà (0, 1, tàbí 2) gẹ́gẹ́ bí àríyànjiyàn, ó sì mú ọ̀rọ̀ ipò náà tuntun, ó sì fi àṣẹ tí ó bá mu ranṣẹ́ sí servo.


void servoCommand(int n) {
  statusText = csServoCommandText[n];
  myservo.write(csServoCommand[n]);
  Serial.println(csServoCommandText[n]);
  Serial.println(csServoCommand[n]);
}

A máa ń pe iṣẹ́ yìí láti inú ìyípo àkọ́kọ́ nígbà tí a bá tẹ bọ́tìnì. Ó ṣe àkópọ̀ ìtòlẹ́sẹẹsẹ fún mímú ìfihàn tuntun àti ìṣàkóso servo, tí ó mú kí kóòdù náà mọ́, tí ó sì rọrùn láti yí padà.

Iṣẹ́ Gbígbé àti Ìfihàn

Nínú fídíò náà, ẹlẹ́dàá náà ṣe àfihàn iṣẹ́ náà ní ìgbà tí ó ń ṣiṣẹ́. Títẹ bọ́tìnì "Clockwise" fi iye 0 ranṣẹ́ sí servo, tí ó mú kí ó yí ní ìtọ́sọ́nà kan. Títẹ bọ́tìnì "Counter-Clockwise" fi iye 106 ranṣẹ́, tí ó mú kí ó yí ní ọ̀nà kejì. Bọ́tìnì "Stop" fi 52 ranṣẹ́, èyí tí ó yẹ kí ó dá motor dúró.

Mọ́nitọ̀ Serial ni a lò láti fi hàn ipò lọ́wọ́lọ́wọ́ àti iye pàtó tí a ń rán sí servo náà. Èyí ṣe pàtàkì gan-an fún ṣíṣàwárí àṣìṣe àti fún wíwá iye "dúró" pípé fún ẹ̀rọ rẹ̀ pàtó. Gẹ́gẹ́ bí a ti sọ nínú fídíò náà, àṣẹ dúró lè má ṣiṣẹ́ pérfect nítorí ẹ̀yà inú servo náà, ó sì lè jẹ́ pé o rí ìyípadà tí ó lọra tàbí gbìrìrì. Èyí jẹ́ àbùdá tí ó wọ́pọ̀ fún àwọn servo tí ń lọ lọ́nà kan (continuous) tí kò gbowó, ó sì lè dín kù nípa ṣíṣàtúnṣe iye dúró nínú kóòdù náà (nínú fídíò ní 01:15).

Àwọn orí-ọ̀rọ̀

  • [00:05] Ìfihàn sí ẹ̀rọ servo oní-ìwọ̀n 360
  • [02:02] Àwọn ẹ̀yà àti àkọsílẹ̀ ohun èlò
  • [02:40] Àwòrán ìsopọ̀ onírúurú àti àwọn ìsopọ̀
  • [05:07] Ìtumọ̀ kóòdù: àwọn ìpínlẹ̀, àwọn àkójọpọ̀, àti ìmúrasílẹ̀
  • [09:56] Ìtumọ̀ kóòdù: ìṣiṣẹ́ servoCommand
  • [10:54] Ìfihàn ààyè àti ìjàde Mọ́nitọ̀ Serial
  • [12:23] Ṣíṣàtúnṣe ìyára servo àti àwọn iye dúró

Aworan

SG90 Mini Servo Motor
SG90 Mini Servo Motor
SG90_servo_motor-1
SG90_servo_motor-1
115-Arduino code to control continuous 360° servo from serial monitor command
Ede: C++
/* 
 *  
 *  Demonstration of Controlling Continuous Servo (360 servo)
 *  This code allows you to control a 360-degree servo by a command from the Serial Monitor.
* this 350 servo motor is a just for fun. it can't be used for real application where you need exact positioning. get stepper motor or expensive servo motor. 
📚⬇️ Download and resource page https://robojax.com/RJT762
 *  
 * Modified by Ahmad Shamshiri for Robojax.com
 * on Sunday, July 1, 2018, at 11:09 AM in Ajax, Ontario, Canada
 * Watch a video instruction of this project: https://youtu.be/b_xvu6wWafA
 * Get this code from Robojax.com
 * 
 Original code by BARRAGAN <http://barraganstudio.com>
 This example code is in the public domain.
 Modified 8 Nov 2013
 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Sweep
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

int pos = 0;    // variable to store the servo position
int incomingByte = 0;   // for incoming serial data

void setup() {
  Serial.begin(9600);
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}



void loop() {

        // send data only when you receive data:
        if (Serial.available() > 0) {
                // read the incoming byte:
                incomingByte = Serial.read();

                // say what you got:
                Serial.print("received: ");
                Serial.print (incomingByte);
                if(incomingByte == 108){
                 Serial.println(" sent 0 Rotating CW "); 
                 myservo.write(0); 
                }else if(incomingByte == 114){
                  Serial.println(" sent 180 Rotating CCW "); 
                  myservo.write(180); 
                }else if(incomingByte == 60){
                  Serial.println(" sent Stopped "); 
                  myservo.write(60); 
                }else{
                  Serial.println(" moving Randomly"); 
                  myservo.write(incomingByte); 
                }
                  
                 
        }

  
}
893-Arduino code to control continuous 360° servo from serial monitor command (Code 2)
Ede: C++
/* 
 *  
 *  Demonstration of Controlling Continuous Servo (360 servo)
360 Servo -2
 *  This code allows you to control a 360-degree servo by a command from the Serial Monitor.
* this 350 servo motor is a just for fun. it can't be used for real application where you need exact positioning. get stepper motor or expensive servo motor. 
📚⬇️ Download and resource page https://robojax.com/RJT762
 *  
 * Modified by Ahmad Shamshiri for Robojax.com
 * on Sunday, July 1, 2018, at 11:09 AM in Ajax, Ontario, Canada
 * Watch a video instruction of this project: https://youtu.be/b_xvu6wWafA
 * Get this code from Robojax.com
 * 
 Original code by BARRAGAN <http://barraganstudio.com>
 This example code is in the public domain.
 Modified 8 Nov 2013
 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Sweep
*/

#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 of those with PWM ~
int pos = 0;    // variable to store the servo position
int incomingByte = 0;   // for incoming serial data
int CWBS, CCWBS, SBS;

void setup() {
  Serial.begin(9600);
 pinMode(2,INPUT_PULLUP);// set pin for push button STOP
  pinMode(3,INPUT_PULLUP);// set pin for push button CCW  
  pinMode(4,INPUT_PULLUP);// set pin for push button CW
   
  myservo.attach(servoPin);  // attaches the servo on pin 9 to the servo object
}



void loop() {
    CCWBS = digitalRead(2);// read status of button CCW
    SBS = digitalRead(3);// read status of button STOP
    CWBS = digitalRead(4);// read status of button CW
                 if(CCWBS == LOW){
                 Serial.println(" sent 0 Rotaing CW "); 
                 myservo.write(0); 
                }else if(CWBS == LOW){
                  Serial.println(" sent 180 Rotaing CCW "); 
                  myservo.write(180); 
                }else if(SBS == LOW){
                  Serial.println(" sent Stopped "); 
                  myservo.write(60); 
                }else{
                  Serial.println(" moving Random"); 
                  myservo.write(48); 
                }
                  


  
}// loop 

Ohun ti o le nilo

Orisun & itọkasi

Fáìlìs📁

Awọn faili miiran