Panduan · 17 mnt baca

Proyek Rumah Pintar Arduino: Maket Rumah, Sensor, Kode, dan Aplikasi

Buat proyek rumah pintar Arduino langkah demi langkah: denah maket, lampu PIR, alarm gas dan api, pintu RFID, lampu relay, kendali ponsel dengan ESP32, dan kode lengkap.

Proyek rumah pintar Arduino mengubah lampu, pintu, jendela, dan alarm sebuah maket rumah menjadi sistem yang berjalan sendiri berdasarkan sensor, dan kalau mau, semuanya juga bisa kamu kendalikan dari ponsel. Wajar kalau ini menjadi salah satu proyek sekolah yang paling populer. Lampu lorong yang menyala ketika mendeteksi gerakan, alarm yang berbunyi ketika gas bocor, kipas yang mulai berputar ketika udara hangat, dan pintu yang terbuka dengan kartu, semuanya membentuk tiruan kecil tapi berfungsi dari sistem rumah pintar sungguhan. Dengan Arduino Uno atau ESP32, sekitar sepuluh modul, dan satu akhir pekan, kamu juga bisa membuatnya.

Di panduan ini kita mulai dari denah maket rumah: modul mana masuk ke ruangan mana, anggaran habis untuk apa, bagaimana merencanakan daya, dan bagaimana membagi pin. Lalu kita merakit dan menguji setiap modul satu per satu, dan menulis sketch Arduino lengkap yang menjalankan semuanya bersamaan tanpa memakai delay(). Di bagian akhir kamu akan belajar cara mengendalikan rumah dari ponsel dengan web server ESP32 atau Blynk, cara memperbaiki kesalahan yang paling umum, dan cara membuat juri terkesan ketika presentasi di sekolah.

HC-SR501 PIR
HC-SR501 PIR
MQ-2
MQ-2
DHT11
DHT11
RC522 RFID
RC522 RFID
SG90
SG90
I2C LCD 16x2
I2C LCD 16x2

Bagaimana cara kerja sistem rumah pintar?

Setiap rumah pintar berjalan dengan siklus tiga bagian yang sama. Sensor mengukur lingkungan: apakah ada yang bergerak, apakah sudah gelap, seberapa hangat, apakah ada gas atau api di dapur, kartu mana yang ditempelkan ke pintu? Pengendali, yaitu Arduino atau ESP32, membandingkan informasi ini dengan aturan: “kalau gelap dan ada gerakan, nyalakan lampu”, “kalau suhu naik di atas 28 °C, nyalakan kipas”. Aktuator menjalankan keputusannya: relay menyalakan lampu dan kipas, servo memutar pintu dan jendela, buzzer berbunyi, dan layar menampilkan status. Kendali lewat ponsel hanya menambah satu input lagi ke siklus ini; kali ini ketukanmu yang mengambil keputusan, bukan aturan.

Ruangan / areaModulFungsinya
Pintu depanRFID RC522 + servo SG90Membuka pintu ketika kartu yang diizinkan dipindai dan menutupnya 5 detik kemudian
Lorong / ruang tamuHC-SR501 PIR + LDR + relayMenyalakan lampu ketika mendeteksi gerakan dalam gelap dan mematikannya setelah 20 detik tanpa gerakan
DapurSensor gas MQ-2 + sensor api + buzzerMembunyikan alarm berbunyi bip ketika mendeteksi gas atau api
JendelaServo SG90Membuka jendela untuk ventilasi ketika gas terdeteksi
Kamar tidurDHT11 + relay + kipasMenyalakan kipas ketika mencapai 28 °C dan mematikannya di 26 °C
Ruang teknisArduino, LCD I2C, catu dayaMenampilkan suhu, kelembapan, pembacaan gas, dan pesan status

Merencanakan maket rumah

Rancang maket di sekitar elektroniknya; jangan mencoba menjejalkan elektronik belakangan. Alas berukuran sekitar 50×40 cm cukup untuk dua atau tiga ruangan dan satu pintu masuk. Untuk dinding, foam board 5 mm atau PVC foam board (seperti Forex) mudah dipotong dengan cutter; MDF 3–4 mm lebih kokoh tapi butuh gergaji atau mesin laser cutting. Skala 1:20 adalah titik awal yang bagus: langit-langit 2,6 m menjadi dinding 13 cm dan pintu 90 cm menjadi selebar 4,5 cm. Buat atapnya bisa dilepas atau tidak usah dipasang sama sekali; juri pasti ingin melihat isi ruangan.

  • Ruang teknis atau lantai ganda: taruh Arduino, breadboard, modul relay, dan input daya di kompartemen bagian belakang rumah atau di bawah lantai ganda setinggi 3–4 cm. Kalau ditutup dengan akrilik bening, rangkaiannya terlindungi sekaligus tetap terlihat.
  • Jalur kabel: bor lubang 6–8 mm di bawah setiap sensor dan salurkan kabelnya di bawah alas ke ruang teknis. Daripada menyambung-nyambung kabel pendek, pilih kabel sensor yang cukup panjang sejak awal.
  • Pintu: pasang pintu ke dinding dengan engsel kecil atau selotip, lalu hubungkan lengan (horn) SG90 ke pintu dengan kawat yang dibengkokkan dari klip kertas. Rekatkan RC522 di sisi dalam dinding luar; pembacanya biasanya tetap bisa membaca kartu menembus papan 5 mm.
  • Dapur: di rumah sungguhan, detektor gas alam (metana) dipasang dekat langit-langit karena lebih ringan dari udara, sedangkan detektor gas elpiji dipasang dekat lantai karena elpiji lebih berat; untuk maket, posisi dekat langit-langit sudah cukup. Arahkan sensor api ke kompor.
  • Sensor lain: pasang PIR di sudut yang melihat jalur masuk dari samping, LDR di dinding luar atau jendela yang tidak terkena cahaya lampu, dan DHT11 jauh dari lampu dan badan MQ-2 yang hangat.
Sebelum membeli apa pun, gambar denah maket dari atas dan tandai di mana setiap modul dipasang dan lewat jalur mana kabelnya menuju ruang teknis. Di proyek seperti ini, tata letak kabel memakan waktu lebih banyak daripada kode atau menyolder; denah yang bagus memangkas waktu itu sampai separuhnya.

Daftar komponen dan biaya

KomponenJumlahKegunaanTingkat harga
Arduino Uno R3 (klon juga boleh) atau ESP32 DevKit1Otak rumahSedang
Set breadboard dan kabel jumper (male-male, male-female)1 setSambunganRendah
Sensor gerak PIR HC-SR5011Lampu lorongRendah
LDR dan resistor 10 kΩ1 + 1Deteksi gelapSangat rendah
Modul sensor gas MQ-21Alarm gas dan asapRendah
Modul sensor api (LM393)1Alarm kebakaranRendah
Modul suhu dan kelembapan DHT111Kendali kipasRendah
Modul RFID RC522 (dengan kartu dan gantungan kunci)1Pintu berkartuRendah
Motor servo SG902Pintu dan jendelaRendah
Modul relay 5 V 2 kanal1Lampu dan kipasRendah
Buzzer aktif1Suara alarmSangat rendah
Layar LCD I2C 16x21Tampilan statusRendah – sedang
Kipas mini 5 V dan lampu LED 5 V atau LED strip1 + 1Beban untuk relayRendah
Adaptor daya 5 V 2–3 A dan jack DC atau terminal blok1Daya untuk servo, relay, dan sensorSedang
Foam board atau PVC foam board, cutter, lem tembak–Badan rumahSedang

Harga sering berubah tergantung penjual dan waktu, jadi kami tidak mencantumkan angka; tabel ini menunjukkan seberapa besar porsi setiap komponen dalam anggaran. Sensor dan modulnya masing-masing murah; sebagian besar anggaran habis untuk board, LCD, adaptor daya, dan bahan maket. Kalau kamu punya starter kit Arduino, board, breadboard, kabel, LDR, buzzer, dan sering juga servo dan LCD sudah tersedia. Kalau anggarannya pas-pasan, kamu bisa melewatkan LCD dan servo kedua: pakai Serial Monitor sebagai pengganti layar dan tunda jendelanya ke tahap berikutnya. DHT22 yang lebih akurat sebagai pengganti DHT11 harganya sedikit lebih mahal, tapi membuat hasil pengukuranmu lebih meyakinkan ketika presentasi.

Rencana daya: kenapa butuh adaptor 5 V terpisah?

Di maket rumah pintar, hampir setiap keluhan seperti “sesekali reset sendiri”, “servonya bergetar”, atau “muncul karakter aneh di LCD” ujung-ujungnya soal daya. Port USB komputer memberi sekitar 500 mA, dan ketika board berjalan dari USB, pin 5V Uno juga berada di balik batas itu. Jumlahkan nilai di bawah dan kamu akan melihat total arusnya dengan mudah melewati 1 A ketika kedua servo bergerak bersamaan.

KomponenPerkiraan arus di 5 V
Arduino Uno45–50 mA
MQ-2 (pemanas selalu menyala)Sekitar 150 mA
Modul relay (per kanal, relay aktif)70–80 mA
Servo SG90 (bergerak / terbebani)100–250 mA / sampai 0,5–0,7 A
LCD I2C (lampu latar menyala)20–30 mA
RC522 (dari pin 3.3V)13–26 mA
Buzzer aktif, DHT11, PIR, dan sensor apiTotal 30–40 mA
Kipas mini 5 V dan lampu LED100–400 mA tergantung modelnya
Jangan memberi daya servo, modul relay, MQ-2, atau beban relay dari pin 5V Arduino. Beri daya dari adaptor 5 V 2–3 A terpisah dan selalu hubungkan GND adaptor ke GND Arduino (ground bersama). Arduino bisa diberi daya terpisah: dari USB selama pengembangan, lalu nanti lewat jack DC-nya dengan adaptor 7–12 V sendiri; jangan colokkan adaptor 5 V ke jack itu, karena butuh minimal 7 V. Kapasitor elektrolit 470–1000 µF di catu daya servo meredam penurunan tegangan sesaat ketika servo mulai bergerak. Selengkapnya di panduan catu daya Arduino.

Rencana pin: Arduino Uno dan ESP32

Modul sebanyak ini hampir menghabiskan pin Uno, jadi kamu perlu merencanakannya sejak awal. RC522 memakai SPI hardware, jadi jalur MOSI, MISO, dan SCK-nya terikat ke D11, D12, dan D13. LCD hanya memakai A4 dan A5 lewat I2C, karena itulah kita memilih layar dengan modul I2C, bukan LCD paralel. Pin analog juga bisa berfungsi sebagai pin digital kalau perlu, sehingga servo jendela bisa dihubungkan ke A2. Biarkan D0 dan D1 kosong: jalur serial ini dipakai ketika kamu meng-upload kode dan ketika membaca nomor kartu di Serial Monitor. Kamu bisa melihat susunan pin board-mu di alat Pinout.

Pin modulArduino UnoESP32
PIR OUTD2GPIO 16
DO sensor apiD3GPIO 17
DHT11 DATAD4GPIO 13
Buzzer aktif (+)D5GPIO 25
Servo pintu (sinyal)D6GPIO 32
Relay IN1 (lampu)D7GPIO 26
Relay IN2 (kipas)D8GPIO 27
RC522 RSTD9GPIO 4
RC522 SDA (SS)D10GPIO 5
RC522 MOSI / MISO / SCKD11 / D12 / D13GPIO 23 / 19 / 18
MQ-2 AOA0GPIO 34 (lewat pembagi tegangan)
Titik tengah pembagi LDRA1GPIO 35 (pembagi diberi daya dari 3V3)
Servo jendela (sinyal)A2GPIO 33
I2C LCD SDA / SCLA4 / A5GPIO 21 / 22
Di kedua board, beri daya RC522 dari pin 3,3 V; 5 V bisa merusak modulnya. Di ESP32, perhatikan dua aturan lagi: pin ADC2 tidak bisa membaca analog ketika Wi-Fi menyala, jadi MQ-2 dan LDR kita hubungkan ke pin ADC1 (GPIO 32–39). Output analog MQ-2 yang diberi daya 5 V juga bisa melewati 3,3 V; tambahkan pembagi tegangan, misalnya 10 kΩ di atas dan 15 kΩ di bawah (5 V × 15 / 25 = 3,0 V). Dengan alasan yang sama, beri daya sensor api dan DHT11 dari 3V3 di ESP32; keduanya bekerja di 3,3 V, jadi output digitalnya tetap dalam batas 3,3 V. Output HC-SR501 sudah 3,3 V meskipun diberi daya 5 V. Di kolom ESP32, pin RST RC522 kita pindahkan dari GPIO 22 ke GPIO 4, karena GPIO 22 di sini adalah jalur SCL untuk LCD.

Merakit langkah demi langkah

  1. Buat badan maket dan siapkan posisi modul serta lubang kabel; pasang elektroniknya paling akhir.
  2. Siapkan jalur daya: hubungkan adaptor 5 V ke jalur daya breadboard, sambungkan GND adaptor ke GND Arduino, dan cek tegangan 5 V dengan multimeter.
  3. Hubungkan LCD I2C dan tampilkan sebuah teks. Kalau alamat layarnya tidak ketemu, pakai sketch scanner dari artikel LCD I2C.
  4. Tambahkan sensor satu per satu: DHT11, LDR, PIR, MQ-2, dan sensor api. Coba masing-masing dengan sketch tes pendek di Serial Monitor dan catat pembacaannya di udara bersih, dalam gelap, dan dalam terang.
  5. Tambahkan aktuator: uji relay dulu tanpa beban sambil memperhatikan bunyi klik dan LED-nya, lalu servo dengan daya eksternal, dan terakhir hubungkan RC522. Pindai kartumu dan catat nomornya.
  6. Upload sketch utama dan atur ambang GAS_LIMIT, DARK_LIMIT, dan FAN_ON berdasarkan catatanmu.
  7. Kunci kabel-kabelnya dengan lem tembak dan label, lalu biarkan sistem menyala selama setengah jam sambil memperhatikan reset, panas berlebih, atau alarm palsu.
Jangan menyambungkan semuanya sekaligus lalu mencoba menjalankan semuanya dalam satu kali coba. Kalau delapan modul tidak mau bekerja bersama, mencari kesalahannya bisa memakan waktu berjam-jam; modul yang sudah diuji satu per satu biasanya langsung bekerja ketika digabungkan.

