Mục lục:

DIP Tune Selector Sử dụng 1 Pin: 4 Bước
DIP Tune Selector Sử dụng 1 Pin: 4 Bước

Video: DIP Tune Selector Sử dụng 1 Pin: 4 Bước

Video: DIP Tune Selector Sử dụng 1 Pin: 4 Bước
Video: Vinh Xô | iPhone 14 của mình để qua đêm tụt 60% pin: anh em chú ý đừng phạm phải lỗi này 2024, Tháng mười một
Anonim
DIP Tune Selector Sử dụng 1 Pin
DIP Tune Selector Sử dụng 1 Pin

Một thời gian trước, tôi đã làm việc cho một dự án "hộp nhạc" cần phải chọn giữa 10 đoạn giai điệu khác nhau. Một lựa chọn tự nhiên để chọn một giai điệu cụ thể là công tắc nhúng 4 pin vì 4 công tắc cung cấp 24= 16 cài đặt khác nhau. Tuy nhiên, việc triển khai brute force cho cách tiếp cận này yêu cầu 4 chân thiết bị, một chân cho mỗi công tắc. Vì tôi đã định sử dụng ATtiny85 để phát triển nên việc mất 4 chân là hơi nhiều. May mắn thay, tôi đã tình cờ gặp một bài báo mô tả một phương pháp khéo léo để sử dụng 1 chân analog để xử lý nhiều đầu vào công tắc.

Kỹ thuật đa công tắc; 1 đầu vào sử dụng mạch Phân chia điện áp để cung cấp giá trị số nguyên duy nhất cho mỗi trong số 16 tổ hợp cài đặt công tắc có thể có. Sau đó, tập hợp 16 mã định danh số nguyên này được sử dụng trong chương trình ứng dụng để liên kết một hành động với một cài đặt.

Tập lệnh này sử dụng phương pháp đa công tắc để thực hiện lựa chọn giai điệu cho ứng dụng hộp nhạc. Giai điệu đã chọn sau đó được phát qua bộ rung piezo bằng chức năng âm thanh Arduino.

Bước 1: Phần cứng cần thiết

Phần cứng bắt buộc
Phần cứng bắt buộc

Việc sử dụng UNO làm nền tảng triển khai sẽ giảm thiểu số lượng các thành phần phần cứng được yêu cầu. Việc thực hiện phương pháp đầu vào nhiều công tắc chỉ yêu cầu một công tắc nhúng 4 chân, 5 điện trở được sử dụng cho bộ chia điện áp và dây nối cho các kết nối. Một bộ rung piezo được thêm vào cấu hình để triển khai bộ chọn giai điệu hộp nhạc. Tùy chọn, tùy thuộc vào loại công tắc nhúng được sử dụng, sẽ hữu ích khi sử dụng ổ cắm 2x4 8 chân để kết nối công tắc nhúng với bảng mạch vì các chân công tắc nhúng tiêu chuẩn dường như được làm để hàn vào bảng điều khiển không cắm trực tiếp vào bảng mạch. Ổ cắm giúp ổn định các kết nối của công tắc nhúng và giữ cho công tắc không bị nhấc ra dễ dàng khi đặt các công tắc bật tắt.

Tên Nguồn có thể Cách sử dụng
Công tắc nhúng 4 chân Điều chỉnh lựa chọn
Ổ cắm chân 2x4 (Tùy chọn) Amazon Các bài viết trên hầu hết các công tắc nhúng không giữ công tắc tốt trong bảng mạch. Ổ cắm giúp kết nối chắc chắn hơn. Một giải pháp thay thế là tìm một công tắc nhúng thực sự được sản xuất để sử dụng trên breadboard với các chân IC thông thường.

điện trở:

  • 10 nghìn x2
  • 20 nghìn
  • 40 nghìn
  • 80 nghìn
Thực hiện bộ chia điện áp
bộ rung piezo thụ động Amazon Phát giai điệu do ứng dụng điều khiển thông qua chức năng âm thanh Arduino

Bước 2: Giải thích phương pháp đa chuyển đổi

Giải thích phương pháp đa chuyển đổi
Giải thích phương pháp đa chuyển đổi

