Tutorial Belanja komponen

Tutorial › Berat, Level & Aliran

Penghitung Produk di Konveyor Mini

ESP-12ED0D1D2D3D43VGD5D6D7D8RXTXG3VA0GVUS3S2S1SCS0SKG3VENRSTGVIN+OUT−E18-D80NK (coklat +, hitam OUT, biru −)

Sensor inframerah E18-D80NK di samping konveyor atau jalur produk menghitung setiap barang yang lewat. Klenik menampilkan total hari ini, laju per menit, dan pemberitahuan saat target produksi tercapai, seperti penghitung di pabrik sungguhan.

E18-D80NK memancarkan inframerah dan mendeteksi pantulan dari benda sampai sekitar 80 cm. Jaraknya diatur dengan sekrup di belakang. Keluarannya NPN: menarik pin ke GND (LOW) saat ada benda, sehingga butuh INPUT_PULLUP. Sensor ini diberi 5V dari pin VU, dan pin OUT yang hanya menarik ke GND aman untuk NodeMCU.

Yang dihitung adalah perubahan dari tidak ada benda ke ada benda, dengan jeda minimum 150 ms supaya getaran tepi benda tidak terhitung dua. Laju per menit menunjukkan kecepatan lini produksi, dan target dari slider memberi tanda saat pesanan sudah terpenuhi.

Komponen

KomponenQtyHarga
NodeMCU ESP8266 V3 (Lolin)1Rp42.000
Sensor IR E18-D80NK1Rp33.950
Kabel jumper male-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)Rp79.450
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
E18-D80NK (coklat +, hitam OUT, biru −) +→VUcoklat
E18-D80NK (coklat +, hitam OUT, biru −) OUT→D5 GPIO14hitam
E18-D80NK (coklat +, hitam OUT, biru −) −→Gbiru

Langkah 2: Siapkan dashboard Klenik

Produk Terhitungichibot/budi1234/p139/jumlah
0 – 50087
0 detik lalu
Laju per Menitichibot/budi1234/p139/laju
20/mnt
0.0/mnt10 titik60.0/mnt
0 detik lalu
Targetichibot/budi1234/p139/target
100100 of 1000
0 detik lalu
Mulai dari 0ichibot/budi1234/p139/ulang
Ulang
0 detik lalu
Pemberitahuanichibot/budi1234/p139/log
Target 100 produk tercapai!
0 detik lalu

Cara cepat: unduh p139.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
Produk Terhitung
ichibot/KODE/p139/jumlah0–500
Chart
Laju per Menit
ichibot/KODE/p139/laju0–60 /mnt
Slider Output
Target
ichibot/KODE/p139/target10–1000
Switch
Mulai dari 0
ichibot/KODE/p139/ulangpayload ON / OFF
Text Log
Pemberitahuan
ichibot/KODE/p139/logmenampilkan teks masuk

Langkah 3: Upload kode

Library: PubSubClient (Nick O'Leary). Board di Arduino IDE: NodeMCU 1.0 (ESP-12E 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).

p139.inoUnduh .ino
// Proyek 139 - Penghitung Produk di Konveyor Mini
// Board: NodeMCU ESP8266 V3 | Dashboard: klenik.ichibot.id
#include <ESP8266WiFi.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_JUMLAH = "ichibot/budi1234/p139/jumlah";
const char* TOPIK_ULANG  = "ichibot/budi1234/p139/ulang";
const char* TOPIK_TARGET = "ichibot/budi1234/p139/target";
const char* TOPIK_LOG    = "ichibot/budi1234/p139/log";
const char* TOPIK_LAJU   = "ichibot/budi1234/p139/laju";

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
const int SENSOR = D5;                // E18-D80NK: LOW saat ada benda
long jumlah = 0, target = 100;
int perMenit = 0;
bool adaTadi = false, targetTercapai = false;
unsigned long lewatTerakhir = 0, menitTerakhir = 0;

void pesanMasuk(char* t, byte* isi, unsigned int panjang) {
  String topik = t;
  String p;
  for (unsigned int i = 0; i < panjang; i++) p += (char)isi[i];
  if (topik == TOPIK_TARGET) target = p.toInt();
  else if (topik == TOPIK_ULANG && p == "ON") {
    jumlah = 0;
    targetTercapai = false;
    mqtt.publish(TOPIK_JUMLAH, "0", true);
    mqtt.publish(TOPIK_ULANG, "OFF");
  }
}

void langganan() {
  mqtt.subscribe(TOPIK_TARGET);
  mqtt.subscribe(TOPIK_ULANG);
}

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); pinMode(SENSOR, INPUT_PULLUP); // keluaran E18 butuh pull-up sambungWiFi(); mqtt.setServer(BROKER, 1883); mqtt.setCallback(pesanMasuk); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); bool ada = digitalRead(SENSOR) == LOW; if (ada && !adaTadi && millis() - lewatTerakhir > 150) { // satu benda = satu hitungan lewatTerakhir = millis(); jumlah++; perMenit++; mqtt.publish(TOPIK_JUMLAH, String(jumlah).c_str(), true); if (!targetTercapai && jumlah >= target) { targetTercapai = true; mqtt.publish(TOPIK_LOG, ("Target " + String(target) + " produk tercapai!").c_str()); } } adaTadi = ada; if (millis() - menitTerakhir >= 60000) { menitTerakhir = millis(); mqtt.publish(TOPIK_LAJU, String(perMenit).c_str()); perMenit = 0; } }

Langkah 4: Pahami kodenya

  1. Keluaran NPN hanya bisa menarik ke GND. Tanpa pull-up, pin melayang saat tidak ada benda.
  2. Hitungan hanya di tepi naik (benda mulai terlihat), dengan jeda minimum 150 ms.