Szukaj kodu

Poradnik ESP32 17/55 - Sterowanie serwomechanizmem za pomocą ESP32 i potencjometru - zestaw edukacyjny IoT ESP32

Poradnik ESP32 17/55 - Sterowanie serwomechanizmem za pomocą ESP32 i potencjometru - zestaw edukacyjny IoT ESP32

W tym samouczku nauczymy się, jak sterować serwomechanizmem za pomocą mikrokontrolera ESP32 oraz potencjometru z zestawu ESP32 IoT Learning kit firmy SunFounder. Po ukończeniu tego projektu będziesz w stanie płynnie regulować kąt obrotu serwomechanizmu za pomocą potencjometru, co umożliwi precyzyjne sterowanie. To świetny sposób na poznanie możliwości ESP32 i sposobu, w jaki współpracuje on z silnikami.

Zagłębiając się w szczegóły, omówimy niezbędne komponenty sprzętowe, instrukcje podłączenia oraz przykłady kodu, aby wszystko uruchomić. Aby uzyskać bardziej wizualną reprezentację, koniecznie obejrzyj wideo powiązane z tym samouczkiem (na wideo w 0:30).

Omówienie sprzętu

Główne komponenty tego projektu to mikrokontroler ESP32, serwomechanizm (SG90) oraz potencjometr. ESP32 to wydajny mikrokontroler oferujący wbudowane Wi-Fi i Bluetooth, co czyni go odpowiednim do projektów IoT. Jest w stanie precyzyjnie sterować różnymi urządzeniami, w tym silnikami.

Serwomechanizm SG90 to powszechnie używany komponent, który może obracać się o około 270 stopni. Działa on na zasadzie modulacji szerokości impulsu (PWM), gdzie kąt obrotu jest określany przez szerokość wysyłanego impulsu. Potencjometr działa jak rezystor zmienny, umożliwiając regulację napięcia wysyłanego do ESP32, które z kolei steruje pozycją serwomechanizmu.

Szczegóły z karty katalogowej

Producent SG
Numer części SG90
Napięcie logiczne/IO 3,3 V (ESP32)
Napięcie zasilania 5 V
Prąd wyjściowy (na kanał) 1,2 A
Prąd szczytowy (na kanał) 2,5 A
Zalecana częstotliwość PWM 50 Hz
Progi logiczne wejścia 0,2 V (niski), 2,5 V (wysoki)
Spadek napięcia / RDS(on) / nasycenie 0,5 V
Limity termiczne 85 °C maks.
Obudowa Plastikowa
Uwagi / warianty Dostępny w różnych typach przekładni

 

  • Upewnij się, że serwomechanizm jest zasilany odpowiednim napięciem (5 V).
  • Podłącz masę serwomechanizmu do masy ESP32, aby uzyskać wspólny punkt odniesienia.
  • Używaj odpowiednich sygnałów PWM do sterowania pozycją serwomechanizmu.
  • Zwracaj uwagę na wymagania prądowe serwomechanizmu; w razie potrzeby użyj zewnętrznego zasilacza.
  • Sprawdź prawidłowe przypisanie pinów podczas podłączania, aby uniknąć błędów konfiguracji.

Instrukcje podłączenia

ESP32-17-Sevo_motor-wiring

Aby podłączyć serwomechanizm i potencjometr do ESP32, zacznij od podłączenia przewodu masy serwomechanizmu (zazwyczaj czarnego lub brązowego) do jednego z pinów masy na ESP32. Następnie podłącz przewód zasilający (zazwyczaj czerwony) serwomechanizmu do pinu 5 V na ESP32. Na koniec podłącz przewód sygnałowy (zazwyczaj pomarańczowy lub biały) z serwomechanizmu do pinu 25 na ESP32.

W przypadku potencjometru podłącz jeden zewnętrzny pin do pinu 3,3 V na ESP32, a drugi zewnętrzny pin do masy. Środkowy pin potencjometru należy podłączyć do pinu 34 na ESP32. Taka konfiguracja pozwala ESP32 odczytywać zmienne napięcie wyjściowe z potencjometru, które będzie używane do sterowania pozycją serwomechanizmu.

Przykłady kodu i omówienie

