Im trying to make an automatic water dispenser using Nodemcu esp8266, Ultrasonic sensor, buzzer, relay, and waterpump. Ive tried 2 code but they both cant turn off the buzzer. Im fairly new to arduino, any help would be much appreciated!!!
first code
/* Full video - https://youtu.be/IyywqOiAAZg */
const int pingPin = D0;//d0
const int echoPin = D1;//d1
const int LED1 = D2;//d2
const int BUZZER = D4; //d4
const int LED3 = D5;//d5
void setup() {
pinMode(LED1 , OUTPUT);
pinMode(BUZZER , OUTPUT);
pinMode(LED3 , OUTPUT);
Serial.begin(115200); // Starting Serial Terminal
}
void loop() {
long duration, distance;
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(10);
digitalWrite(pingPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
Serial.print("Distance from the object = ");
distance = microsecondsToCentimeters(duration);
Serial.print(distance);
Serial.print("cm");
Serial.println();
if ( distance <= 5 )
{
digitalWrite(LED1, LOW);
digitalWrite(BUZZER, HIGH);
digitalWrite(LED3, HIGH);
}
else
{
digitalWrite(LED1, HIGH);
digitalWrite(BUZZER, LOW);
digitalWrite(LED3, LOW);
}
delay(100);
}
long microsecondsToCentimeters(long microseconds) {
return microseconds / 29 / 2;
}
second code
const int trigPin = D0; // Ultrasonic sensor trig pin
const int echoPin = D1; // Ultrasonic sensor echo pin
const int buzzerPin = D4; // Buzzer pin
const int relayPin = D2; // Relay pin
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, LOW); // Initialize the relay to off state
}
void loop() {
int duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
if (distance <= 5) { // If the distance is less than or equal to 10 cm
digitalWrite(relayPin, HIGH); // Turn on the relay (water pump)
tone(buzzerPin, 1000); // Produce a 1 kHz tone on the buzzer
delay(2000); // Wait for 2 seconds
digitalWrite(relayPin, LOW); // Turn off the relay (water pump)
noTone(buzzerPin); // Stop the buzzer tone
}
delay(50000); // Wait for 0.5 seconds before taking the next measurement
}