Dự án tự động bật tắt máy bơm nước - Sử dụng module relay và siêu âm

Từ bài viết Dự án bật tắt máy bơm nước - Tự bơm nước khi hết nước - Sử dụng module relay và siêu âm, mình có 1 hướng mới cho Project này để tiết kiệm chi phí, phù hợp ứng dụng thực tế hơn nữa: dùng LED để hiển thị mực nước còn lại, thêm nút bật tắt máy bơm bằng tay để có thể bật tắt máy bơm bất kỳ lúc nào

I. Sơ đồ

Sơ đồ mạch của mình tương tự bài viết Dự án bật tắt máy bơm nước - Tự bơm nước khi hết nước - Sử dụng module relay và siêu âm, các bạn tham khảo thêm nhé.

Mình chỉ thêm phần hiển thị mực nước bằng LED và nút bấm để bật tắt bằng tay.

Mình cũng mới chỉ mô phỏng trên Proteus (do chưa có thời gian làm mạch thật). Sơ đồ mạch như sau:

II. Lập trình

// Project bật tắt máy bơm tự động sử dụng HC-SR04, by Bùi Văn Thắng - Tastywin@gmail.com
// Hiển thị mực nước bằng LED
// Có nút bật tắt máy bơm bằng tay
// Tham khảo các nguồn khác nhau trên arduino.vn

const int trig = 8;     // chân trig của HC-SR04
const int echo = 7;     // chân echo của HC-SR04
const int relay = 13;   // chân máy bơm

byte ledPin[] = {A5,A4,A3,A2,A1,A0}; // Mảng lưu vị trí các chân đèn LED
byte pinCount; // Khai báo biến pinCount dùng cho việc lưu tổng số chân LED
byte muc_nuoc = 2;
int moc_tren = 780;  // Thay đổi theo thực tế
int moc_duoi = 330;  // Thay đổi theo thực tế
bool relay_status = 0;  // Trạng thái relay: 0 là tắt, 1 là bật
 
void setup()
{
  Serial.begin(9600);     // giao tiếp Serial với baudrate 9600
  pinMode(trig,OUTPUT);   // chân trig sẽ phát tín hiệu
  pinMode(echo,INPUT);    // chân echo sẽ nhận tín hiệu
  pinMode(relay,OUTPUT);
    
  pinCount = sizeof(ledPin);  // Lấy số lượng LED
  for (byte i=0;i<pinCount;i++) {
    pinMode(ledPin[i],OUTPUT);  //Các chân LED là OUTPUT
    digitalWrite(ledPin[i],LOW); //Mặc định các đèn LED sẽ tắt
  }
  
  pinMode(2,INPUT_PULLUP);  // Bật điện trở trong cho Pin 2, chân Button
  
// Khởi tạo ngắt để bật tắt relay bằng tay
  attachInterrupt(0, bat_tat_relay, FALLING); // gọi hàm battatled liên tục khi còn nhấn nút

}
 
void loop()
{
  unsigned long duration; // biến đo thời gian
  int distance;           // biến lưu khoảng cách
    
/* Phát xung từ chân trig */
  digitalWrite(trig,0);   // tắt chân trig
  delayMicroseconds(2);
  digitalWrite(trig,1);   // phát xung từ chân trig
  delayMicroseconds(5);   // xung có độ dài 5 microSeconds
  digitalWrite(trig,0);   // tắt chân trig
    
/* Tính toán thời gian */
// Đo độ rộng xung HIGH ở chân echo. 
  duration = pulseIn(echo,HIGH);  
// Tính khoảng cách đến vật.
  distance = int(duration/2/29.412);
    
// thiet lap muc nuoc su dung xuong moc_tren thi tu dong bat relay
  if (distance > moc_tren)
    {
      digitalWrite (relay, HIGH);
      relay_status = 1;
    }

// thiet lap muc nuoc len den moc_duoi thi tu dong tat relay
  if (distance < moc_duoi)
    {
      digitalWrite (relay, LOW);
      relay_status = 0;
    }

// Phần hiển thị mực nước bằng LED  
  tat_led();
  muc_nuoc = (moc_tren - distance)/((moc_tren - moc_duoi)/pinCount) + 1;
  
// Nếu gần hết nước thì nháy LED
  if (muc_nuoc < 3)  {
    delay(200);
  }
    
  bat_led();
    
/* In kết quả ra Serial Monitor */
  Serial.print(distance);
  Serial.println("cm");
  delay(200);
}

void tat_led()  {
  for (byte i = 0;i < pinCount; i++) {
    digitalWrite(ledPin[i],LOW); // Tắt đèn
  }
}

void bat_led()  {
  for (byte i=0; i < muc_nuoc; i++) {
    digitalWrite(ledPin[i],HIGH); //Bật đèn
  }
}

void bat_tat_relay()  {
  relay_status = !relay_status;  // Đảo trạng thái relay
  digitalWrite(relay,relay_status); // Xuất giá trị của relay
}

III. Thành quả

Bài viết của mình chưa được kiểm nghiệm thực tế, nhưng cũng mong là truyền được cảm hứng đến các bạn cho việc ứng dụng vào thực tế.

Hoạt động của Project như sau:

  • Khi hết nước tự động bơm, khi nước đầy tự động tắt bơm (về khoảng cách mình để trong mạch là theo mô phỏng trên Proteus nhé, các bạn căn chỉnh ở thực tế và đưa vào giá trị chính xác)
  • Trạng thái mực nước được chỉ thị theo 6 LED (có thể mở rộng thêm nhiều LED tùy ý)
  • Khi ở mực nước thấp (chỉ còn 2 LED đỏ chỉ thị), 2 đèn LED đỏ sẽ nhấp nháy để cảnh báo
  • Có thể dùng Button để Bật hay Tắt máy bơm bất kỳ lúc nào

Thêm nữa, vì code của Project này khá nhỏ, nếu muốn tiết kiệm hơn nữa, các bạn có thể dùng Atmega8 để thay thế Arduino nhé.

Đây là hình ảnh demo trên proteus của mình: 

Những hình ảnh về dự án: 
Bài viết truyền cảm hứng: 
lên
19 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results