Tafuta Msimbo

Somo la 85: Utangulizi wa Motors za Servo | Kozi ya Arduino Hatua kwa Hatua

Somo la 85: Utangulizi wa Motors za Servo | Kozi ya Arduino Hatua kwa Hatua

Mwongozo huu wa mradi unakujulisha kuhusu ulimwengu wa motor za servo za mzunguko unaoendelea, zinazojulikana pia kama servo za digrii 360. Tofauti na servo za kawaida zinazosogea kwenye pembe maalum (kama digrii 0 hadi 180), motor hizi huzunguka kwa mfululizo katika mwelekeo wowote. Hii inazifanya kuwa bora kwa kujenga roboti ndogo, nyimbo za tanki, au mradi wowote unaohitaji motor rahisi na za bei nafuu za kuendesha. Mwongozo huu utakuonyesha jinsi ya kudhibiti moja kwa kutumia Arduino na vitufe vichache vya kushinikiza, kukupa udhibiti wa moja kwa moja juu ya mwelekeo na kasi yake.

Hapa kuna matumizi kadhaa ya vitendo kwa servo ya digrii 360:

  • Kujenga gari dogo la roboti lenye magurudumu mawili.
  • Kuunda mlima wa kamera wa pan-na-tilt unaozunguka bila kikomo.
  • Kuendesha mkanda mdogo wa conveyor au winchi.
  • Kutengeneza jukwaa rahisi la skanning la rada au sensor.

Vifaa na Vipengele

Kwa mradi huu, utahitaji vipengele vifuatavyo:

  • Bodi ya Arduino (mfano, Uno)
  • Motor ya servo ya mzunguko unaoendelea (mfano, FS90R au sawa)
  • Vitufe vitatu vya kushinikiza
  • Waya za jumper
  • Breadboard (hiari, kwa urahisi wa kuunganisha)

Mwongozo wa Kuunganisha

Uunganishaji wa mradi huu ni rahisi. Motor ya servo ina waya tatu: kwa kawaida kahawia (ardhi), nyekundu (nguvu), na machungwa au njano (ishara). Vitufe vya kushinikiza vimeunganishwa kwa usanidi rahisi.

Hapa kuna maelezo ya miunganisho:

  • Motor ya Servo:
    • Waya ya kahawia (Ardhi) inaunganishwa na pini ya GND ya Arduino.
    • Waya nyekundu (Nguvu) inaunganishwa na pini ya 5V ya Arduino.
    • Waya ya machungwa/njano (Ishara) inaunganishwa na pini ya 9 ya Arduino.
  • Vitufe vya Kushinikiza:
    • Upande mmoja wa kila kitufe umeunganishwa na pini ya GND ya Arduino.
    • Upande mwingine wa kitufe cha "Kinyume cha Saa" umeunganishwa na pini ya 2.
    • Upande mwingine wa kitufe cha "Simama" umeunganishwa na pini ya 3.
    • Upande mwingine wa kitufe cha "Saa" umeunganishwa na pini ya 4.

Katika video, mtayarishaji anasisitiza kwamba waya ya ishara ya servo lazima iunganishwe kwenye pini inayoweza PWM ya Arduino, ambayo mara nyingi huwekwa alama ya tilde (~). Pini ya 9 ni mojawapo ya pini hizi. Vitufe vya kushinikiza vinatumia resistors za ndani za kuvuta-juu za Arduino, ambayo hurahisisha uunganishaji kwa kuondoa hitaji la resistors za nje (katika video saa 07:02).

Maelezo ya Msimbo

Msimbo umeundwa kusoma hali ya vitufe vitatu vya kushinikiza na kutuma amri inayolingana kwa motor ya servo. Hebu tuchambue sehemu zinazoweza kusanidiwa na mtumiaji.

Kusanidi Pini na Amri

Juu ya msimbo, utapata ufafanuzi wa pini na maadili ya udhibiti wa servo. Hapa ndipo unapoweza kubinafsisha tabia ya mradi wako.


const int servoPin = 9;    // Pini ya PWM kwa ishara ya servo
const int stopPin = 3;     // Pini ya kitufe cha simama
const int cwPin = 4;       // Pini ya kitufe cha saa
const int ccwPin = 2;      // Pini ya kitufe cha kinyume cha saa

Viwango hivi vinafafanua ni pini gani za Arduino zimeunganishwa kwenye vitufe na servo. Ikiwa unatumia pini tofauti kwa vitufe vyako, ungebadilisha nambari hapa. servoPin lazima iwe pini inayoweza PWM.


const int csServoCommand[3] = {106, 52, 0};  // {CCW, STOP, CW}
const String csServoCommandText[3] = {"Kinyume cha Saa", "Imesimama", "Saa"};

Hii ndiyo sehemu muhimu zaidi ya kuelewa na kurekebisha. Safu ya csServoCommand inashikilia maadili yanayotumwa kwa servo. Kwa servo inayoendelea, maadili haya hawawakilishi pembe bali kasi na mwelekeo.

  • 106 ni thamani ya mzunguko wa kasi kamili wa Kinyume cha Saa.
  • 52 ni thamani ya kusimama kabisa.
  • 0 ni thamani ya mzunguko wa kasi kamili wa Saa.

Maadili haya si ya ulimwengu wote. Kutokana na tofauti za utengenezaji, thamani ya "simama" (52) inaweza kuhitaji kurekebishwa. Ikiwa servo yako inateleza polepole unapobonyeza kitufe cha simama, utahitaji kurekebisha thamani hii vizuri. Video inaonyesha mchakato huu, ikionyesha jinsi kubadilisha thamani hadi 54 au 51 kunavyoweza kuathiri tabia ya motor (katika video saa 13:45).

Unaweza pia kurekebisha maadili ya mzunguko ili kubadilisha kasi ya motor. Kwa mfano, kuweka thamani ya kinyume cha saa kuwa 70 kutaifanya izunguke polepole kuliko 106 (katika video saa 12:23).

Safu ya csServoCommandText inashikilia nyuzi za maandishi zinazochapishwa kwenye Serial Monitor kuonyesha hali ya sasa ya amri.

Kazi Maalum: servoCommand()

Msimbo unatumia kazi maalum kushughulikia mantiki ya amri. Kazi hii inachukua nambari (0, 1, au 2) kama hoja, inasasisha maandishi ya hali, na kutuma amri inayolingana kwa servo.


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

Kazi hii inaitwa kutoka kwenye kitanzi kikuu wakati kitufe kinapobonyezwa. Inaweka katikati mantiki ya kusasisha onyesho na kudhibiti servo, na kufanya msimbo kuwa safi na rahisi kurekebisha.

Mradi wa Moja kwa Moja na Maonyesho

Katika video, mtayarishaji anaonyesha mradi ukifanya kazi. Kubonyeza kitufe cha "Saa" kunatuma thamani 0 kwa servo, na kuisababisha izunguke katika mwelekeo mmoja. Kubonyeza kitufe cha "Kinyume cha Saa" kunatuma thamani 106, na kuifanya izunguke upande mwingine. Kitufe cha "Simama" kinatuma 52, ambacho kinapaswa kusimamisha motor.

Kichungo cha Serial Monitor kinatumika kuonyesha hali ya sasa na thamani halisi inayotumwa kwa servo. Hii ni muhimu sana kwa utatuzi wa matatizo na kwa kupata thamani bora ya "kusimamisha" kwa motor yako mahususi. Kama ilivyobainishwa kwenye video, amri ya kusimamisha inaweza isiwe kamili kutokana na mzunguko wa ndani wa servo, na unaweza kuona mwendo wa polepole au mtetemo. Hii ni sifa ya kawaida ya servo zinazoendelea za bei nafuu na inaweza kupunguzwa kwa kurekebisha thamani ya kusimamisha kwenye msimbo (kwenye video saa 01:15).

Sura

  • [00:05] Utangulizi wa motor ya servo ya digrii 360
  • [02:02] Muhtasari wa vipengele na vifaa
  • [02:40] Mchoro wa kina wa wiring na miunganisho
  • [05:07] Maelezo ya msimbo: viunga, safu, na usanidi
  • [09:56] Maelezo ya msimbo: kazi ya servoCommand
  • [10:54] Onyesho la moja kwa moja na matokeo ya Serial Monitor
  • [12:23] Kurekebisha kasi ya servo na thamani za kusimamisha

Bilder

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
Språk: 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)
Språk: 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 

Tänker att du kanske behöver

Resurser och referenser

Filer📁

Andra filer