Phần này thảo luận về các khái niệm cơ bản cho phương pháp đa công tắc và phát triển các phương trình cần thiết để tính toán độc lập các số nhận dạng duy nhất cho mỗi trong số 16 cấu hình cài đặt công tắc nhúng có thể có. Sau đó, những số nhận dạng này có thể được sử dụng trong một chương trình ứng dụng để liên kết cấu hình chuyển đổi với một hành động. Ví dụ: bạn có thể muốn cài đặt - bật 1 bật, tắt 2, tắt 3, tắt 4 (1, 0, 0, 0) - để chơi Amazing Grace và (0, 1, 0, 0) để chơi Sư Tử Ngủ Đêm nay. Để ngắn gọn và súc tích, các mã định danh cấu hình được gọi là bộ so sánh trong phần còn lại của tài liệu.

Hình ảnh
Hình ảnh

Khái niệm cơ bản cho phương pháp đa công tắc là mạch Phân áp bao gồm 2 điện trở mắc nối tiếp được kết nối với điện áp đầu vào. Dây dẫn điện áp đầu ra được nối giữa các điện trở, R1 và R2, như được trình bày ở trên. Điện áp đầu ra của bộ chia được tính bằng điện áp đầu vào nhân với tỷ số của điện trở R2 đến tổng của R1 và R2 (phương trình 1). Tỷ số này luôn nhỏ hơn 1 nên điện áp đầu ra luôn nhỏ hơn điện áp đầu vào.

Như đã chỉ ra trong sơ đồ thiết kế ở trên, bộ chuyển mạch đa năng được cấu hình như một bộ chia điện áp với R2 cố định và R1 bằng điện trở tổng hợp / tương đương đối với 4 điện trở của công tắc nhúng. Giá trị của R1 phụ thuộc vào công tắc nhúng nào được bật và do đó, góp phần vào điện trở tổng hợp. Vì các điện trở của công tắc nhúng mắc song song, nên phương trình tính toán điện trở tương đương được phát biểu theo nghịch đảo của các điện trở thành phần. Đối với cấu hình của chúng tôi và trường hợp tất cả các công tắc được bật, phương trình trở thành

1 / R1 = 1/80000 + 1/40000 + 1/20000 + 1/10000

đưa ra R1 = 5333,33 vôn. Để giải thích cho thực tế là hầu hết các cài đặt có ít nhất một trong các công tắc bị tắt, trạng thái chuyển đổi được sử dụng làm hệ số:

1 / R1 = s1* 1/80000 + giây2* 1/40000 + giây3* 1/20000 + giây4*1/10000 (2)

trong đó hệ số trạng thái, stôi, bằng 1 nếu bật công tắc và bằng 0 nếu tắt công tắc. NS1 bây giờ có thể được sử dụng để tính toán tỷ lệ điện trở cần thiết trong phương trình 1. Sử dụng trường hợp tất cả các công tắc được bật như ví dụ một lần nữa

RATIO = R2/(NS1+ R2) = 10000/(5333.33+10000) =.6522

Bước cuối cùng để tính toán giá trị so sánh dự đoán là nhân RATIO với 1023 để mô phỏng tác động của hàm analogRead. Mã định danh cho trường hợp tất cả các công tắc đang bật khi đó

người so sánh15 = 1023*.6522 = 667

Tất cả các phương trình hiện đã được đưa ra để tính toán các số nhận dạng cho 16 cài đặt chuyển đổi có thể có. Tóm lại:

  1. NS1 được tính bằng phương trình 2
  2. NS1 và R2 được sử dụng để tính toán RATIO điện trở liên quan
  3. RATIO được nhân với 1023 để nhận được giá trị so sánh
  4. tùy chọn, điện áp đầu ra dự đoán cũng có thể được tính bằng RATIO * Vin

Bộ so sánh chỉ phụ thuộc vào các giá trị điện trở được sử dụng cho bộ phân áp và là một chữ ký duy nhất cho cấu hình. Bởi vì điện áp đầu ra của bộ chia sẽ dao động từ khi chạy (và đọc để đọc), duy nhất trong ngữ cảnh này có nghĩa là trong khi hai bộ số nhận dạng có thể không hoàn toàn giống nhau, chúng đủ gần để sự khác biệt của bộ so sánh thành phần nằm trong một khoảng trước nhỏ khoảng thời gian xác định. Thông số kích thước khoảng thời gian phải được chọn đủ lớn để tính đến các biến động dự kiến nhưng đủ nhỏ để các cài đặt chuyển đổi khác nhau không trùng lặp. Thông thường 7 hoạt động tốt cho khoảng nửa chiều rộng.

