Search Code

Kontrola serwomotoru Arduino za pomocą potencjometru

Kontrola serwomotoru Arduino za pomocą potencjometru

W tym samouczku zbadamy, jak kontrolować serwomotor za pomocą potencjometru z Arduino. Celem jest stworzenie prostego obwodu, w którym pozycja serwa jest dostosowywana na podstawie obrotu potencjometru. Pod koniec tego projektu będziesz miał działający model, który płynnie zmienia kąt serwa od 0 do 180 stopni w miarę obracania potencjometru. To doskonały sposób na zrozumienie podstaw analogowego wejścia i kontroli serw w Arduino.

Aby to osiągnąć, użyjemy płytki Arduino, serwomotoru i potencjometru. Potencjometr działa jako rezystor zmienny, dostarczając analogowy sygnał wejściowy do Arduino, które następnie określi pozycję serwomotoru. Ten projekt jest nie tylko zabawny, ale także edukacyjny, ponieważ ilustruje kluczowe pojęcia w elektronice i programowaniu. Aby uzyskać bardziej szczegółowe wyjaśnienie, koniecznie sprawdź wideo (w wideo o 00:00).

Wyjaśnienie sprzętu

W tym projekcie głównymi komponentami są płytka Arduino, serwomotor i potencjometr. Arduino jest mózgiem operacji, przetwarzającym dane wejściowe i kontrolującym dane wyjściowe. Serwomotor to element, który fizycznie poruszy się w zależności od poleceń, które otrzymuje od Arduino. Potencjometr o wartości od 1k om do 1M om pozwala użytkownikom na dostarczenie zmiennego sygnału wejściowego, który przekłada się na ruch serwomotoru.

Silnik serwo działa, odbierając sygnał PWM (modulacja szerokości impulsu), który wskazuje pożądaną pozycję. Potencjometr, po obróceniu, zmienia swoje oporności, która jest odczytywana przez Arduino jako napięcie analogowe. Silnik serwo działa przy 5V. Nie działa przy 3,3V. To napięcie jest następnie mapowane na zakres ruchu silnika serwo, co pozwala na płynny ruch od 0 stopni do 180 stopni.

Szczegóły karty katalogowej dla serwomotoru SG90

ProducentParalaksa
Numer częściSG90
Napięcie logiczne/IO5 V
Napięcie zasilania4,8-6 V
Prąd wyjściowy (na kanał)~500 mA
Prąd szczytowy (na kanał)1 A
Wskazówki dotyczące częstotliwości PWM50 Hz
Progi logiki wejściowej0,5 V (niski), 2,5 V (wysoki)
Spadek napięcia / RDS(on)/ nasycenie0,5 V przy 500 mA
Limity termiczne0°C do 60°C
PakietSerwo standardowe 9g
Notatki / wariantyPowszechnie stosowane w aplikacjach RC

  • Upewnij się, że serwomechanizm nie przekracza swojego maksymalnego prądu.
  • Użyj radiatora, jeśli serwomechanizm działa ciągle pod dużymi obciążeniami.
  • Podłącz potencjometr do pinu analogowego, aby uzyskać dokładne odczyty.
  • Zachowaj ostrożność w kwestii synchronizacji sygnału PWM do sterowania serwomechanizmem.
  • Sprawdź zakres ruchu serwomechanizmu, aby uniknąć przeszkód fizycznych.

Instrukcje dotyczące okablowania

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

Aby skonfigurować to ustawienie, musisz połączyć komponenty w następujący sposób:

Podłącz środkową nóżkę potencjometru (wycieraczkę) do analogowego pinu Arduino.A0. Dwa pozostałe piny potencjometru powinny być podłączone do5ViGNDna Arduino. Dla silnika serwo podłącz czerwony przewód do5V, czarny przewód doGND, a żółty lub biały przewód do pinu cyfrowego9na Arduino. To ustawienie pozwala potencjometrowi dostarczać analogowy sygnał do Arduino, które będzie kontrolować pozycję serwomotoru na podstawie tego sygnału.

Upewnij się, że wszystkie połączenia są zweryfikowane i że serwomechanizm nie jest zablokowany w swoim zakresie ruchu. Jeśli używasz innego modelu Arduino, potwierdź, że przypisania pinów dla wejścia analogowego i wyjścia serwomechanizmu są zgodne.

Przykłady kodu i przewodnik

Poniżej znajduje się fragment kodu, który inicjalizuje serwomechanizm i odczytuje wartość potencjometru:


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

W tym kodzie dołączamy bibliotekę Servo i tworzymy obiekt serwomechanizmu o nazwiemyservoSerwo jest podłączone do pinu9, co pozwala nam na kontrolowanie go za pomocą tego pinu.


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
}

W funkcji loop odczytujemy wartość potencjometru z pinuA0i przemapuj go z zakresu (0-1023) do zakresu serwomechanizmu (0-180 stopni). Serwomyservo.write(pos)komenda następnie przemieszcza serwomechanizm do żądanej pozycji w oparciu o obrót potencjometru.

Demonstracja / Czego się spodziewać

Kiedy uruchomisz ten program, powinieneś zobaczyć, jak serwomotor płynnie przemieszcza się od 0 do 180 stopni, gdy obracasz potencjometr. Jeśli serwo nie porusza się zgodnie z oczekiwaniami, sprawdź okablowanie i upewnij się, że potencjometr działa prawidłowo. Dodatkowo upewnij się, że Arduino jest prawidłowo zasilane, a kod został przesłany bez błędów. Możesz oczekiwać, że serwo będzie odzwierciedlać pozycję potencjometru w czasie rzeczywistym (w wideo o 02:00).

Znaczniki czasowe wideo

  • 00:00- Wprowadzenie do projektu
  • 01:30- Wyjaśnienie konfiguracji sprzętowej
  • 03:45- Instrukcje dotyczące okablowania
  • 05:00- Przegląd kodu
  • 07:30- Demonstracja ukończonego projektu

Obrazy

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
Język: 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
  }
}

Zasoby i odniesienia

Brak zasobów.

Pliki📁

Karta katalogowa (pdf)