Lampu otomatis dengan PIR dan LDR

Sensor PIR HC-SR501 mendeteksi perubahan radiasi inframerah yang dipancarkan tubuh manusia dan membuat output-nya HIGH ketika melihat gerakan. Kalau hanya memakai PIR, lampu akan menyala juga di siang hari, jadi aturan kita punya dua syarat: nyalakan kalau ada gerakan dan gelap. LDR dirangkai sebagai pembagi tegangan dengan resistor 10 kΩ (5V → LDR → A1 → 10 kΩ → GND), dan pembacaan di A1 turun ketika makin gelap. Kode menyimpan waktu gerakan terakhir dan mematikan lampu setelah 20 detik tanpa gerakan baru; selama masih ada orang yang lalu lalang, timer-nya mulai ulang setiap kali. Atur jumper sensor ke H (repeat trigger) dan potensiometer Tx-nya ke waktu terpendek, lalu biarkan kode yang mengatur waktunya. Selengkapnya di artikel sensor gerak PIR dan sensor cahaya LDR.

Alarm gas dan kebakaran

Di dalam MQ-2 ada lapisan timah dioksida yang dijaga tetap panas oleh pemanas; elpiji, metana, butana, hidrogen, alkohol, dan asap mengubah hambatan lapisan ini. Pin AO modul mengeluarkan tegangan yang naik seiring naiknya kadar gas. Sensor ini perlu pemanasan setiap kali dinyalakan, jadi kode mengabaikan alarm gas selama 60 detik pertama. Sensor api mendeteksi cahaya inframerah 760–1100 nm yang dipancarkan api; di kebanyakan modul, output DO menjadi LOW dan LED kedua di modul menyala ketika api terlihat, tapi selalu cek modulmu sendiri dengan korek api yang dipegang dari jarak tertentu. Ketika gas terdeteksi, alarm berbunyi dan jendela terbuka untuk ventilasi; ketika api terdeteksi, jendela tetap tertutup, karena udara segar justru menyuburkan api. Cara mengatur ambang dan sensor MQ lainnya dibahas di artikel sensor gas MQ-2.

Alarm ini adalah proyek belajar; jangan pernah memakainya sebagai satu-satunya perlindungan terhadap kebocoran gas atau kebakaran di rumah sungguhan, karena tidak bisa menggantikan detektor komersial bersertifikat. Selain itu, ketika terjadi kebocoran gas sungguhan, menyalakan atau mematikan perangkat listrik atau menjalankan motor pun bisa menimbulkan percikan api; karena itulah sistem sungguhan memakai peralatan tahan ledakan (bersertifikat Ex). Servo jendela dan relay di maket hanya untuk memperagakan idenya.

Suhu, kelembapan, dan kipas otomatis

DHT11 mengukur suhu dari 0 sampai 50 °C dengan akurasi ±2 °C dan kelembapan dari 20 sampai 90% dengan akurasi ±5%, dan paling sering bisa dibaca sekali per detik; kode membacanya setiap dua detik. Alih-alih satu ambang untuk kipas, kita memakai histeresis: kipas menyala di 28 °C tapi baru mati ketika suhu turun ke 26 °C. Dengan satu ambang, relay akan terus berbunyi klik ketika suhu naik-turun di antara 27 dan 28 °C, sehingga relay dan kipasnya sama-sama cepat aus. Kalau sensor gagal membaca dan mengembalikan “nan”, kode melewati pengukuran itu dan menyimpan nilai valid terakhir. Untuk pengukuran yang lebih akurat, DHT22 bekerja dengan kode yang sama; cukup tulis DHT22 sebagai pengganti DHT11. Selengkapnya di artikel Sensor Suhu dan Kelembapan DHT11.

Pintu kartu RFID dengan servo

RC522 membaca kartu dan gantungan kunci MIFARE 13,56 MHz dari jarak 3–5 cm. Setiap kartu punya nomor identitas sendiri (UID), dan kode membandingkan UID yang terbaca dengan daftar kartu yang diizinkan. Kalau cocok, servo mengayunkan pintu ke 90 derajat, terdengar bunyi bip pendek, dan LCD menampilkan “Hos geldin!” (bahasa Turki untuk “Selamat datang!”); 5 detik kemudian pintu menutup sendiri. Kartu yang tidak dikenal mendapat bunyi bip panjang. Untuk mengetahui UID kartumu sendiri, upload kodenya, buka Serial Monitor di 9600 baud, lalu pindai kartu: kamu akan melihat baris seperti “UID: A1 B2 C3 D4”. Tulis byte-byte ini ke daftar CARDS dalam bentuk 0xA1, dan tambahkan nol di depan byte yang tampil sebagai satu digit (0x05, bukan 5). Kunci yang hanya mengecek UID cukup untuk belajar, tapi tidak memberi keamanan sungguhan; alasannya kami jelaskan di artikel RFID RC522.

Jendela dan tirai

Untuk jendela, satu SG90 lagi sudah cukup: hubungkan jendela akrilik kecil berengsel ke lengan servo dengan kawat, dengan 0 derajat berarti tertutup dan 90 derajat berarti terbuka. Memanggil write(0) sebelum attach() mencegah servo melompat ke 90 derajat ketika dinyalakan dan membanting jendelanya. Tirai butuh gerakan yang lebih panjang: kainnya digulung pada batang tipis lalu batangnya diputar. Motor stepper 28BYJ-48 dengan driver ULN2003 senyap dan presisi untuk ini, tapi butuh 4 pin; karena pin Uno sudah habis, masuk akal kalau tirainya disimpan untuk versi ESP32 atau Arduino Mega. Kalau harus cukup dengan satu pin, servo putaran kontinu FS90R juga bisa, tapi karena ia tidak tahu posisinya, tirai dibuka dan ditutup berdasarkan waktu. Menambahkan sensor hujan agar jendela menutup otomatis ketika hujan juga pengembangan yang menarik.

Lampu dan kipas dengan relay

Modul relay 5 V
Modul relay: menyalakan dan mematikan lampu atau kipas di rangkaian terpisah dengan sinyal kecil dari Arduino; beban dihubungkan ke terminal COM, NO, dan NC.

Satu pin Arduino hanya aman memberi arus sekitar 20 mA (batas mutlaknya 40 mA), sedangkan kipas atau lampu butuh jauh lebih banyak. Karena itu modul relay dipasang di antaranya: sinyal di pin IN-nya mengaktifkan elektromagnet yang menutup kontak di rangkaian terpisah. Hubungkan beban ke terminal COM dan NO supaya lampu tetap mati selama Arduino mati atau sedang restart. Kebanyakan modul seperti ini aktif LOW, artinya relay menyala ketika kamu menulis LOW; itulah gunanya konstanta RELAY_ON dan RELAY_OFF di kode. Di setup(), kode menulis HIGH sebelum menjadikan pin sebagai output, sehingga relay tidak berbunyi klik walau sesaat ketika Arduino mulai. Kita memakai histeresis supaya kipas tidak terlalu sering menyala-mati, sedangkan lampu tetap menyala sampai timer PIR habis.

Untuk maket, pakai lampu LED dan kipas 5 V atau 12 V. Walaupun di relay tertulis “10 A 250 V AC”, tegangan listrik PLN bisa mematikan; di proyek sekolah, rangkaian itu hanya boleh disambung di bawah pengawasan orang dewasa, di dalam kotak tertutup, dan dengan sekring. Aturan pengkabelan yang aman ada di artikel Apa Itu Modul Relay di Arduino?.

Sketch lengkap (Arduino Uno)

Aturan terpenting di kode rumah pintar adalah tidak ada modul yang menunggu modul lain. Kalau kamu menahan pintu tetap terbuka selama 5 detik dengan delay(5000), alarm gas tidak akan bekerja dan PIR tidak akan terbaca selama waktu itu. Karena itu setiap modul kita taruh di fungsinya sendiri, dan loop() memanggil fungsi-fungsi ini satu per satu ratusan kali per detik. Semua yang berkaitan dengan waktu diukur dengan millis(), dan keadaan setiap modul disimpan di variabel seperti lightOn, fanOn, doorOpen, dan alarmOn. Semua pengaturan ada di bagian atas kode sebagai konstanta, jadi kamu tidak perlu mengubek-ubek kode untuk mengganti satu ambang. Logika di balik pendekatan ini bisa kamu temukan di artikel millis() vs delay(). Untuk meng-compile kodenya, instal library MFRC522, DHT sensor library dari Adafruit, dan LiquidCrystal I2C dari Frank de Brabander lewat Library Manager, dan instal semua dependensinya ketika diminta. Servo, SPI, dan Wire sudah ikut dengan Arduino IDE.

C++ (Arduino IDE)
1#include <SPI.h>
2#include <MFRC522.h>
3#include <Servo.h>
4#include <DHT.h>
5#include <Wire.h>
6#include <LiquidCrystal_I2C.h>
7
8// Pinler / Pins
9const byte PIR_PIN = 2, FLAME_PIN = 3, DHT_PIN = 4, BUZZER_PIN = 5, DOOR_PIN = 6;
10const byte LAMP_RELAY = 7, FAN_RELAY = 8, RST_PIN = 9, SS_PIN = 10;
11const byte GAS_PIN = A0, LDR_PIN = A1, WINDOW_PIN = A2;
12
13// Ayarlar / Settings
14const byte RELAY_ON = LOW, RELAY_OFF = HIGH;     // aktif LOW röle / active-LOW relay
15const byte FLAME_ACTIVE = LOW;                   // alev görünce DO LOW olur / DO goes LOW on flame
16const int GAS_LIMIT = 400;                       // temiz havaya göre ayarla / tune in clean air
17const int DARK_LIMIT = 300;                      // bunun altı karanlık / below this is dark
18const float FAN_ON = 28.0, FAN_OFF = 26.0;       // fan histerezisi (°C) / fan hysteresis (°C)
19const unsigned long LIGHT_MS = 20000;            // son hareketten sonra ışık / light after last motion
20const unsigned long DOOR_MS = 5000;              // kapı açık kalma süresi / door open time
21const unsigned long WARMUP_MS = 60000;           // MQ-2 ve PIR ısınması / MQ-2 and PIR warm-up
22
23const byte CARDS[][4] = {                        // yetkili kart UID'leri / authorised card UIDs
24  {0xA1, 0xB2, 0xC3, 0xD4},
25  {0x12, 0x34, 0x56, 0x78}
26};
27
28MFRC522 rfid(SS_PIN, RST_PIN);
29Servo door, window;
30DHT dht(DHT_PIN, DHT11);
31LiquidCrystal_I2C lcd(0x27, 16, 2);
32
33float tempC = 0, hum = 0;
34int gas = 0;
35bool lightOn = false, fanOn = false, doorOpen = false, alarmOn = false;
36unsigned long lastMotion = 0, doorAt = 0, lastDht = 0, lastLcd = 0, beepUntil = 0;
37
38void setup() {
39  Serial.begin(9600);
40  digitalWrite(LAMP_RELAY, RELAY_OFF); pinMode(LAMP_RELAY, OUTPUT);  // açılışta kapalı / off at boot
41  digitalWrite(FAN_RELAY, RELAY_OFF);  pinMode(FAN_RELAY, OUTPUT);
42  pinMode(PIR_PIN, INPUT);
43  pinMode(FLAME_PIN, INPUT);
44  pinMode(BUZZER_PIN, OUTPUT);
45  door.write(0);   door.attach(DOOR_PIN);        // önce açı, sonra attach / angle first, then attach
46  window.write(0); window.attach(WINDOW_PIN);
47  dht.begin();
48  SPI.begin();
49  rfid.PCD_Init();
50  lcd.init();
51  lcd.backlight();
52  lcd.print(F("BlueGrays Ev"));
53}
54
55void loop() {
56  unsigned long now = millis();
57  handleLight(now);
58  handleClimate(now);
59  handleSafety(now);
60  handleDoor(now);
61  bool beep = (long)(beepUntil - now) > 0;
62  digitalWrite(BUZZER_PIN, beep || (alarmOn && (now / 250) % 2));   // alarmda kesik bip / pulsed beep on alarm
63  updateLcd(now);
64}
65
66// 1) Hareketle ışık / motion light
67void handleLight(unsigned long now) {
68  if (now < WARMUP_MS) return;                   // PIR ısınıyor / PIR warming up
69  if (digitalRead(PIR_PIN) == HIGH) {
70    lastMotion = now;
71    if (analogRead(LDR_PIN) < DARK_LIMIT) lightOn = true;   // yalnız karanlıkta yak / only when dark
72  }
73  if (lightOn && now - lastMotion > LIGHT_MS) lightOn = false;
74  digitalWrite(LAMP_RELAY, lightOn ? RELAY_ON : RELAY_OFF);
75}
76
77// 2) Sıcaklık ve fan / temperature and fan
78void handleClimate(unsigned long now) {
79  if (now - lastDht < 2000) return;              // DHT11'i sık okuma / don't read DHT11 too often
80  lastDht = now;
81  float t = dht.readTemperature();
82  float h = dht.readHumidity();
83  if (isnan(t) || isnan(h)) return;              // okuma hatası / read error
84  tempC = t;
85  hum = h;
86  if (tempC >= FAN_ON) fanOn = true;
87  if (tempC <= FAN_OFF) fanOn = false;
88  digitalWrite(FAN_RELAY, fanOn ? RELAY_ON : RELAY_OFF);
89}
90
91// 3) Gaz ve yangın / gas and fire
92void handleSafety(unsigned long now) {
93  gas = analogRead(GAS_PIN);
94  bool gasAlarm = now > WARMUP_MS && gas > GAS_LIMIT;
95  bool fire = digitalRead(FLAME_PIN) == FLAME_ACTIVE;
96  alarmOn = gasAlarm || fire;
97  window.write(gasAlarm && !fire ? 90 : 0);      // gazda aç, yangında kapalı tut / open on gas, shut on fire
98}
99
100// 4) RFID kapı / RFID door
101void handleDoor(unsigned long now) {
102  if (doorOpen && now - doorAt > DOOR_MS) {
103    door.write(0);                               // süre dolunca kapat / close when time is up
104    doorOpen = false;
105  }
106  if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return;
107  Serial.print(F("UID:"));                       // yeni kartın UID'sini öğren / learn a new card's UID
108  for (byte i = 0; i < rfid.uid.size; i++) {
109    Serial.print(' ');
110    Serial.print(rfid.uid.uidByte[i], HEX);
111  }
112  Serial.println();
113  if (isAllowed(rfid.uid.uidByte)) {
114    door.write(90);
115    doorOpen = true;
116    doorAt = now;
117    beepUntil = now + 100;                       // kısa bip: hoş geldin / short beep: welcome
118  } else {
119    beepUntil = now + 800;                       // uzun bip: yetkisiz kart / long beep: unknown card
120  }
121  rfid.PICC_HaltA();
122}
123
124bool isAllowed(const byte *uid) {
125  for (byte i = 0; i < sizeof(CARDS) / 4; i++) {
126    if (memcmp(uid, CARDS[i], 4) == 0) return true;
127  }
128  return false;
129}
130
131// 5) Ekran / display
132void updateLcd(unsigned long now) {
133  if (now - lastLcd < 1000) return;
134  lastLcd = now;
135  lcd.setCursor(0, 0);
136  lcd.print(F("T:"));
137  lcd.print(tempC, 0);
138  lcd.print(F("C Nem:%"));
139  lcd.print(hum, 0);
140  lcd.print(F("   "));
141  lcd.setCursor(0, 1);
142  if (alarmOn) {
143    lcd.print(F("!! ALARM !!     "));
144  } else if (doorOpen) {
145    lcd.print(F("Hos geldin!     "));
146  } else {
147    lcd.print(F("Gaz:"));
148    lcd.print(gas);
149    lcd.print(F("        "));
150  }
151}
FungsiTugasSeberapa sering?
handleLight() (lampu)Menyalakan relay lampu berdasarkan PIR dan LDR, lalu mematikannya setelah 20 detik tanpa gerakanSetiap loop (kecuali 60 detik pertama)
handleClimate() (iklim)Membaca DHT11 dan mengendalikan kipas dengan histeresis 28/26 °CSetiap 2 detik
handleSafety() (keamanan)Membaca MQ-2 dan sensor api, lalu mengatur alarm dan jendelaSetiap loop
handleDoor() (pintu)Membaca kartu, menampilkan UID di Serial Monitor, membuka dan menutup pintuSetiap loop
updateLcd() (layar)Menampilkan suhu, kelembapan, pembacaan gas, atau pesan statusSekali per detik
Baris buzzer di dalam loop()Menghasilkan bunyi bip kartu dan suara alarm yang berdenyutSetiap loop

