Search Code

ESP32 Eğitimi 17/55 - ESP32 ve Potansiyometre Kullanarak Servo Motor Kontrolü - ESP32 IoT Öğrenme Kiti

ESP32 Eğitimi 17/55 - ESP32 ve Potansiyometre Kullanarak Servo Motor Kontrolü - ESP32 IoT Öğrenme Kiti

Bu eğitimde, SunFounder'ın ESP32 IoT Öğrenme kitinden bir ESP32 mikrodenetleyici ve bir potansiyometre kullanarak bir servo motoru nasıl kontrol edeceğimizi öğreneceğiz. Bu projenin sonunda, potansiyometreyi kullanarak servo motorun açısını sorunsuz bir şekilde ayarlayabilecek ve hassas kontrol sağlayabileceksiniz. Bu, ESP32'nin yeteneklerini ve motorlarla nasıl arayüz oluşturduğunu keşfetmek için harika bir yoldur.

Ayrıntılara daldıkça, gerekli donanım bileşenlerini, bağlantı talimatlarını ve her şeyi çalışır hale getirmek için kod örneklerini ele alacağız. Daha görsel bir temsil için, bu eğitimle ilişkili videoyu mutlaka izleyin (videoda 0:30).

Donanım Açıklaması

Bu projenin ana bileşenleri ESP32 mikrodenetleyici, bir servo motor (SG90) ve bir potansiyometredir. ESP32, yerleşik Wi-Fi ve Bluetooth sunan güçlü bir mikrodenetleyicidir ve bu da onu IoT projeleri için uygun hale getirir. Motorlar dahil çeşitli cihazları yüksek hassasiyetle kontrol edebilir.

SG90 servo motor, yaklaşık 270 derece dönebilen yaygın olarak kullanılan bir bileşendir. Dönüş açısının, kendisine gönderilen darbenin genişliğiyle belirlendiği bir darbe genişliği modülasyonu (PWM) sinyaliyle çalışır. Potansiyometre, ESP32'ye gönderilen voltajı ayarlamanıza olanak tanıyan değişken bir direnç görevi görür ve bu da servo'nun konumunu kontrol eder.

Veri Sayfası Ayrıntıları

Üretici SG
Parça numarası SG90
Mantık/G/Ç voltajı 3.3 V (ESP32)
Besleme voltajı 5 V
Çıkış akımı (kanal başına) 1.2 A
Tepe akımı (kanal başına) 2.5 A
PWM frekans kılavuzu 50 Hz
Giriş mantık eşikleri 0.2 V (düşük), 2.5 V (yüksek)
Voltaj düşümü / RDS(on) / doyum 0.5 V
Termal sınırlar 85 °C maks
Paket Plastik
Notlar / varyantlar Farklı dişli tiplerinde mevcuttur

 

  • Servo'nun uygun bir voltajla (5V) beslendiğinden emin olun.
  • Ortak bir referans için servo'nun toprağını ESP32 toprağına bağlayın.
  • Servo'nun konumunu kontrol etmek için uygun PWM sinyalleri kullanın.
  • Servo'nun akım gereksinimlerinin farkında olun; gerekirse harici bir güç kaynağı kullanın.
  • Yanlış yapılandırmaları önlemek için bağlantı yaparken doğru pin atamalarını kontrol edin.

Bağlantı Talimatları

ESP32-17-Sevo_motor-wiring

Servo motoru ve potansiyometreyi ESP32'ye bağlamak için, servo'nun toprak kablosunu (genellikle siyah veya kahverengi) ESP32 üzerindeki toprak pinlerinden birine bağlayarak başlayın. Ardından, servo'nun güç kablosunu (genellikle kırmızı) ESP32 üzerindeki 5V pinine bağlayın. Son olarak, servo'dan gelen sinyal kablosunu (genellikle turuncu veya beyaz) ESP32 üzerindeki 25 pinine bağlayın.

Potansiyometre için, bir dış pini ESP32 üzerindeki 3.3V pinine ve diğer dış pini toprağa bağlayın. Potansiyometrenin orta pini ESP32 üzerindeki 34 pinine bağlanmalıdır. Bu kurulum, ESP32'nin potansiyometreden gelen değişken voltaj çıkışını okumasını sağlar ve bu da servo'nun konumunu kontrol etmek için kullanılacaktır.

Kod Örnekleri ve Açıklama

Aşağıdaki kod parçası servo'yu başlatır ve hareketini kontrol etmek için parametreleri ayarlar:

#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); // Standart 50Hz servo
}

Bu kodda, ESP32Servo kütüphanesini dahil ediyoruz ve myServo adında bir servo örneği oluşturuyoruz. Servo için pin numarasını tanımlıyoruz ve servo'nun açı sınırlarına karşılık gelen minimum ve maksimum darbe genişliklerini ayarlıyoruz.

ESP32_servo_lib

Şimdi, servo'yu sürekli olarak ileri geri hareket ettiren döngüye bir göz atalım:

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);
  }
}

Bu döngü, açıyı 0'dan 180 dereceye ve tekrar geriye kademeli olarak değiştirir ve servo için açıyı karşılık gelen darbe genişliğine dönüştürmek için map fonksiyonunu kullanır. Her değişikliği, servo'nun yeni konumuna sorunsuz bir şekilde ulaşmasını sağlamak için kısa bir gecikme takip eder.

Gösterim / Beklentiler

Her şey bağlandıktan ve kod yüklendikten sonra, servo motorun 0'dan 180 dereceye ve geriye doğru sorunsuz bir şekilde hareket ettiğini görmelisiniz. Potansiyometreyi ayarlarsanız, servo potansiyometrenin sağladığı voltaja göre yeni konumu yansıtmalıdır. Bağlantı yaparken ters polariteye dikkat edin, çünkü bu bileşenlerinize zarar verebilir (videoda 3:45).

Video Zaman Damgaları

  • 00:00 Başlangıç
  • 1:56 Servo motor nedir
  • 5:00 Doküman sayfası
  • 6:33 Servo bağlantısı açıklandı
  • 7:45 Arduino IDE'de ESP32 için COMP portu seçimi
  • 9:27 Arduino kodu açıklandı
  • 14:31 ESP32 kullanarak servo kontrolünün gösterimi
  • 16:04 Servoyu 5V dışında güçle besleme
  • 18:47 Döngü olmadan servo kontrolü
  • 20:15 Potansiyometre ile servo kontrolü
  • 21:37 Potansiyometreli servo Arduino kodu açıklandı

Görseller

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
Dil: 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);
  }
}

Dosyalar📁

Veri Sayfası (pdf)

Diğer dosyalar