Life Tech


1. STRUKTUR DASAR, VARIABEL, TIPE DATA, DAN KOMENTAR

Struktur Pemrograman pada C++

Setiap program Arduino wajib memiliki dua fungsi utama:

  • void setup(): Digunakan untuk menjalankan perintah satu kali di awal program, biasanya untuk inisialisasi.

  • void loop(): Digunakan untuk menjalankan perintah secara berulang-ulang setelah fungsi setup() selesai.

 

Penjelasan Tipe Data:

  • Boolean
    Menyimpan nilai logika, yaitu true (benar) atau false (salah). Dalam praktiknya, true setara dengan angka 1 dan false setara dengan angka 0. Tipe data ini hanya memerlukan 1 byte memori.

  • Byte
    Menyimpan bilangan bulat positif dari 0 hingga 255. Efisien digunakan untuk menyimpan nilai kecil, dan hanya membutuhkan 1 byte memori.

  • Char
    Digunakan untuk menyimpan satu karakter, misalnya 'A', 'B', atau '1'. Tipe data ini juga menggunakan 1 byte memori.

  • Int
    Singkatan dari integer, digunakan untuk menyimpan bilangan bulat dalam rentang -32.768 hingga 32.767. Membutuhkan memori sebesar 2 byte.

  • Unsigned int
    Sama seperti int, namun hanya menyimpan bilangan bulat positif, yaitu dari 0 hingga 65.535. Tetap menggunakan 2 byte memori.

  • Long
    Menyimpan bilangan bulat yang lebih besar, mulai dari -2.147.483.648 hingga 2.147.483.647. Memerlukan 4 byte memori.

  • Unsigned long
    Versi positif dari long, menyimpan angka dari 0 hingga 4.294.967.295. Membutuhkan 4 byte memori.

  • Float
    Digunakan untuk menyimpan angka desimal seperti 3.14 atau 0.5. Tipe ini memerlukan 4 byte memori.

  • Double
    Sama seperti float, tetapi dengan tingkat presisi dan rentang yang lebih besar. Menggunakan memori sebesar 8 byte.

 

2. SERIAL MONITOR, PINMODE, DIGITALWRITE

https://wokwi.com/projects/438596569947207681


  • Serial.begin(9600);
    Digunakan untuk memulai komunikasi antara Arduino dan komputer. Nilai 9600 adalah kecepatan komunikasi (baud rate) standar.

  • pinMode(pin, OUTPUT);
    Menentukan apakah suatu pin akan digunakan untuk output (keluaran) atau input (masukan). Misalnya, untuk mengendalikan LED, pin harus diset sebagai OUTPUT.

  • digitalWrite(pin, HIGH);
    Digunakan untuk memberikan arus (menyalakan LED).

  • digitalWrite(pin, LOW);
    Digunakan untuk memutus arus (mematikan LED).

  • delay(1000);
    Menunda program selama 1000 milidetik atau 1 detik.

  • Serial.print() dan Serial.println()
    Digunakan untuk menampilkan teks ke Serial Monitor. println() akan langsung berpindah ke baris baru setelah teks ditampilkan.

 

3. DIGITALREAD



https://wokwi.com/projects/438597168089696257
  • digitalRead(pin);
    Digunakan untuk membaca nilai dari pin digital. Nilai yang dikembalikan hanya dua:

    • HIGH (1): Saat pin menerima tegangan, misalnya saat tombol ditekan.

    • LOW (0): Saat pin tidak menerima tegangan, misalnya saat tombol dilepas.

 

4. IF STATEMENT




https://wokwi.com/projects/438594110659356673

Kondisi IF:
Program akan memeriksa apakah kondisi di dalam tanda kurung () bernilai benar (true).

Contoh:

if (hasil_baca == 1)

Artinya, program akan mengecek apakah nilai hasil_baca sama dengan 1.
Jika benar (misalnya tombol sedang ditekan), maka program akan menjalankan perintah yang ada di dalam blok if.

Blok ELSE:
Jika kondisi di dalam if tidak benar (false), maka program akan melewati blok if dan langsung menjalankan perintah di blok else
 


5. OPERATOR AND (&&) DAN OR (||)



https://wokwi.com/projects/438688933604781057


  • AND (&&)
    Mengembalikan true hanya jika semua kondisi bernilai benar. Jika salah satu kondisi bernilai salah, maka hasilnya false.

  • OR (||)
    Mengembalikan true jika salah satu kondisi bernilai benar. Hasil akan false hanya jika semua kondisi bernilai salah.


6. Switch Case

Fungsi:

switch digunakan untuk membuat percabangan yang memiliki banyak pilihan kondisi, mirip seperti menu pilihan. Ketika nilai variabel sesuai dengan salah satu case, maka blok kode di dalamnya akan dijalankan. Biasanya digunakan bersama break untuk menghentikan eksekusi agar tidak lanjut ke case berikutnya.

Contoh kode sederhana:







7. For Loop dan While Loop






https://wokwi.com/projects/438960522294011905

For Loop:

Fungsi: Mengulang sebuah perintah dalam jumlah tertentu.

Kapan digunakan: Saat kita sudah tahu berapa kali pengulangan yang harus dilakukan.

Cara kerja: Mengulang dari nilai awal hingga nilai akhir dengan langkah tertentu.

Code:

const int ledM = 11; // Merah
const int ledK = 12; // Kuning
const int ledH = 10; // Hijau

void setup() {
  pinMode(ledM, OUTPUT);
  pinMode(ledK, OUTPUT);
  pinMode(ledH, OUTPUT);
}

void loop() {
  // Lampu merah 5 kali
  for (int i = 0; i < 5; i++) {
    digitalWrite(ledM, HIGH);
    delay(500);
    digitalWrite(ledM, LOW);
    delay(500);
  }

  // Lampu kuning 4 kali
  for (int i = 0; i < 4; i++) {
    digitalWrite(ledK, HIGH);
    delay(500);
    digitalWrite(ledK, LOW);
    delay(500);
  }

  // Lampu hijau 3 kali
  for (int i = 0; i < 3; i++) {
    digitalWrite(ledH, HIGH);
    delay(500);
    digitalWrite(ledH, LOW);
    delay(500);
  }
}

While Loop:

Fungsi: Mengulang perintah selama masih benar.

Kapan digunakan: Saat kita tidak tahu berapa kali pengulangan, tapi ingin terus mengulang selama kondisi terpenuhi.

Cara kerja: Mengecek kondisi dulu, jika benar, maka perintah di dalam loop dijalankan

Code:

const int ledM = 11; // Merah
const int ledK = 12; // Kuning
const int ledH = 10; // Hijau

void setup() {
  pinMode(ledM, OUTPUT);
  pinMode(ledK, OUTPUT);
  pinMode(ledH, OUTPUT);
}

void loop() {
  int count;

  // Lampu merah 5 kali
  count = 0;
  while (count < 5) {
    digitalWrite(ledM, HIGH);
    delay(500);
    digitalWrite(ledM, LOW);
    delay(500);
    count++;
  }

  // Lampu kuning 4 kali
  count = 0;
  while (count < 4) {
    digitalWrite(ledK, HIGH);
    delay(500);
    digitalWrite(ledK, LOW);
    delay(500);
    count++;
  }

  // Lampu hijau 3 kali
  count = 0;
  while (count < 3) {
    digitalWrite(ledH, HIGH);
    delay(500);
    digitalWrite(ledH, LOW);
    delay(500);
    count++;
  }
}

8.  FUNGSI




https://wokwi.com/projects/438960472179406849

manfaat dari fungsi: 

Membuat kode lebih rapi dan terstruktur

Fungsi 

memisahkan bagian-bagian kode sesuai tugasnya.
Menghindari pengulangan code

9. Library dan Servo





https://wokwi.com/projects/438960445979677697

library:

adalah kumpulan kode (fungsi, class, dan definisi) yang sudah dibuat sebelumnya untuk mempermudah kita membuat program. Dengan library, kita tidak perlu menulis ulang logika dasar — cukup memanggil fungsi yang disediakan.

Gambaran Umum:

Isi library: kumpulan perintah/fungsi siap pakai.
Tujuan: mempermudah dan mempercepat pembuatan program.
Cara pakai: biasanya dengan perintah #include <NamaLibrary.h> di awal program.
Sumber: bisa bawaan bahasa pemrograman atau diunduh dari luar.

Code:

#include <Servo.h>

Servo servo;

const int pbKiri = 3;
const int pbKanan = 2;

boolean hasilKiri = 0;
boolean hasilKanan = 0;
int sudut = 0;

void setup() {
  Serial.begin(9600);
  servo.attach(5);
  pinMode(pbKiri, INPUT);  
  pinMode(pbKanan, INPUT);
}

void loop() {
  hasilKiri = digitalRead(pbKiri);
  hasilKanan = digitalRead(pbKanan);

  if (hasilKiri == 1) {
    sudut++;
    if (sudut >= 180) {
      sudut = 180; // ← titik koma diperbaiki
    }
    servo.write(sudut);
  }

  if (hasilKanan == 1) {
    sudut--;
    if (sudut <= 0) { // ← dibatasi ke 0 derajat
      sudut = 0;     // ← titik koma diperbaiki
    }
    servo.write(sudut);
  }

  delay(100);
  Serial.println(sudut);
}

10.Potensio Meter



https://wokwi.com/projects/438960605115815937

Fungsi map() menggunakan matematika integer sehingga tidak akan menghasilkan pecahan, meskipun matematika mungkin menunjukkan bahwa ia seharusnya melakukannya. Sisa pecahan dipotong, dan tidak dibulatkan atau dirata-ratakan.


11.LCD Liquid Crystal 



https://wokwi.com/projects/439141422503946241

Mengupload data dari soucre code ke lcd dan potensiometer sebagai input untuk mengatur kecerahan laayar pada lcd

12. Array 




https://wokwi.com/projects/438730161464096769

Array adalah kumpulan variabel yang memiliki tipe data yang sama dan disimpan dalam satu nama.

Dengan array, kamu bisa menyimpan banyak nilai tanpa perlu membuat banyak variabel satu per satu.


13. LDR



https://wokwi.com/projects/438759724743179265

Fungsi: 

LDR adalah sensor yang resistansinya berubah seiring dengan perubahan intensitas cahaya yang diterimanya. Semakin terang cahaya, semakin rendah resistansinya.

Pemrograman Dasar: Mempelajari cara menulis kode untuk membaca nilai dari sensor LDR menggunakan Arduino.

Pengolahan Sinyal Analog: Menggunakan fungsi analogRead() untuk membaca nilai dari pin analog dan mengolahnya.

Kontrol Perangkat: Menggunakan pembacaan LDR untuk mengontrol perangkat lain seperti LED atau relay.

Code:

const int ldr = A0;    // Sensor LDR terhubung ke pin analog A0
const int led = 12;    // LED terhubung ke pin digital 12
int hasilBaca;         // Variabel untuk menyimpan nilai pembacaan sensor

void setup() {
  Serial.begin(9600);  // Memulai komunikasi serial dengan baud rate 9600
  pinMode(ldr, INPUT); // Mengatur pin A0 sebagai input (optional, karena analogRead sudah default input)
  pinMode(led, OUTPUT);// Mengatur pin 12 sebagai output untuk LED
}

void loop() {
  hasilBaca = analogRead(ldr);       // Membaca nilai analog dari LDR (0-1023)
  Serial.println(hasilBaca);         // Mengirim nilai pembacaan ke serial monitor untuk dilihat
  delay(100);                        // Menunggu 100 ms sebelum pembacaan berikutnya

  if (hasilBaca <= 100) {            // Jika nilai LDR kecil (cahaya redup)
    digitalWrite(led, HIGH);         // Nyalakan LED
  } else {
    digitalWrite(led, LOW);          // Matikan LED jika cahaya cukup terang
  }
}

