15

Thùng rác tự động hướng dẫn tự chế sử dụng Arduino

thung-rac-tu-dong
3.7/5 - (3 bình chọn)

Ngày nay các loại thùng rác tự động ra đời càng nhiều, đặc biệt có các loại thùng rác thông minh của các hãng nổi tiếng như Xiaomi với các tính năng và mẫu mã vô cùng. Từ đó espitek cũng tự chế thùng rác tự động cho riêng mình, chỉ với chiếc thùng rác thông thường và một ít linh kiện chúng ta sẽ có ngay một chiếc thùng rác tự mở cho riêng mình.

Bài viết bạn nên đọc:

Nguyên lý hoạt động của thùng rác tự đóng mở

Cấu tạo thùng rác

Chiếc thùng rác thông thường

Một chiếc thùng rác thông thường chúng ta hay sử dụng là sẽ có một bàn đạp dưới chân để mở nắp. Chúng ta sẽ sử dụng loại thùng rác này để cùng tự làm một chiếc thùng rác thông minh nhé.

Thay thế cho việc phải đạp chân lên thùng rác ta sẽ dùng một servo để thực hiện việc này, tận dụng việc servo có thể quay với các góc tùy chỉnh ta sẽ cho nó quay theo đúng góc mà có thể kéo bàn đạp của thùng rác xuống dưới. Liên kết từ đỉnh của servo đến bàn đạp ta sử dụng một sợi dây, sau khi cảm biến tiệm cận phát hiện thì sẽ kích servo quay 1 góc (bàn đạp được kéo xuống giúp nắp thùng rác tự mở ra), sau khoảng thời gian 5s thì sẽ quay servo về góc ban đầu (nắp luôn có xu hướng đóng nên khi được trả về trạng thái cũ thì lập tức nắp thùng rác sẽ tự động đóng lại).

servo-simulator

Để kết nối giữa Arduino và Servo ta kết nối theo sơ đồ sau:

arduino kết nối servo

Kết nối giữa arduino và servo

Tiếp theo để tự động phát hiện ra có vật hay người đến gần thì ta sẽ sử dụng cảm biến tiệm cận SRF05.

Kết nối srf05 và arduino

Cách kết nối cảm biến tiệm cận và arduino

Linh kiện sử dụng tự chế thùng rác tự mở

  • Arduino nano
  • Servo
  • Srf05
  • Nguồn 5V (sử dụng cục sạc điện thoại)
  • Súng bắn keo để cố định các thành phần lên trên thùng rác sao cho gọn nhất

Lập trình cho thùng rác tự động

#include <Servo.h>
#define TRIG_PIN_SS 12
#define ECHO_PIN_SS 11
#define TIME_OUT 5000
#define Servo_SS 3

Servo myservoSS;       
float GetDistanceSS()
{
  long durationSS, distanceCmSS;
   
  digitalWrite(TRIG_PIN_SS, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN_SS, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN_SS, LOW);
  
  durationSS = pulseIn(ECHO_PIN_SS, HIGH, TIME_OUT);
 
  // convert to distance
  distanceCmSS = durationSS / 29.1 / 2;
  
  return distanceCmSS;
}

void setup() {  
  //Serial.begin(9600);
  myservoSS.attach(Servo_SS); 
  pinMode(TRIG_PIN_SS, OUTPUT);
  pinMode(ECHO_PIN_SS, INPUT);
  myservoSS.write(0);
}
 
void loop() {
  long distanceSS = GetDistanceSS();
  
  if (distanceSS >= 20)
  {
    myservoSS.write(90);
  }
  else
  {   
    myservoSS.write(0);
  }
  delay(5000);
}

Giải thích code

Ta khai báo các biến và include thư viện Servo như bình thường, tiếp theo sẽ viết một hàm có chức năng tính toán khoảng cách mà cảm biến tiệm cận trả về.

float GetDistanceSS()
{
  long durationSS, distanceCmSS;
   
  digitalWrite(TRIG_PIN_SS, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN_SS, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN_SS, LOW);
  
  durationSS = pulseIn(ECHO_PIN_SS, HIGH, TIME_OUT);
 
  // convert to distance
  distanceCmSS = durationSS / 29.1 / 2;
  
  return distanceCmSS;
}

Trong vòng lặp ta sẽ tiến hành nhận giá trị khoảng cách mà hàm trên trả về rồi sau đó tiến hành so sánh nếu < 20cm thì sẽ tiến hành cho servo quay 1 góc 90 độ (góc này các bạn có thể để sao cho phù hợp với ứng dụng của mình để servo có thể quay được góc mà làm cho bàn đạp của thùng rác có thể bị kéo xuống vừa đủ). Sau đó chờ 5s thì sẽ trả servo về góc 0 độ (góc này cũng có thể tùy chỉnh cho phù hợp để thùng rác tự đóng nắp lại).

void loop() {
  long distanceSS = GetDistanceSS();
  
  if (distanceSS >= 20)
  {
    myservoSS.write(90);
  }
  else
  {   
    myservoSS.write(0);
  }
  delay(5000);
}

Chúc các bạn thành công!

