Want create site? Find Free WordPress Themes and plugins.

Chủ đề này cũng không phải là chủ đề mới trong ứng dụng của Arduino. Tuy nhiên, bữa nay mình sẽ viết lại một cách chi tiết nhất có thể để các bạn mới học Arduino cũng có thể bắt đầu nghịch thử cảm biến âm thanh hay sound sensor. Để tránh mất thời gian đọc cả bài để nắm nội dung, mình sẽ tóm tắt những kiến thức mà bạn sẽ biết trong bài này:

  1. Nguyên tắc hoạt động của cảm biến âm thanh
  2. Nguyên tắc khi làm việc với một loại cảm biến mới
  3. Cách lắp mạch và test thử cảm biến âm thanh đơn giản
  4. Xây dựng ứng dụng vỗ tay (nhanh, 2 lần) để bật và tắt đèn hoặc các thiết bị điện khác.
  5. Đánh giá khả năng áp dụng thực tế của ứng dụng bật/tắt đèn bằng cách vỗ tay với cảm biến âm thanh

Với kiến thức trên bạn cũng có thể áp dụng vào các dự án DIY khác nhưng chủ yếu vào lĩnh vực giải trí như nhấp nháy đèn theo tiếng nhạc hay thậm chí đổi màu đèn với Led RGB…

1. NGUYÊN TẮC HOẠT ĐỘNG CỦA CẢM BIẾN ÂM THANH

Trong bài này mình sử dụng cảm biến Kyes KY-037 4 chân được bán phổ biến trên thị trường, nên xin  được nói sơ về nó trước: Nhìn chung thì con cảm biến này trông có vẻ khá đơn giản, ngoài mấy con điện trở, tụ và đèn LED trên mạch thì chỉ thấy 3 bộ phận chính thôi:

  • Microphone: để nhận tín hiệu âm thanh (analog)
  • Chip LM393: đây là ic OPAMP 2 kênh tích hợp được dùng để sánh tín hiệu đầu vào với một điện áp nhất định (Vref). Nếu điện áp của tín hiệu đầu vào lớn hơn Vref thì tín hiệu digital xuất khỏi LM293 là 1, ngược tại thì là 0.
  • Biến trở: để điều chỉnh độ nhạy của cảm biến, hay chính xác là để thay đổi Vref cho LM293.

%image_alt%

KY-037 có 4 chân thì trong đó ngoài 2 chân 5V và GND dùng để cấp nguồn mà tất nhiên phải có cho bất kì cảm biến nào, nó còn có những 2 chân tín hiệu: A0 và D0. A0 là chân tín hiệu analog theo thời gian thực. D0 là chân tín hiệu digital.

Cảm biến âm thanh hoạt động dựa trên microphone nên có thể xem cảm biến âm thanh chính là 1 microphone trong trường hợp mình dùng tín hiệu analog từ cảm biến này. Còn khi dùng tín hiệu digital từ ngõ ra cảm biến thì nguyên tắc hoạt động của nó là của ic LM293 như đã nói bên trên.

2. NGUYÊN TẮC KHI LÀM VIỆC VỚI CÁC LOẠI CẢM BIẾN MỚI

Tại sao mình lại đề cập đến vấn đề nguyên tắc làm việc với cảm biến trong bài này? Đơn giản vì cảm biến âm thanh đại diện cho loại khó xài, dù trông rõ đơn giản. Tại sao khó? Vì nó có biến trở điều chỉnh độ nhạy! Rất nhiều bạn sau khi đọc một bài hướng dẫn, dù mới sử dụng loại cảm biến ấy lần đầu cũng quất luôn đoạn code chương trình hoàn chỉnh dài loằng ngoằng vào chạy. Kết quả thường là không chạy được mà chẳng hiểu tại sao! Biết đâu cái cảm biến của bạn hỏng thì sao? Các bạn nên thực hiện tuần tự các bước sau để tăng khả năng sau khi bạn lắp đúng mạch và nạp một code đã chạy thành công thì bạn cũng thành công:

  • Tìm hiểu nguyên lý hoạt động của cảm biến đang sử dụng.
  • Xác đinh loại tín hiệu đầu ra của cảm biến (Analog/Digital).
  • Kiểm tra xem cảm biến có điều chỉnh độ nhạy qua biến trở không.
  • Viết một chương trình đơn giản để đọc giá trị của cảm biến và xuất ra Serial Monitor.
  • Điều chỉnh biến trở (nếu có) để điều chỉnh độ nhạy của cảm biến về một mức xác định.

Mục đích của các bước này nhằm:

  • Xác định rõ loại tín hiệu để lập trình cho phù hợp => Tránh lỗi do phần mềm.
  • Kiểm tra cảm biến hoạt động hay không => Nếu không hoạt động thì kiểm tra lại mạch mắc đúng hay chưa. Vì mạch điện ứng dụng tương đối phức tạp. Bạn lắp sai 1 dây hay thiếu 1 con linh kiện thì cũng không chạy được => Tránh lỗi phần cứng.
  • Kiểm soát độ nhạy (nếu có) của cảm biến => Hạn chế nhiễu dẫn đến chương trình chạy sai.

3. LẮP VÀ TEST THỬ CẢM BIẾN ÂM THANH

a. CHUẨN BỊ VẬT LIỆU & DỤNG CỤ:

1. Phần cứng:

Cần chuẩn bị ít nhất:

  • 1x Board mạch Arduino Uno (có thể thay thế bằng Arduino Nano / Pro Mini / Mega 2560…)
  • 1x Breadboard (để gắn linh kiện)
  • 1x Cảm biến âm thanh

Ngoài ra còn cần:

  • Dây nối mạch
  • Relay 5V

2. Phần mềm:

Các bạn tải về link bên dưới:

LINK TẢI CODE MẪU

***Mặc định, mình cũng sẽ xem như các bạn đang đọc bài viết này đã biết:

  • Arduino IDE là gì và cách sử dụng Arduino IDE để nạp chương trình cho board Arduino?
  • Serial Monitor là gì và cách sử dụng?
  • Cách cài đặt driver để máy tính nhận board Arduino?
  • Các bạn cũng nên đọc bài căn bản Bật tắt đèn LED bằng một nút nhấn để dễ hiểu bài này.

b. LẮP MẠCH ĐIỆN

Mạch này cực kỳ dễ lắp luôn, dễ đến mức chẳng cần hình luôn.

Cảm biến KY-038 có 4 chân thì:

  • (+) (cảm biến) – nối với – chân 5V trên Arduino
  • (G) – nối với – chân GND
  • (A0) – nối với – chân A0 trên Arduino (để test tín hiệu analog)
  • (D0) – nối với – chân số 2 trên Arduino (để test tín hiệu digital)

c. TEST TÍN HIỆU DIGITAL

Đầu tiên, sau khi lắp mạch xong, nếu cắm nguồn USB vào mà bạn thấy 2 đèn LED trên cảm biến cạnh chân D0 và A0 đều sáng thì bạn vặn biến trở ngược chiều kim đồng hồ (cầm cảm biến sao cho microphone nằm bên trái nhé) cho đến khi đèn cạnh A0 vừa tắt. Con đèn cạnh D0 mình chẳng thấy bao giờ tắt cả nên khả năng cao đèn này là đèn nguồn. Và có khả năng bạn sẽ phải vặn khá nhiều vòng đó vì để vặn hết từ đầu này đến đầu kia của biến trở cũng gần 17-18 vòng. Vỗ tay thử, bạn sẽ thấy đèn A0 chớp. Đến đây, bạn đã điều chỉnh thành công biến trở về điều kiện làm việc trong phòng. Nếu sang một điều kiện làm việc khác ồn hơn (nhiều nhiễu cường độ lớn hơn) khiến cho đèn Led A0 tự chớp thì bạn lại vặn biến trở ngược chiều kim đồng hồ đến khi nó hết chớp thôi. Việc vặn biến trở ngược chiều kim đồng hồ đã nâng mức Vref tham khảo cho IC OPAMP => nó loại bỏ những tín hiệu (nhiễu) tạo ra điện áp thấp hơn điện áp tham khảo.

Bạn có thể nạp chương trình bên dưới để test tín hiệu digital “Test_Keyes_Sound_Sensor_Digital.ino”. Chương trình sẽ phát hiện ra tiếng vỗ tay của bạn (nhớ điều chỉnh biến trở trước) và hiển thị lên Serial Monitor.

d. TEST TÍN HIỆU ANALOG

Bạn nạp chương trình test analog “Test_Keyes_Sound_Sensor_Analog.ino” cho Arduino. Bật Serial Monitor lên. Màn hình sẽ hiển thị (chạy liên tục) giá trị analog điện áp tham khảo Vref mà bạn đang đặt cho con LM393.

Vặn biến trở theo chiều kim đồng hồ cho đến khi cường độ trên Serial Monitor về mức 100. Bạn thay số 0 như hình dưới bằng 125.

Nạp lại chương trình. Mở Serial Monitor lên, đầu tiên là bạn sẽ thấy nó không chạy liên tục như hồi nãy nữa do mình đã thay đổi ngưỡng analog của tín hiệu nhận về từ từ cảm biến bằng phần mềm rồi (0 ->125). Bạn vỗ tay thử, chương trình sẽ xác định tiếng vỗ tay của bạn và hiển thị ra Serial Monitor như ở phần test Digital, cùng với 1 cái khác nữa là giá trị analog từ cảm biến khi tiếng vỗ tay phát ra (mình tạm gọi nó là “cường độ của tiếng vỗ tay” – đại điện cho tiếng vỗ tay to hay nhỏ).

Nếu bạn làm đến đây mà thành công thì có nghĩa con cảm biến âm thanh của bạn hoạt động ổn và mạch của bạn cũng lắp đúng. ^^! Chúc mừng nhé vì như vậy là xong đến 80% rồi.

Vậy 20% còn lại làm gì? Mình sẽ đi thẳng đến ứng dụng luôn…

4. ỨNG DỤNG VỖ TAY NHANH 2 CÁI ĐỂ BẬT VÀ TẮT ĐÈN (HOẶC CÁC THIẾT BỊ ĐIỆN KHÁC)

Phần này dễ như ăn kẹo vì hầu như bạn chẳng cần phải suy nghĩ gì nữa nếu bạn chỉ cần 1 cái ứng dụng vỗ tay bật đèn. Nhưng nếu bạn muốn học lập trình Arduino thì phần này hơi khoai đây. Tuy nhiên, để các bạn đọc chương trình dễ hiểu thì mình đã chú thích từng bước trong chương trình luôn rồi nhé. Mình đề nghị các bạn nào đang học lập trình nên đọc – hiểu – và viết lại một chương trình của riêng mình để nâng cao khả năng logic và lập trình nhá ^^!

Một lưu ý khi chạy chương trình này là các bạn cần điều chỉnh biến trở về y như phần test tín hiệu analog (giá trị cường độ = 100) vì mình sẽ dùng phần mềm để lọc nhiễu. Thêm cái nữa là trong ứng dụng này mình không dùng chân D0 của cảm biến, thành thử bạn có lắp hay không lắp chân D0 như phần test digital cũng được.

Khi theo dõi chương trình trên Serial Monitor, bạn sẽ thấy những thông tin như thế này:

  • First Clap ghi nhận bạn vỗ tay lần đầu tiên với cường độ bao nhiêu và tại thời điểm nào.
  • Seconcond Clap ghi nhận bạn vỗ tay lần thứ 2 với những thông tin tương tự.
  • Chương trình sẽ tính thời gian giữa 2 lần vỗ tay, nếu thỏa điều kiện vỗ tay nhanh (Fast Clap) thì sẽ in ra màn hình Serial Monitor. Điều kiện mình thiết lập Fast Clap là thời gian giữa 2 lần vỗ tay phải lớn hơn 150ms (để chống nhiễu) và nhỏ hơn 400ms (để tự động reset lại chương trình nếu nó đợi quá lâu mà không bắt được lần vỗ tay thứ 2). Đèn chỉ bật hoặc tắt khi Fast Clap xảy ra. Bạn có thể tùy chỉnh 2 thông số này để phù hợp với thói quen/ khả năng vỗ tay của bạn.

Chương trình vỗ tay bật đèn sẽ tranh thủ test điều khiển LED 13 có sẵn trên board Arduino luôn để bạn không phải lắp thêm nữa. Tuy nhiên, nếu bạn nào muốn áp dụng ngay, làm cái đèn bàn stupid của mình thành 1 cái smart lamp thì gắn thêm relay 5V vào chân 13 nhé. Nhớ gắn chân NO (thường hở) để nếu mạch điều khiển có vấn đề gì thì đèn cũng tắt luôn chứ không thì tốn điện đấy^^!

Nói sơ về chương trình:

Chương trình mình hơi phức tạp một tí do mình cần cải thiện khả năng  chống nhiễu với phần mềm. Sẽ không có chuyện ban đêm đang ngủ, tự dưng đèn bật như có ma. (Vui chứ, nếu các bạn chạy chương trình của mình mà đêm đang yên ắng, đèn bật sáng thì chắc có ma thật đó ^^!). Cũng sẽ không có chuyện có tiếng động gì đó lớn vượt ngưỡng cài đặt khiến cho đèn bật. Nguyên nhân đơn giản là vì muốn đèn bật hay tắt bạn phải vỗ tay nhanh đến 2 cái: bép….bép…. Vỗ chậm quá, chương trình cũng không hiểu, vỗ nhỏ quá, chương trình cũng không nhận. Vỗ quá nhanh đi (vượt khả năng của bạn luôn ấy), chương trình cũng loại nốt do xác định đây là nhiễu. Trừ khi tiếng động phát ra có cường độ đủ lớn,  có tính lặp lại và tần số lặp khớp với tần số cài đặt cho chương trình thì mới có cửa khiến đèn sáng. Mà tự nhiên thì ít có loại âm thanh như vậy. Về thuật toán chi tiết như thế nào, bạn chịu khó đọc hiểu nhé. Mình nói hết nữa thì mất vui.

5. ĐÁNH GIÁ ỨNG DỤNG

Đáng lẽ phần này để các bạn tự trải nghiệm nhưng thôi, mình cũng muốn nói luôn quan điểm của mình cho ứng dụng này.

ƯU:

Hoạt động chính xác nếu bạn tinh chỉnh tốt biến trở và ngưỡng lọc nhiễu phần mềm (100 và 125 như giá trị tham khảo của mình) và chống rung/va đập tốt (lót thêm tấm mút là OK). Có thể sử dụng trong phòng không quá ồn ào. Bạn nào mà thường xuyên chơi nhạc volumn khủng thì chắc không xài cái này được. Nhà có trẻ em thường xuyên gào thét, la khóc thì chắc cũng nên cạch. Còn lại thì xài OK… nói chung là khả năng sử dụng rộng.

NHƯỢC:

Trong điều kiện phòng bình thường thì tầm hoạt động hiệu quả của cảm biến chỉ tầm 3m đổ lại. Khi đứng xa cảm biến hơn, dù bạn có vỗ tay đúng cách thì đèn cũng không bật.

Cảm biến âm thanh cũng có tính định hướng, bạn nên quay microphone ra hướng mà bạn thường hay đứng ở đó để vỗ tay. Ví dụ như đứng ở cửa, vỗ tay để bật đèn trong phòng.

Chúc các bạn vui với những gì học và làm được cùng Arduino!

Minh Thành

Admin Shop Arduino

Did you find apk for android? You can find new Free Android Games and apps.

Trả lời