Tutorial Belanja komponen

Tutorial › Cahaya

Indeks UV Matahari

ESP32-WROOM-32D23D22TX0RX0D21D19D18D5TX2RX2D4D2D15GND3V3ENVPVND34D35D32D33D25D26D27D14D12D13GNDVINGNDVCCOUTSensor UV S12SD

Mengukur kekuatan sinar ultraviolet matahari dalam skala indeks UV 0-11+, plus saran perlindungan dari WHO. Indonesia sering berada di indeks 8-11 di siang hari.

S12SD adalah fotodioda yang hanya peka sinar UV (240-370 nm), dengan penguat di modulnya. Tegangan keluarannya kira-kira 0,1 V untuk setiap 1 indeks UV. ESP32 membaca tegangan itu dalam milivolt dengan analogReadMilliVolts(), yang sudah dikalibrasi pabrik, lalu membaginya dengan 100. Sensor harus menghadap langit terbuka. Kaca jendela memblokir sebagian besar UV.

Komponen

KomponenQtyHarga
ESP32 DOIT DevKit V1 30 pin1Rp75.000
Sensor UV S12SD1Rp40.000
Kabel jumper female-female 10 cm (isi 10)isi 10, terpakai 31Rp3.500
Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data1Rp11.700
Total (tanpa opsional)Rp118.500
Daftar komponen proyek ini otomatis masuk ke pesan. Hapus yang sudah kamu punya sebelum dikirim.

Langkah 1: Rangkai komponen

Sambungkan kabel sesuai gambar di atas. Kalau gambar dan tabel terlihat berbeda, ikuti tabel.

DariKeKabel
Sensor UV S12SD GND→GNDhitam
Sensor UV S12SD VCC→3V3merah
Sensor UV S12SD OUT→D34 GPIO34ungu

Langkah 2: Siapkan dashboard Klenik

Indeks UVichibot/budi1234/p035/uv
0128.4
0 detik lalu
Saranichibot/budi1234/p035/kategori
Sedang: pakai topi/tabir surya
Sangat tinggi: hindari matahari langsung
0 detik lalu

Cara cepat: unduh p035.json, ganti budi1234 dengan KODE-mu, lalu import di Klenik (menu titik tiga → Export / Import → Import → Ganti total). Langkah lengkapnya ada di Panduan Klenik.

WidgetTopicSetting
Gauge
Indeks UV
ichibot/KODE/p035/uv0–12
Text Log
Saran
ichibot/KODE/p035/kategorimenampilkan teks masuk

Langkah 3: Upload kode

Library: PubSubClient (Nick O'Leary). Board di Arduino IDE: ESP32 Dev Module. Isi dulu nama WiFi dan password di bagian ISI DULU, lalu ganti budi1234 di baris topic dengan KODE-mu, lalu upload dan buka Serial Monitor (115200).

p035.inoUnduh .ino
// Proyek 035 - Indeks UV Matahari
// Board: ESP32 DOIT DevKit V1 | Dashboard: klenik.ichibot.id
#include <WiFi.h>
#include <PubSubClient.h>

// ===== ISI DULU =====
const char* WIFI_NAMA = "nama-wifi-kamu";
const char* WIFI_PASS = "password-wifi-kamu";

// topic MQTT: ganti budi1234 dengan KODE-mu (sama dengan di dashboard Klenik)
const char* TOPIK_UV       = "ichibot/budi1234/p035/uv";
const char* TOPIK_KATEGORI = "ichibot/budi1234/p035/kategori";

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
const int PIN_UV = 34;                // OUT modul S12SD (GUVA-S12SD)
unsigned long terakhir = 0;

String kategori(float uvi) {          // skala WHO
  if (uvi < 3) return "Rendah";
  if (uvi < 6) return "Sedang: pakai topi/tabir surya";
  if (uvi < 8) return "Tinggi: kurangi di luar jam 10-14";
  if (uvi < 11) return "Sangat tinggi: hindari matahari langsung";
  return "Ekstrem";
}

void langganan() {}

sambungWiFi() dan sambungMQTT(): sama di semua proyek (klik untuk lihat)void sambungWiFi() { WiFi.begin(WIFI_NAMA, WIFI_PASS); Serial.print("WiFi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(" OK, IP " + WiFi.localIP().toString()); } void sambungMQTT() { while (!mqtt.connected()) { if (mqtt.connect(WiFi.macAddress().c_str())) { Serial.println("Terhubung ke Klenik"); langganan(); } else { Serial.println("Broker gagal, coba lagi 3 detik"); delay(3000); } } }
void setup() { Serial.begin(115200); analogSetPinAttenuation(PIN_UV, ADC_11db); // rentang baca 0-3,3 V sambungWiFi(); mqtt.setServer(BROKER, 1883); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); if (millis() - terakhir < 5000) return; terakhir = millis(); float mv = 0; for (int i = 0; i < 16; i++) mv += analogReadMilliVolts(PIN_UV); mv /= 16; float uvi = mv / 100.0; // S12SD: ±0,1 V per 1 indeks UV mqtt.publish(TOPIK_UV, String(uvi, 1).c_str()); mqtt.publish(TOPIK_KATEGORI, kategori(uvi).c_str()); }

Langkah 4: Pahami kodenya

  1. Atenuasi 11 dB membuat ADC ESP32 bisa membaca sampai ±3,1 V, cukup untuk indeks UV ekstrem.
  2. Rata-rata 16 bacaan dalam milivolt. ESP32 menyimpan data kalibrasi pabrik, jadi ini lebih tepat daripada analogRead() biasa.
  3. Pendekatan dari lembar data: 100 mV ≈ 1 indeks UV. Bandingkan dengan aplikasi cuaca BMKG untuk koreksi.