15 Comments

    • Chào bạn, danh sách linh kiện mình đã đưa trong bài viết.
      bạn có thể tìm mua tại bất kỳ shop điện tử nào: Hshop.vn, thegioiic.vn…

      • chào bạn mk muốn có thêm âm thanh khi mở thùng thì làm như nào ạ

      • Chào anh, em muốn thiết kế sản phẩm này thì dụng cụ gồm những gì ạ.

      • Chào bạn,
        Như trong bài viết thì dụng cụ cơ bản gồm:
        – Thùng rác (mua bất cứ đâu)
        – Board mạch (Arduino Nano) có thể sử dụng loại khác nếu bạn biết, còn như code của mình thì xài Nano
        – Servor để điều khiển đóng mở thùng
        – Cảm biến tiệm cận (nhận diện người tới gần để dk mở cửa thùng rác)
        Về nguyên lý chung thì, thay vì mình dùng chân đạp lên chổ cần để mở cửa thùng thì chúng ta sẽ bố trí servor để kéo cần gạc này giống như ta dùng chân vậy. lúc mở cửa thì servor sẽ quay 1 góc để kéo cần gạc làm thúng mở cửa lên, sau khoảng thời gian 5s thì servor sẽ trả lại vị trí ban đầu cho cửa thùng rác đóng lại 🙂

        NẾU CẦN THÊM THÔNG TIN CÓ THỂ LIÊN HỆ FANPAGE ĐỂ ĐƯỢC GIẢI ĐÁP

  1. Arduino: 1.8.13 (Windows 10), Board: "Arduino Uno"
    C:\Users\Admin\AppData\Local\Temp\arduino_modified_sketch_762659\sketch_dec10a.ino: In function 'void setup()':
    
    sketch_dec10a:46:7: error: redefinition of 'void setup()'
    
     }void setup() {float GetDistanceSS()
    
           ^~~~~
    
    C:\Users\Admin\AppData\Local\Temp\arduino_modified_sketch_762659\sketch_dec10a.ino:26:6: note: 'void setup()' previously defined here
    
     void setup() {
    
          ^~~~~
    
    sketch_dec10a:47:1: error: a function-definition is not allowed here before '{' token
    
     {
    
     ^
    
    sketch_dec10a:62:14: error: a function-definition is not allowed here before '{' token
    
     }void loop() {
    
                  ^
    
    C:\Users\Admin\AppData\Local\Temp\arduino_modified_sketch_762659\sketch_dec10a.ino: In function 'void loop()':
    
    sketch_dec10a:79:6: error: redefinition of 'void loop()'
    
     void loop() {
    
          ^~~~
    
    C:\Users\Admin\AppData\Local\Temp\arduino_modified_sketch_762659\sketch_dec10a.ino:34:6: note: 'void loop()' previously defined here
    
     void loop() {
    
          ^~~~
    
    exit status 1
    
    redefinition of 'void setup()'
    
    
    
    This report would have more information with
    "Show verbose output during compilation"
    option enabled in File -> Preferences.
    

    làm cách nào để sửa ạ

    • Chào Cường!
      Lỗi đó chỉ ra rằng bạn đã khai báo các hàm “void setup()” và “void loop()” bị lặp lại.
      Nếu chắc chắn code của bạn không bị lặp thì bạn có thể cài lại Arduino IDE.
      Bạn cũng nên lưu ý sự khác nhau giữa board Arduino NANO VÀ UNO.

  2. Chào anh, em muốn mua dụng cụ để làm sản phầm này thì mua ở đâu ạ

    • Chào bạn,
      Như trong bài viết thì dụng cụ cơ bản gồm:
      – Thùng rác (mua bất cứ đâu)
      – Board mạch (Arduino Nano) có thể sử dụng loại khác nếu bạn biết, còn như code của mình thì xài Nano
      – Servor để điều khiển đóng mở thùng
      – Cảm biến tiệm cận (nhận diện người tới gần để dk mở cửa thùng rác)

      => BẠN CÓ THỂ MUA Ở CÁC SHOP LINH KIỆN: HSHOP, thegioiic, nshop, … (TPHCm) hoặc đặt mua online theo list trên shopee,…
      Về nguyên lý chung thì, thay vì mình dùng chân đạp lên chổ cần để mở cửa thùng thì chúng ta sẽ bố trí servor để kéo cần gạc này giống như ta dùng chân vậy. lúc mở cửa thì servor sẽ quay 1 góc để kéo cần gạc làm thúng mở cửa lên, sau khoảng thời gian 5s thì servor sẽ trả lại vị trí ban đầu cho cửa thùng rác đóng lại 🙂

      NẾU CẦN THÊM THÔNG TIN CÓ THỂ LIÊN HỆ FANPAGE ĐỂ ĐƯỢC GIẢI ĐÁP

  3. Chào admin, Em muốn hỏi là mình dùng cảm biến hồng ngoại để thiết kế cho mô hình này được k ạ

  4. cách thông báo hàm ở đâu,và như nào ạ
    dây cắm là đực cái hay cái cái,hay đực đực ạ

  5. làm sao em có thể tạo lập trình được ạ,và nó ở đâu ạ

  6. cho em xin sơ đồ kết nối servo đến arduino nano đc k ạ, trong bài là con uno chứ k phải nano ạ, em cảm ơn.

  7. cái servo anh buộc thế nào để nó kéo đc nắp thùng rác lên ạ, mong anh giải thích ạ, cảm ơn anh rất nhiều <3

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *