Search Code

Een servo besturen met drukknoppen met behulp van Arduino

Een servo besturen met drukknoppen met behulp van Arduino

In deze tutorial leren we hoe we een servomotor kunnen aansturen met twee drukknoppen, één om de servo naar links te bewegen en één om hem naar rechts te bewegen. Wanneer je de rechterknop indrukt, beweegt de servo 10 graden naar rechts, en wanneer je de linkerknop indrukt, beweegt hij hetzelfde aantal graden naar links. Als je een knop ingedrukt houdt, blijft de servo in die richting bewegen totdat je de knop loslaat.

Dit project is een geweldige manier om te begrijpen hoe je knoppen kunt koppelen aan een servomotor met behulp van Arduino. We behandelen de benodigde hardwarecomponenten, bedradingsinstructies en de code die nodig is om alles te laten werken. Voor een duidelijker begrip kun je verwijzen naar de video die bij deze tutorial hoort (in video op 01:00).

Hardware Uitgelegd

Voor dit project heb je een Arduino-bord, een servomotor en twee drukknoppen nodig. De servomotor is verantwoordelijk voor de beweging, terwijl de drukknoppen fungeren als invoer om de richting van die beweging te regelen. De Arduino verwerkt deze invoer en stuurt de juiste signalen naar de servo.

De servomotor werkt op basis van pulsbreedtemodulatie (PWM)-signalen. Door verschillende pulsbreedtes te sturen, kun je de hoek van de servo regelen. De drukknoppen worden aangesloten op digitale ingangspinnen van de Arduino, en we gebruiken interne pull-up-weerstanden om de bedrading te vereenvoudigen.

Datasheet Details

FabrikantDiversen
OnderdeelnummerSG90
Logica/IO-spanning5 V
Voedingsspanning4,8–6 V
Uitgangsstroom (per kanaal)1,5 A max
Piekstroom (per kanaal)2,5 A max
PWM-frequentierichtlijn50 Hz
Ingangslogische drempels0,3VCC tot 0,7VCC
Spanningsval / RDS(on) / verzadiging0,4 V
Thermische limieten85 °C
BehuizingKunststof
Opmerkingen / variantenStandaard 180° rotatie

  • Zorg ervoor dat de servo geschikt is voor jouw voedingsspanning.
  • Gebruik geschikte koeling als je op hoge stromen werkt.
  • Sluit knoppen aan op aarde met pull-up-configuratie.
  • Debounce je knoppen als je grillig gedrag ervaart.
  • Bewaak de seriële uitvoer voor het debuggen.

Bedradingsinstructies

Arduino wriing for Sevo motor with 2 push buttons
Arduino wriing for Sevo motor with 2 push buttons

Om de componenten te bedraden, begin je met het aansluiten van de servomotor. Verbind de rode draad van de servo met de 5V-pin op de Arduino, de zwarte draad met de GND-pin, en de gele of witte signaaldraad met pin 9 op de Arduino. Deze pin regelt de positie van de servo.

Sluit vervolgens de drukknoppen aan. Verbind één aansluiting van de rechterknop met pin 2 en de andere aansluiting met aarde. Voor de linkerknop verbind je één aansluiting met pin 12 en de andere aansluiting ook met aarde. Deze opstelling zorgt ervoor dat de interne pull-up-weerstanden de pinnen hoog houden wanneer de knoppen niet worden ingedrukt.

Codevoorbeelden & Uitleg

Laten we beginnen met de code voor het aansturen van de servo met een enkele drukknop. De code initialiseert het servo-object en stelt een beginhoek in. Hier is een kort fragment:

int angle = 90;    // beginhoek voor servo
int angleStep = 10; // stapgrootte voor beweging

In dit fragment vertegenwoordigt angle de huidige positie van de servo, terwijl angleStep definieert hoeveel de servo beweegt bij elke knopdruk. Deze code is essentieel voor het bijhouden van de positie van de servo.

Vervolgens hebben we de setup-functie waarin we de servo bevestigen en de ingangspinnen configureren:

void setup() {
  Serial.begin(9600);          // seriële verbinding instellen
  myservo.attach(9);  // bevestigt de servo op pin 9
  pinMode(2, INPUT_PULLUP); // configureer knop-pin
}

In de setup initialiseren we de seriële monitor en bevestigen we de servo aan pin 9. De knop op pin 2 wordt ingesteld als invoer met een pull-up-weerstand, wat de bedrading vereenvoudigt en externe weerstanden overbodig maakt.

Tenslotte bekijken we de loop-functie die de knopdruk afhandelt:

while(digitalRead(2) == LOW) {
  angle = angle + angleStep; // verhoog hoek
  myservo.write(angle); // beweeg servo
}

Deze lus controleert continu of de knop is ingedrukt. Wanneer deze is ingedrukt, neemt de hoek toe met de gedefinieerde stap, en beweegt de servo dienovereenkomstig. Het is cruciaal om ervoor te zorgen dat de hoek binnen de grenzen blijft (0 tot 180 graden) om schade aan de servo te voorkomen.

Demonstratie / Wat te Verwachten

Wanneer je de rechterknop indrukt, moet de servo naar rechts bewegen in stappen van 10 graden totdat hij het maximum van 180 graden bereikt. Op dezelfde manier beweegt het indrukken van de linkerknop hem naar links. Als je een knop ingedrukt houdt, blijft de servo in die richting bewegen totdat je de knop loslaat (in video op 01:00).

Veelvoorkomende valkuilen zijn bedradingsproblemen, zoals onjuiste verbindingen of zwevende ingangen. Zorg er altijd voor dat je verbindingen stevig zijn en dat je de juiste pinnen gebruikt zoals gespecificeerd in de code.

Afbeeldingen

Control a servo with a single push button using Arduino
Control Servo with single push button with Arduino
SG90_servo_motor-1
SG90_servo_motor-1
SG90_servo_motor-0
SG90_servo_motor-0
Arduino wriing for Sevo motor with 2 push buttons
Arduino wriing for Sevo motor with 2 push buttons
98-Control a servo with a single push button using Arduino
Taal: C++
/*
 Controlling a servo with a push button with Arduino
 When a push button is pressed, the servo starts moving to the right or left until
 it reaches 180 and then returns to 0 degrees.

 May 22, 2018 at 01:00 
 Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
 Watch a video for this code at https://youtu.be/7woqNH_qby4
 This code is taken from http://robojax.com/learn/arduino
*/

#include <Servo.h>

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

int angle =90;    // initial angle for servo
int angleStep =10;

void setup() {
  // Servo button demo by Robojax.com
  Serial.begin(9600);          //  setup serial
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  pinMode(2,INPUT_PULLUP);
   Serial.println("Robojax Servo Button ");
}

void loop() {
  while(digitalRead(2) == LOW){
  // change the angle for the next time through the loop:
  angle = angle + angleStep;

    // reverse the direction of the movement at the ends of the angle:
    if (angle <= 0 || angle >= 180) {
      angleStep = -angleStep;
    }
    myservo.write(angle); // move the servo to the desired angle
      Serial.print("Moved to: ");
      Serial.print(angle);   // print the angle
      Serial.println(" degrees");    
  delay(100); // waits for the servo to get there
  }// while

  
}
99-Control a servo with two push buttons using Arduino
Taal: C++
/*
 Controlling a servo with two push buttons with Arduino
 When the left push button is pressed, the servo starts moving to the left until it reaches 180 (or zero) degrees.
 When the right push button is pressed, the servo starts moving to the right until it reaches 180 (or zero) degrees.
 At any instance, if the button is released, the servo stops.

 May 22, 2018, at 01:00 
 Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
 Watch a video for this code at https://youtu.be/7woqNH_qby4
 This code is taken from http://robojax.com/learn/arduino
*/

#include <Servo.h>

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

int angle =90;    // initial angle  for servo
int angleStep =5;

#define LEFT 12   // pin 12 is connected to left button
#define RIGHT  2  // pin 2 is connected to right button

void setup() {
  // Servo button demo by Robojax.com
  Serial.begin(9600);          //  setup serial
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  pinMode(LEFT,INPUT_PULLUP); // assign pin 12 as input for Left button
  pinMode(RIGHT,INPUT_PULLUP);// assign pin 2 as input for right button
  myservo.write(angle);// send servo to the middle at 90 degrees
 Serial.println("Robojax Servo Button ");
}

void loop() {
  // Servo button demo by Robojax.com
  while(digitalRead(RIGHT) == LOW){

    if (angle > 0 && angle <= 180) {
      angle = angle - angleStep;
       if(angle < 0){
        angle = 0;
       }else{
      myservo.write(angle); // move the servo to desired angle
      Serial.print("Moved to: ");
      Serial.print(angle);   // print the angle
      Serial.println(" degree");
       }
    }
    
  delay(100); // waits for the servo to get there
  }// while
 // Servo button demo by Robojax.com

  while(digitalRead(LEFT) == LOW){

    // Servo button demo by Robojax.com
    if (angle >= 0 && angle <= 180) {
      angle = angle + angleStep;
      if(angle >180){
        angle =180;
       }else{
      myservo.write(angle); // move the servo to desired angle
      Serial.print("Moved to: ");
      Serial.print(angle);   // print the angle
      Serial.println(" degree");
       }
    }
    
  delay(100); // waits for the servo to get there
  }// 

  
}

Dingen die je misschien nodig hebt

Hulpmiddelen en referenties

Nog geen middelen.

Bestanden📁

Geen bestanden beschikbaar.