Đọc tốc độ của quạt CPU (quạt 12Vol - hay quạt 3 dây)

Giới thiệu và nội dung cần nắm

Trong bài viết này, mục tiêu mà tớ hướng đến là đọc tốc độ của quạt CPU từ đó giải thích cho các bạn về cách thức hoạt động của interrupt (ngắt). Đừng lo lắng khi nghe đến khái niệm interrupt mới mẻ này. Vì khái niệm này rất đơn giản thôi!

Giới thiệu về quạt 12 Vol

Quạt 12 Vol thường có 3 dây (tuy nhiên một số mạch cũ hoặc những loại cực nhỏ thì có 2 dây). Trong đó:

  • 1 dây là cực dương (thường là dây đỏ)
  • 1 dây là cực âm (màu đen)
  • 1 dây là DÂY ĐO TỐC ĐỘ (thường là màu vàng)
Bạn có thể mua quạt này ở chợ Trời hoặc chợ Nhật Tảo tại các cửa hàng điện tử

Phần cứng

Lắp mạch

Giải thích & lập trình

Để hiểu nó khái niệm về interrupt, bạn hãy tham khảo bài viết này. Tuy nhiên, ở đây như đã giới thiệu ở trên, tôi sẽ mô tả cho bạn hiểu interrupt một cách khác, cách này được tôi nghĩ ra và sử dụng khi mới học về interrupt, cách này có hiệu quả với tôi và tôi nghĩ nó cũng sẽ hiệu quả với bạn.

Interrupt đối với tôi giống như một cái button (cái nút), nhiệm vụ của nó có nhiều điểm giống với digitalRead, nên bạn cứ xem interrupt là một cái nút, không sai đâu. Vì interrupt giống như một cái nút nên nó sẽ cần một chân digital. Có một điều đặc biệt khiến interrupt trở nên "pro" hơn button, đó là nó không bị dừng bởi hàm delay! Kết hợp những điều đó, với Interrupt, bạn có thể làm những ứng dụng thời gian thực hoặc tính toán những thứ CẦN ĐỘ CHÍNH XÁC CAO. Và cứ mỗi lần bắt được một hành động thì nó lại chạy một lệnh ngay tức thì!

Ở ví dụ này, chúng ta dùng interrupt để đọc tốc độ quạt. Vì sao? Bởi vì, cứ quay hết được 1 vòng thì chân tốc độ (thường là màu vàng) của quạt sẽ được nối đến cực âm ⇒ chân interrupt cũng được nối đến cực âm. Ngược lại thì chân interrupt sẽ có mức điện thế cao (do được nối đến nguồn 5V qua điện trở 10k). Vì vậy ta sẽ dùng interrupt để bắt sự kiện (đang ở điện thế cao xuống điện thế thấp - RISING), từ đó đếm được tần số (số sự kiện cao xuống thấp trong 1 giây) của quạt. Sau đó, lấy số ấy đem nhân với 60 (60 giây = 1 phút) để có được tốc độ của quạt (Round per minute - RPM - vòng / phút).

volatile int Hz = 0; //Biến dùng để lưu tần số của quạt. Thanks to pitagoever
int rpm = 0; // Biến dùng để lưu tốc độ quạt
unsigned long lastmillis = 0;
void setup(){
  Serial.begin(9600); //Bật Serial để debug chương trình
  attachInterrupt(0, rpm_fan, FALLING); // Attach Interrupt ở chân digital 2 (http://arduino.vn/reference/attachinterrupt )
                                        // sự kiện FALLING sẽ xảy ra khi chân digital 2 đang từ cao nhảy xuống thấp
                                        // Và khi có sự kiện FALLING xảy ra thì ta sẽ chạy hàm rpm_fan
}  

void loop(){

  if (millis() - lastmillis >= 1000){ //Cập nhập trạng thái sau mỗi 1 giây.
  
    noInterrupts();//Tạm dừng mọi Interrupt đang có trên Arduino. http://arduino.vn/reference/nointerrupts
                   // Bạn có thể đây là dạng delay trên Interrupt
    
    rpm = Hz * 60; // tính tộc độ của quạt
    
    Serial.print("RPM =\t"); //xuất ký tự RPM và một TAB
    Serial.print(rpm); // xuất tộc độ quạt
    Serial.print("\t Hz=\t"); //xuất 1 TAB rồi ký tự Hz rồi 1 tab
    Serial.println(Hz); //xuất tần số của quạt
    
    Hz = 0; // khởi lộng lại bộ đếm tần số
    lastmillis = millis(); // cập nhập lại thời điểm cuối cùng ta kiểm tra tốc độ
    interrupts(); //Tiếp tục chạy các interrupt
  }
}
void rpm_fan(){
  Hz++;
}

lên
34 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

Các bài viết cùng tác giả

Kết nối điều khiển từ xa sử dụng ESP8266 và Arduino với hệ thống firmware iNut Cảm biến CloudMQTT - 1000 firmware miễn phí

Chuyện kể rằng, có 02 sinh viên Việt Nam, trong lúc làm đồ án đại học kết nối điều khiển từ xa qua Internet. Một người thì chọn phương án truyền thống sử dụng máy tính làm máy chủ và demo các tính năng theo yêu cầu đồ án. Người còn lại biết đến iNut Sensor và tìm cách tối ưu hóa phần mềm và phần cứng nhằm chau chuốt cho đồ án của mình trở nên "xịn" và "nhiều tính năng bá đạo". Đến lúc bảo vệ đồ án, cậu sinh viên 01 cảm thấy choáng ván với muôn vàn vấn đề từ việc nơi trình bày đồ án không có wifi, mạng chập chờn, máy tính mở không lên, đứt cáp biển,... Cuối cùng cũng bảo vệ được với điểm số không ưng ý lắm dù tốn rất nhiều thời gian và công sức. Cậu còn lại nhờ vào việc chau chuốt phần mềm, tối ưu hóa và comment kĩ từng lệnh trong dòng code, viết báo cáo bài bản chuẩn bị slide như ý, dùng điện thoại cài wifi, quét mã QRcode để chia sẻ quyền truy cập đến phần mềm rất chuyên nghiệp, mọi thứ cậu chủ động hoàn toàn mà không bị các vấn đề "học tài thi phận" bủa vây mà kết quả hết sức mĩ mãn, điểm số mĩ miều, kiến thức IoT được chuẩn hóa. Thực vậy, các dự án, đồ án sử dụng nền tảng iNut Platform bên dưới cho phép các bạn sinh viên làm các dự án hết sức hoàn hảo: từ xe điều khiển, bãi giữ xe thông minh, hệ thống máy lạnh, máy bơm, điều hòa thông minh,... do chinh các bạn tự làm nên đã đạt được những điểm số tốt và tuyệt đối. Cũng chính vì thế, iNut JSC (công ty chủ quản của iNut Platform) đã kết hợp với Khu Công nghệ phần mềm - ĐHQGHCM để tổ chức những khóa đào tạo ngắn hạn cho sinh viên Việt Nam sử dụng nền tảng IoT do iNut JSC phát triển. Và để mở con đường tri thức tiếp cận IoT trong nháy mắt, iNut JSC đã tạo ra một phiên bản firmware trị giá 50.000 đồng sử dụng clouding của CloudMQTT và tài trợ 1000 firmware cho tất cả các bạn học sinh, sinh viên Việt Nam có thể tiếp cận IoT một cách dễ dàng và nhanh chóng nhất!

lên
14 thành viên đã đánh giá bài viết này hữu ích.

Pin - Năng lượng cho mọi dự án Arduino

Pin là gì? Một dự án Arduino cần phải tính toán năng lượng như thế nào? Các loại pin nào phù hợp với các dự án Arduino? ... Những câu hỏi này có vẻ như rất gần gũi và dễ dàng trả lời nhưng để có được một phương án năng lượng tối ưu, bạn cần phải đọc qua bài này để nắm được những điều cần thiết cho một dự án Arduino!

lên
23 thành viên đã đánh giá bài viết này hữu ích.