14. Keypad



https://wokwi.com/projects/438761427756504065


Cara Kerja Pembacaan Keypad:

Arduino mengatur setiap baris secara bergantian sebagai LOW sementara baris lain tetap HIGH. Kemudian memeriksa kolom mana yang juga LOW, yang berarti tombol di posisi baris-kolom itu ditekan. Library Keypad memudahkan proses ini dengan fungsi getKey() yang mengembalikan karakter tombol yang ditekan.

Code:

#include <Keypad.h>

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad
const int led=10;
//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

void setup(){
  Serial.begin(9600);
  pinMode(led,OUTPUT);
}
 
void loop(){
  char customKey = customKeypad.getKey();
 
  switch(customKey){
  case '1':
    kedip(1);
    break;
  case '2':
    kedip(2);
    break;
  case '3':
    kedip(3);
    break;
  case '4':
    kedip(4);
    break;
  case '5':
    kedip(5);
    break;
  case '6':
    kedip(7);
    break;
  case '8':
    kedip(8);
    break;
  case '9':
    kedip(9);
    break;        // Jangan lupa break di sini juga
  default:
    //kedip(5);
    break;
}
}

void kedip(int jumlah){
  for(int i=1; i<=jumlah; i++){
    digitalWrite(led,HIGH);
    delay(500);
    digitalWrite(led,LOW);
    delay(500);
  }
}



15.  Copy Right

Vidio 15 Terkena Copy Right Sehingga di Upload di Vidio 16

16. Menggunakan Serial Monitor 



https://wokwi.com/projects/438766472815512577

Interval: 

Interval adalah jangka waktu yang kita tentukan untuk menjalankan suatu aksi secara berkala.
Misalnya, interval 1000 ms berarti aksi tersebut dijalankan setiap 1 detik.

millis:

Fungsi bawaan Arduino yang mengembalikan waktu dalam satuan milidetik (ms) sejak Arduino mulai menyala.

Cara kerja gabungan millis() dan interval: 

Simpan waktu aksi terakhir dilakukan ke dalam variabel, misalnya waktuSebelum.
Bandingkan waktu saat ini (millis()) dengan waktu sebelumnya (waktuSebelum).
Jika selisih waktu lebih besar atau sama dengan interval, jalankan aksi yang diinginkan.
Setelah itu, perbarui nilai waktuSebelum dengan waktu saat ini untuk memulai penghitungan interval berikutnya.

Code:

unsigned long waktuSebelum1 = 0;
unsigned long waktuSebelum2 = 0;
bool statusLed1 = LOW;
bool statusLed2 = LOW;

const int led1 = 12;
const int led2 = 11;

unsigned long intervalSerial = 1000;
unsigned long waktuSebelumSerial = 0;

void setup() {
  Serial.begin(9600);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
}

void loop() {
  unsigned long waktuSekarang = millis();

  // Kontrol LED1 (interval 1000 ms)
  if (waktuSekarang - waktuSebelum1 >= 1000) {
    statusLed1 = !statusLed1;
    digitalWrite(led1, statusLed1);
    waktuSebelum1 = waktuSekarang;
  }

  // Kontrol LED2 (interval 1000 ms)
  if (waktuSekarang - waktuSebelum2 >=1000) {
    statusLed2 = !statusLed2;
    digitalWrite(led2, statusLed2);
    waktuSebelum2 = waktuSekarang;
  }

  // Output serial setiap 1000 ms
  if (waktuSekarang - waktuSebelumSerial >= intervalSerial) {
    Serial.print("LED1 status: ");
    Serial.println(statusLed1 ? "ON" : "OFF");

    Serial.print("LED2 status: ");
    Serial.println(statusLed2 ? "ON" : "OFF");

    Serial.print("Millis: ");
    Serial.println(waktuSekarang);
    Serial.println();

    waktuSebelumSerial = waktuSekarang;
  }
}

17. Mengendalikan Arus AC dengan Arus DC Menggunakan Relay

