Buka Senin - Jumat jam 08.30 s/d jam 16.30 , Sabtu Jam 8.30 s/d jam 13.00 , Minggu tutup
  • Selamat Datang di Indomaker ❯ Silahkan pesan produk sesuai kebutuhan anda, kami siap melayani.
  • Selamat Datang di Indomaker ❯ Silahkan pesan produk sesuai kebutuhan anda, kami siap melayani.
Beranda » Blog » Bikin Smart Medicine Box Otomatis Pakai Arduino Nano dan Sensor Suhu DHT11

Bikin Smart Medicine Box Otomatis Pakai Arduino Nano dan Sensor Suhu DHT11

Diposting pada 2 October 2026 oleh indo maker / Dilihat: 10 kali / Kategori: ,

Halo Sobat Indomaker! Pernah enggak kamu atau anggota keluargamu lupa minum obat sesuai jadwal? Masalah sepele ini dampaknya bisa lumayan serius buat proses penyembuhan. Selain masalah ketepatan waktu, tempat penyimpanan obat juga sering kali luput dari perhatian. Obat padat yang disimpan di ruangan yang terlalu panas bisa mengalami penurunan mutu atau bahkan cepat rusak sebelum waktunya.

Nah, untuk mengatasi masalah tersebut, kita bisa membuat solusi DIY yang canggih tapi tetap terjangkau, yaitu Smart Medicine Box Arduino. Proyek kotak obat pintar ini menggabungkan mikrokontroler Arduino Nano, sensor suhu DHT11, dan modul RTC DS1307 untuk memberikan pengingat minum obat otomatis sekaligus memantau suhu penyimpanan secara real-time.

Proyek ini sangat cocok untuk kamu yang ingin belajar merangkai sensor dan aktuator menjadi sebuah alat kesehatan portabel yang bermanfaat. Yuk, kita bedah alat, bahan, skematik, hingga logika pemrogramannya sampai tuntas!

Alat dan Bahan Proyek Smart Medicine Box

Berikut adalah daftar komponen yang kamu butuhkan untuk merakit proyek ini:

Komponen Jumlah Keterangan
Arduino Nano V3 1 Mikrokontroler pusat kendali sistem
Sensor DHT11 1 Sensor suhu dan kelembapan udara
Modul RTC DS1307 1 Penyimpan dan penyedia waktu real-time (I2C)
Motor Servo MG996R 1 Aktuator penggerak mekanisme pengeluaran obat
Push Button 3 Sakelar input manual untuk konfirmasi dan pengaturan
Passive Buzzer (Sounder) 1 Indikator alarm suara
LCD I2C 16×2 / 20×4 1 Display informasi teks status dan waktu
Power Supply 5V 2A 1 Sumber catu daya utama
Kabel Jumper & PCB 1 set Penghubung antar komponen rangkaian

Skematik Rangkaian dan Prinsip Kerja Hardware

Arsitektur Blok Sistem

Secara umum, sistem Smart Medicine Box ini dibagi menjadi tiga blok utama agar alur kerja hardware mudah dipahami:

  1. Bagian Input: Terdiri dari sensor DHT11 untuk mengukur kondisi lingkungan, modul RTC DS1307 sebagai acuan waktu real-time, dan push button sebagai sakelar masukan manual dari pengguna.
  2. Bagian Proses: Menggunakan Arduino Nano V3 sebagai otak utama yang bertugas membaca sinyal input, mengolah data logika, dan memberikan perintah eksekusi.
  3. Bagian Output: Menggunakan Motor Servo MG996R untuk membuka wadah obat, Passive Buzzer sebagai alarm suara, serta layar LCD I2C untuk menampilkan status sistem. Seluruh komponen ini mendapat pasokan daya stabil dari Power Supply 5V 2A.

Trik Komunikasi I2C Paralel Tanpa Bentrok

Kamu mungkin bertanya-tanya, bagaimana layar LCD I2C dan modul RTC DS1307 bisa dihubungkan secara paralel pada dua jalur kabel yang sama (SDA dan SCL) tanpa mengalami bentrok data?

Jawabannya ada pada sistem Hexadecimal Address (Alamat Unik I2C) bawaan pabrik dari masing-masing modul. Modul LCD I2C umumnya memiliki alamat tetap 0x27 atau 0x3F, sedangkan modul RTC DS1307 memakai alamat 0x68. Saat Arduino Nano ingin membaca data waktu atau menampilkan teks, mikrokontroler akan menyiarkan alamat komponen yang dituju terlebih dahulu ke jalur bus. Cuma modul dengan alamat yang cocok yang akan merespon, sehingga komunikasi data dijamin aman dan tidak salah sasaran.