Poniższy fragment kodu inicjalizuje serwomechanizm i ustawia parametry do sterowania jego ruchem:

#include 

Servo myServo;
const int servoPin = 25;
const int minPulseWidth = 500; // 0,5 ms
const int maxPulseWidth = 2500; // 2,5 ms

void setup() {
  myServo.attach(servoPin, minPulseWidth, maxPulseWidth);
  myServo.setPeriodHertz(50); // Standardowy serwomechanizm 50 Hz
}

W tym kodzie dołączamy bibliotekę ESP32Servo i tworzymy instancję serwomechanizmu o nazwie myServo. Definiujemy numer pinu dla serwomechanizmu oraz ustawiamy minimalną i maksymalną szerokość impulsu odpowiadającą granicom kąta obrotu serwomechanizmu.

ESP32_servo_lib

Następnie przyjrzyjmy się pętli, która w sposób ciągły porusza serwomechanizmem w przód i w tył:

void loop() {
  for (int angle = 0; angle <= 180; angle++) {
    int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
    myServo.writeMicroseconds(pulseWidth);
    delay(15);
  }
  for (int angle = 180; angle >= 0; angle--) {
    int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
    myServo.writeMicroseconds(pulseWidth);
    delay(15);
  }
}

Ta pętla stopniowo zmienia kąt od 0 do 180 stopni i z powrotem, używając funkcji map do przeliczenia kąta na odpowiednią szerokość impulsu dla serwomechanizmu. Po każdej zmianie następuje krótkie opóźnienie, aby serwomechanizm mógł płynnie osiągnąć nową pozycję.

Demonstracja / Czego się spodziewać

Po podłączeniu wszystkiego i wgraniu kodu powinieneś zobaczyć, jak serwomechanizm płynnie porusza się od 0 do 180 stopni i z powrotem. Jeśli wyregulujesz potencjometr, serwomechanizm powinien odzwierciedlać nową pozycję na podstawie napięcia dostarczanego przez potencjometr. Zachowaj ostrożność przy odwróconej polaryzacji podczas podłączania, ponieważ może to uszkodzić komponenty (na wideo w 3:45).

Znaczniki czasowe wideo

  • 00:00 Start
  • 1:56 Co to jest silnik serwo
  • 5:00 Strona dokumentacji
  • 6:33 Wyjaśnienie podłączenia serwa
  • 7:45 Wybór portu COMP dla ESP32 w Arduino IDE
  • 9:27 Wyjaśnienie kodu Arduino
  • 14:31 Demonstracja sterowania serwem za pomocą ESP32
  • 16:04 Zasilanie serwa innym napięciem niż 5V
  • 18:47 Sterowanie serwem bez pętli
  • 20:15 Sterowanie serwem za pomocą potencjometru
  • 21:37 Wyjaśnienie kodu Arduino dla serwa z potencjometrem

Obrazy

ESP32-17-Sevo_motor-schematic
ESP32-17-Sevo_motor-schematic
ESP32-17-Sevo_motor-wiring
ESP32-17-Sevo_motor-wiring
ESP32_servo_lib
ESP32_servo_lib
816-ESP32 Tutorial 17/55- Arduino code for controling servo motor
Język: C++
#include <ESP32Servo.h>

// Define the servo and the pin it is connected to
Servo myServo;
const int servoPin = 25;

// Define the minimum and maximum pulse widths for the servo
const int minPulseWidth = 500; // 0.5 ms
const int maxPulseWidth = 2500; // 2.5 ms

void setup() {
  // Attach the servo to the specified pin and set its pulse width range
  myServo.attach(servoPin, minPulseWidth, maxPulseWidth);

  // Set the PWM frequency for the servo
  myServo.setPeriodHertz(50); // Standard 50Hz servo
}

void loop() {
  // Rotate the servo from 0 to 180 degrees
  for (int angle = 0; angle <= 180; angle++) {
    int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
    myServo.writeMicroseconds(pulseWidth);
    delay(15);
  }

  // Rotate the servo from 180 to 0 degrees
  for (int angle = 180; angle >= 0; angle--) {
    int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
    myServo.writeMicroseconds(pulseWidth);
    delay(15);
  }
}

Pliki📁

Karta katalogowa (pdf)

Inne pliki