Search Code

Arduino servomotorkontroll med hjälp av en potentiometer

Arduino servomotorkontroll med hjälp av en potentiometer

I den här handledningen kommer vi att utforska hur man kontrollerar en servomotor med en potentiometer med en Arduino. Målet är att skapa en enkel krets där servots position justeras baserat på rotationen av potentiometern. I slutet av detta projekt kommer du att ha en fungerande modell som smidigt varierar servovinkeln från 0 till 180 grader när du vrider på potentiometern. Detta är ett utmärkt sätt att förstå grunderna i analog ingång och servokontroll i Arduino.

För att uppnå detta kommer vi att använda ett Arduino-kort, en servomotor och en potentiometer. Potentiometern fungerar som en variabel resistor och ger en analog ingång till Arduino, som sedan kommer att bestämma servomotorens position därefter. Detta projekt är inte bara roligt utan också lärorikt, eftersom det visar viktiga koncept inom elektronik och programmering. För en mer ingående förklaring, se till att kolla på videon (i videon vid 00:00).

Hårdvara förklarad

I det här projektet är de huvudsakliga komponenterna Arduino-kortet, servomotorn och potentiometern. Arduino är hjärnan i operationen, som bearbetar ingångar och kontrollerar utgångar. Servomotorn är det som fysiskt kommer att röra sig baserat på de kommandon den får från Arduino. Potentiometern kan vara 1k ohm till 1M ohm och gör det möjligt för användare att ge en variabel ingång som översätts till servorörelse.

Servomotorn fungerar genom att ta emot en PWM (Pulsbreddsmodulering) signal som indikerar den önskade positionen. Potentiometern, när den vrids, ändrar sitt motstånd, vilket läses av Arduino som en analog spänning. Servomotorn fungerar med 5V. Den fungerar inte med 3,3V. Denna spänning kartläggs sedan till servomotorns rörelseområde, vilket möjliggör smidig rörelse från 0 grader till 180 grader.

Datasheet Detaljer för SG90 Servo Motor

TillverkareParallax
DelnummerSG90
Logik/IO-spänning5 V
Matningsspänning4.8-6 V
Utgångsström (per kanal)~500 mA
Spetsström (per kanal)1 A
PWM-frekvens vägledning50 Hz
Inmatningslogiktrösklar0,5 V (låg), 2,5 V (hög)
Spänningsfall / RDS(on)/ mättnad0,5 V vid 500 mA
Termiska gränser0°C till 60°C
PaketStandard 9g Servo
Anteckningar / varianterVanligt förekommande i RC-applikationer

  • Se säker på att servon inte överskrider sin maximala strömklassning.
  • Använd en kylfläns om servon arbetar kontinuerligt under höga belastningar.
  • Anslut potentiometern till en analog pin för noggranna avläsningar.
  • Var försiktig med PWM-signalens timing för servokontrollen.
  • Kontrollera servots rörelseomfång för att undvika fysiska hinder.

Kopplingsanvisningar

Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for servo motor
Arduino wiring for servo motor

För denna installation behöver du ansluta komponenterna enligt följande:

Anslut potentiometerns mittersta pin (wiper) till Arduinos analoga pin.A0. De andra två stiften på potentiometern bör kopplas till5VochGNDpå Arduino. För servomotorn, anslut den röda ledningen till5V, den svarta ledningen tillGND, och den gula eller vita ledningen till digital pin9på Arduino. Denna arrangemang gör det möjligt för potentiometern att ge en analog ingång till Arduino, som kommer att styra servomotorns position baserat på den ingången.

Se till att verifiera alla anslutningar och säkerställa att servot inte är blockerat i sitt rörelseområde. Om du använder en annan Arduino-modell, bekräfta att pin-uppdragen för den analoga ingången och servo-utgången är kompatibla.

Kodexempel och genomgång

Nedan är ett utdrag av koden som initierar servot och läser potentiometervärdet:


#include 

Servo myservo;  // create servo object to control a servo
int pos = 0;    // variable to store the servo position

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

I den här koden inkluderar vi Servo-biblioteket och skapar ett servoobjekt som kallasmyservoServot är anslutet till pin.9, vilket gör att vi kan styra det med denna pin.


void loop() {
  int sensorValue = analogRead(A0);  // read the potentiometer
  pos = map(sensorValue, 0, 1023, 0, 180);  // map to servo position
  myservo.write(pos);  // move servo to position
  delay(15);  // waits 15ms for the servo to reach the position
}

I loop-funktionen läser vi potentiometervärdet från pin.A0och mappa det från sitt intervall (0-1023) till servots intervall (0-180 grader). Denmyservo.write(pos)kommandot flyttar sedan servot till den önskade positionen baserat på potentiometerns rotation.

Demonstration / Vad man kan förvänta sig

När du kör det här programmet bör du se servomotorn smidigt röra sig från 0 till 180 grader när du vrider på potentiometern. Om servon inte rör sig som förväntat, kontrollera kablarna och se till att potentiometern fungerar korrekt. Se också till att Arduinon är korrekt strömsatt och att koden har laddats upp utan fel. Du kan förvänta dig att se servon återspegla potentiometerns position i realtid (i videon vid 02:00).

Videotidsstämplar

  • 00:00- Introduktion till projektet
  • 01:30- Förklaring av hårdvaruinstallation
  • 03:45- Kopplingsanvisningar
  • 05:00- Kodgenomgång
  • 07:30- Demonstration av det färdiga projektet

Bilder

Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for servo motor
Arduino wiring for servo motor
11-Controlling a servo position using a potentiometer using Arduino
Språk: C++
/**
*Original source: Arduino IDE
* Arduino Project: Controlling the servo position
* This code is used with a video tutorial for Robojax.com
* Published on April 24, 2017, from Ajax, ON, Canada.
* Written/Edited by Ahmad Shamshiri
* Watch the video on YouTube: https://youtu.be/kZ9b31gVemc
* View tutorial page for this code https://robojax.com/RJT8
* Controlling a servo position using a potentiometer (variable resistor)
*/



#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 15ms 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 15ms for the servo to reach the position
  }
}

Resurser och referenser

Inga resurser än.

Filer📁

Datablad (pdf)