Setelah di-compile, kode ini memakai sekitar 38% memori program dan 28% RAM Uno, jadi memorinya masih tersisa, tapi dari pin-pinnya hanya A3 yang masih kosong. Kamu bisa menghubungkan tombol atau sensor hujan ke A3; untuk lebih dari itu kamu perlu pindah ke Arduino Mega atau ESP32. Menaruh teks tetap di dalam F() adalah cara termudah untuk menekan pemakaian RAM.

Kendali lewat ponsel: web server ESP32

Board pengembangan ESP32
ESP32: Wi-Fi dan Bluetooth sudah terpasang di dalamnya, jadi tidak perlu modul tambahan untuk mengendalikan rumah pintar dari ponselmu.

Uno tidak punya Wi-Fi; cara termudah untuk mengendalikan rumah pintar dari ponsel adalah mengganti otaknya dengan ESP32. Kode di bawah menghubungkan ESP32 ke jaringan rumahmu dan menjalankan web server kecil. Dengan ponsel di jaringan Wi-Fi yang sama, buka alamat IP yang tampil di Serial Monitor di browser, dan kamu akan melihat empat tombol besar untuk lampu, kipas, pintu, dan jendela, plus suhu, kelembapan, dan pembacaan gas terkini; halamannya memuat ulang sendiri setiap 10 detik. Setiap tombol mengirim permintaan singkat ke ESP32 yang menyebut perangkat mana yang harus diubah; ESP32 mengganti keadaannya lalu mengarahkanmu kembali ke halaman utama. Untuk servo, instal library ESP32Servo dari Library Manager, karena library Servo standar tidak bekerja di ESP32.

C++ (Arduino IDE)
1#include <WiFi.h>
2#include <WebServer.h>
3#include <ESP32Servo.h>
4#include <DHT.h>
5
6const char* ssid = "AgAdi";                 // Wi-Fi adın / your Wi-Fi name
7const char* password = "Sifre123";          // Wi-Fi şifren / your Wi-Fi password
8
9const int LAMP_RELAY = 26, FAN_RELAY = 27;
10const int DOOR_PIN = 32, WINDOW_PIN = 33;
11const int DHT_PIN = 13, GAS_PIN = 34;       // GPIO 34: ADC1, bölücüyle / ADC1, through a divider
12const int RELAY_ON = LOW, RELAY_OFF = HIGH; // aktif LOW röle / active-LOW relay
13
14WebServer server(80);
15Servo door, window;
16DHT dht(DHT_PIN, DHT11);
17
18bool lamp = false, fan = false, doorOpen = false, windowOpen = false;
19float tempC = NAN, hum = NAN;
20unsigned long lastDht = 0;
21
22void apply() {                              // durumu donanıma uygula / push the state to the hardware
23  digitalWrite(LAMP_RELAY, lamp ? RELAY_ON : RELAY_OFF);
24  digitalWrite(FAN_RELAY, fan ? RELAY_ON : RELAY_OFF);
25  door.write(doorOpen ? 90 : 0);
26  window.write(windowOpen ? 90 : 0);
27}
28
29String button(const char* id, const char* label, bool on) {
30  return String("<a class='b ") + (on ? "on" : "off") + "' href='/set?d=" + id +
31         "&v=" + (on ? "0" : "1") + "'>" + label + (on ? ": ON" : ": OFF") + "</a>";
32}
33
34void handleRoot() {
35  String html = "<!DOCTYPE html><html><head><meta charset='utf-8'>"
36                "<meta name='viewport' content='width=device-width,initial-scale=1'>"
37                "<meta http-equiv='refresh' content='10'><title>BlueGrays Ev</title>"
38                "<style>body{font-family:sans-serif;text-align:center}"
39                ".b{display:block;margin:12px auto;padding:18px;max-width:320px;border-radius:10px;"
40                "color:#fff;text-decoration:none;font-size:20px}"
41                ".on{background:#2e7d32}.off{background:#607d8b}</style></head><body>"
42                "<h2>BlueGrays Akıllı Ev</h2>";
43  html += "<p>" + String(tempC, 1) + " °C | %" + String(hum, 0) +
44          " | Gaz/Gas: " + String(analogRead(GAS_PIN)) + "</p>";
45  html += button("lamp", "Lamba / Lamp", lamp);
46  html += button("fan", "Fan", fan);
47  html += button("door", "Kapı / Door", doorOpen);
48  html += button("window", "Pencere / Window", windowOpen);
49  html += "</body></html>";
50  server.send(200, "text/html", html);
51}
52
53void handleSet() {                          // /set?d=lamp&v=1
54  String d = server.arg("d");
55  bool v = server.arg("v") == "1";
56  if (d == "lamp") lamp = v;
57  else if (d == "fan") fan = v;
58  else if (d == "door") doorOpen = v;
59  else if (d == "window") windowOpen = v;
60  apply();
61  server.sendHeader("Location", "/");       // ana sayfaya dön / back to the main page
62  server.send(303);
63}
64
65void setup() {
66  Serial.begin(115200);
67  door.attach(DOOR_PIN, 500, 2400);
68  window.attach(WINDOW_PIN, 500, 2400);
69  pinMode(LAMP_RELAY, OUTPUT);
70  pinMode(FAN_RELAY, OUTPUT);
71  apply();                                  // her şey kapalı başlar / everything starts off
72  dht.begin();
73  WiFi.begin(ssid, password);
74  while (WiFi.status() != WL_CONNECTED) {
75    delay(500);
76    Serial.print('.');
77  }
78  Serial.println();
79  Serial.println(WiFi.localIP());           // bu adresi telefonda aç / open this address on your phone
80  server.on("/", handleRoot);
81  server.on("/set", handleSet);
82  server.begin();
83}
84
85void loop() {
86  server.handleClient();
87  if (millis() - lastDht > 2000) {          // 2 sn'de bir ölç / measure every 2 s
88    lastDht = millis();
89    float t = dht.readTemperature();
90    float h = dht.readHumidity();
91    if (!isnan(t) && !isnan(h)) {
92      tempC = t;
93      hum = h;
94    }
95  }
96}

