Search Code

Darasi na 85: Gabatarwa ga Motocin Servo | Kwas ɗin Arduino Mataki-mataki

Darasi na 85: Gabatarwa ga Motocin Servo | Kwas ɗin Arduino Mataki-mataki

Wannan jagorar aikin tana gabatar da ku ga duniyar injinan servo masu jujjuyawa akai-akai, waɗanda aka fi sani da servo na digiri 360. Ba kamar servo na yau da kullun waɗanda ke motsawa zuwa wani kusurwa na musamman (kamar 0 zuwa 180 digiri) ba, waɗannan injinan suna jujjuyawa akai-akai a kowane bangare. Wannan ya sa su zama masu dacewa don gina ƙananan robots, tank treads, ko kowane aikin da ke buƙatar sauƙi, injinan tuƙi masu araha. Wannan jagorar za ta nuna muku yadda ake sarrafa ɗaya ta amfani da Arduino da ƴan maɓallan turawa, yana ba ku iko kai tsaye kan alkiblarsa da saurinsa.

Ga wasu aikace-aikace masu amfani ga servo na digiri 360:

  • Gina ƙaramin motar robot mai ƙafafu biyu.
  • Ƙirƙirar dutsen kyamara mai juyawa da karkata wanda ke jujjuyawa ba iyaka.
  • Tuki ƙaramin bel na jigilar kaya ko winch.
  • Yin dandamali mai sauƙi na radar ko na'urar daukar hoto.

Kayan aiki da Abubuwan Haɗi

Don wannan aikin, kuna buƙatar abubuwan haɗi masu zuwa:

  • Arduino board (misali, Uno)
  • Injin servo mai jujjuyawa akai-akai (misali, FS90R ko makamancinsa)
  • Maɓallan turawa guda uku
  • Wayoyin jumper
  • Breadboard (na zaɓi, don sauƙaƙe haɗin waya)

Jagorar Haɗin Waya

Haɗin waya don wannan aikin yana da sauƙi. Injin servo yana da wayoyi uku: yawanci launin ruwan kasa (ƙasa), ja (wutar lantarki), da orange ko rawaya (sigina). Maɓallan turawa an haɗa su cikin tsari mai sauƙi.

Ga bayanin haɗin:

  • Injin Servo:
    • Wayar launin ruwan kasa (Ƙasa) tana haɗawa zuwa fil ɗin GND na Arduino.
    • Wayar ja (Wutar Lantarki) tana haɗawa zuwa fil ɗin 5V na Arduino.
    • Wayar orange/rawaya (Sigina) tana haɗawa zuwa fil ɗin 9 na Arduino.
  • Maɓallan Turawa:
    • Ɗaya gefen kowane maɓalli yana haɗawa zuwa fil ɗin GND na Arduino.
    • Ɗayan gefen maɓallin "Counter-Clockwise" yana haɗawa zuwa fil ɗin 2.
    • Ɗayan gefen maɓallin "Stop" yana haɗawa zuwa fil ɗin 3.
    • Ɗayan gefen maɓallin "Clockwise" yana haɗawa zuwa fil ɗin 4.

A cikin bidiyon, mahaliccin ya jaddada cewa wayar sigina ta servo dole ne a haɗa ta zuwa fil ɗin da ke iya PWM akan Arduino, wanda galibi ana yiwa alama da tilde (~). Fil ɗin 9 ɗaya ne daga cikin waɗannan filaye. Maɓallan turawa suna amfani da resistors na ciki na Arduino, wanda ke sauƙaƙa haɗin waya ta hanyar kawar da buƙatar resistors na waje (a cikin bidiyon a 07:02).

Bayanin Lambar

Lambar an tsara ta don karanta yanayin maɓallan turawa guda uku kuma ta aika umarni daidai ga injin servo. Bari mu raba sassan da mai amfani zai iya daidaitawa.

Daidaita Filaye da Umarni

A saman lambar, za ku sami ma'anar filaye da ƙimar sarrafa servo. Wannan shine inda zaku iya keɓance halayen aikinku.


const int servoPin = 9;    // Fil ɗin PWM don siginar servo
const int stopPin = 3;     // Fil ɗin maɓallin tsayawa
const int cwPin = 4;       // Fil ɗin maɓallin clockwise
const int ccwPin = 2;      // Fil ɗin maɓallin counter-clockwise

Waɗannan ƙididdiga suna bayyana waɗanne filaye na Arduino aka haɗa da maɓallan da servo. Idan kuna amfani da filaye daban-daban don maɓallanku, za ku canza lambobin nan. servoPin dole ne ya zama fil ɗin da ke iya PWM.


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

Wannan shine mafi mahimmancin ɓangaren da za a fahimta kuma a daidaita. Tsararrun csServoCommand yana riƙe da ƙimar da ake aikawa zuwa servo. Ga servo mai jujjuyawa akai-akai, waɗannan ƙimar ba su wakiltar kusurwa ba amma sauri da alkibla.

  • 106 shine ƙimar don jujjuyawar Counter-Clockwise cikakken sauri.
  • 52 shine ƙimar don cikakken tsayawa.
  • 0 shine ƙimar don jujjuyawar Clockwise cikakken sauri.

Waɗannan ƙimar ba na duniya ba ne. Saboda bambance-bambancen masana'antu, ƙimar "tsayawa" (52) na iya buƙatar daidaitawa. Idan servonku yana motsawa a hankali lokacin da kuka danna maɓallin tsayawa, kuna buƙatar daidaita wannan ƙimar. Bidiyon yana nuna wannan tsari, yana nuna yadda canza ƙimar zuwa 54 ko 51 zai iya shafar halayen injin (a cikin bidiyon a 13:45).

Hakanan zaku iya daidaita ƙimar don jujjuyawa don canza saurin injin. Misali, saita ƙimar counter-clockwise zuwa 70 zai sa ya jujjuya a hankali fiye da 106 (a cikin bidiyon a 12:23).

Tsararrun csServoCommandText yana riƙe da rubutun da ake bugawa zuwa Serial Monitor don nuna yanayin umarni na yanzu.

Aikin Al'ada: servoCommand()

Lambar tana amfani da aikin al'ada don sarrafa dabaru na umarni. Wannan aikin yana ɗaukar lamba (0, 1, ko 2) a matsayin hujja, yana sabunta rubutun matsayi, kuma yana aika umarni daidai zuwa servo.


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

Ana kiran wannan aikin daga babban madauki lokacin da aka danna maɓalli. Yana haɗa dabaru na sabunta nuni da sarrafa servo, yana sa lambar ta zama mai tsabta kuma mai sauƙin gyarawa.

Aikin Kai Tsaye da Nunawa

A cikin bidiyon, mahaliccin yana nuna aikin yana aiki. Danna maɓallin "Clockwise" yana aika ƙimar 0 zuwa servo, yana sa shi jujjuya zuwa wata alkibla. Danna maɓallin "Counter-Clockwise" yana aika ƙimar 106, yana sa shi jujjuya zuwa wata alkibla. Maɓallin "Stop" yana aika 52, wanda ya kamata ya dakatar da injin.

Ana amfani da Serial Monitor don nuna halin yanzu da ainihin ƙimar da ake aikawa zuwa servo. Wannan yana da matuƙar amfani don gyara kurakurai da kuma nemo ingantacciyar ƙimar "tsayawa" don motar ka ta musamman. Kamar yadda aka nuna a cikin bidiyon, umarnin tsayawa bazai zama cikakke ba saboda kewayen ciki na servo, kuma za ka iya ganin motsi a hankali ko girgiza. Wannan halayya ce ta gama gari ga ƙananan servos masu ci gaba kuma ana iya rage ta ta hanyar daidaita ƙimar tsayawa a cikin lambar (a cikin bidiyo a 01:15).

Babuka

  • [00:05] Gabatarwa ga motar servo mai digiri 360
  • [02:02] Abubuwan haɗi da bayanin kayan aiki
  • [02:40] Cikakken zanen wayoyi da haɗin kai
  • [05:07] Bayanin lamba: ma'auni, tsararru, da saiti
  • [09:56] Bayanin lamba: aikin servoCommand
  • [10:54] Nunin kai tsaye da fitarwa na Serial Monitor
  • [12:23] Daidaita saurin servo da ƙimar tsayawa

Hotuna

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

Abin da zaka iya bukata

Albarkatun da kuma shafukan da za a duba

Fayiloli📁

Sauran fayiloli