Program lampu tangga otomatis
/* program lampu otomatis
-alat-
sensor ultasonik, sensor pir, led strip 12v
*/
#define pirPin D2
#define relay D3
#define trig D5
#define echo D4
#define tring2 D6
#define echo2 D7
long durasi1,durasi2,jarak1,jarak2;
unsigned long hitungan_milis;
unsigned long milis_sekarang;
const unsigned long nilai =1000;
// Membuat variable
int val = 0;
bool motionState = false; // dimulai dari tidak ada gerakan
void setup() {
pinMode(relay, OUTPUT);
pinMode(pirPin, INPUT);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(tring2, OUTPUT);
pinMode(echo2, INPUT);
hitungan_milis;
Serial.begin(115200);
}
void loop() {
milis_sekarang= millis();
//ultrasonik 1 (tangga atas)
digitalWrite(trig, LOW);
delayMicroseconds(8);
digitalWrite(trig, HIGH);
delayMicroseconds(8);
digitalWrite(trig, LOW);
delayMicroseconds(8);
//ultrasonik 2 (tangga bawah)
digitalWrite(tring2, LOW);
delayMicroseconds(8);
digitalWrite(tring2, HIGH);
delayMicroseconds(8);
digitalWrite(tring2, LOW);
delayMicroseconds(8);
durasi1 = pulseIn(echo, HIGH);
durasi2 = pulseIn(echo2, HIGH);
jarak1 = (durasi1 / 2) / 29.1;
jarak2 = (durasi2/ 2) /35.1;
//serial menampilkan jarak tangga atas
Serial.print(jarak1);
Serial.println("cm |tangga atas");
//serial menampilkan jarak tangga bawah
Serial.print(jarak2);
Serial.println("cm | tangga bawah");
if (milis_sekarang - hitungan_milis >=1000){
hitungan_milis=milis_sekarang;
if(jarak1 <=100 || jarak2 <=50){
digitalWrite(relay, LOW);
Serial.println("lampu hidup");
delay(35000);
digitalWrite(relay, HIGH);
//matikan lampu
}
else{digitalWrite(relay, HIGH);
Serial.println("lampu mati");
}
//delay(500);
}
/*
//Membaca pirPin dan simpan sebagai val:
val = digitalRead(pirPin);
// Jika gerakan terdeteksi (pirPin = HIGH), lakukan hal berikut:
if (val == HIGH) {
digitalWrite(relay, HIGH);
// Ubah status gerakan menjadi true (gerakan terdeteksi)
if (motionState == false) {
Serial.println("gerakan terdeteksi");
delay(35000);
motionState = true;
}
}
// Jika tidak ada gerakan yang terdeteksi (pirPin = LOW), lakukan hal berikut:
else {
digitalWrite(relay, LOW);
// Ubah status gerakan ke false (tidak ada gerakan)
if (motionState == true) {
Serial.println("tidak ada pergerakan");
motionState = false;
}
}
*/
}
/*
*Program Revisi versi 3
*==Bahan : ==
* 2 buah sensor ultrasonik
* 1 relay 2channel
* Nodemcu
* LED strip 12v
* Power suplay
*/
###$##############
Program v2
/* program lampu otomatis
-alat-
sensor ultasonik, sensor pir, led strip 12v
*/
//ultrasonic 1
#define echoPin1 D2
#define tringPin1 D1
int jarak1 =0;
//ultrasonic 2
#define echoPin2 D4
#define tringPin2 D5
int jarak2 =0;
#define pirPin D2
#define relay D3
long durasi1,durasi2;
unsigned long hitungan_milis;
unsigned long milis_sekarang;
const unsigned long nilai =1000;
// Membuat variable
int val = 0;
bool motionState = false; // dimulai dari tidak ada gerakan
void setup() {
pinMode(relay, OUTPUT);
pinMode(pirPin, INPUT);
//ultrasonik 1&2
pinMode(tringPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(tringPin2, OUTPUT);
pinMode(echoPin2, INPUT);
hitungan_milis;
Serial.begin(115200);
}
void loop() {
milis_sekarang= millis();
//ultrasonik tangga atas
jarak1 = getDistance(tringPin1, echoPin1);
printDistance(1, jarak1);
//ultrasonik tangga bawah
jarak2 = getDistance(tringPin2, echoPin2);
printDistance(2, jarak2);
if (milis_sekarang - hitungan_milis >=1000){
hitungan_milis=milis_sekarang;
if(jarak1 <=100 || jarak2 <=50){
digitalWrite(relay, LOW);
Serial.println("lampu hidup");
delay(35000);
digitalWrite(relay, HIGH);
//matikan lampu
}
else{digitalWrite(relay, HIGH);
Serial.println("lampu mati");
}
//delay(500);
}
}
/* =========° */
int getDistance (int tringPin, int echoPin){
digitalWrite(tringPin, HIGH);
delayMicroseconds(10);
digitalWrite(tringPin, LOW);
unsigned long pulseTime = pulseIn(echoPin, HIGH);
int distance = pulseTime/58;
return distance;
}
void printDistance(int id, int dist){
Serial.print(id);
Serial.print("--->");
Serial.print(dist, DEC);
Serial.println(" cm");
}