Cari Kode

Tutorial ESP32 31/55 - Proyek Strip LED dengan Penghindaran Rintangan | Kit Pembelajaran IoT ESP32 SunFounder

Tutorial ESP32 31/55 - Proyek Strip LED dengan Penghindaran Rintangan | Kit Pembelajaran IoT ESP32 SunFounder

Dalam tutorial ini, kita akan membuat proyek menggunakan mikrokontroler ESP32 dan strip LED WS2812 yang dapat mengubah arahnya berdasarkan deteksi rintangan. Ketika strip LED bergerak maju, strip akan menampilkan warna acak, dan saat mendeteksi rintangan, strip akan beralih ke warna yang telah ditentukan dan membalikkan arah. Proyek ini menunjukkan kemampuan ESP32 yang dikombinasikan dengan sensor penghindar rintangan inframerah.

ESP32-31-flowing-light-main2

Sepanjang tutorial ini, kita akan membahas komponen perangkat keras yang diperlukan, instruksi pengkabelan, dan kode yang dibutuhkan untuk mewujudkan proyek ini. Untuk penjelasan yang lebih visual, pastikan untuk menonton video yang ditautkan di bawah ini (di video pada 00:00).

Penjelasan Perangkat Keras

Proyek ini membutuhkan beberapa komponen, termasuk mikrokontroler ESP32, strip LED WS2812, dan sensor penghindar rintangan inframerah. ESP32 adalah mikrokontroler yang kuat dengan Wi-Fi dan Bluetooth bawaan, menjadikannya sempurna untuk aplikasi IoT. Strip LED WS2812 adalah strip LED RGB yang dapat diprogram yang memungkinkan kontrol individual untuk setiap LED, memungkinkan kita untuk membuat efek pencahayaan dinamis.

Sensor penghindar rintangan inframerah bekerja dengan memancarkan cahaya inframerah dan mendeteksi pantulan dari objek di dekatnya. Ketika rintangan terdeteksi, sensor mengubah status keluarannya, memungkinkan ESP32 untuk merespons dengan mengubah perilaku strip LED.

Detail Datasheet

Produsen WS2812B
Nomor bagian WS2812B
Tegangan logika/IO 3,3 V (khas)
Tegangan suplai 5 V (khas)
Arus keluaran (per saluran) 20 mA (maks)
Arus puncak (per saluran) 60 mA (maks)
Panduan frekuensi PWM 400 Hz (khas)
Ambang logika masukan 0,3 Vcc (tinggi), 0,1 Vcc (rendah)
Penurunan tegangan / RDS(on) / saturasi 1,2 V (maks)
Batas termal 85 °C (maks)
Kemasan Pemasangan permukaan
Catatan / varian Tersedia dalam berbagai panjang dan kepadatan

 

  • Pastikan strip LED diberi daya 5 V untuk kinerja optimal.
  • Gunakan resistor yang sesuai untuk pin data untuk mencegah masalah integritas sinyal.
  • Berhati-hatilah dengan batasan arus keluaran untuk menghindari panas berlebih.
  • Dekopling catu daya dengan benar untuk mencegah lonjakan tegangan.
  • Sesuaikan sensor inframerah dengan hati-hati untuk mencapai jangkauan deteksi yang diinginkan.

Instruksi Pengkabelan

ESP32-31-flowing-light-wiring

Untuk menghubungkan komponen, mulailah dengan sensor penghindar rintangan inframerah. Hubungkan pin keluaran sensor ke pin 25 pada ESP32. Pin tengah harus dihubungkan ke ground, dan pin terakhir (VCC) harus dihubungkan ke sumber daya 3,3 V.

ESP32-31-flowing-light-schematic

Selanjutnya, untuk strip LED WS2812, hubungkan pin data (biasanya kabel kuning) ke pin 14 pada ESP32. Kabel merah harus dihubungkan ke sumber daya 5 V, dan kabel hitam harus dihubungkan ke ground. Pastikan untuk mengamankan semua koneksi dengan benar untuk mencegah kabel longgar.

Contoh Kode & Penjelasan

Berikut adalah gambaran singkat tentang kode yang menjalankan proyek ini. Pertama, kita mendefinisikan jumlah piksel di strip LED dan pin data yang digunakan untuk komunikasi:

#define NUM_PIXELS 8
#define DATA_PIN 14