Kode ini hanya berisi bagian yang kamu kendalikan dari jauh. Fungsi handleLight(), handleSafety(), dan handleDoor() dari sketch Uno juga bisa kamu pindahkan ke sini: ganti nomor pin sesuai kolom ESP32 di tabel, pakai ESP32Servo sebagai pengganti Servo, dan ukur ulang ambang GAS_LIMIT dan DARK_LIMIT karena ADC ESP32 mengembalikan nilai dari 0 sampai 4095. Halamannya tidak memakai kata sandi, jadi siapa pun di jaringan rumahmu bisa membuka pintunya; menambahkan kata sandi sederhana dengan fungsi authenticate() dari library WebServer adalah kebiasaan yang baik. Untuk panel yang diperbarui secara real time, lihat artikel WebSocket ESP32.

Pin ESP32 mengeluarkan 3,3 V. Pada modul relay 5 V aktif LOW yang memakai optocoupler, sinyal HIGH 3,3 V tidak selalu bisa melepas relay sepenuhnya; kalau relay tidak pernah mati, pilih modul yang bisa dipicu di 3,3 V, atau pada modul dengan jumper JD-VCC, lepas jumper-nya lalu beri daya VCC dari 3,3 V dan JD-VCC dari 5 V. Kalau di sekolah tidak ada Wi-Fi, ganti baris koneksi dengan WiFi.softAP("BlueGrays-Ev", "12345678") agar ESP32 membuat jaringannya sendiri; ponselmu bergabung ke jaringan itu dan membuka 192.168.4.1.

Kendali dari mana saja dengan Blynk

Web server ESP32 hanya bisa dijangkau dari jaringan yang sama. Kalau kamu juga ingin mengendalikannya dari luar rumah lewat data seluler, platform cloud seperti Blynk IoT memudahkannya: antarmukanya kamu susun dengan drag and drop di aplikasi ponsel, dan ESP32 terhubung ke server Blynk. Buat template di Blynk.Cloud, tambahkan tiga datastream bernama V0 (integer, 0–1, lampu), V1 (double, suhu), dan V2 (double, kelembapan), tambahkan perangkat, lalu tempel Template ID, Template Name, dan Auth Token yang diberikan di bagian atas kode. Di aplikasinya, cukup tautkan sebuah Switch ke V0 dan masing-masing satu Gauge ke V1 dan V2. Paket gratisnya membatasi jumlah perangkat, datastream, dan pesan per bulan, karena itulah data sensor kita kirim setiap lima detik, bukan setiap detik. Pengaturan lengkapnya ada di panduan Blynk IoT dengan ESP32.

C++ (Arduino IDE)
1#define BLYNK_TEMPLATE_ID "TMPLxxxxxxx"     // Blynk konsolundan kopyala / copy from the Blynk console
2#define BLYNK_TEMPLATE_NAME "Akilli Ev"
3#define BLYNK_AUTH_TOKEN "TokenBuraya"
4
5#include <WiFi.h>
6#include <BlynkSimpleEsp32.h>
7#include <DHT.h>
8
9const int LAMP_RELAY = 26;                  // aktif LOW röle / active-LOW relay
10DHT dht(13, DHT11);
11BlynkTimer timer;
12
13BLYNK_WRITE(V0) {                           // uygulamadaki anahtar / switch widget in the app
14  digitalWrite(LAMP_RELAY, param.asInt() ? LOW : HIGH);
15}
16
17BLYNK_CONNECTED() {
18  Blynk.syncVirtual(V0);                    // bağlanınca son durumu al / restore the last state
19}
20
21void sendSensors() {
22  float t = dht.readTemperature();
23  float h = dht.readHumidity();
24  if (isnan(t) || isnan(h)) return;
25  Blynk.virtualWrite(V1, t);                // sıcaklık / temperature
26  Blynk.virtualWrite(V2, h);                // nem / humidity
27}
28
29void setup() {
30  pinMode(LAMP_RELAY, OUTPUT);
31  digitalWrite(LAMP_RELAY, HIGH);           // açılışta kapalı / off at boot
32  dht.begin();
33  Blynk.begin(BLYNK_AUTH_TOKEN, "AgAdi", "Sifre123");
34  timer.setInterval(5000L, sendSensors);    // 5 sn'de bir: mesaj kotasını korur / every 5 s saves quota
35}
36
37void loop() {
38  Blynk.run();
39  timer.run();
40}

Metode kendali mana yang sebaiknya dipilih?

MetodeYang dibutuhkanDari luar rumahTingkat kesulitanPaling cocok untuk
Web server ESP32ESP32 dan Wi-Fi rumahTidak, hanya jaringan yang samaSedangPresentasi sekolah, demo tanpa internet, kode yang sepenuhnya milikmu
Blynk IoTESP32, internet, dan akun BlynkYaMudahAntarmuka siap pakai, grafik, dan notifikasi
Bluetooth (HC-05)Uno, HC-05, dan aplikasi AndroidTidak, sekitar 10 mMudahTetap memakai Uno (tidak bisa dengan iPhone)
Bot TelegramESP32 dan internetYaSedangNotifikasi alarm dan perintah singkat
MQTT + Home AssistantESP32 dan server lokal (misalnya Raspberry Pi)Ya, perlu diatur duluMahirOtomasi rumah sungguhan

Untuk presentasi sekolah, web server ESP32 adalah pilihan paling aman: tidak bergantung pada internet atau cloud, dan tetap bekerja di jaringannya sendiri meskipun di aula tidak ada Wi-Fi. Kalau kamu ingin tetap memakai Uno dan hanya menambahkan Bluetooth, kamu bisa membuat aplikasi Android sendiri dengan App Inventor; tapi karena pin Uno sudah habis, kamu harus mengorbankan LCD atau servo jendela untuk memberi tempat bagi HC-05. Kamu bisa menerima pesan di ponsel ketika alarm berbunyi dengan bot Telegram ESP32, dan menghubungkan rumah ke perangkat sungguhan dengan MQTT dan Home Assistant.

Rumah pintar dengan Raspberry Pi Pico

Sistem yang sama juga bisa kamu buat di MicroPython dengan Raspberry Pi Pico, dan Pico W yang punya Wi-Fi bisa dikendalikan dari ponsel persis seperti ESP32 (lihat web server Pico W). Karena Pico bekerja di 3,3 V, aturan ESP32 juga berlaku di sini: beri daya pembagi LDR dari 3V3, turunkan output analog 5 V dengan pembagi tegangan, dan pilih modul relay yang bisa dipicu di 3,3 V. Input analognya hanya GP26, GP27, dan GP28. Kode di bawah adalah versi MicroPython dari modul lampu yang menyala karena gerakan:

MicroPython
1from machine import Pin, ADC
2import time
3
4pir = Pin(15, Pin.IN)                  # PIR OUT (3,3 V çıkış / 3.3 V output)
5ldr = ADC(26)                          # GP26: bölücü 3V3'ten / divider fed from 3V3
6relay = Pin(14, Pin.OUT, value=1)      # aktif LOW röle, kapalı başla / active-LOW relay, start off
7
8LIGHT_MS = 20000                       # son hareketten sonra ışık / light after last motion
9DARK = 20000                           # bunun altı karanlık / below this is dark
10last = time.ticks_ms()
11on = False
12
13while True:
14    now = time.ticks_ms()
15    if pir.value():
16        last = now
17        if ldr.read_u16() < DARK:      # yalnız karanlıkta yak / only when dark
18            on = True
19    if on and time.ticks_diff(now, last) > LIGHT_MS:
20        on = False
21    relay.value(0 if on else 1)
22    time.sleep_ms(50)

Tips untuk presentasi sekolahmu

  • Mulai dari masalah: jelaskan masalah nyata dalam satu kalimat, misalnya “lampu yang lupa dimatikan di rumah kosong, kebocoran gas yang tidak disadari siapa pun, orang tua yang sering kehilangan kunci”, lalu tunjukkan bagaimana maketmu menjawabnya.
  • Siapkan diagram blok: sensor di kiri, Arduino di tengah, dan aktuator di kanan; beri label aturan pada panah-panahnya (“gelap + gerakan → lampu”). Juri tidak akan membaca kodemu, tapi mereka akan mengingat diagram ini.
  • Susun skenario demo langsung: pindai kartu dan tunjukkan pintu yang terbuka, lambaikan tangan di depan PIR, dekatkan kapas yang dibasahi alkohol gosok ke MQ-2 (alkohol juga memicu sensor ini), dan hangatkan DHT11 dengan jarimu. Batasi setiap demo 10–20 detik.
  • Tanpa api terbuka: jangan menyalakan korek api atau lilin di dalam maket kardus. Kebanyakan sensor api juga bereaksi terhadap cahaya inframerah remote TV yang didekatkan; uji dulu sebelumnya dan pakai cara itu ketika demo.
  • Sesuaikan ambang dengan ruangan: kalau suhu aula hari itu 22 °C, menunggu 28 °C akan merusak demo kipas; atur FAN_ON 2–3 derajat di atas suhu ruangan supaya kipas menyala ketika kamu menghangatkan sensor dengan jari.
  • Ukur dan pakai angka: misalnya, catat berapa menit lampu menyala dalam sehari dengan dan tanpa PIR, lalu sampaikan penghematannya dalam persen. Hasil dengan angka jauh lebih kuat daripada sekadar bilang “berhasil”.
  • Punya rencana cadangan: rekam video sistem yang sedang bekerja, bawa kabel, servo, dan adaptor cadangan, dan tulis nomor kartu serta pengaturan Wi-Fi di selembar kertas.
  • Siap menjawab pertanyaan juri: untuk pertanyaan “Bagaimana cara kerjanya di rumah sungguhan?”, siapkan jawaban singkat soal keamanan listrik PLN, detektor bersertifikat, keamanan RFID, dan apa yang terjadi pada pintu ketika listrik padam.
Kalau kamu menyiapkan proyek ini untuk lomba sains, tetapkan pertanyaan penelitian yang bisa diukur alih-alih sekadar bilang “aku membuat rumah pintar”, misalnya: “Berapa banyak energi yang dihemat oleh pencahayaan dengan PIR dan LDR dibandingkan lampu yang selalu menyala?” Untuk ide dan kriteria penilaian, lihat artikel ide proyek Arduino untuk lomba sains.

Kesalahan umum dan cara memperbaikinya

GejalaKemungkinan penyebabSolusi
Arduino reset atau LCD kacau ketika servo bergerakServo dan relay diberi daya dari pin 5V ArduinoAdaptor 5 V 2–3 A terpisah, GND bersama, kapasitor 470–1000 µF di catu daya servo
Relay bekerja terbalik dan menyala ketika dinyalakanModulnya aktif LOWTukar nilai RELAY_ON dan RELAY_OFF
Alarm berbunyi setiap kali dinyalakanMQ-2 sedang pemanasan dan PIR sedang mempelajari lingkungannyaPertahankan jeda WARMUP_MS; biarkan MQ-2 menyala lama sebelum pemakaian pertama
Lampu menyala di siang hari atau mati lalu langsung menyala lagiDARK_LIMIT salah atau LDR terkena cahaya lampuAtur ambang dari pembacaan di Serial Monitor dan pindahkan LDR ke dinding luar
Kartu tidak terbacaPengkabelan RC522 salah atau modul dihubungkan ke 5 VCek pin SPI dan uji modul dengan contoh DumpInfo
DHT11 mengembalikan nanKabel DATA di pin yang salah atau sensor tanpa modul tidak punya resistor pull-upCek pin, pakai versi modul, atau tambahkan 10 kΩ antara DATA dan VCC
Servo sesekali bergetarCatu daya lemah; interrupt berhenti sebentar ketika DHT11 dibacaPerbaiki catu daya; kalau perlu, detach() servo setelah selesai bergerak
Di ESP32 pembacaan gas selalu 0 atau 4095Pin ADC2 bentrok dengan Wi-Fi atau tidak ada pembagi teganganPakai pin ADC1 seperti GPIO 34 atau 35 dan pembagi tegangan
Ponsel tidak bisa membuka halaman ESP32Ponsel ada di jaringan tamu atau data seluler, atau jaringannya 5 GHzBergabung ke jaringan 2,4 GHz yang sama dan ambil alamat IP dari Serial Monitor

Proyek rumah pintar Arduino menggabungkan pembacaan sensor, pengambilan keputusan, penggerakan motor dan relay, perencanaan daya, dan kendali nirkabel dalam satu rakitan, sehingga menjadi topik yang bagus untuk dipelajari sekaligus dipresentasikan. Mulailah dari satu modul, uji setiap langkah, dan kembangkan sistemnya sedikit demi sedikit. Di aplikasi BlueGrays kamu akan menemukan proyek Lampu Tangga dan Koridor Pintar, Lampu Pintar dengan PIR dan LDR, Alarm Sensor Api dan Gas, Kunci Pintu RFID, dan web server ESP32 langkah demi langkah, lengkap dengan skema rangkaian dan kode.

Pertanyaan umum

Apa saja yang kubutuhkan untuk membuat proyek rumah pintar Arduino?

