Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions MenampilkanNilaiCarbonDioksidaMenggunakan_MQ-135/Connection.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
WiFiClient net;
CoreX corex;

void setupCorex() {
Serial.println("CoreX IoT https://corex.id");
Serial.println("Menghubungkan ke WiFi");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(1000);
}

Serial.println("\nTerhubung ke WiFi!");
Serial.print("Menghubungkan ke server");
while (!corex.connect()) {
Serial.print(".");
delay(1000);
}

Serial.println("\nTerhubung ke server!");
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
#include <CoreX.h>
#include <Arduino.h>
#include "Connection.h"
// Definisikan pin sensor MQ-135
const int MQ135_PIN = 36; // Pin VP pada ESP32 (GPIO 36)

// Konstanta untuk kalibrasi
const float RLOAD = 10.0; // Beban resistor dalam kohm
const float RZERO = 76.63; // Nilai resistansi pada 100 ppm CO2
const float PARA = 116.6020682; // Konstanta untuk perhitungan
const float PARB = 2.769034857; // Konstanta untuk perhitungan
// Fungsi untuk membaca nilai resistansi dari sensor
float readSensorResistance(int pin) {
int sensorValue = analogRead(pin);
Serial.print("Analog Value: ");
Serial.println(sensorValue);
float voltage = sensorValue * (3.3 / 4095.0);
float resistance = (3.3 - voltage) * RLOAD / voltage;
return resistance;
}
// Fungsi untuk menghitung konsentrasi CO2 dalam ppm
float calculatePPM(float resistance) {
float ratio = resistance / RZERO;
float ppm = PARA * pow(ratio, -PARB);
return ppm;
}
// Fungsi untuk menghitung nilai RZERO
float calculateRZero(float resistance) {
return resistance / pow((400.0 / PARA), (1.0 / -PARB)); // Misal 400 ppm CO2 di udara bersih
}
// Ubah nilai auth_token dan device anda.
const char* AUTH_TOKEN = "PGM8oemWd6gh8GA";
const char* DEVICE_ID = "RlcaGvevt";

CoreXTimer timer; // Gunakan timer agar dapat mengeksekusi perintah setiap sekian milidetik tanpa blocking.

// Ubah nilai berikut sesuai jaringan Anda.
const char ssid[] = "indihomeokeh";
const char pass[] = "sepakbola123";

void setup() {
Serial.begin(115200);
WiFi.begin(ssid, pass);
corex.begin(net);
analogReadResolution(12); // Set resolusi ADC ke 12 bit (0-4095)
// Kalibrasi manual, tempatkan sensor di lingkungan yang diketahui memiliki CO2 rendah
float resistance = readSensorResistance(MQ135_PIN);
float RZERO = calculateRZero(resistance);
timer.setInterval(1000, send); // Lakukan send setiap 1000 milidetik.

setupCorex();
}

void loop() {
timer.run();
delay(10);

// Periksa apakah perangkat masih terhubung.
if (!corex.connected()) {
setupCorex();
}
}

void send() {
float resistance = readSensorResistance(MQ135_PIN);

// Validasi hasil resistance
if (resistance <= 0) {
Serial.println("Invalid resistance value. Check sensor connection.");
return;
}

float ppm = calculatePPM(resistance);

// Validasi hasil ppm
if (ppm < 0 || ppm > 1000) { // Biasanya, ppm di bawah 1.000 adalah batas wajar
Serial.println("Invalid CO2 concentration. Check calibration.");
} else {
Serial.print(" kohms, CO2 Concentration: ");
Serial.print(ppm);
Serial.println(" ppm");
}
delay(2000); // Tunggu 2 detik sebelum pembacaan berikutnya
corex.send("TugasAkhirMebs", ppm);
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.