- Vật liệu thiết yếu
- Cảm biến âm thanh hoạt động
- Đo tần số âm thanh trên máy hiện sóng
- Sơ đồ mạch Arduino của máy dò còi
- Đo tần số với Arduino
- Lập trình Arduino của bạn để phát hiện Whistle
- Máy dò tiếng còi Arduino hoạt động
Khi còn nhỏ, tôi đã bị mê hoặc bởi một chiếc ô tô âm nhạc đồ chơi được kích hoạt khi bạn vỗ tay, và sau đó khi lớn lên, tôi tự hỏi liệu chúng ta có thể sử dụng nó để bật tắt đèn và quạt trong nhà mình hay không. Sẽ thật tuyệt khi chỉ cần bật Quạt và đèn của tôi bằng cách vỗ tay thay vì đi bộ lười biếng của tôi đến bảng chuyển đổi. Nhưng đôi khi nó sẽ bị trục trặc vì mạch này sẽ phản ứng với bất kỳ tiếng ồn lớn nào trong môi trường, chẳng hạn như radio lớn hoặc đối với máy cắt cỏ của nhà hàng xóm của tôi. Mặc dù xây dựng một công tắc vỗ tay cũng là một dự án thú vị để làm.
Đó là sau đó, khi tôi bắt gặp phương pháp phát hiện còi này, trong đó mạch sẽ phát hiện ra tiếng còi. Một tiếng còi không giống như các âm thanh khác sẽ có tần số đồng nhất trong một khoảng thời gian cụ thể và do đó có thể được phân biệt với lời nói hoặc âm nhạc. Vì vậy, trong hướng dẫn này, chúng ta sẽ tìm hiểu cách phát hiện âm thanh còi bằng cách kết nối Cảm biến âm thanh với Arduino và khi phát hiện ra tiếng còi, chúng ta sẽ bật đèn AC thông qua một rơ le. Trên đường đi, chúng ta cũng sẽ tìm hiểu cách nhận tín hiệu âm thanh bằng micrô và cách đo tần số bằng Arduino. Nghe có vẻ thú vị phải không, vậy hãy bắt đầu với Dự án tự động hóa tại nhà dựa trên Arduino.
Vật liệu thiết yếu
- Arduino UNO
- Mô-đun cảm biến âm thanh
- Mô-đun chuyển tiếp
- Đèn AC
- Kết nối dây
- Breadboard
Cảm biến âm thanh hoạt động
Trước khi đi sâu vào kết nối phần cứng và mã cho Dự án tự động hóa gia đình này, chúng ta hãy xem xét cảm biến âm thanh. Cảm biến âm thanh được sử dụng trong mô-đun này được hiển thị bên dưới. Nguyên lý hoạt động của hầu hết các cảm biến âm thanh hiện có trên thị trường tương tự như vậy, mặc dù hình thức bên ngoài có thể thay đổi một chút.
Như chúng ta biết thành phần nguyên thủy trong cảm biến âm thanh là micrô. Micrô là một loại đầu dò chuyển đổi sóng âm thanh (năng lượng âm) thành năng lượng điện. Về cơ bản, màng ngăn bên trong micrô rung động với sóng âm thanh trong khí quyển tạo ra tín hiệu điện trên chân đầu ra của nó. Nhưng những tín hiệu này sẽ có cường độ rất thấp (mV) và do đó không thể được xử lý trực tiếp bởi một bộ vi điều khiển như Arduino. Cũng theo mặc định, tín hiệu âm thanh có bản chất tương tự do đó đầu ra từ micrô sẽ là sóng hình sin với tần số thay đổi, nhưng vi điều khiển là thiết bị kỹ thuật số và do đó hoạt động tốt hơn với sóng vuông.
Để khuếch đại các sóng sin tín hiệu thấp này và chuyển đổi chúng thành sóng vuông, mô-đun sử dụng mô-đun Bộ so sánh LM393 trên bo mạch như hình trên. Đầu ra âm thanh điện áp thấp từ micrô được cung cấp cho một chân của bộ so sánh thông qua một bóng bán dẫn bộ khuếch đại trong khi điện áp tham chiếu được đặt trên chân kia bằng cách sử dụng mạch phân áp liên quan đến chiết áp. Khi điện áp đầu ra âm thanh từ micrô vượt quá điện áp đặt trước, bộ so sánh sẽ ở mức cao với 5V (điện áp hoạt động), nếu không bộ so sánh sẽ ở mức thấp ở 0V. Bằng cách này, sóng sin tín hiệu thấp có thể được chuyển đổi thành sóng vuông điện áp cao (5V). Ảnh chụp nhanh của máy hiện sóng bên dưới cho thấy giống nhau trong đó sóng màu vàng là sóng hình sin tín hiệu thấp và màu xanh lam trên là sóng vuông đầu ra. CácCó thể kiểm soát độ nhạy bằng cách thay đổi chiết áp trên mô-đun.
Đo tần số âm thanh trên máy hiện sóng
Mô-đun cảm biến âm thanh này sẽ chuyển đổi sóng âm thanh trong khí quyển thành sóng vuông tần số của ai sẽ bằng tần số của sóng âm thanh. Vì vậy, bằng cách đo tần số của sóng vuông, chúng ta có thể tìm thấy tần số của các tín hiệu âm thanh trong khí quyển. Để đảm bảo mọi thứ đang hoạt động như mong đợi, tôi đã kết nối cảm biến âm thanh với phạm vi của mình để thăm dò tín hiệu đầu ra của nó như trong video bên dưới.
Tôi đã bật chế độ đo trên phạm vi của mình để đo tần số và sử dụng ứng dụng Android (Máy tạo âm tần) từ Cửa hàng Play để tạo tín hiệu âm thanh có tần số đã biết. Như bạn có thể thấy trong GID ở trên, phạm vi có thể đo tín hiệu âm thanh với độ chính xác khá tốt, giá trị của tần số được hiển thị trong phạm vi rất gần với tần số được hiển thị trên điện thoại của tôi. Bây giờ, chúng ta biết mô-đun đang hoạt động, hãy tiến hành giao tiếp Cảm biến âm thanh với Arduino.
Sơ đồ mạch Arduino của máy dò còi
Sơ đồ mạch hoàn chỉnh cho mạch Chuyển đổi phát hiện còi Arduino sử dụng Cảm biến âm thanh được hiển thị bên dưới. Mạch được vẽ bằng phần mềm Fritzing.
Cảm biến âm thanh và mô-đun Rơ le được cấp nguồn bởi chân 5V của Arduino. Chân đầu ra của Cảm biến âm thanh được kết nối với chân kỹ thuật số 8 của Arduino, điều này là do thuộc tính hẹn giờ của chân đó và chúng ta sẽ thảo luận thêm về điều này trong phần lập trình. Mô-đun Relay được kích hoạt bởi chân 13 cũng được kết nối với đèn LED tích hợp trên bảng UNO.
Ở phía nguồn cung cấp AC, dây trung tính được kết nối trực tiếp với chân Chung (C) của mô-đun Rơle trong khi Pha được nối với chân Thường Mở (NO) của rơle thông qua tải AC (bóng đèn). Bằng cách này, khi rơ le được kích hoạt, chân NO sẽ được nối với chân C và như vậy bóng đèn sẽ phát sáng. Nếu không, blub sẽ vẫn bị tắt. Sau khi các kết nối được thực hiện, phần cứng của tôi trông giống như thế này.
Cảnh báo: Làm việc với mạch điện xoay chiều có thể gây nguy hiểm, hãy thận trọng khi xử lý dây dẫn điện và tránh đoản mạch. Những người không có kinh nghiệm về thiết bị điện tử nên sử dụng cầu dao hoặc sự giám sát của người lớn. Bạn đã được cảnh báo!!
Đo tần số với Arduino
Tương tự như phạm vi của chúng tôi đọc tần số của sóng vuông đến, chúng tôi phải lập trình Arduino để tính toán tần số. Chúng tôi đã học cách thực hiện điều này trong hướng dẫn Bộ đếm tần số bằng cách sử dụng xung trong chức năng. Nhưng trong hướng dẫn này, chúng tôi sẽ sử dụng thư viện Freqmeasure để đo tần suất để có kết quả chính xác. Thư viện này sử dụng ngắt bộ định thời bên trong trên chân 8 để đo thời gian xung BẬT. Khi thời gian được đo lường, chúng ta có thể tính tần số bằng công thức F = 1 / T. Tuy nhiên, vì chúng tôi đang sử dụng thư viện trực tiếp, chúng tôi không cần phải xem chi tiết thanh ghi và toán học về cách đo tần số. Thư viện có thể được tải xuống từ liên kết dưới đây:
- Thư viện đo tần số bằng pjrc
Liên kết trên sẽ tải xuống một tệp zip, sau đó bạn có thể thêm tệp zip này vào Arduino IDE của mình bằng cách làm theo đường dẫn Sketch -> include Library -> Add.ZIP Library.
Lưu ý: Sử dụng thư viện sẽ vô hiệu hóa các analogWrite chức năng trên pin 9 và 10 trên UNO kể từ khi bộ đếm thời gian sẽ được chiếm bởi thư viện này. Ngoài ra các chân này sẽ thay đổi nếu sử dụng bảng khác.
Lập trình Arduino của bạn để phát hiện Whistle
Các chương trình hoàn chỉnh với một trình diễn video có thể được tìm thấy ở dưới cùng của trang này. Trong tiêu đề này, tôi sẽ giải thích chương trình bằng cách chia nó thành các đoạn nhỏ.
Giống như mọi khi, chúng tôi bắt đầu chương trình bằng cách bao gồm các thư viện bắt buộc và khai báo các biến bắt buộc. Đảm bảo rằng bạn đã thêm thư viện FreqMeasure.h như đã giải thích trong tiêu đề trên. Trạng thái thay đổi đại diện cho trạng thái của đèn LED và tần số và tính liên tục của các biến được sử dụng để xuất ra tần số đo được và tính liên tục của nó tương ứng.
#include
Bên trong chức năng thiết lập void , chúng tôi bắt đầu màn hình nối tiếp ở tốc độ 9600 baud để gỡ lỗi. Sau đó, sử dụng hàm FreqMeasure.begin () để khởi tạo chân 8 để đo tần số. Chúng tôi cũng khai báo rằng chân 13 (LED_BUILTIN) là đầu ra.
void setup () { Serial.begin (9600); FreqMeasure.begin (); // Các phép đo trên chân 8 theo mặc định pinMode (LED_BUILTIN, OUTPUT); }
Bên trong vòng lặp vô hạn, chúng tôi tiếp tục nghe trên pin 8 bằng cách sử dụng hàm FreqMeasure.available (). Nếu có tín hiệu đến, chúng tôi đo tần số bằng cách sử dụng FreqMeasure.read (). Để tránh sai số do tiếng ồn, chúng tôi đo 100 mẫu và lấy giá trị trung bình. Mã để làm điều tương tự được hiển thị bên dưới.
if (FreqMeasure.available ()) { // trung bình một số lần đọc cùng nhau sum = sum + FreqMeasure.read (); count = count + 1; if (count> 100) { frequency = FreqMeasure.countToFrequency (sum / count); Serial.println (tần số); tổng = 0; đếm = 0; } }
Bạn có thể sử dụng hàm Serial.println () tại đây để kiểm tra giá trị của tần số cho tiếng còi của bạn. Trong trường hợp của tôi, giá trị nhận được là từ 1800Hz đến 2000Hz. Tần số tiếng còi của hầu hết mọi người sẽ rơi vào phạm vi cụ thể này. Nhưng ngay cả những âm thanh khác như âm nhạc hoặc giọng nói cũng có thể nằm dưới tần số này, vì vậy để phân biệt chúng, chúng tôi sẽ theo dõi tính liên tục. Nếu tần số liên tục trong 3 lần thì ta khẳng định đó là tiếng còi. Vì vậy, nếu tần số nằm trong khoảng từ 1800 đến 2000 thì chúng ta tăng biến số được gọi là tính liên tục.
if (tần số> 1800 && tần số <2000) {liên tục ++; Serial.print ("Liên tục ->"); Serial.println (tính liên tục); tần số = 0;}
Nếu giá trị của sự liên tục đạt đến hoặc vượt quá ba, thì chúng tôi thay đổi trạng thái của đèn LED bằng cách chuyển đổi biến được gọi là trạng thái. Nếu trạng thái đã là true, chúng ta thay đổi nó thành false và ngược lại.
if (liên tục> = 3 && state == false) {state = true; liên tục = 0; Serial.println ("Đèn BẬT"); delay (1000);} if (liên tục> = 3 && state == true) {state = false; liên tục = 0; Serial.println ("Đèn đã TẮT"); trì hoãn (1000);}
Máy dò tiếng còi Arduino hoạt động
Khi mã và phần cứng đã sẵn sàng, chúng ta có thể bắt đầu kiểm tra nó. Đảm bảo rằng các kết nối đúng và bật nguồn cho mô-đun. Mở màn hình nối tiếp và bắt đầu huýt sáo, bạn có thể nhận thấy giá trị liên tục được tăng dần và cuối cùng là bật hoặc tắt Đèn. Ảnh chụp nhanh mẫu màn hình nối tiếp của tôi được hiển thị bên dưới.
Khi màn hình nối tiếp thông báo Đèn được bật , chân 13 sẽ được đặt ở mức cao và rơ le sẽ được kích hoạt để bật Đèn. Tương tự, đèn sẽ tắt khi màn hình nối tiếp cho biết Đèn đã tắt . Sau khi đã kiểm tra hoạt động, bạn có thể cấp nguồn cho thiết lập bằng bộ chuyển đổi 12V và bắt đầu điều khiển Thiết bị gia dụng AC bằng còi.
Toàn bộ hoạt động của dự án này có thể được tìm thấy tại video được liên kết bên dưới. Hy vọng bạn đã hiểu hướng dẫn và thích học một cái gì đó mới. Nếu bạn có bất kỳ vấn đề nào trong việc hoàn thành công việc, hãy để lại chúng trong phần bình luận hoặc sử dụng diễn đàn của chúng tôi cho các câu hỏi kỹ thuật khác.