Untuk maket dasar, cukup Arduino Uno atau ESP32, sensor gerak PIR, LDR, sensor gas MQ-2, sensor api, DHT11, modul RFID RC522, dua servo SG90, modul relay 2 kanal, buzzer, dan LCD I2C. Tambahkan breadboard, kabel jumper, adaptor daya 5 V 2–3 A, dan bahan untuk membuat maket. Kebanyakan modulnya murah; board, layar, adaptor, dan maketnya sendiri yang memakan sebagian besar anggaran.

Lebih baik Arduino atau ESP32 untuk proyek rumah pintar?

Kalau tidak butuh kendali lewat ponsel, Arduino Uno lebih mudah: langsung bekerja dengan modul 5 V dan kebanyakan contoh ditulis untuknya. Pilih ESP32 kalau kamu butuh kendali Wi-Fi dari ponsel, notifikasi, atau pin yang lebih banyak, tapi karena pin-pinnya bekerja di 3,3 V, kamu perlu lebih hati-hati dengan modul relay dan sensor analog 5 V.

Bagaimana cara mengendalikan rumah pintar Arduino dari ponsel?

Cara termudah adalah memakai ESP32 dan menyiapkan web server; setelah itu kamu bisa mengendalikan lampu, kipas, dan pintu dengan tombol di browser ponsel yang terhubung ke jaringan Wi-Fi yang sama. Untuk akses dari luar rumah, kamu bisa memakai aplikasi cloud seperti Blynk IoT, atau kalau ingin tetap memakai Arduino Uno, modul Bluetooth HC-05 dan aplikasi Android.

Bahan apa yang paling bagus untuk maket rumah pintar?

Bahan yang paling praktis adalah foam board atau PVC foam board 5 mm; bisa dipotong dengan cutter dan direkatkan dengan lem tembak. Untuk badan yang lebih kokoh, kamu bisa memakai MDF 3–4 mm. Alas berukuran sekitar 50×40 cm, atap yang bisa dilepas, dan kompartemen teknis terpisah untuk elektronik membuat pekerjaannya jauh lebih mudah.

Bisakah Arduino menyalakan dan mematikan lampu listrik PLN?

Bisa, dengan modul relay 5 V yang memisahkan rangkaian listrik PLN secara elektris dari Arduino. Tapi tegangan listrik PLN bisa mematikan: sambungkan hanya ketika steker sudah dicabut, taruh rangkaiannya di kotak tertutup yang terisolasi, dan jangan pernah mengerjakannya di proyek siswa tanpa pengawasan orang dewasa. Untuk maket, lampu 5 V atau 12 V sudah cukup.

Apakah rumah pintar Arduino proyek yang bagus untuk lomba sains?

Rumah pintar adalah topik yang sangat umum, jadi maket yang berfungsi saja sering kali belum cukup. Kalau proyekmu dikaitkan dengan pertanyaan penelitian yang bisa diukur, misalnya berapa banyak energi yang dihemat oleh lampu yang menyala karena gerakan atau seberapa cepat alarm gas merespons, proyek itu jadi jauh lebih kuat di mata juri.

Lihat semua proyek
Suhu dan Kelembapan dengan DHT11
#55Menengah

Suhu dan Kelembapan dengan DHT11

Seberapa hangat kamarmu, dan apakah udaranya lembap atau kering? Sensor DHT11 mengukur suhu dan kelembapan, dan Arduino menulis nilainya di layar LCD dua baris, diperbarui setiap beberapa detik. Jika

4.7(47)
73
Lampu Tangga dan Koridor Pintar
#82Menengah
Premium

Lampu Tangga dan Koridor Pintar

Injak tangga atau masuk ke lorong, dan lampu menyala satu per satu ke arah kamu berjalan. Ada sensor jarak di setiap ujung; sensor mana pun yang kamu lewati, delapan LED menyala satu per satu dari uju

5.0(35)
51
Lampu Pintar ESP32 (PIR + LDR + Relay + OLED)
#141Mahir
Premium

Lampu Pintar ESP32 (PIR + LDR + Relay + OLED)

Ubah lorong, kamar mandi, atau gudangmu menjadi lampu pintar dengan ESP32! Dengan sensor gerak PIR, sensor cahaya LDR, dan modul relay, kita membuat skenario klasik "lampu menyala ketika ada gerakan dalam gelap"; jika sudah terang, gerakan TIDAK menyalakan lampu, jadi energi hemat di siang hari. Lampu menyala 30 detik; jika gerakan berlanjut, timer diulang. OLED SSD1306 menampilkan status dengan font besar (NYALA / SIANG / MENUNGGU) dan hitung mundur.

4.3(6)
11
Bel Pintu dan Lampu dengan Sensor Gerak
#25Menengah
Premium

Bel Pintu dan Lampu dengan Sensor Gerak

Ketika ada orang datang ke pintumu, kamu sudah tahu bahkan sebelum ia membunyikan bel. Begitu sensor gerak melihat seseorang, LED menyala dan buzzer memainkan bunyi bel tiga nada dari tinggi ke rendah

4.7(54)
71
Alarm Sensor Api dan Gas
#52Mahir
Premium

Alarm Sensor Api dan Gas

Penjaga kecil yang langsung memperingatkanmu ketika ada gas bocor atau nyala api di suatu tempat. Sensor gas mengawasi gas di udara dan sensor api mengawasi cahaya api; selama semuanya aman LED hijau

4.8(52)
67
Kunci Pintu RFID ESP32 (RC522 + Servo + OLED + Buzzer + LED)
#137Mahir
Premium

Kunci Pintu RFID ESP32 (RC522 + Servo + OLED + Buzzer + LED)

Kita membuat kunci pintu pintar dengan ESP32, modul RFID RC522, motor servo SG90, layar OLED SSD1306, buzzer aktif, dan 2 LED. Ketika sebuah kartu dipindai, UID-nya dibandingkan dengan daftar kartu resmi yang disimpan di kode; jika resmi, motor servo berputar untuk membuka kunci (LED hijau + 2 bunyi bip pendek), dan pintu otomatis terkunci lagi setelah 5 detik. Untuk kartu tidak resmi, LED merah menyala, peringatan diberikan dengan 3 bunyi bip cepat, dan UID yang terbaca ditampilkan di layar.

4.8(9)
15
Menyalakan Bohlam 220V dengan Remote Control
#21Mahir
Premium

Menyalakan Bohlam 220V dengan Remote Control

Nyalakan dan matikan bohlam sungguhan di rumahmu dengan remote TV, tanpa beranjak dari sofa. Arduino membaca sinyal cahaya tak terlihat dari remote; tombol power membuat relay berbunyi klik dan menyal

4.4(22)
30
Web Server Asinkron ESP32 (dengan Tampilan IP di LCD)
#129Mahir

Web Server Asinkron ESP32 (dengan Tampilan IP di LCD)

Di proyek ini, kita mengubah ESP32 menjadi web server asinkron yang bisa kamu kendalikan dari ponsel atau komputer di jaringan Wi-Fi yang sama. Berkat library ESPAsyncWebServer, server bisa memproses beberapa permintaan bersamaan (berbeda dengan WebServer.h klasik, yang memblokir pada satu permintaan). Kamu bisa membuka alamat IP ESP32 di browser dan mengklik tombol ON/OFF (rute /on dan /off) untuk menyalakan dan mematikan LED yang tersambung ke GPIO 5.

4.8(16)
26