Một tập hợp các bộ so sánh cho một cấu hình cụ thể có thể được lấy bằng một số phương pháp - chạy chương trình demo và ghi lại các giá trị cho mỗi cài đặt; sử dụng bảng tính trong phần tiếp theo để tính toán; sao chép một tập hợp hiện có. Như đã lưu ý ở trên, tất cả các bộ rất có thể sẽ hơi khác một chút nhưng sẽ hoạt động. Tôi khuyên bạn nên sử dụng bộ số nhận dạng của tác giả phương pháp cho thiết lập đa công tắc và bảng tính từ phần tiếp theo nếu bất kỳ điện trở nào bị thay đổi đáng kể hoặc nhiều điện trở được thêm vào.

Chương trình demo sau đây minh họa việc sử dụng các bộ so sánh để xác định cài đặt công tắc nhúng hiện tại. Trong mỗi chu kỳ chương trình, analogRead được thực hiện để lấy mã định danh cho cấu hình hiện tại. Sau đó, số nhận dạng này được so sánh trên danh sách so sánh cho đến khi tìm thấy khớp hoặc danh sách hết. Nếu tìm thấy một kết quả phù hợp, một thông báo đầu ra sẽ được đưa ra để xác minh; nếu không tìm thấy một cảnh báo sẽ được đưa ra. Chậm trễ 3 giây được chèn vào vòng lặp để cửa sổ đầu ra nối tiếp không bị quá tải bởi các thông báo và để có một khoảng thời gian để đặt lại cấu hình công tắc nhúng.

//-------------------------------------------------------------------------------------

// Chương trình demo để đọc đầu ra của bộ chia điện áp và sử dụng nó để xác định cấu hình // công tắc nhúng hiện tại bằng cách tìm kiếm giá trị đầu ra trong một mảng // giá trị so sánh cho mỗi cài đặt có thể. Các giá trị trong mảng tra cứu // có thể được lấy từ lần chạy cấu hình trước đó hoặc thông qua phép tính // dựa trên các phương trình cơ bản. // ------------------------------------------------ -------------------------------------- int comparator [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Định nghĩa biến xử lý int dipPin = A0; // chân analog cho đầu vào bộ chia điện áp int dipIn = 0; // giữ đầu ra điện áp bộ chia được dịch bởi analogRead int count = 0; // bộ đếm vòng lặp int epsilon = 7; // khoảng so sánh nửa chiều rộng bool dipFound = false; // true nếu đầu ra bộ chia điện áp hiện tại được tìm thấy trong bảng tra cứu void setup () {pinMode (dipPin, INPUT); // cấu hình chân chia điện áp là INPUT Serial.begin (9600); // kích hoạt giao tiếp nối tiếp} void loop () {delay (3000); // giữ đầu ra không cuộn quá nhanh // Khởi tạo tham số tra cứu count = 0; dipFound = false; // Đọc và lập tài liệu điện áp đầu ra hiện tại dipIn = analogRead (dipPin); Serial.print ("đầu ra bộ chia"); Serial.print (dipIn); // Tìm kiếm danh sách bộ so sánh cho giá trị hiện tại while ((count <16) && (! DipFound)) {if (abs (dipIn - comparator [count]) <= epsilon) {// tìm thấy nó dipFound = true; Serial.print ("tìm thấy lúc nhập"); Serial.print (số lượng); Serial.println ("giá trị" + Chuỗi (bộ so sánh [đếm])); nghỉ; } đếm ++; } if (! dipFound) {// giá trị không có trong bảng; không nên xảy ra Serial.println ("OOPS! Không tìm thấy; tốt hơn nên gọi Ghost Busters"); }}

Bước 3: Bảng tính so sánh

Hình ảnh
Hình ảnh

Các phép tính cho 16 giá trị của bộ so sánh được đưa ra trong bảng tính hiển thị ở trên. Tệp excel đi kèm có sẵn để tải xuống ở cuối phần này.

Các cột bảng tính A-D ghi lại các giá trị điện trở của công tắc nhúng và 16 cài đặt công tắc có thể có. Xin lưu ý rằng công tắc DIP phần cứng được hiển thị trong sơ đồ thiết kế fritzing thực sự được đánh số từ trái sang phải thay vì đánh số từ phải sang trái được hiển thị trong bảng tính. Tôi thấy điều này hơi khó hiểu nhưng giải pháp thay thế không đặt cấu hình "1" (0, 0, 0, 1) ở đầu danh sách. Cột E sử dụng công thức 2 của phần trước để tính điện trở tương đương của Bộ chia điện áp R1 cho cài đặt. Cột F sử dụng kết quả này để tính toán RATIO điện trở liên quan và cuối cùng, Cột G nhân RATIO với giá trị tối đa analogRead (1023) để thu được giá trị so sánh dự đoán. 2 cột cuối cùng chứa các giá trị thực từ một lần chạy chương trình demo cùng với sự khác biệt giữa các giá trị được dự đoán và thực tế.

