Menggunakan ESP 32 untuk Klasifikasi RGB

Blog post description.

3/4/20252 min baca

a man riding a skateboard down the side of a ramp
a man riding a skateboard down the side of a ramp

Project Menggunakan Artificial Neural Network untuk membedakan Warna menggunakan Board ESP 32

Langkah 1: Instalasi Hardware

Komponen yang Diperlukan:

  • Arduino Uno/Nano

  • Sensor warna TCS3200 atau TCS34725

  • Breadboard dan kabel jumper

  • LED RGB (opsional untuk indikator)

  • Resistor 220Ω (jika menggunakan LED)

    Rangkaian Sensor TCS34725 (I2C):

    Pin TCS34725

    Pin Arduino

    VCC 3.3V/5V

    GND GND

    SDA A4

    SCL A5

LED Indikator (Opsional):

· Sambungkan kaki anoda LED merah, hijau, biru ke pin D9, D10, D11 (PWM) melalui resistor 220Ω.

· Katoda LED ke GND.

Langkah 2: Instalasi Software

Software yang Diperlukan:

1. Arduino IDE (unduh dari situs resmi Arduino).

2. Library Sensor Warna:

Untuk TCS34725: Adafruit TCS34725 (cari di Library Manager Arduino IDE).

3. Python (untuk pelatihan ANN):

Instal Python 3.x dari python.org.

pip install pandas numpy scikit-learn tensorflow

Langkah 3: Pengumpulan Data Latih

Panduan Pengambilan Data:

1. Siapkan Objek Warna:

Gunakan objek dengan warna murni (misal: kertas merah, hijau, biru, kuning, dll.).

Pastikan pencahayaan konsisten (hindari sinar matahari langsung, gunakan lampu LED putih).

2. Baca Nilai RGB dari Sensor:

Upload kode Arduino berikut untuk membaca data sensor:

// Contoh kode untuk TCS34725

#include <Wire.h>

#include <Adafruit_TCS34725.h>

Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X);

void setup() {

Serial.begin(9600);

if (!tcs.begin()) {

Serial.println("Sensor tidak ditemukan!");

while (1);

}

}

void loop() {

uint16_t r, g, b, c;

tcs.getRawData(&r, &g, &b, &c);

Serial.print("Merah: "); Serial.print(r);

Serial.print(", Hijau: "); Serial.print(g);

Serial.print(", Biru: "); Serial.println(b);

delay(1000);

}

Kumpulkan Data:

Arahkan sensor ke objek berwarna merah, lalu catat nilai RGB yang muncul di Serial Monitor. Ulangi untuk warna hijau, biru, dan warna lain yang ingin dikenali. Ambil minimal 50 sampel per warna dengan variasi: Intensitas cahaya berbeda (jauhkan/dekatkan sensor). Sudut pengambilan data yang berbeda.

Simpan Data ke CSV:

Format data dalam file CSV:

    r,     g,   b,     label

320,150,90,    merah

80,300,120,    hijau

100,200,400,  biru

...

Contoh cara menyimpan data secara manual:

  • Buka Serial Monitor Arduino, salin data ke Excel/Google Sheets.

  • Tambahkan kolom "label" sesuai warna.

  • Export ke format CSV.

Tips Pengumpulan Data:

1. Variasi Kondisi:

o Ambil data dalam kondisi pencahayaan berbeda (terang, redup).

o Gunakan objek dengan tekstur berbeda (misal: kain, plastik, kertas).

2. Validasi Data:

o Pastikan nilai RGB untuk warna yang sama tidak berbeda terlalu jauh (misal: merah murni seharusnya memiliki nilai R >> G dan B).

3. Struktur Folder:

o Simpan data dalam folder terorganisir:

dataset/

── merah.csv

── hijau.csv

── biru.csv

└── lainnya.csv

Gabungkan Data (jika terpisah):

  • Gunakan script Python untuk menggabungkan file CSV:

import pandas as pd

import os

files = ['merah.csv', 'hijau.csv', 'biru.csv']

combined_data = pd.concat([pd.read_csv(f) for f in files])

combined_data.to_csv('dataset_warna.csv', index=False)

Langkah 4: Verifikasi Hardware-Software

1. Cek Koneksi Sensor:

o Pastikan pin VCC dan GND tidak terbalik.

o Untuk sensor I2C (TCS34725), pastikan address sensor terdeteksi dengan kode:

#include <Wire.h>

void setup() {

Wire.begin();

Serial.begin(9600);

while (!Serial);

Serial.println("Scanning I2C...");

for (byte addr = 0; addr <= 127; addr++) {

Wire.beginTransmission(addr);

if (Wire.endTransmission() == 0) {

Serial.print("Device ditemukan di alamat 0x");

Serial.println(addr, HEX);

}

}

}

void loop() {}

Kalibrasi Sensor:

  • Jika nilai RGB tidak stabil, tambahkan kode untuk mengatur gain dan waktu integrasi:

tcs.setIntegrationTime(TCS34725_INTEGRATIONTIME_154MS); // Lebih lama = lebih akurat

tcs.setGain(TCS34725_GAIN_4X); // Gain 4x untuk kondisi redup

Jika Terjadi Masalah:

· Sensor Tidak Terbaca:

o Periksa koneksi I2C (untuk TCS34725) atau frekuensi S0/S1 (untuk TCS3200).

o Pastikan library sudah terinstal dengan benar.

· Nilai RGB Tidak Logis:

o Hindari sumber cahaya inframerah atau UV.

o Gunakan filter difuser (kertas putih tipis) di atas sensor.