//Nama : Ardho Wahyu Damara
//NPM : 203510530
//Kelas : 7 E Pratikum Internet of Things
//ALARM PENCURIAN
//project IoT menggunakan ESP32 dan sensor HC-SR04 Ultrasonic
//define variabel
#define trigerPin 12 //define merupakan pemrograman mikrokontroler untuk memberi nama dan label pada pin program
#define echoPin 13 //trigerPin dan echoPin mungkin digunakan untuk mengontrol sensor ultrasonik
#define ledPin 14 //ledPin untuk mengontrol LED
#define speakerPin 15 //speakerPin untuk mengontrol speaker
#define pitch 262 //pitch kemungkinan besar digunakan untuk mengatur frekuensi suara
#define CM_TO_INCH 0.393701 //CM_TO_INCH digunakan untuk konversi dari sentimeter ke inci
long duration; //Variabel untuk menyimpan durasi waktu dari sinyal ultrasonik
float distance; //Variabel untuk menyimpan jarak dalam satuan sentimeter
float distanceInch; //Variabel untuk menyimpan jarak dalam satuan inci
//menghubungkan ke wifi
#include <WiFi.h>
// perintah untuk menyertakan (include) pustaka (library) WiFi pada program Arduino
const char* ssid = "Wokwi-GUEST"; //mendefinikan kata sandi WiFi
const char* pass = ""; //perangkat menggunakan informasi ini untuk autentikasi
WiFiClient alfa; //alfa dari kelas WiFiClient untuk mengelola koneksi ke server atau perangkat lain melalui protokol TCP/IP
//memakai library thingspeak
#include <ThingSpeak.h>
//fungsi yang diperlukan untuk berkomunikasi dengan platform ThingSpeak
unsigned long ChannelID = 1764305; //ChannelID adalah ID unik untuk channel ThingSpeak yang akan digunakan
const char * WriteAPI = "N9COFJE0GM8S8ZBD"; //WriteAPI adalah Write API Key, yang digunakan untuk memberikan izin kepada perangkat Arduino untuk mengirimkan data ke channel
void setup() { //setup() adalah bagian dari program Arduino yang dijalankan
//setup untuk sensor
Serial.begin(115200); //Serial.begin() digunakan untuk mengatur dan memulai koneksi serial antara Arduino dan komputer atau perangkat
pinMode(trigerPin, OUTPUT); //trigerPin diatur sebagai OUTPUT yang berarti akan digunakan untuk mengirim sinyal ultrasonik pada sensor jarak
pinMode(echoPin, INPUT); //echoPin diatur sebagai INPUT, yang berarti akan digunakan untuk membaca sinyal yang dikembalikan oleh sensor ultrasonik setelah mengenai objek
//setup untuk led
pinMode(ledPin, OUTPUT); //ledPin dikonfigurasi sebagai OUTPUT
//setup untuk speaker
pinMode(speakerPin, OUTPUT);
//speakerPin dikonfigurasi sebagai OUTPUT. Ini menandakan bahwa pin tersebut akan digunakan untuk mengontrol speaker, dan Arduino
//scan WiFi
Serial.println("Scan WiFi..."); //digunakan untuk mencetak pesan ke Serial Monitor
int networks = WiFi.scanNetworks(); //melakukan pemindaian jaringan WiFi di sekitarnya dan menyimpan jumlah jaringan
if(networks == 0){ //Jika tidak ada jaringan WiFi yang ditemukan, pesan "No WiFi Networks
Serial.println("No WiFi Networks!");
}
else{
Serial.print(networks);
Serial.println("Networks Found!");
for(int i = 0; i < networks; i++)
Serial.println(WiFi.SSID());
delay(10);
}
//menyambungkan ke wifi
WiFi.begin(ssid, pass); //koneksi WiFi menggunakan nama jaringan (ssid) dan kata sandi (pass) yang telah didefinisikan sebelumnya
while (WiFi.status() != WL_CONNECTED){ //while ang akan terus berjalan selama status koneksi WiFi
delay(100); //WL_CONNECTED Dalam setiap iterasi loop, program akan memberikan jeda 100 milidetik
Serial.println("."); //delay(100)) dan mencetak titik (".") ke Serial Monitor
}
Serial.println("WiFi Connected!"); //Setelah loop selesai (artinya, koneksi WiFi berhasil)
Serial.println(WiFi.localIP()); //Baris ini mencetak alamat IP lokal yang diberikan kepada perangkat oleh router atau server DHCP
//memulai program thingspeak
ThingSpeak.begin(alfa);
//digunakan sebagai parameter untuk inisialisasi koneksi
}
void loop() {
//looping sensor (membuat sensor wave)
digitalWrite(trigerPin, LOW); //ke LOW (rendah) untuk memastikan tidak ada sinyal ultrasonik yang sedang dikirim
delayMicroseconds(2);
digitalWrite(trigerPin, HIGH); //mengatur HIGH (tinggi) selama 10 mikrodetik untuk mengirimkan pulsa ultrasonik.
delayMicroseconds(10);
digitalWrite(trigerPin, LOW); //embali ke LOW untuk menghentikan pengiriman pulsa.
//membuat durasi
duration = pulseIn(echoPin, HIGH); //menunjukkan bahwa kita ingin mengukur durasi pulsa ketika sinyal di echoPin menjadi tinggi
//mengkalkulasi jarak
distance = (duration/2) * 0.0343; //menghitung jarak berdasarkan durasi pulsa yang diukur.
// Convert to inches
distanceInch = distance * CM_TO_INCH;
//concider max width of the door = 200 cm
if(distance>10){ //distance) lebih besar dari 10 sentimeter, LED yang dihubungkan ke ledPin
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(100); //Jika jarak kurang dari atau sama dengan 10 sentimeter, LED dimatikan.
}
else{
digitalWrite(ledPin, LOW);
}
int x = ThingSpeak.writeField (ChannelID, 1, distance, WriteAPI);
//digunakan untuk menulis data ke suatu field di channel ThingSpeak
//mengambil data dari thingspeak
if(distance>10){ //dilakukan pengecekan apakah nilai jarak (distance) lebih besar dari 10 sentimeter. Jika ya, maka ada pesan "WARNING!"
Serial.println("WARNING!");
Serial.println("distance(cm): " + String(distance));
} //String(distance) digunakan untuk mengonversi nilai distance (yang mungkin merupakan tipe data float) menjadi string agar bisa digabungkan dengan teks.
else{
Serial.println("AMAN");
} //else, jika nilai jarak tidak lebih dari 10 sentimeter, maka dicetak pesan "AMAN".
delay(2000);
} //(delay) selama 2 detik (2000 milidetik) sebelum program masuk kembali ke iterasi berikutnya dari fungsi loop()