Search Code

Arduino Servo Motorbesturing met een Potentiometer

Arduino Servo Motorbesturing met een Potentiometer

In deze tutorial zullen we verkennen hoe we een servomotor kunnen aansturen met een potentiometer en een Arduino. Het doel is om een eenvoudige schakeling te creëren waarbij de positie van de servo wordt aangepast op basis van de rotatie van de potentiometer. Aan het einde van dit project heb je een werkend model dat de servohoek soepel varieert van 0 tot 180 graden terwijl je de potentiometer draait. Dit is een geweldige manier om de basisprincipes van analoge invoer en servocontrole in Arduino te begrijpen.

Om dit te bereiken, zullen we een Arduino-bord, een servomotor en een potentiometer gebruiken. De potentiometer fungeert als een variabele weerstand en biedt een analoge invoer aan de Arduino, die vervolgens de positie van de servomotor dienovereenkomstig zal bepalen. Dit project is niet alleen leuk, maar ook educatief, omdat het belangrijke concepten in elektronica en programmeren demonstreert. Voor een meer diepgaande uitleg, zorg ervoor dat je de video bekijkt (in video om 00:00).

Hardware Uitleg

In dit project zijn de belangrijkste componenten de Arduino-bord, de servomotor en de potentiometer. De Arduino is de hersenen van de operatie, die invoer verwerkt en uitvoer controleert. De servomotor is wat fysiek zal bewegen op basis van de commando's die het ontvangt van de Arduino. De potentiometer kan 1k ohm tot 1M ohm zijn en stelt gebruikers in staat om een variabele invoer te geven die vertaalt naar servobeweging.

De servomotor werkt door een PWM (Pulse Width Modulation) signaal te ontvangen dat de gewenste positie aangeeft. De potentiometer, wanneer deze wordt gedraaid, verandert zijn weerstand, die door de Arduino wordt gelezen als een analoge spanning. Servomotoren werken met 5V. Werkt niet met 3,3V. Deze spanning wordt vervolgens in kaart gebracht naar het bewegingsbereik van de servomotor, wat een soepele beweging van 0 graden tot 180 graden mogelijk maakt.

Datasheet details voor SG90 servo motor

FabrikantParallax
OnderdeelnummerSG90
Logica/IO spanning5 V
Voedingsspanning4,8-6 V
Uitgangsstroom (per kanaal)~500 mA
Piekstroom (per kanaal)1 A
PWM frequentie richtlijnen50 Hz
Ingangslogische drempels0,5 V (laag), 2,5 V (hoog)
Spanningsval / RDS(on)/ verzadiging0,5 V bij 500 mA
Thermische limieten0°C tot 60°C
PakketStandaard 9g Servo
Notities / variantenVeel gebruikt in RC-toepassingen

  • Zorg ervoor dat de servo zijn maximale stroomwaarde niet overschrijdt.
  • Gebruik een koellichaam als de servo continu bij hoge belastingen werkt.
  • Sluit de potentiometer aan op een analoge pin voor nauwkeurige metingen.
  • Wees voorzichtig met de timing van het PWM-signaal voor de servo-besturing.
  • Controleer het bewegingsbereik van de servo om fysieke obstructies te vermijden.

Bedradinginstructies

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

Voor deze opstelling moet je de componenten als volgt aansluiten:

Verbind de middelste pin (veegcontact) van de potentiometer met de analoge pin van de Arduino.A0. De andere twee pinnen van de potentiometer moeten worden aangesloten op5VenGNDaan de Arduino. Voor de servomotor, verbind de rode draad met5V, de zwarte draad naarGND, en de gele of witte draad naar digitale pin9op de Arduino. Deze opstelling stelt de potentiometer in staat om een analoge invoer naar de Arduino te geven, die de positie van de servomotor op basis van die invoer zal regelen.

Zorg ervoor dat je alle verbindingen controleert en ervoor zorgt dat de servo niet wordt belemmerd in zijn bewegingsbereik. Als je een ander Arduino-model gebruikt, bevestig dan dat de pintoewijzingen voor de analoge invoer en servo-uitgang compatibel zijn.

Codevoorbeelden en Stappenplan

Hieronder staat een fragment van de code die de servo initialiseert en de waarde van de potentiometer leest:


#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
}

In deze code voegen we de Servo-bibliotheek toe en maken we een servo-object genaamdmyservoDe servo is bevestigd aan pin9, wat ons in staat stelt het te bedienen met deze 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
}

In de loopfunctie lezen we de potentiometerwaarde van pinA0en map het van zijn bereik (0-1023) naar het bereik van de servo (0-180 graden). Demyservo.write(pos)de opdracht verplaatst de servo naar de gewenste positie op basis van de rotatie van de potentiometer.

Demonstratie / Wat te Verwachten

Wanneer je dit programma uitvoert, zou je de servomotor soepel van 0 naar 180 graden moeten zien bewegen terwijl je de potentiometer draait. Als de servo niet beweegt zoals verwacht, controleer dan de bedrading en zorg ervoor dat de potentiometer correct functioneert. Zorg er daarnaast voor dat de Arduino goed van stroom is voorzien en dat de code zonder fouten is geüpload. Je kunt verwachten dat de servo de positie van de potentiometer in real-time weergeeft (in video om 02:00).

Videotijdstempels

  • 00:00- Inleiding tot het project
  • 01:30- Uitleg over de hardwareconfiguratie
  • 03:45- Draadinstructies
  • 05:00- Code doorloop
  • 07:30- Demonstratie van het voltooide project

Afbeeldingen

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
Taal: 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
  }
}

Hulpmiddelen en referenties

Nog geen middelen.

Bestanden📁

Datasheet (pdf)