Dalam fungsi setup(), kita menginisialisasi strip LED dan sensor inframerah:

void setup() {
  pixels.begin();
  pinMode(AVOID_PIN, INPUT_PULLUP);
  uint32_t color = pixels.Color(random(256), random(256), random(256));
  pixels.fill(color);
  pixels.show();
}

Dalam fungsi loop(), kita memeriksa apakah rintangan terdeteksi dan mengontrol strip LED sesuai:

if (avoid_value) {
    for (int i = 0; i < NUM_PIXELS; i++) {
      pixels.setPixelColor(i, color);
      pixels.show();
      pixels.setPixelColor(i, 0);
      delay(100);
    }
  } else {
    for (int i = NUM_PIXELS - 1; i >= 0; i--) {
      pixels.setPixelColor(i, color);
      pixels.show();
      pixels.setPixelColor(i, 0);
      delay(100);
    }
  }

Kode ini memungkinkan strip LED menampilkan warna acak saat bergerak maju dan mengubah arah ketika rintangan terdeteksi. Kode lengkap dimuat di bawah artikel, jadi pastikan untuk memeriksanya untuk semua detail.

Demonstrasi / Apa yang Diharapkan

Ketika pengaturan selesai dan kode diunggah, strip LED akan mulai menampilkan warna acak sambil bergerak maju. Ketika rintangan terdeteksi, strip akan beralih ke warna yang telah ditentukan (seperti hijau) dan membalikkan arah. Jika rintangan dihilangkan, strip akan melanjutkan gerakan maju dengan warna acak. Perlu diketahui bahwa jangkauan deteksi sensor inframerah dapat bervariasi berdasarkan catu daya yang digunakan (di video pada 10:30).

Stempel Waktu Video

  • 00:00 Mulai
  • 2:14 Pengenalan proyek
  • 4:58 Penjelasan kabel
  • 7:41 Menyesuaikan Sensor Penghindar Halangan
  • 10:03 Penjelasan kode Arduino
  • 15:40 Memilih papan ESP32 dan port COM di Arduino IDE
  • 17:22 Proyek 1: Demonstrasi
  • 18:17 Mengubah warna yang dikembalikan

Gambar

ESP32-31-flowing-light-main2
ESP32-31-flowing-light-main2
ESP32-31-flowing-light-main
ESP32-31-flowing-light-main
ESP32-31-flowing-light-schematic
ESP32-31-flowing-light-schematic
ESP32-31-flowing-light-wiring
ESP32-31-flowing-light-wiring
832-ESP32 Tutorial 31/55- Arduino code flowing light
Bahasa: C++
#include <Adafruit_NeoPixel.h>

// Set the number of pixels for the running light
#define NUM_PIXELS 8

// Set the data pin for the RGB LED strip
#define DATA_PIN 14

// Initialize the RGB LED strip object
Adafruit_NeoPixel pixels(NUM_PIXELS, DATA_PIN, NEO_GRB + NEO_KHZ800);

// Initialize the avoid sensor
#define AVOID_PIN 25

void setup() {
  // Initialize the RGB LED strip
  pixels.begin();

  // Initialize the avoid sensor
  pinMode(AVOID_PIN, INPUT_PULLUP);

  // Set the initial LED color
  uint32_t color = pixels.Color(random(256), random(256), random(256));
  pixels.fill(color);
  pixels.show();
}

void loop() {
  // Read the input from the infrared sensor
  bool avoid_value = digitalRead(AVOID_PIN);

  // Generate a random color for the current pixel
  uint32_t color = pixels.Color(random(256), random(256), random(256));

  // If no obstacle is detected
  if (avoid_value) {
    for (int i = 0; i < NUM_PIXELS; i++) {
      // Turn on the current pixel with the random color
      pixels.setPixelColor(i, color);

      // Update the RGB LED strip display
      pixels.show();

      // Turn off the current pixel
      pixels.setPixelColor(i, 0);
      delay(100);
    }
  }
  // If detects an obstacle, change the direction of the LED strip
  else {
    for (int i = NUM_PIXELS - 1; i >= 0; i--) {
      pixels.setPixelColor(i, color);
      pixels.show();
      pixels.setPixelColor(i, 0);
      delay(100);
    }
  }
}

Sumber daya & referensi

Berkas📁

Tidak ada file tersedia.