MODUL PRAKTIKUM
Pengukuran Ketinggian dan Volume Air dalam Suatu Wadah Menggunakan ESP32,
Sensor Ultrasonik, dan LCD I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Ultrasonic.h>
Ultrasonic ultrasonic(4, 5); // Trig, Echo
LiquidCrystal_I2C lcd(0x27, 16, 2); // Ganti alamat jika perlu
const float tinggi_wadah = 30.0;
// cm const float luas_alas =
100.0; // cm2 float
ketinggian_air, volume_air;
void setup() {
[Link](); // pastikan
inisialisasi I2C [Link](); //
inisialisasi LCD [Link](); //
nyalakan backlight
[Link](115200); // debug serial
}
void loop() {
float jarak = [Link]();
ketinggian_air = tinggi_wadah - jarak;
if (ketinggian_air < 0) ketinggian_air = 0;
volume_air = luas_alas * ketinggian_air;
[Link]();
[Link](0, 0);
[Link]("H: ");
[Link](ketinggian_air,
1); [Link](" cm");
[Link](0, 1);
[Link]("V: ");
[Link](volume_air,
0); [Link](" cm3");
delay(1000);
}
Modul
Pengukuran Suhu dan Kelembaban Udara Menggunakan ESP32 dan Sensor DHT dengan
Tampilan LCD 16x2
#include <Insights.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT11 // ganti ke DHT22 jika pakai DHT22
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16,
2);
void setup() {
[Link]();
[Link]();
[Link]();
[Link](0,0
);
[Link]("Monitoring");
[Link](0,1);
[Link]("Suhu &
Lembab"); delay(500);
[Link]();
}
void loop() {
float temp = [Link]();
float hum = [Link]();
[Link](0,0)
; [Link]("Suhu:
");
[Link](temp);
[Link]((char)223); // simbol
derajat [Link]("C");
[Link](0,1);
[Link]("Lembab:
"); [Link](hum);
[Link]("%");
delay(500);
}
MODUL PRAKTIKUM
PENGUKURAN TINGKAT PENCEMARAN UDARA MENGGUNAKAN ESP32 DAN SENSOR MQ-135
DENGAN HASIL PADA LCD/OLED I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <MQUnifiedsensor.h>
#define Board "ESP32"
#define Voltage_Resolution 3.3
#define ADC_Bit_Resolution 12
#define pinMQ135 34
#define RatioMQ135CleanAir 3.6
LiquidCrystal_I2C lcd(0x27, 16, 2);
MQUnifiedsensor MQ135(Board, Voltage_Resolution, ADC_Bit_Resolution, pinMQ135,
"MQ-135");
void setup() {
[Link](115200
); [Link]();
[Link]();
[Link](1); // 1:
Exponential [Link](110.47);
[Link](-2.862); [Link]();
[Link](10
);
MQ135.setR0(10
);
if (isinf(MQ135.getR0()))
{ [Link]("Sensor
Error"); while (1);
}
delay(2000);
[Link]();
}
void loop() {
[Link](); // update ADC
float ppm = [Link](true); // hitung PPM & tampilkan di Serial
[Link](0,
0);
[Link]("PPM:
"); [Link](ppm,
1);
[Link](0, 1);
if (ppm < 400) [Link]("Status: Baik ");
else if (ppm < 800) [Link]("Status: Sedang ");
else [Link]("Status: Tercemar");
delay(1000);
}
Modul
Penerapan Sensor RFID untuk Sistem Buka Tutup Gerbang menggunakan ESP32 dan
LCD (16x2)
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
#include <SPI.h>
#include <MFRC522.h>
// PIN DEFINISI
#define SS_PIN 5 // misalnya GPIO5 untuk RFID SS
#define RST_PIN 4 // misalnya GPIO4 untuk RST
#define SERVO_PIN 25
// OBJEK
MFRC522 mfrc522(SS_PIN,
RST_PIN); LiquidCrystal_I2C
lcd(0x27, 16, 2); Servo gerbang;
// UID kartu yang
diizinkan byte
kartuDikenal[][4] = {
{0xCA, 0x32, 0x96, 0x82}, // kartu 1
{0xE3, 0x45, 0xBD, 0xF4} // kartu 2
};
const byte jumlahKartu = sizeof(kartuDikenal) / sizeof(kartuDikenal[0]);
bool kartuSebelumnya = false;
void setup() {
[Link](115200
);
// LCD
[Link](21, 22); // SDA, SCL
[Link]();
[Link]();
[Link](0, 0);
[Link]("Sistem
Gerbang");
[Link](0, 1);
[Link]("RFID
Siap..."); delay(2000);
[Link]();
// RFID
[Link](); // SCK=18, MISO=19, MOSI=23 (default ESP32)
mfrc522.PCD_Init();
// Servo
[Link](SERVO_PI
N);
[Link](0); // posisi awal: tertutup
[Link](0, 0);
[Link]("Tempelkan Kartu");
}
bool cocokUID(byte *uid, byte size) {
for (byte i = 0; i < jumlahKartu; i++) {
bool cocok = true;
for (byte j = 0; j < size; j++) {
if (uid[j] != kartuDikenal[i][j]) {
cocok = false;
break;
}
Modul
}
if (cocok) return true;
}
return false;
}
void loop() {
if (!mfrc522.PICC_IsNewCardPresent()) {
if (!kartuSebelumnya) {
[Link](0, 0);
[Link]("Tempelkan Kartu
");
}
return;
}
if (!mfrc522.PICC_ReadCardSerial()) return;
kartuSebelumnya = true;
// Tampilkan UID di Serial Monitor
[Link]("UID Terdeteksi: ");
for (byte i = 0; i < [Link]; i+
+) {
[Link]([Link][i],
HEX);
[Link]("
");
}
[Link](
);
bool akses = cocokUID([Link], [Link]);
[Link]();
if (akses) {
[Link](0, 0);
[Link]("ACCESS
GRANTED");
[Link](0, 1);
[Link]("Gerbang
Terbuka");
[Link](90);
delay(3000);
[Link](0);
[Link]();
[Link](0,
0);
[Link]("Gerbang Tertutup");
delay(2000);
} else { [Link](0,
0); [Link]("ACCESS
DENIED"); [Link](0,
1); [Link]("Kartu tidak
sah");
[Link]("Akses ditolak - UID tidak dikenal");
delay(2000);
}
[Link]();
[Link](0, 0);
[Link]("Tempelkan
Kartu");
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
while (mfrc522.PICC_IsNewCardPresent() || mfrc522.PICC_ReadCardSerial()) {
delay(100);
}
kartuSebelumnya = false;
}
Modul
Pengukuran Kadar Vitamin C dalam Buah Menggunakan ESP32, Sensor Warna
TCS34725, dan LCD 16x2 I2C
#include <Wire.h>
#include "Adafruit_TCS34725.h"
#include <LiquidCrystal_I2C.h>
// Inisialisasi sensor TCS34725
Adafruit_TCS34725 tcs =
Adafruit_TCS34725( TCS34725_INTEGRAT
IONTIME_50MS, TCS34725_GAIN_4X
);
// Inisialisasi LCD
LiquidCrystal_I2C lcd(0x27, 16,
2);
// Nilai referensi kalibrasi (didapat dari pengukuran manual)
const uint16_t r_black = 19, g_black = 17, b_black = 25; // hasil uji permukaan
hitam const uint16_t r_white = 125, g_white = 100, b_white = 100; // isi sesuai
hasil uji kertas putih
void setup() {
[Link](115200
);
if ([Link]()) {
[Link]("Sensor TCS34725 ditemukan.");
} else {
[Link]("Sensor tidak ditemukan!");
while (1); // berhenti di sini jika sensor tidak ditemukan
}
[Link](false); // nyalakan LED (jika tersedia)
[Link]();
[Link]();
[Link](0, 0);
[Link]("Vitamin C
Test"); delay(2000);
[Link]();
}
void loop() {
uint16_t r_raw, g_raw, b_raw, c;
[Link](&r_raw, &g_raw, &b_raw, &c);
// Kalibrasi ke skala 0-255 berdasarkan referensi putih dan
hitam float r = calibrateChannel(r_raw, r_black, r_white);
float g = calibrateChannel(g_raw, g_black, g_white);
float b = calibrateChannel(b_raw, b_black, b_white);
// Estimasi kadar Vitamin C (ubah sesuai data kalibrasi Anda)
float vitaminC = estimateVitaminC(r, g, b);
// Tampilkan di serial monitor
[Link]("RGB: ");
[Link]((int)r); [Link](",
"); [Link]((int)g);
[Link](", ");
[Link]((int)b);
[Link](" --> Vit C:
"); [Link](vitaminC,
2); [Link]("
mg/100g");
Modul
// Tampilkan di LCD
[Link]();
[Link](0, 0);
[Link]("VitC:");
[Link](vitaminC,
1);
[Link]("mg/100g");
[Link](0,
1);
[Link]("R:");
[Link]((int)r);
[Link](" G:");
[Link]((int)g);
[Link](" B:");
[Link]((int)b);
delay(3000);
}
// Fungsi kalibrasi saluran warna
float calibrateChannel(uint16_t value, uint16_t blackRef, uint16_t whiteRef)
{
float result = ((float)(value - blackRef) / (whiteRef - blackRef)) *
255.0;
return constrain(result, 0, 255);
}
// Fungsi estimasi kadar vitamin C (ubah sesuai kurva kalibrasi)
float estimateVitaminC(float r, float g, float b) {
// Rumus contoh — ganti sesuai regresi dari uji Anda
return (0.015 * r + 0.045 * g + 0.01 * b + 2.0);
}