/* PIN OUT alat dan barang
* --- KIRI ---
* DHT = GPIO13 = 13
* LED DHT = GPIO12 = 12
* PIR = GPIO25 = 25
* LED PIR = GPIO33 = 33
* TRIG PIN = GPIO 14 = 14
* ECHO PIN = GPIO27 = 27
* LED ULTRASONIK = GPIO26 = 26
* --- KANAN ---
* BUZZER = GPIO15 = 15
* TOMBOL1 = GPIO16 = 16
* TOMBOL2 = GPIO17 = 17
* LED TOMBOL = GPIO5 = 5
* OLED = SDA (21) SCL(22)
*/
/* OLED DISPLAY */
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// inisialisasi OLED P x L
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
/*SENSOR DHT11 */
#include <DHT.h>
#define DHTPIN 13 // Pin yang digunakan untuk menghubungkan sensor DHT11
#define DHTTYPE DHT22 // Tipe sensor (DHT11 atau DHT22, sesuaikan)
/*SENSOR DHT11 */
DHT dht22(DHTPIN, DHTTYPE);
/*SENSOR PIR */
const int pirPin = 25;
/* led */
const int LED_DHT = 12;
const int LED_PIR = 33;
/* Ultrasonik */
//define sound speed in cm/uS ultrasonik
#define SOUND_SPEED 0.034
/* Ultrasonik */
const int trigPin = 14;
const int echoPin = 27;
// variabel jarak untuk sensor ultrasonik
long duration;
int distanceCm;
/* BUZZER*/
const int BUZZER_PIN = 15;
/*LED*/
const int LED_ULTRASONIK = 26;
/*PUSH BUTTON*/
const int buttonPin1 = 16; // Pin tombol 1
const int buttonPin2 = 17; // Pin tombol 2
const int ledPin = 19;
void setup() {
Serial.begin(9600);
// SENSOR DHT11
dht22.begin();
// SENSOR PIR
pinMode(pirPin, INPUT);
// LED OUTPUT
pinMode(LED_DHT, OUTPUT);
pinMode(LED_PIR, OUTPUT);
// SENSOR ULTRASONIK TRIG DAN ECHO
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
// BUZZER
pinMode(BUZZER_PIN, OUTPUT);
// LED
pinMode(LED_ULTRASONIK, OUTPUT);
// PUSH BUTTON
pinMode(buttonPin1, INPUT); // Mengatur tombol 1 sebagai input dengan resistor pull-up
pinMode(buttonPin2, INPUT); // Mengatur tombol 2 sebagai input dengan resistor pull-up
// LED
pinMode(ledPin, OUTPUT);
// OLED DISPLAY
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); }
delay(500);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
}
void loop() {
/*PUSH BUTTON*/;
if (digitalRead(buttonPin1) == HIGH){
tombol_on();
display.setCursor(0, 40);
display.print("Tombol : ON");
display.display();
}
if ( digitalRead(buttonPin2)== HIGH){
tombol_off();
display.setCursor(0, 40);
display.print("Tombol : OFF");
display.display();
}
/*SENSOR DHT11 */
int suhu = dht22.readTemperature(); // Membaca suhu dalam derajat Celsius
if (suhu >= 30) {
dht_on();
} else {
dht_off();
}
/* SENSOR PIR */
int motion = digitalRead(pirPin);
if (motion == HIGH) {
pir_on();
} else {
pir_off();
}
/* SENSOR ULTRASONIK */
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculate the distance
distanceCm = duration * SOUND_SPEED/2;
if ( distanceCm <= 30 ){
ultrasonik_dekat();
} else {
ultrasonik_jauh();
}
display.clearDisplay();
display.display();
}
void dht_on(){
digitalWrite(LED_DHT, HIGH); // LED menyala jika suhu lebih dari atau sama dengan 30 derajat Celsius
// Menampilkan Jarak
display.setCursor(0, 0);
display.print("DHT : ON");
display.display();
}
void dht_off(){
digitalWrite(LED_DHT, LOW); // LED mati jika suhu kurang dari 30 derajat Celsius
// Menampilkan Jarak
display.setCursor(0, 0);
display.print("DHT : OFF");
display.display();
}
void pir_on(){
digitalWrite(LED_PIR, HIGH);
// Di sini Anda dapat menambahkan tindakan yang ingin Anda jalankan ketika gerakan terdeteksi.
// Menampilkan Jarak
display.setCursor(0, 10);
display.print("PIR : ON");
display.display();
}
void pir_off(){
digitalWrite(LED_PIR, LOW);
// Di sini Anda dapat menambahkan tindakan yang ingin Anda jalankan ketika tidak ada gerakan.
// Menampilkan Jarak
display.setCursor(0, 10);
display.print("PIR : OFF");
display.display();
}
void ultrasonik_dekat (){
digitalWrite(LED_ULTRASONIK, HIGH);
digitalWrite(BUZZER_PIN, LOW);
// Menampilkan Jarak
display.setCursor(0, 20);
display.print("Jarak : ");
display.print(distanceCm);
display.print(" cm");
// Menampilkan Keadaan Buzzer
display.setCursor(0, 30);
display.print("Buzzer dan LED : ON ");
display.display();
}
void ultrasonik_jauh (){
digitalWrite(LED_ULTRASONIK, LOW);
digitalWrite(BUZZER_PIN, HIGH);
// Menampilkan Jarak
display.setCursor(0, 20);
display.print("Jarak : ");
display.print(distanceCm);
display.print(" cm");
// Menampilkan Keadaan Buzzer
display.setCursor(0, 30);
display.print("Buzzer dan LED : OFF ");
display.display();
}
void tombol_on(){
digitalWrite(ledPin, HIGH);
}
void tombol_off(){
digitalWrite(ledPin, LOW);
}