#include <WiFi.h> //library wifi
//pin configuration
// menentukan pin untuk sensor, led, dan Buzzer
#define trigerPin 12
#define echoPin 13
#define buzzerPin 14
//constants
// menentukan frekuensi nada dan konversi dari cm ke inc
#define pitch 262
#define CM_TO_INCH 0.393701
//variable
//deklarasi variable untuk menyimpan data durasi, jarak dalam sentimeter dan jarak dalam inch
long duration;
float distance;
float distanceInch;
//koneksi WiFi
const char* ssid = "Wokwi-GUEST";
const char* pass = "";
WiFiClient client;
// konfigurasi ubidots
const char* ubidotsToken = "BBUS-66Em7KwRiH54BSoZJYJf4Ge4Obr0UX";
const char* ubidotsHost = "industrial.api.ubidots.com";
const char* ubidotsPath = "/api/v1.6/devices/wokwi";
//
void setup() {
// Setup for sensor
Serial.begin(115200);
pinMode(trigerPin, OUTPUT);
pinMode(echoPin, INPUT);
// Setup for Buzzer
pinMode(buzzerPin, OUTPUT);
// Scan WiFi
Serial.println("Scan WiFi...");
int networks = WiFi.scanNetworks();
if(networks == 0){
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);
}
// Connect to WiFi
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED){
delay(100);
Serial.println(".");
}
Serial.println("WiFi Connected!");
Serial.println(WiFi.localIP());
}
void loop() {
// Looping sensor (creating a wave sensor)
digitalWrite(trigerPin, LOW);
delayMicroseconds(2);
digitalWrite(trigerPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigerPin, LOW);
// Creating duration
duration = pulseIn(echoPin, HIGH);
// Calculating distance
distance = (duration/2) * 0.0343;
// Convert to inches
distanceInch = distance * CM_TO_INCH;
// Consider max width of the door = 200 cm
if(distance < 10){
tone(buzzerPin, pitch); // Aktifkan bunyi buzzer
delay(1000);
noTone(buzzerPin); // Matikan bunyi buzzer
delay(100);
}
// Print data to Serial
if(distance < 10){
Serial.println("WARNING!");
Serial.println("distance(cm): " + String(distance));
// Send data to Ubidots
sendToUbidots(distance);
}
else{
Serial.println("AMAN");
}
delay(2000);
}
void sendToUbidots(float distanceValue) {
String postData = String("{\"value\":") + distanceValue + "}";
String headers = String("POST ") + ubidotsPath + " HTTP/1.1\r\n" +
"Host: " + ubidotsHost + "\r\n" +
"X-Auth-Token: " + ubidotsToken + "\r\n" +
"Content-Type: application/json\r\n" +
"Connection: close\r\n" +
"Content-Length: " + postData.length() + "\r\n\r\n";
client.connect(ubidotsHost, 80);
client.print(headers);
client.print(postData);
delay(100);
while(client.available()){
String line = client.readStringUntil('\r');
Serial.print(line);
}
client.stop();
}