Cara Kerja Pengingat Obat Otomatis dan Monitoring Suhu

Penjadwalan Otomatis dan Pemicu Dosis Obat

Sistem ini menggunakan modul RTC DS1307 sebagai patokan waktu presisi (misalnya jadwal dosis obat diset pada pukul 08.00 dan 20.00). Ketika waktu pada RTC menyentuh jadwal tersebut, Arduino Nano akan mengirimkan sinyal kendali PWM ke motor servo MG996R. Poros servo akan berputar ke sudut 120^\circ selama 1 detik untuk membuka wadah obat, lalu otomatis kembali ke posisi awal (0^\circ).

Di saat yang sama, passive buzzer akan membunyikan nada alarm pengingat dengan frekuensi khusus 1000 Hz secara berkala. Pengguna harus menekan push button sebagai tombol konfirmasi bahwa obat telah diambil. Setelah tombol ditekan, alarm buzzer otomatis mati dan LCD akan memperbarui statusnya.

Sistem Peringatan Dini Suhu Panas

Penyimpanan obat padat harus selalu dijaga pada kondisi lingkungan yang sesuai agar kualitasnya tetap terjaga. Pada proyek ini, sensor DHT11 digunakan untuk memantau suhu udara secara berkala. Untuk memahami karakteristik dan spesifikasi sensor yang digunakan, kamu bisa melihat datasheet DHT11 sebagai referensi tambahan. Dengan begitu, pembacaan suhu dari sensor dapat lebih mudah dipahami sebelum diterapkan pada sistem monitoring Smart Medicine Box.

Untuk mencegah kerusakan tersebut, sensor DHT11 akan memantau suhu udara secara terus-menerus. Jika suhu terdeteksi melebihi 30^\circ\text{C}, Arduino Nano akan langsung mengaktifkan nada alarm darurat berfrekuensi 1500 Hz (berbeda dari nada pengingat obat 1000 Hz agar pengguna bisa membedakan jenis peringatannya) dan menampilkan teks peringatan "!!! SUHU PANAS !!!" di layar LCD.

Pemicuan indikator audio dan visual ini bekerja sangat responsif, sama mudahnya dengan proyek dasar saat kamu bikin sensor parkir otomatis pakai Arduino Uno dan HC-SR04 yang memanfaatkan buzzer sebagai alarm utama.

Pemrograman Arduino IDE dan Logika Program

Berikut adalah kode program C/C++ lengkap pada Arduino IDE yang mengendalikan seluruh logika jadwal, pemantauan suhu, pergerakan servo, dan pemicuan nada buzzer:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <DHT.h>
#include <Servo.h>

// Konfigurasi pin
#define DHTPIN 2
#define DHTTYPE DHT11
#define BTNPIN 3
#define SERVOPIN 9
#define BUZZERPIN 8

// Inisialisasi modul
LiquidCrystal_I2C lcd(0x3F, 20, 4);
RTC_DS1307 rtc;
DHT dht(DHTPIN, DHTTYPE);
Servo servoObat;

// Jadwal minum obat
int jadwalJam1 = 8;
int jadwalMenit1 = 0;
int jadwalJam2 = 20;
int jadwalMenit2 = 0;

// Variabel status sistem
bool alarmAktif = false;
bool obatSudahJatuh = false;
bool suhuPanas = false;

// Fungsi untuk memantau tombol secara responsif
void tungguDanCekTombol(int waktuMs) {
  for (int i = 0; i < waktuMs; i++) {
    if (digitalRead(BTNPIN) == LOW) {
      alarmAktif = false;
      servoObat.write(0);
      delay(500);
    }

    delay(1);
  }
}

void setup() {
  Serial.begin(9600);

  // Inisialisasi LCD
  lcd.init();
  lcd.backlight();

  // Inisialisasi sensor DHT11
  dht.begin();

  // Inisialisasi RTC dan penanganan error
  if (!rtc.begin()) {
    lcd.setCursor(0, 0);
    lcd.print("RTC ERROR");

    while (1);
  }

  if (!rtc.isrunning()) {
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }

  // Konfigurasi pin
  pinMode(BTNPIN, INPUT_PULLUP);

  // Inisialisasi servo
  servoObat.attach(SERVOPIN);
  servoObat.write(0);

  // Tampilan awal
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("PENGINGAT OBAT");

  lcd.setCursor(0, 1);
  lcd.print("OTOMATIS");

  delay(2000);
  lcd.clear();
}