Wiring:



  • Blok 1: Menghubungkan Arduino Nano ke relay (kabel sinyal dan ground).

  • Blok 2: Jalur arus listrik AC ke peralatan seperti lampu.

Saran:

  1. Gunakan pin tengah dan kanan pada relay karena itu merupakan koneksi NO (Normally Open), yaitu kondisi awalnya terbuka dan hanya tertutup saat relay aktif.


             2. Gunakan perintah LOW untuk menyalakan lampu 



(tidak ada bukti praktek karena tidak ada listrik AC😅)





18. Mengendalikan Arus AC dengan Arus DC Menggunakan Relay dan Sensor Suara

Cara kerja: 

ketika sensor suara mendeteksi suara, maka lampu akan menyala

Wiring: 



code: 

const int suara=A0;
int bacaSuara
const int relay=5;
bool on-LOW;
bool off-HIGH;
int batas=200
void setup() {
Serial.begin (9600);
pinMode (suara, INPUT);
pinMode (relay, OUTPUT);
}
void loop() {
bacaSuara=analogRead(suara);
Serial.println(bacaSuara);
if (bacaSuara>=batas) {
  digitalWrite(relay, on);
  delay(1000);
}else{
  digitalWrite(relay, off);
}

}

(tidak ada bukti praktek karena tidak ada listrik AC😅)

19. EEPROM


https://wokwi.com/projects/438794049126325249

EEPROM (Electrically Erasable Programmable Read-Only Memory) adalah jenis memori non-volatile, yang berarti data di dalamnya tidak hilang meskipun perangkat dimatikan.


20. Sensor Ultrasonik

1. Fungsi & Cara Kerja: 

Sensor ultrasonik berfungsi untuk mengukur jarak antara sensor dengan objek yang ada di depannya. Cara kerjanya adalah dengan mengirimkan gelombang ultrasonik, lalu mendeteksi pantulan gelombang tersebut dari objek. 

2. Wiring & Code:



https://wokwi.com/projects/438780521352727553


#include<NewPing.h>
NewPing sensor (10,11,30);
const int Led = 9;
int jarak;
void setup() {
Serial.begin(9600);
pinMode(Led, OUTPUT);
delay(50);
}
void loop() {
jarak-sensor.ping_cm();
if (jarak<=5) {
   digitalWrite(Led, HIGH);
   delay(100);
   digitalWrite(Led, LOW);
   delay(100);
}else{
  digitalWrite(Led, HIGH);
   delay(500);
   digitalWrite(Led, LOW);
   delay(500);
}
Serial.println(jarak);
delay(1000);
}

21. Security System Berbasis EEPROM



Di vidio ini mengajarkan kita cara membuat sistem keamanan berbasis EEPROM.
(tidak ada bukti praktek karena harus nyambung listrik AC 😅)

22. RTC



1. Fungsi:

Fungsi RTC adalah untuk menjaga waktu tetap berjalan dengan stabil dan akurat, meskipun sistem utama (seperti mikrokontroler atau komputer) sedang mati atau di-restart.

2. Code

Test code:

#include <DS3231.h>
DS3231 rtc(SDA, SCL);
const int relay=A3;
bool on LOW;
bool off-HIGH;
String hari;
String waktu;
String tanggal;

void setup() {
  rtc.begin();
  Serial.begin(9600);
  pinMode (relay, OUTPUT);
  digitalWrite(relay, off);
  rtc.setDOW();// settingan hari per minggu
  rtc.setTIME();//settingan waktu
  rtc.set.Date();// settingan tanggal
}

void loop() {
  hari-rtc.getDOWStr();
  waktu-rtc.getTimeStr();
  tanggal=rtc.getDateStr();
 
  Serial.print(hari);
  Serial.print(", ");
  Serial.print(waktu);
  Serial.print(", ");
  Serial.println(tanggal);
  delay(1000);
}

(sebelum masuk ke void loop upload terlebih dahulu, setelah upload ubah code di bawah ini menjadi komen dengan menggunakan perintah (//) supaya setting waktunya tidak mengulang terus waktu perangkat menyala karena perintahnya sudah menjadi mode auto).
rtc.setDOW();// settingan hari per minggu
  rtc.setTIME();//settingan waktu
  rtc.set.Date();// settingan tanggal

Final Code:

#include <DS3231.h>
DS3231 rtc(SDA, SCL);
const int relay=A3;
bool on LOW;
bool off-HIGH;
String hari;
String waktu;
String tanggal;

void setup() {
  rtc.begin();
  Serial.begin(9600);
  pinMode (relay, OUTPUT);
  digitalWrite(relay, off);
  //rtc.setDOW();// settingan hari per minggu
  //rtc.setTIME();//settingan waktu
  //rtc.set.Date();// settingan tanggal
}

void loop() {
  hari-rtc.getDOWStr();
  waktu-rtc.getTimeStr();
  tanggal-rtc.getDateStr();
  Serial.println(waktu);
  if (waktu=="14:25:00") {
     digitalWrite(relay,on);
    delay (2000);
    digitalWrite(relay, off);
 }
 delay(1000);
}

(tidak ada bukti praktek karena tidak ada listrik AC😅)

23. Interrupt





https://wokwi.com/projects/438773409183971329

Pengertian:

Interrupt adalah mekanisme pada sistem mikroprosesor atau mikrokontroler yang memungkinkan kita untuk menjalankan fungsi tanpa memperdulikan jika ada fungsi lain yang sedang berjalan 

Code:

#include<TimerOne.h>

const int merah=12, hijau=11, pb=2;

void setup() {
  pinMode(pb,INPUT);
  pinMode(merah,OUTPUT);
  pinMode(hijau,OUTPUT);
  Timer1.initialize(10000);
  Timer1.attachInterrupt(blinkMerah);
}

void loop() {
  for(int i=1; i<=5; i++){
    digitalWrite(hijau,HIGH);
    delay(1000);
    digitalWrite(hijau,LOW);
    delay(1000);
  }
}

void blinkMerah(){
  if(digitalRead(pb)==HIGH){
    digitalWrite(merah,HIGH);
  }else{
    digitalWrite(merah,LOW);
  }
}


24. PWM

https://wokwi.com/projects/438960605115815937

Pengertian: 

PWM (Pulse Width Modulation) memungkinkan kita untuk menggunakan tegangan 0-5 V seperti mengontrol redup cerahnya lampu sesuai keinginan kita.

25. Jam Digital





https://wokwi.com/projects/438972440350246913

Di vidio tersebut mengajari kita cara membuat Jam Digital menggunaka Arduino Nano yang bisa menunjukan waktu, tanggal, dan juga hari secara real time.

Code

#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal.h>

// Inisialisasi LCD (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

// Inisialisasi RTC DS1307
RTC_DS1307 rtc;

void setup() {
  lcd.begin(16, 2);
  Serial.begin(9600);

  if (!rtc.begin()) {
    lcd.print("RTC Tdk Ditemukan");
    while (1); // Berhenti di sini kalau tidak terdeteksi
  }

  if (!rtc.isrunning()) {
    lcd.clear();
    lcd.print("Set Waktu RTC...");
    // Set waktu RTC ke waktu saat upload
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
}

void loop() {
  DateTime now = rtc.now(); // Baca waktu sekarang

  // Format hari
  String hari[] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"};
  String namaHari = hari[now.dayOfTheWeek()];

  // Tampilkan di LCD
  lcd.setCursor(0, 0);
  lcd.print(namaHari);
  lcd.setCursor(7, 0);
  lcd.print(now.day());
  lcd.print('/');
  lcd.print(now.month());
  lcd.print('/');
  lcd.print(now.year());

  lcd.setCursor(4, 1);
  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());

  delay(1000); // Update setiap 1 detik
}

26. Runing Text

https://wokwi.com/projects/439336074512580609

Runing Text adalah system yang biasa kita lihat di pasar elektronik, yang dimana text yang ditampilkan di layar akan bergeser sesuai arah yang ditentukan dan akan kembali lagi seperti semula. 

27. Cara menggunakan LCD I2C

https://wokwi.com/projects/439336074512580609

Di vidio ini cuma ngejelasin cara menggunakan LCD I2C sebagai output buat nilai potensiometer. 

28. DHT 11


https://wokwi.com/projects/439678394489479169

Pengertian:

DHT 11 adalah sensor yang berfungsi sebagai pengukur suhu dan bisa mempermudah kita untuk mengetahui suhu dalam suatu ruangan.

Code:

#include <LiquidCrystal.h>
#include "DHT.h"

// Konfigurasi pin DHT22 (Arduino Nano)
#define DHTPIN 7
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

// Konfigurasi LCD 16x2 untuk Arduino Nano
// RS = 10, E = 9, D4 = 5, D5 = 4, D6 = 3, D7 = 2
LiquidCrystal lcd(10, 9, 5, 4, 3, 2);

// Variabel pembacaan real-time
unsigned long lastReadTime = 0;
const unsigned long readInterval = 2000; // 2 detik sesuai spesifikasi DHT22

float suhu = 0;
float kelembaban = 0;

void setup() {
  lcd.begin(16, 2);
  dht.begin();

  lcd.print("DHT22 Sensor");
  delay(2000);
  lcd.clear();

  Serial.begin(9600); // Biar bisa pantau juga di Serial Monitor
}

void loop() {
  unsigned long currentMillis = millis();

  // Baca data DHT22 setiap 2 detik
  if (currentMillis - lastReadTime >= readInterval) {
    lastReadTime = currentMillis;

    float newKelembaban = dht.readHumidity();
    float newSuhu = dht.readTemperature();

    if (!isnan(newKelembaban) && !isnan(newSuhu)) {
      kelembaban = newKelembaban;
      suhu = newSuhu;
    }

    // Kirim ke Serial Monitor
    Serial.print("Suhu: ");
    Serial.print(suhu);
    Serial.print(" C | Kelembaban: ");
    Serial.print(kelembaban);
    Serial.println(" %");
  }

  // Tampilkan di LCD setiap loop
  lcd.setCursor(0, 0);
  lcd.print("Suhu: ");
  lcd.print(suhu, 1);
  lcd.print((char)223);
  lcd.print("C ");

  lcd.setCursor(0, 1);
  lcd.print("Lembab: ");
  lcd.print(kelembaban, 1);
  lcd.print("%  ");
}

29. IR Remote

https://wokwi.com/projects/439680049415421953

Pengertian:

Infra Red Remote (IR Remote) adalah alat pengendali jarak jauh yang bekerja menggunakan cahaya inframerah, yaitu cahaya tak terlihat oleh mata manusia tapi bisa ditangkap sensor. Saat tombol ditekan, LED inframerah pada remote memancarkan sinyal berupa digital code. Code ini diterima sensor IR pada perangkat, lalu diterjemahkan menjadi perintah, misalnya menyalakan TV, mengatur volume, atau mengganti channel.

Code:

#include <IRremote.h>

const int pinIR = 11;   // Pin data IR receiver
const int led = 6;      // Pin LED

void setup() {
  Serial.begin(9600);
  IrReceiver.begin(pinIR, ENABLE_LED_FEEDBACK); // Mulai IR receiver
  pinMode(led, OUTPUT);
}

void loop() {
  if (IrReceiver.decode()) {
    // Tampilkan kode tombol di Serial Monitor
    Serial.print("Kode IR: 0x");
    Serial.println(IrReceiver.decodedIRData.command, HEX);

    // Nyalakan LED setiap tombol ditekan
    digitalWrite(led, HIGH);
    delay(1000);
    digitalWrite(led, LOW);

    IrReceiver.resume(); // Siap baca data berikutnya
  }
}
















































































Komentar

Postingan populer dari blog ini

Desain PCB Menggunakan EasyEDA

Cara kerja PZEM beserta fungsinya