Phần trước đã đề cập đến ba phương pháp để có được tập hợp các giá trị so sánh bao gồm phần mở rộng của bảng tính này nếu các giá trị điện trở bị thay đổi đáng kể hoặc nhiều công tắc được thêm vào. Có vẻ như sự khác biệt nhỏ trong các giá trị điện trở không ảnh hưởng đáng kể đến kết quả cuối cùng (điều này là tốt vì các thông số kỹ thuật của điện trở cung cấp dung sai, chẳng hạn như 5%, và điện trở hiếm khi bằng giá trị đã nêu thực tế của nó).

Bước 4: Phát một giai điệu

Phát một giai điệu
Phát một giai điệu

Để minh họa cách kỹ thuật đa chuyển đổi có thể được sử dụng trong một ứng dụng, chương trình demo so sánh từ phần "Giải thích phương pháp" được sửa đổi để thực hiện xử lý lựa chọn giai điệu cho chương trình hộp nhạc. Cấu hình ứng dụng cập nhật được hiển thị ở trên. Sự bổ sung duy nhất cho phần cứng là một bộ rung piezo thụ động để phát giai điệu đã chọn. Thay đổi cơ bản đối với phần mềm là bổ sung quy trình phát một giai điệu, khi đã được xác định, sử dụng bộ rung và quy trình giai điệu Arduino.

Các đoạn mã giai điệu có sẵn được chứa trong tệp tiêu đề, Tunes.h, cùng với định nghĩa về các cấu trúc hỗ trợ cần thiết. Mỗi giai điệu được định nghĩa là một mảng cấu trúc liên quan đến nốt có chứa tần số và thời lượng của nốt. Các tần số nốt được chứa trong một tệp tiêu đề riêng, Pitches.h. Chương trình và tệp tiêu đề có sẵn để tải xuống ở cuối phần này. Tất cả ba tệp phải được đặt trong cùng một thư mục.

Việc lựa chọn và xác định tiến hành như sau:

  1. "Người dùng" đặt các công tắc nhúng trong cấu hình được liên kết với giai điệu mong muốn
  2. mỗi chu kỳ vòng lặp chương trình, số nhận dạng cho cài đặt công tắc nhúng hiện tại được thu thập thông qua analogRead
  3. Mã định danh cấu hình bước 2 được so sánh với từng bộ so sánh trong danh sách giai điệu có sẵn
  4. Nếu khớp được tìm thấy, quy trình playTune được gọi với thông tin cần thiết để truy cập danh sách ghi chú điều chỉnh

    Sử dụng chức năng âm Arduino, mỗi nốt nhạc được phát qua bộ rung

  5. Nếu không tìm thấy kết quả phù hợp, không có hành động nào được thực hiện
  6. lặp lại 1-5

Cài đặt công tắc DIP cho các giai điệu có sẵn được hiển thị trong bảng bên dưới, trong đó công tắc 1 có nghĩa là bật, công tắc 0 tắt. Nhớ lại rằng cách công tắc nhúng được định hướng đặt công tắc 1 ở vị trí ngoài cùng bên trái (vị trí được kết hợp với điện trở 80K).

TÊN Chuyển 1 Chuyển 2 Chuyển 3 Chuyển 4
Danny Boy 1 0 0 0
Gấu con 0 1 0 0
Sư tử ngủ đêm nay 1 1 0 0
Không ai biết rắc rối 0 0 1 0
Ân điển tuyệt vời 0 0 0 1
Không gian trống 1 0 0 1
MockingBird Hill 1 0 1 1

Chất lượng âm thanh từ piezo buzzer chắc chắn không lớn nhưng ít nhất nó cũng có thể nhận biết được. Trên thực tế, nếu các âm được đo, chúng rất gần với tần số chính xác của nốt. Một kỹ thuật thú vị được sử dụng trong chương trình là lưu trữ dữ liệu điều chỉnh trong phần bộ nhớ flash / chương trình thay vì phần bộ nhớ dữ liệu mặc định bằng cách sử dụng chỉ thị PROGMEM. Phần dữ liệu chứa các biến xử lý chương trình và nhỏ hơn nhiều, khoảng 512 byte đối với một số vi điều khiển ATtiny.

Đề xuất: