Raadi Koodka

Casharka 85: Hordhaca Motors-ka Servo | Koorsada Arduino Tallaabo Tallaabo

Casharka 85: Hordhaca Motors-ka Servo | Koorsada Arduino Tallaabo Tallaabo

Haggan mashruucani wuxuu kugu soo bandhigayaa adduunka matoorada servo-ga wareega joogtada ah, oo sidoo kale loo yaqaanno servo-ga 360-degree. Si ka duwan servo-yada caadiga ah ee u dhaqaaqa xagal gaar ah (sida 0 ilaa 180 darajo), matooradani waxay si joogto ah u wareegaan jiho kasta. Tani waxay ka dhigaysaa kuwo ku habboon dhismaha robots-yada yaryar, jidadka taangiyada, ama mashruuc kasta oo u baahan matooro wadis fudud oo la awoodi karo. Hagahani wuxuu ku tusi doonaa sida loo xakameeyo mid iyadoo la isticmaalayo Arduino iyo dhawr badhamo riixid, siinaya xakameyn gacan-ku-haysto ah jihooyinka iyo xawaaraha.

Waa kuwan codsiyo wax ku ool ah oo dhawr ah oo loogu talagalay servo-ga 360-degree:

  • Dhismaha baabuur robot oo laba lugood leh oo yar.
  • Abuurista saldhig kamarad ah oo leh pan-and-tilt oo si aan dhammaad lahayn u wareega.
  • Wadista suunka gaashaanka yar ama winch.
  • Samaynta goob fiiqan oo radar ama dareeme ah oo iska xaaqaysa.

Qalabka iyo Qaybaha

Mashruucan, waxaad u baahan doontaa qaybaha soo socda:

  • Guddiga Arduino (tusaale, Uno)
  • Matoor servo-ga wareega joogtada ah (tusaale, FS90R ama mid la mid ah)
  • Saddex badhamo riixid
  • Fiilooyinka jumper-ka
  • Breadboard (ikhtiyaar, si fudud loogu xiro)

Hagaha Xirista

Xirista mashruucan waa mid toos ah. Matorka servo-ga wuxuu leeyahay saddex fiilo: caadi ahaan brown (dhulka), red (koronto), iyo orange ama yellow (signal-ka). Badhamada riixida waxay ku xiran yihiin qaab fudud.

Waa kuwan faahfaahinta xirista:

  • Matorka Servo-ga:
    • Fiilada brown (Dhulka) waxay ku xiran tahay pin-ka GND ee Arduino-ga.
    • Fiilada red (Korontada) waxay ku xiran tahay pin-ka 5V ee Arduino-ga.
    • Fiilada orange/yellow (Signal-ka) waxay ku xiran tahay pin-ka 9 ee Arduino-ga.
  • Badhamada Riixida:
    • Hal dhinac oo badhamo kasta ah waxay ku xiran yihiin pin-ka GND ee Arduino-ga.
    • Dhinaca kale ee badhanka "Counter-Clockwise" wuxuu ku xiran yahay pin-ka 2.
    • Dhinaca kale ee badhanka "Stop" wuxuu ku xiran yahay pin-ka 3.
    • Dhinaca kale ee badhanka "Clockwise" wuxuu ku xiran yahay pin-ka 4.

Fiidiyowga, abuuraha ayaa xooga saaraya in fiilada signal-ka ee servo-ga ay tahay inay ku xiran tahay pin-ka PWM-ka ee Arduino-ga, kaas oo inta badan lagu calaamadeeyo calaamad tilde (~). Pin-ka 9 waa mid ka mid ah pin-yadan. Badhamada riixida waxay isticmaalaan resistors-ka gudaha ee Arduino-ga, taas oo fududaynaysa xirista iyadoo laga saarayo baahida loo qabo resistors-ka dibadda (fiidiyowga 07:02).

Sharaxaadda Koodhka

Koodhku wuxuu loogu talagalay inuu akhriyo xaaladda saddexda badhamo oo uu u diro amarka u dhigma matorka servo-ga. Aynu u kala qaadno qaybaha isticmaaluhu wax ka beddeli karo.

Qaabaynta Pin-yada iyo Amarrada

Xagga sare ee koodhka, waxaad ka heli doontaa qeexitaannada pin-yada iyo qiimaha xakamaynta servo-ga. Halkan waa meesha aad ku habeyn karto hab-dhaqanka mashruucaaga.


const int servoPin = 9;    // PWM pin ee signal-ka servo-ga
const int stopPin = 3;     // Pin ee badhanka joogsiga
const int cwPin = 4;       // Pin ee badhanka clockwise-ga
const int ccwPin = 2;      // Pin ee badhanka counter-clockwise-ga

Kuwaani waxay qeexayaan pin-yada Arduino-ga ee ku xiran badhamada iyo servo-ga. Haddii aad isticmaasho pin-yo kala duwan oo loogu talagalay badhamadaada, waxaad beddeli doontaa lambarrada halkan. servoPin waa inuu ahaadaa pin-ka PWM-ka.


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

Tani waa qaybta ugu muhiimsan ee la fahmi karo oo la hagaajin karo. Qaybta csServoCommand waxay haysaa qiimaha loo diro servo-ga. Servo-ga joogtada ah, qiimahani kuma muujinayaan xagal laakiin waxay muujinayaan xawaare iyo jiho.

  • 106 waa qiimaha wareegga Counter-Clockwise ee xawaaraha buuxa.
  • 52 waa qiimaha joogsiga buuxa.
  • 0 waa qiimaha wareegga Clockwise ee xawaaraha buuxa.

Qiimahani ma aha kuwo caalami ah. Sababo la xiriira kala duwanaanshaha wax-soo-saarka, qiimaha "joogsiga" (52) ayaa laga yaabaa inuu u baahdo in la hagaajiyo. Haddii servo-gaagu si tartiib ah u dhaqaaqo markaad riixdo badhanka joogsiga, waxaad u baahan doontaa inaad si fiican u hagaajiso qiimahan. Fiidiyowgu wuxuu muujinayaa habkan, isagoo tusi doona sida beddelka qiimaha ilaa 54 ama 51 uu u saameyn karo hab-dhaqanka matorka (fiidiyowga 13:45).

Waxaad sidoo kale hagaajin kartaa qiimaha wareegga si aad u beddesho xawaaraha matorka. Tusaale ahaan, dejinta qiimaha counter-clockwise ilaa 70 waxay ka dhigi doontaa inuu si tartiib ah u wareego marka loo eego 106 (fiidiyowga 12:23).

Qaybta csServoCommandText waxay haysaa qoraallada lagu daabaco Serial Monitor-ka si loo muujiyo xaaladda amarka hadda jirta.

Shaqo Gaar ah: servoCommand()

Koodhku wuxuu isticmaalaa shaqo gaar ah si uu u maareeyo macquulka amarka. Shaqadani waxay qaadataa lambar (0, 1, ama 2) sida dood, waxay cusboonaysiisaa qoraalka xaaladda, waxayna u dirtaa amarka u dhigma servo-ga.


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

Shaqadan waxaa laga wacaa loop-ka guud marka badhan la riixo. Waxay udub dhexaad u tahay macquulka cusboonaysiinta bandhigga iyo xakamaynta servo-ga, taas oo ka dhigaysa koodhka nadiif ah oo fudud in wax laga beddelo.

Mashruuca Tooska ah iyo Banaanbaxa

Fiidiyowga, abuuraha wuxuu muujinayaa mashruuca shaqada. Riixista badhanka "Clockwise" waxay u dirtaa qiimaha 0 servo-ga, taasoo keentay inuu ku wareego jiho mid ah. Riixista badhanka "Counter-Clockwise" waxay u dirtaa qiimaha 106, taasoo ka dhigaysa inuu ku wareego jiho kale. Badhanka "Stop" wuxuu u diraa 52, kaas oo ah inuu joojiyo matorka.

Kormiska Seriyalka waxaa loo isticmaalaa in lagu muujiyo xaaladda hadda jirta iyo qiimaha saxda ah ee loo dirayo servo-ga. Tani waxay muhiim u tahay cilad-baadhista iyo helista qiimaha "joogsiga" ee ugu habboon matoorkaaga gaarka ah. Sida lagu xusay fiidiyowga, amarka joogsiga ayaa laga yaabaa inuusan aad u sax ahayn sababtoo ah wareegyada gudaha ee servo-ga, waxaadna arki kartaa dhaqaaq qunyar socda ama gariir. Tani waa astaamo caadi u ah servo-ga joogtada ah ee ka jaban, waxaana la yarayn karaa iyadoo la hagaajiyo qiimaha joogsiga ee koodhka (fiidiyowga 01:15).

Cutubyada

  • [00:05] Hordhac ku saabsan matoorka servo-ga 360-darajo
  • [02:02] Qaybaha iyo dulmarka qalabka
  • [02:40] Jaantuska fiilada ee faahfaahsan iyo isku-xirnaanshaha
  • [05:07] Sharaxaadda koodhka: constants, arrays, iyo setup
  • [09:56] Sharaxaadda koodhka: shaqada servoCommand
  • [10:54] Bandejiga tooska ah iyo waxa ka soo baxa Kormeerka Seriyalka
  • [12:23] Hagaajinta xawaaraha servo-ga iyo qiimayaasha joogsiga

Sawirro

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
Luqadda: 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)
Luqadda: 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 

Waad u baahan tahay

Kheyraadka & Tixraacyada

Faylasha📁

Faylal kale