Mục lục:

Tạo bài hát bằng Arduino và động cơ DC: 6 bước
Tạo bài hát bằng Arduino và động cơ DC: 6 bước

Video: Tạo bài hát bằng Arduino và động cơ DC: 6 bước

Video: Tạo bài hát bằng Arduino và động cơ DC: 6 bước
Video: Tự học Arduino cơ bản | Bài 3 Sử dụng Driver L298N điều khiển động cơ DC 2024, Tháng bảy
Anonim
Tạo bài hát bằng Arduino và động cơ DC
Tạo bài hát bằng Arduino và động cơ DC

Một ngày nọ, khi lướt qua một số bài báo về Arduino, tôi phát hiện ra một dự án thú vị sử dụng động cơ bước điều khiển bằng Arduino để tạo ra các giai điệu ngắn. Arduino sử dụng chân PWM (Điều chế độ rộng xung) để chạy động cơ bước ở các tần số cụ thể, tương ứng với các nốt nhạc. Bằng cách xác định thời gian tần số phát khi nào, bạn có thể nghe thấy một giai điệu rõ ràng từ động cơ bước.

Tuy nhiên, khi tôi tự mình thử, tôi thấy rằng động cơ bước mà tôi có không thể quay đủ nhanh để tạo ra âm thanh. Thay vào đó, tôi đã sử dụng động cơ DC, tương đối đơn giản để lập trình và kết nối với Arduino. Một IC L293D thông dụng có thể được sử dụng để dễ dàng điều khiển động cơ từ chân PWM của Arduino và chức năng âm báo gốc () trong Arduino có thể tạo ra tần số cần thiết. Thật ngạc nhiên, tôi không tìm thấy bất kỳ ví dụ hoặc dự án nào sử dụng động cơ DC trên mạng và vì vậy Tài liệu hướng dẫn này là phản hồi của tôi để khắc phục điều đó. Bắt đầu nào!

P. S. Tôi giả sử rằng bạn đã có một số kinh nghiệm với Arduino và quen thuộc với ngôn ngữ lập trình và phần cứng của nó. Bạn nên biết mảng là gì, PWM là gì và cách sử dụng nó cũng như cách hoạt động của điện áp và dòng điện, chỉ cần kể tên một vài thứ. Nếu bạn chưa có hoặc mới bắt đầu Arduino, đừng lo lắng: hãy thử trang bắt đầu này từ trang web chính thức của Arduino và quay lại bất cứ khi nào bạn sẵn sàng.:)

