0% menganggap dokumen ini bermanfaat (0 suara)
4 tayangan10 halaman

Pengukuran Ketinggian dan Volume Air

Dokumen ini berisi beberapa modul praktikum yang menggunakan ESP32 dan berbagai sensor untuk pengukuran, termasuk ketinggian dan volume air, suhu dan kelembaban, pencemaran udara, sistem buka tutup gerbang RFID, serta kadar vitamin C dalam buah. Setiap modul dilengkapi dengan kode pemrograman yang menunjukkan cara mengimplementasikan sensor dan menampilkan data pada LCD. Modul-modul ini memberikan panduan praktis untuk aplikasi IoT dan pengukuran lingkungan.

Diunggah oleh

Poetra Gadeng
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
4 tayangan10 halaman

Pengukuran Ketinggian dan Volume Air

Dokumen ini berisi beberapa modul praktikum yang menggunakan ESP32 dan berbagai sensor untuk pengukuran, termasuk ketinggian dan volume air, suhu dan kelembaban, pencemaran udara, sistem buka tutup gerbang RFID, serta kadar vitamin C dalam buah. Setiap modul dilengkapi dengan kode pemrograman yang menunjukkan cara mengimplementasikan sensor dan menampilkan data pada LCD. Modul-modul ini memberikan panduan praktis untuk aplikasi IoT dan pengukuran lingkungan.

Diunggah oleh

Poetra Gadeng
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd

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);
}

Anda mungkin juga menyukai