Luka Code

Lis 85: Boyebi ya ba moteur ya servo | Cours Arduino Etape na Etape

Lis 85: Boyebi ya ba moteur ya servo | Cours Arduino Etape na Etape

Mokandimi ya projɛ oyo ezali komemela yo na mokili ya ba moteur ya servo oyo ebongwanaka libela, oyo eyebani mpe lokola ba servo ya 360 degre. Na ndenge esengeli na ba servo ya momesano oyo ekendaka na angle ya sikisiki (lokola 0 kino 180 degre), ba moteur oyo ezali kobaluka libela na nzela moko na moko. Oyo esalaka ete bazala malamu mpo na kotonga ba robotike mike, ba tank treads, to eloko nyonso oyo esengaka ba moteur ya pete mpe ya motuya moke. Mokandami oyo ekotiya yo na ndenge ya kokamba yango na Arduino mpe ba bouton moke, mpe kopesa yo bokonzi ya maboko likolo ya direction na yango mpe vitesse.

Tala ba application mosusu ya malamu mpo na servo ya 360 degre:

  • Kotonga motuka moke ya robotike na ba nzoto mibale.
  • Kosala monture ya camera oyo ekoki kobaluka na pan mpe tilt libela.
  • Kotambwisa conveyor belt moke to winch.
  • Kosala platform ya radar to ya scanner oyo ezali kotala biloko.

Hardware mpe Ba Composant

Mpo na projɛ oyo, okosengela ba composant oyo:

  • Arduino board (lokola Uno)
  • Servo motor ya libela (lokola FS90R to mosusu ya lolenge wana)
  • Ba bouton misato
  • Ba jumper wires
  • Breadboard (oyo ezali malamu, mpo na kosala ba connexion na pete)

Mokandami ya Ba Connexion

Ba connexion mpo na projɛ oyo ezali pete. Servo motor ezali na ba nsinga misato: mingi mpe ya mayi ya soya (ground), motane (power), mpe orange to ya jaune (signal). Ba bouton ezali connecté na lolenge ya pete.

Tala ndenge ba connexion ezali:

  • Servo Motor:
    • Nsinga ya soya (Ground) ekokani na pin ya GND ya Arduino.
    • Nsinga ya motane (Power) ekokani na pin ya 5V ya Arduino.
    • Nsinga ya orange/jaune (Signal) ekokani na pin 9 ya Arduino.
  • Ba Bouton:
    • Lopango moko ya bouton moko na moko ekokani na pin ya GND ya Arduino.
    • Lopango mosusu ya bouton ya "Counter-Clockwise" ekokani na pin 2.
    • Lopango mosusu ya bouton ya "Stop" ekokani na pin 3.
    • Lopango mosusu ya bouton ya "Clockwise" ekokani na pin 4.

Na vidéo, moto oyo asala yango alobi ete nsinga ya signal ya servo esengeli kokangama na pin ya PWM na Arduino, oyo mbala mingi ezali na elembo ya tilde (~). Pin 9 ezali moko ya ba pin oyo. Ba bouton ezali kosalela ba résistances internes ya Arduino, oyo ezali kosala ete ba connexion ezala pete mpo ete tosengeli te ba résistances ya libanda (na vidéo na 07:02).

Explication ya Code

Code oyo esalemi mpo na kotanga état ya ba bouton misato mpe kotinda commande oyo ekokani na servo motor. Tala ba parties oyo moto akoki kobongola.

Kobongola Ba Pin mpe Ba Commande

Na likolo ya code, okomona ba définitions ya ba pin mpe ba valeurs ya contrôle ya servo. Oyo ezali esika okoki kosala customization ya projɛ na yo.


const int servoPin = 9;    // Pin ya PWM mpo na signal ya servo
const int stopPin = 3;     // Pin mpo na bouton ya stop
const int cwPin = 4;       // Pin mpo na bouton ya clockwise
const int ccwPin = 2;      // Pin mpo na bouton ya counter-clockwise

Ba constantes oyo ezali kolakisa ba pin ya Arduino oyo ezali connecté na ba bouton mpe na servo. Soki olobi na ba pin mosusu mpo na ba bouton na yo, okobongola ba nombres oyo. servoPin esengeli kozala pin oyo ekoki na PWM.


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

Oyo ezali partie ya ntina mingi mpo na kososola mpe kobongola. Array ya csServoCommand ezali na ba valeurs oyo etindamaka na servo. Mpo na servo ya libela, ba valeurs oyo ezali kolakisa angle te, kasi vitesse mpe direction.

  • 106 ezali valeur mpo na rotation ya Counter-Clockwise na vitesse ya mobimba.
  • 52 ezali valeur mpo na stop ya mobimba.
  • 0 ezali valeur mpo na rotation ya Clockwise na vitesse ya mobimba.

Ba valeurs oyo ezali mpo na bato nyonso te. Na ntina ya ba différences ya fabrication, valeur ya "stop" (52) ekoki kosengela kobongolama. Soki servo na yo ezali kotambola malembe tango opesi bouton ya stop, okosengela kobongola valeur oyo. Vidéo ezali kolakisa processus oyo, mpe kolakisa ndenge kobongola valeur na 54 to 51 ekoki kosala ete moteur ezala na ndenge mosusu (na vidéo na 13:45).

Okoki mpe kobongola ba valeurs mpo na rotation mpo na kobongola vitesse ya moteur. Na ndakisa, kokitisa valeur ya counter-clockwise na 70 ekosala ete ezala na vitesse moke koleka na 106 (na vidéo na 12:23).

Array ya csServoCommandText ezali na ba textes oyo ekomamaka na Serial Monitor mpo na kolakisa état ya commande ya sika.

Fonction ya Spécial: servoCommand()

Code ezali kosalela fonction ya spécial mpo na kokamba logique ya commande. Fonction oyo ezali kozwa nombre (0, 1, to 2) lokola argument, kobongola texte ya état, mpe kotinda commande oyo ekokani na servo.


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

Fonction oyo ebengamaka na boucle ya principal tango bouton epesamaka. Ezali kosangisa logique ya kobongola affichage mpe kokamba servo, mpe kosala ete code ezala pete mpe pete na kobongola.

Projɛ ya Bomoi mpe Démonstration

Na vidéo, moto oyo asala yango azali kolakisa projɛ na yango na bomoi. Kopesa bouton ya "Clockwise" ezali kotinda valeur 0 na servo, mpe kosala ete ezala na rotation na direction moko. Kopesa bouton ya "Counter-Clockwise" ezali kotinda valeur 106, mpe kosala ete ezala na rotation na direction mosusu. Bouton ya "Stop" ezali kotinda 52, oyo esengeli kosala ete moteur atelema.

Moniteur ya Serial esalelami te kombo ya lisese ya sik’oyo mpe motuya ya solo oyo ezali kotindama na servo. Yango ezali na tina mingi mpo na kobongisa mabe mpe mpo na koluka motuya ya "stop" ya malamu mpo na moteur na yo ya sik’oyo. Lokola emonisami na vidéo, commande ya stop ekoki kozala ya malamu te likolo ya circuit intérieur ya servo, mpe okoki komona mouvement ya malembe to vibration. Yango ezali caractéristique ya banal ya servo ya continu ya ntalo moke mpe ekoki kokitisama na kobongisa motuya ya stop na code (na vidéo na 01:15).

Bikabu

  • [00:05] Bokotisi na moteur servo ya 360 degré
  • [02:02] Bileko mpe lisusu ya hardware
  • [02:40] Diagramme ya wiring mpe ba connexions na détail
  • [05:07] Explication ya code: constantes, tableaux, mpe setup
  • [09:56] Explication ya code: fonction servoCommand
  • [10:54] Démonstration ya direct mpe résultat ya Moniteur ya Serial
  • [12:23] Kobongisa vitesse ya servo mpe ba valeurs ya stop

Images

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

Nko o na nki.

Fichiers📁

Mabala a mangwe