Quân nhu

  • Arduino (Tôi đã sử dụng UNO nhưng bạn có thể sử dụng Arduino khác nếu muốn)
  • Động cơ DC 5V tiêu chuẩn, tốt nhất là loại có thể gắn quạt (xem hình trong "Lắp ráp mạch"
  • IC L293D
  • Có nhiều nút nhấn như các nốt trong bài hát bạn muốn phát
  • Breadboard
  • Dây nhảy

Bước 1: Tổng quan

Đây là cách dự án hoạt động: Arduino sẽ tạo ra một sóng vuông ở một tần số nhất định, nó sẽ xuất ra L293D. L293D được kết nối với nguồn điện bên ngoài mà nó sử dụng để cấp nguồn cho động cơ ở tần số mà Arduino cung cấp. Bằng cách ngăn trục của động cơ DC quay, có thể nghe thấy động cơ đang tắt và bật ở tần số tạo ra âm báo hoặc nốt nhạc. Chúng ta có thể lập trình Arduino để phát các ghi chú khi các nút được nhấn hoặc để tự động phát chúng.

Bước 2: Lắp ráp mạch

Lắp ráp mạch
Lắp ráp mạch
Lắp ráp mạch
Lắp ráp mạch

Để lắp ráp mạch, chỉ cần làm theo sơ đồ Fritzing ở trên.

Mẹo: Lưu ý từ động cơ được nghe tốt nhất khi trục không quay. Tôi đặt một chiếc quạt vào trục của động cơ và sử dụng một số băng keo để giữ yên quạt trong khi động cơ chạy (xem hình). Điều này ngăn trục quay và tạo ra âm thanh rõ ràng, dễ nghe. Bạn có thể phải thực hiện một số tinh chỉnh để có được âm thanh rõ ràng từ động cơ của mình.

Bước 3: Cách thức hoạt động của mạch

Cách thức hoạt động của mạch
Cách thức hoạt động của mạch

L293D là một IC được sử dụng để điều khiển các thiết bị điện áp tương đối cao, dòng điện cao như rơ le và động cơ. Arduino không thể điều khiển hầu hết các động cơ trực tiếp từ đầu ra của nó (và EMF phía sau từ động cơ có thể làm hỏng mạch kỹ thuật số nhạy cảm của Arduino), vì vậy, một IC như L293D có thể được sử dụng với nguồn điện bên ngoài để dễ dàng điều khiển động cơ DC. Nhập tín hiệu vào L293D sẽ xuất tín hiệu tương tự đến động cơ DC mà không có nguy cơ làm hỏng Arduino.

Trên đây là sơ đồ sơ đồ chân / chức năng của L293D từ biểu dữ liệu của nó. Vì chúng ta chỉ điều khiển 1 động cơ (L293D có thể dẫn động 2), chúng ta chỉ cần một mặt của vi mạch. Chân 8 là nguồn, chân 4 và 5 là GND, chân 1 là đầu ra PWM từ Arduino và chân 2 và 7 điều khiển hướng của động cơ. Khi chân 2 ở mức CAO và chân 7 ở mức THẤP, động cơ sẽ quay theo một chiều, và khi chân 2 ở mức THẤP và chân 7 ở mức CAO, động cơ sẽ quay theo chiều ngược lại. Vì chúng tôi không quan tâm động cơ quay theo cách nào nên không quan trọng nếu chân 2 và 7 là THẤP hay CAO, miễn là chúng khác xa nhau. Chân 3 và 6 kết nối với động cơ. Bạn có thể kết nối mọi thứ với phía bên kia (chân 9-16) nếu muốn, nhưng lưu ý rằng chân nguồn và chân PWM chuyển đổi vị trí.

Lưu ý: Nếu bạn đang sử dụng Arduino không có đủ chân cho mỗi nút, bạn có thể sử dụng mạng điện trở để kết nối tất cả các công tắc với một chân tương tự, chẳng hạn như trong tài liệu hướng dẫn này. Cách thức hoạt động nằm ngoài phạm vi của dự án này, nhưng nếu bạn đã từng sử dụng DAC R-2R, bạn sẽ thấy nó quen thuộc. Lưu ý rằng việc sử dụng chân analog sẽ yêu cầu viết lại một phần lớn mã vì không thể sử dụng thư viện Nút với chân analog.

Bước 4: Cách hoạt động của mã

Để dễ dàng xử lý tất cả các nút, tôi đã sử dụng một thư viện có tên là “Nút” của madleech. Tôi đã bao gồm thư viện điều đầu tiên. Tiếp theo, ở dòng 8-22, tôi đã xác định tần số cho các nốt cần thiết để chơi Twinkle, Twinkle, Little Star (bài hát ví dụ), chốt tôi sẽ sử dụng để lái L293D và các nút.

Trong chức năng thiết lập, tôi khởi tạo Serial, các nút và đặt chân trình điều khiển cho L293D ở chế độ đầu ra.

Cuối cùng, trong vòng lặp chính, tôi đã kiểm tra xem một nút đã được nhấn chưa. Nếu có, Arduino sẽ phát ghi chú tương ứng và in tên ghi chú đó vào Trình theo dõi nối tiếp (hữu ích để biết ghi chú nào trên bảng mạch của bạn). Nếu một ghi chú được phát hành, arduino sẽ dừng bất kỳ âm thanh nào bằng noTone ().

Thật không may, do cách cấu trúc của thư viện, tôi không thể tìm ra cách kiểm tra xem một nút đã được nhấn hoặc nhả theo cách ít dài dòng hơn so với việc sử dụng 2 điều kiện trên mỗi ghi chú hay không. Một lỗ hổng khác với mã này là nếu bạn nhấn đồng thời hai nút và sau đó thả một trong số chúng, cả hai ghi chú sẽ bị dừng lại, bởi vì noTone () dừng bất kỳ ghi chú nào được tạo ra bất kể ghi chú nào đã kích hoạt nó.

Bước 5: Lập trình một bài hát

Thay vì sử dụng các nút để phát nốt, bạn cũng có thể lập trình Arduino để tự động phát giai điệu cho bạn. Đây là phiên bản sửa đổi của bản phác thảo đầu tiên chơi Twinkle, Twinkle, Little Star trên động cơ. Phần đầu tiên của bản phác thảo cũng giống như vậy - xác định tần số nốt và tonePin. Chúng ta đến phần mới lúc bpm = "100". Tôi đặt nhịp mỗi phút (bpm), sau đó sử dụng một số phép toán để tìm ra số mili giây mỗi nhịp mà bpm tương đương với. Để làm điều này, tôi đã sử dụng một kỹ thuật được gọi là phân tích chiều (đừng lo lắng - nó không khó như bạn nghe). Nếu bạn đã từng tham gia một khóa học hóa học trung học, bạn chắc chắn đã sử dụng phân tích chiều để chuyển đổi giữa các đơn vị. Các float () ở đó để đảm bảo rằng không có gì trong phương trình được làm tròn cho đến cuối cùng về độ chính xác.

Sau khi chúng tôi có số ms / nhịp, tôi chia hoặc nhân nó một cách thích hợp để tìm các giá trị mili giây của các thời lượng nốt nhạc khác nhau được tìm thấy trong âm nhạc. Sau đó, tôi tạo một mảng của mọi ghi chú theo thứ tự thời gian và một mảng khác với thời lượng của mỗi ghi chú. Điều quan trọng là chỉ số của mỗi nốt nhạc phải khớp với chỉ số thời lượng của nó, nếu không, giai điệu của bạn sẽ bị tắt. Tôi đưa vào các nốt cho Twinkle, Twinkle, Little Star ở đây làm ví dụ nhưng bạn có thể thử bất kỳ bài hát hoặc chuỗi nốt nào bạn muốn.

Điều kỳ diệu thực sự xảy ra trong hàm vòng lặp. Đối với mỗi nốt, tôi chơi giai điệu trong khoảng thời gian mà tôi đã chỉ định trong mảng beat_values. Thay vì sử dụng độ trễ ở đây, điều này sẽ khiến âm báo không được phát, tôi đã ghi lại thời gian kể từ khi chương trình bắt đầu bằng hàm millis () và trừ nó khỏi thời gian hiện tại. Khi thời gian vượt quá thời gian tôi chỉ định nốt sẽ kéo dài trong mảng beat_values, tôi dừng nốt. Độ trễ sau vòng lặp for sẽ tạo thêm khoảng cách giữa các nốt, đảm bảo rằng các nốt tiếp theo có cùng tần số sẽ không hòa trộn với nhau.

Bước 6: Phản hồi

Đó là nó cho dự án này. Nếu có điều gì bạn không hiểu hoặc nếu bạn có bất kỳ đề xuất nào, vui lòng liên hệ với tôi. Vì đây là Tài liệu hướng dẫn đầu tiên của tôi, tôi đánh giá rất cao những nhận xét và đề xuất về cách cải thiện nội dung này. Hẹn gặp lại các bạn trong lần sau!

Đề xuất: