Soek Kode

Les 18/31: Gebruik van Servomotor met Arduino SunFounder se Arduino-stel

Les 18/31: Gebruik van Servomotor met Arduino SunFounder se Arduino-stel

Servo motors is die werkesels van talle robotika- en afstandbeheerprojekte, wat presiese hoekbeheer bied vir alles van stuurmeganismes tot robotarms. Hierdie gids, gebaseer op Les 18 van die SunFounder Arduino-kit-kursus, sal jou deur die grondbeginsels lei om 'n servo motor met 'n Arduino te gebruik. Jy sal leer hoe om die hardeware te koppel en die motor se posisie te beheer met twee verskillende metodes: 'n eenvoudige vee-beweging en 'n knop-beheerde posisie. Die kennis wat jy hier opdoen is hoogs prakties en kan toegepas word op 'n wye reeks projekte, insluitend:

  • Die bou van 'n robotarm wat voorwerpe met presisie kan gryp en beweeg.
  • Die skep van 'n afstandbeheerde motor of boot met 'n servo vir stuur.
  • Die ontwikkeling van 'n sonvolger wat die son volg om energie-insameling te maksimeer.
  • Die konstruksie van 'n pan-en-tilt-kameramontage vir toesig of fotografie.
  • Die outomatisering van 'n modelvliegtuig se beheeroppervlaktes, soos die roer of rolroere.

Hardeware-oorsig

Voordat jy in die kode duik, is dit noodsaaklik om die servo motor self te verstaan. Soos in die video gedemonstreer, draai 'n servo motor nie voortdurend soos 'n standaard GS-motor nie. In plaas daarvan draai dit na 'n spesifieke hoekposisie, gewoonlik tussen 0 en 180 grade. Dit maak dit ideaal vir toepassings wat presiese beweging vereis. Die video beklemtoon verskeie voorbeelde, van die stuur van 'n RC-motor tot die beheer van die komplekse gewrigte van 'n robotarm (in video by 00:06).

Servo's kom in verskillende groottes voor, met die fisiese grootte en wringkraggradering wat hul prys en toepassing bepaal. 'n Klein mikro-servo is perfek vir liggewig modelle, terwyl 'n groter, kragtiger servo nodig is vir swaarder take soos die stuur van 'n "baie kragtige of dik motor" (in video by 01:59).

Die meeste stokperdjie-servo's het drie drade in 'n standaardkonnektor. Die video verduidelik 'n slim ontwerpkeuse: die middelste draad is altyd die kragdraad (VCC), tipies 5V. Dit is 'n veiligheidskenmerk wat die toestel beskerm teen verkeerde polariteit as die konnektor agterstevoor ingeprop word (in video by 03:27). Die ander twee drade is vir grond (GND) en die beheersein.

Bedradingsgids

Servo-wiring_bb
Servo-pot_wiring

Die bedrading van die servo aan jou Arduino is eenvoudig. Die video bied 'n duidelike demonstrasie van die verbindings (in video by 04:48). Die drie penne op die servo-konnektor word soos volg aan die Arduino gekoppel:

  • Seindraad (dikwels oranje of geel): Koppel dit aan 'n digitale PWM-pen op die Arduino. Die voorbeeld gebruik pen 9.
  • Kragdraad (dikwels rooi): Koppel dit aan die 5V-pen op die Arduino.
  • Gronddraad (dikwels bruin of swart): Koppel dit aan een van die GND-penne op die Arduino.

In die video gebruik die aanbieder manlike-tot-manlike DuPont-springdrade om die vroulike konnektor op die servo aan die Arduino se penkoppe te koppel (in video by 05:23).

Program 1: Beheer van Servo Motor (Vee)

Hierdie eerste program is die klassieke "vee"-voorbeeld. Dit is ontwerp om die volle bewegingsreeks van die servo te demonstreer deur dit heen en weer tussen 0 en 180 grade te beweeg. Dit is 'n goeie manier om te verifieer dat jou bedrading korrek is en om jou servo in aksie te sien. Die video demonstreer die oplaai van hierdie kode en die sien van die servo wat heen en weer vee (in video by 09:21).

Om die servo te beheer, sluit die kode eers die ingeboude Servo.h-biblioteek in, wat die proses vereenvoudig om die nodige beheerseine te genereer. Jy skep dan 'n servo-objek en gee dit 'n naam, soos myservo. In die setup()-funksie koppel jy hierdie objek aan 'n spesifieke pen met myservo.attach(9), wat die Arduino vertel dat die servo se seindraad aan pen 9 gekoppel is.

Die magie gebeur in die loop()-funksie, wat twee for-lusse gebruik om die servo te beweeg. Die eerste lus verhoog 'n posisievariabele pos van 0 tot 180, wat die servo een graad op 'n slag beweeg. Die tweede lus doen die teenoorgestelde, en verminder pos van 180 terug na 0. Die deurslaggewende deel is die delay(15) aan die einde van elke lus-iterasie. Hierdie pouse gee die servo genoeg tyd om fisies na die nuwe posisie te beweeg voordat die volgende opdrag gestuur word. Sonder hierdie vertraging sou die servo nie kon byhou nie en sou dit stol of bewe (in video by 12:31).

Hierdie voorbeeld is perfek vir leer, maar in 'n regte toepassing sal jy waarskynlik die servo op 'n spesifieke hoek wil stel. Soos in die video gewys, kan jy die kode wysig deur die for-lusse te vervang met 'n enkele opdrag soos myservo.write(90) om die servo na 90 grade te beweeg en dit daar te hou (in video by 10:09).

Program 2: Beheer van Servo Motor (Knop)

Hierdie tweede program neem servo-beheer 'n stap verder deur 'n potensiometer (’n knop) bekend te stel om intydse, handmatige beheer oor die servo se posisie te bied. Dit is 'n fantastiese manier om te verstaan hoe analoog invoer in presiese fisiese beweging vertaal kan word.

Hierdie program bou voort op die vorige een deur 'n potensiometer by te voeg. 'n Potensiometer is 'n verstelbare weerstand wat as 'n analoog spanningsverdeler optree. Wanneer jy aan die knop draai, verander dit die spanning by sy uitsetpen. Die Arduino lees hierdie spanning met behulp van 'n analoog-na-digitaal-omsetter (ADC) op een van sy analoog penne, en skakel dit om na 'n waarde tussen 0 en 1023.

Die sleutel tot hierdie program is die map()-funksie. Hierdie funksie skaal 'n getal van een reeks na 'n ander. In hierdie geval word dit gebruik om die potensiometer se rou waarde (0 tot 1023) te vertaal na 'n waarde geskik vir die servo (0 tot 180 grade). Die kode lees die potensiometer se waarde met analogRead(potpin), skaal dit met map(val, 0, 1023, 0, 180), en stuur dan daardie geskaalde waarde na die servo met myservo.write(val). Dit skep 'n direkte skakel waar die draai van die knop na sy middelpunt die servo op 90 grade sal posisioneer, en so aan.

Hierdie metode van beheer is hoogs intuïtief en is die grondslag vir baie mens-masjien-koppelvlakke, van eenvoudige afstandbeheerders tot komplekse robotbeheerders.

Lewende Projekdemonstrasie

Die video bied 'n lewendige demonstrasie van beide programme in aksie. Vir die sweep-program kan jy die servo-arm glad van 0 tot 180 grade en terug sien beweeg. Die aanbieder wys ook hoe die aanpassing van die stapgrootte in die for-lus (bv. van 1 graad tot 20 grade) en die vertragingstyd die servo se gedrag verander, wat die beweging vinniger maar minder glad maak (in video by 11:19).

Vir die knop-program wys die demonstrasie hoe die draai van die potensiometer die servo se posisie direk in reële tyd beheer. Hierdie visuele terugvoer is uitstekend om die verhouding tussen die analoog invoer en die fisiese uitset te verstaan.

Hoofstukke

  • [00:00] Inleiding tot Servomotors
  • [01:07] Toepassings van Servomotors
  • [02:57] Anatomie van 'n Servomotor
  • [04:48] Bedrading van die Servo aan Arduino
  • [06:06] Verkenning van die Sweep-voorbeeldkode
  • [09:21] Demonstrasie van die Sweep-program
  • [10:04] Stel van 'n Aangepaste Servohoek
  • [11:19] Wysig van Sweep-spoed en Stapgrootte
  • [13:15] Voorbeeld van 'n Ander Servomotor

Beelde

SG90_servo_motor-1
SG90_servo_motor-1
SG90 servo
SG90 servo
Servo-pot_wiring
Servo-pot_wiring
Servo-wiring_bb
Servo-wiring_bb
914-Lesson 18/31: Controlling servo motor (sweep)
Taal: C++
/*
Lesson 18/31: Controlling servo motor (sweep)
Get this code and watch video Download and resource page https://robojax.com/RJT601
YouTube video https://www.youtube.com/watch?v=KAt1WUWpHLQ
 
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

#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

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

void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15 ms for the servo to reach the position
  }
  for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15 ms for the servo to reach the position
  }
}
915-Lesson 18/31: Controlling servo motor (knob)
Taal: C++
/*
Lesson 18/31: Controlling servo motor (knob)
Get this code and watch video Download and resource page https://robojax.com/RJT601
YouTube video https://www.youtube.com/watch?v=KAt1WUWpHLQ
 
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin

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

void loop() {
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  val = map(val, 0, 1023, 0, 180);     // scale it to use it with the servo (value between 0 and 180)
  myservo.write(val);                  // sets the servo position according to the scaled value
  delay(15);                           // waits for the servo to get there
}

Hulpbronne en verwysings

Lêers📁

Arduino Biblioteke (zip)