void loop() {
  // Membaca waktu dari RTC
  DateTime now = rtc.now();

  // Membaca suhu dari DHT11
  float suhu = dht.readTemperature();

  // Penanganan error sensor DHT11
  if (isnan(suhu)) {
    lcd.setCursor(0, 0);
    lcd.print("DHT ERROR");

    noTone(BUZZERPIN);
    return;
  }

  // Cek tombol konfirmasi manual
  if (digitalRead(BTNPIN) == LOW) {
    alarmAktif = false;
  }

  // Mengecek kesesuaian waktu dengan jadwal obat
  bool waktuJadwal1 =
    (now.hour() == jadwalJam1 && now.minute() == jadwalMenit1);

  bool waktuJadwal2 =
    (now.hour() == jadwalJam2 && now.minute() == jadwalMenit2);

  // Mengeluarkan obat ketika jadwal tiba
  if ((waktuJadwal1 || waktuJadwal2) && !obatSudahJatuh) {
    lcd.clear();

    lcd.setCursor(0, 0);
    lcd.print("MENGELUARKAN");

    lcd.setCursor(0, 1);
    lcd.print("OBAT...");

    // Membuka pintu obat
    servoObat.write(120);
    delay(1000);

    // Menutup kembali pintu obat
    servoObat.write(0);

    alarmAktif = true;
    obatSudahJatuh = true;
  }

  // Reset penanda setelah waktu jadwal berlalu
  if (!(waktuJadwal1 || waktuJadwal2)) {
    obatSudahJatuh = false;
  }

  // Mengecek ambang suhu panas
  if (suhu > 30) {
    suhuPanas = true;
  } else {
    suhuPanas = false;
  }

  // Prioritas tampilan dan alarm sistem
  if (suhuPanas) {

    lcd.setCursor(0, 0);
    lcd.print("!!! SUHU PANAS !!!");

    lcd.setCursor(0, 1);
    lcd.print("TEMP: ");
    lcd.print(suhu);
    lcd.print(" C");

    // Alarm suhu panas 1500 Hz
    tone(BUZZERPIN, 1500);

    tungguDanCekTombol(300);

    noTone(BUZZERPIN);

    tungguDanCekTombol(300);

  } else if (alarmAktif) {

    lcd.setCursor(0, 0);
    lcd.print("WAKTUNYA MINUM");

    lcd.setCursor(0, 1);
    lcd.print("TEKAN TOMBOL");

    // Alarm pengingat obat 1000 Hz
    tone(BUZZERPIN, 1000);

    tungguDanCekTombol(200);

    noTone(BUZZERPIN);

    tungguDanCekTombol(200);

  } else {

    noTone(BUZZERPIN);

    // Tampilan waktu
    lcd.setCursor(0, 0);
    lcd.print("JAM: ");

    if (now.hour() < 10) {
      lcd.print("0");
    }

    lcd.print(now.hour());
    lcd.print(":");

    if (now.minute() < 10) {
      lcd.print("0");
    }

    lcd.print(now.minute());
    lcd.print(":");

    if (now.second() < 10) {
      lcd.print("0");
    }

    lcd.print(now.second());

    // Tampilan suhu
    lcd.setCursor(0, 1);
    lcd.print("SUHU: ");
    lcd.print(suhu);
    lcd.print(" C");

    // Tampilan jadwal obat
    lcd.setCursor(0, 2);

    if (jadwalJam1 < 10) {
      lcd.print("0");
    }

    lcd.print(jadwalJam1);
    lcd.print(":");

    if (jadwalMenit1 < 10) {
      lcd.print("0");
    }

    lcd.print(jadwalMenit1);
    lcd.print(" & ");

    if (jadwalJam2 < 10) {
      lcd.print("0");
    }

    lcd.print(jadwalJam2);
    lcd.print(":");

    if (jadwalMenit2 < 10) {
      lcd.print("0");
    }

    lcd.print(jadwalMenit2);

    // Status sistem
    lcd.setCursor(0, 3);
    lcd.print("STATUS: STANDBY");

    delay(200);
  }
}

 

Beberapa poin logika penting pada kode program di atas meliputi:

  • Inisialisasi Antarmuka I2C: Library LiquidCrystal_I2C dan RTclib mengelola komunikasi serial dua kabel untuk menampilkan waktu dan status sistem.
  • Fitur Error Handling: Sebelum program utama berjalan, sistem mengecek koneksi hardware. Jika RTC tidak merespon, layar akan menampilkan "RTC ERROR" dan menghentikan proses. Begitu pula jika pembacaan suhu gagal, LCD menampilkan "DHT ERROR".
  • Variabel Penanda (Flag): Penggunaan variabel obatSudahJatuh sangat penting untuk memastikan motor servo hanya berputar satu kali saja saat jam dan menit jadwal terpenuhi, sehingga obat tidak terbuang berkali-kali dalam rentang menit yang sama.
  • Diferensiasi Frekuensi Alarm: Sistem membedakan nada alarm menggunakan fungsi tone(), di mana peringatan suhu panas berbunyi pada frekuensi 1500 Hz sedangkan alarm pengingat dosis berbunyi pada 1000 Hz.

Hasil Pengujian Alat dan Manfaat Metode UDD

Hasil Pengujian Fungsi Sistem

Berdasarkan hasil pengujian hardware dan software, alat ini menunjukkan performa yang sangat stabil dengan total estimasi biaya komponen yang sangat terjangkau, yaitu sekitar Rp 405.000:

  • Akurasi Motor Servo: Pergerakan poros servo MG996R sangat presisi dengan toleransi kesalahan sudut \le2^\circ dan kecepatan respon pergerakan 0^\circ \rightarrow 90^\circ dalam waktu \le0,5 detik.
  • Respon Alarm Suhu: Sistem peringatan suhu panas mampu mendeteksi dan mengaktifkan alarm audio visual dalam waktu kurang dari 1 detik (<1 detik) setelah suhu melampaui 30^\circ\text{C}.
  • Keandalan RTC: Modul waktu terbukti presisi menyediakan timestamp jadwal tanpa ada pergeseran waktu yang signifikan.

Dukungan Terhadap Unit Dose Dispensing (UDD)

Pengembangan alat ini secara teknis mendukung penerapan metode Unit Dose Dispensing (UDD) di dunia medis dan farmasi melalui pemetaan fungsi komponen hardware berikut:

  1. Sensor DHT11 (Menjaga Integritas Dosis): Memastikan kondisi penyimpanan tetap terkontrol di bawah 30^\circ\text{C} untuk mencegah degradasi termal pada zat aktif obat.
  2. Modul RTC DS1307 (Audit Trail Elektronik): Menyediakan pencatatan waktu (timestamp) presisi pada setiap sesi pengeluaran obat guna memenuhi standar dokumentasi farmasi.
  3. Motor Servo MG996R (Partisi Dosis Individual): Berfungsi sebagai aktuator pengeluaran satu dosis tunggal secara presisi untuk mencegah kontaminasi silang serta menghindari kesalahan dosis (wrong dose).
  4. Push Button (Verifikasi Pengguna): Memastikan adanya interaksi dan konfirmasi langsung dari pengguna sebelum sistem menghentikan alarm dan memperbarui status pengambilan obat.

Kesimpulan dan Tips Pengembangan Lanjutan

Proyek Smart Medicine Box berbasis Arduino Nano ini berhasil membuktikan bahwa teknologi mikrokontroler sederhana dapat dimanfaatkan untuk menyelesaikan masalah kesehatan yang nyata. Dengan total biaya komponen yang relatif terjangkau (sekitar Rp 405.000), alat ini sukses memadukan fungsi pengingat jadwal minum obat otomatis dan pemantauan suhu tempat penyimpanan secara real-time.

Buat Sobat Indomaker yang ingin mengembangkan proyek ini lebih jauh, berikut beberapa tips menarik yang bisa kamu coba:

  • Tambahkan Modul Wi-Fi (ESP32): Kamu bisa mengganti mikrokontroler dengan ESP32 agar sistem bisa mengirimkan notifikasi pengingat minum obat dan peringatan suhu panas langsung ke aplikasi smartphone atau layanan cloud.
  • Pasang Baterai Cadangan (Backup Power): Tambahkan rangkaian baterai Li-ion atau UPS mini agar sistem monitoring dan jadwal waktu RTC tetap aktif bekerja meskipun terjadi pemadaman listrik di rumah.
  • Buat PCB Custom: Ubah rangkaian kabel jumper yang berserakan menjadi papan PCB custom agar susunan komponen lebih rapi, kokoh, dan bebas dari risiko korsleting atau kabel lepas.

Selamat mencoba merakit proyek ini, teman-teman! Kalau ada pertanyaan seputar pembuatan skematik atau coding, langsung tulis di kolom komentar ya!

Bagikan ke

Bikin Smart Medicine Box Otomatis Pakai Arduino Nano dan Sensor Suhu DHT11

Saat ini belum tersedia komentar.

Silahkan tulis komentar Anda

Bikin Smart Medicine Box Otomatis Pakai Arduino Nano dan Sensor Suhu DHT11

Produk yang sangat tepat, pilihan bagus..!

Berhasil ditambahkan ke keranjang belanja
Lanjut Belanja
Checkout
Produk Quick Order

Pemesanan dapat langsung menghubungi kontak dibawah: