Arduino SRF04 (HC-SR04)
Arduino SRF04 (HC-SR04)
1. Test cảm biến:
Linh kiện: Arduino Uno, Lm016L, Pot-hg, Srf04.
Proteus:
Arduino IDE:
#include <LiquidCrystal.h>
#define trigger 9
#define echo 8
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
float tgian = 0;
float khoangcach = 0;
void setup() {
// put your setup code here, to run once:
lcd.begin(16, 2);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
Serial.begin(9600);
lcd.print("Test");
lcd.setCursor(0, 1);
lcd.print("Cam bien sieu am");
delay(2000);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(trigger, LOW); // đưa xuống mức thấp
delayMicroseconds(2); // đơn vị: us
digitalWrite(trigger, HIGH); // đưa lên mức cao
delayMicroseconds(10); //Đưa lên mức cao 10 us
digitalWrite(trigger, LOW); // đưa xuống mức thấp để tính toán
delayMicroseconds(2);
tgian = pulseIn(echo, HIGH);
// vận tốc sóng âm: 343 m/s
khoangcach = tgian*347*100/1000000/2;
// nhân 100 là đổi sang cm, chia 1000000 là đổi sang giây, chia 2 là vì thời gian phát từ cảm biến đến vật và sau đó dội về cảm biến nên phải chia 2
lcd.clear();
lcd.print("Test cam bien");
lcd.setCursor(0, 1);
lcd.print("K.cach: ");
lcd.print(khoangcach);
lcd.print("cm");
Serial.print("Khoang cach: ");
Serial.print(khoangcach);
Serial.println("cm");
delay(500);
}
Chú ý:
Khi đo trong thực tế, để giảm sai số, chọn 1 vật có khoảng cách biết trước, rồi điều chỉnh vận tốc sóng âm để có giá trị gần đúng nhất trước khi đo khoảng cách thật.
2. Máy bơm nước tự động:
Mô hình:
Thêm linh kiện: L298, Motor.
Proteus:
Arduino IDE:
#include <LiquidCrystal.h>
#define trigger 9
#define echo 8
int maybom = 13;
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
float tgian = 0;
float mucnuoc = 0;
void setup() {
// put your setup code here, to run once:
lcd.begin(16, 2);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
pinMode(maybom, OUTPUT);
// Serial.begin(9600);
lcd.print("May bom tu dong");
lcd.setCursor(0, 1);
lcd.print("Cam bien sieu am");
delay(2000);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(trigger, LOW); // đưa xuống mức thấp
delayMicroseconds(2); // đơn vị: us
digitalWrite(trigger, HIGH); // đưa lên mức cao
delayMicroseconds(10); //Đưa lên mức cao 10 us
digitalWrite(trigger, LOW); // đưa xuống mức thấp để tính toán
delayMicroseconds(2);
tgian = pulseIn(echo, HIGH);
// vận tốc sóng âm: 343 m/s
mucnuoc = 330 - (tgian*347*100/1000000/2);
//330cm là mực nước trong bể, với cảm biến này thì nên dùng với tối đa 330cm
//nhân 100 là đổi sang cm, chia 1000000 là đổi sang giây, chia 2 là vì thời gian phát từ cảm biến đến vật và sau đó dội về cảm biến nên phải chia 2
if(mucnuoc < 30) digitalWrite(maybom, HIGH);
if(mucnuoc > 300) digitalWrite(maybom, LOW);
lcd.clear();
lcd.print("May bom tu dong");
lcd.setCursor(0, 1);
lcd.print("Be nuoc:");
lcd.print(mucnuoc);
lcd.print("cm");
// Serial.print("Khoang cach: ");
// Serial.print(khoangcach);
// Serial.println("cm");
delay(500);
}