Spisu treści:

Przełącznik strojenia DIP za pomocą 1 pinu: 4 kroki
Przełącznik strojenia DIP za pomocą 1 pinu: 4 kroki

Wideo: Przełącznik strojenia DIP za pomocą 1 pinu: 4 kroki

Wideo: Przełącznik strojenia DIP za pomocą 1 pinu: 4 kroki
Wideo: Podniesienie mocy rezystorem 1.9TDI, Hamownia, DIY, ile mocy więcej? Sprawdzamy 2024, Lipiec
Anonim
Przełącznik strojenia DIP przy użyciu 1 pinu
Przełącznik strojenia DIP przy użyciu 1 pinu

Jakiś czas temu pracowałem nad projektem „music box”, który wymagał wyboru aż 10 różnych fragmentów melodii. Naturalnym wyborem do wybrania konkretnej melodii był 4-pinowy przełącznik, ponieważ 4 przełączniki zapewniają 24=16 różnych ustawień. Jednak implementacja brute force w tym podejściu wymaga 4 styków urządzenia, po jednym dla każdego przełącznika. Ponieważ planowałem użyć ATtiny85 do rozwoju, utrata 4 pinów była trochę za duża. Na szczęście natknąłem się na artykuł, który opisuje genialną metodę wykorzystania 1 pinu analogowego do obsługi wielu wejść przełączników.

Technika multi-switch;1 input wykorzystuje obwód dzielnika napięcia, aby zapewnić unikalną wartość całkowitą dla każdej z 16 możliwych kombinacji ustawień przełącznika. Ten zestaw 16 identyfikatorów liczb całkowitych jest następnie używany w programie użytkowym do powiązania akcji z ustawieniem.

Ta instrukcja wykorzystuje metodę multi-switch do implementacji wyboru melodii dla aplikacji pozytywki. Wybrana melodia jest następnie odtwarzana przez brzęczyk piezoelektryczny za pomocą funkcji tonów Arduino.

Krok 1: Wymagany sprzęt

Wymagany sprzęt
Wymagany sprzęt

Wykorzystanie UNO jako platformy wdrożeniowej minimalizuje liczbę wymaganych komponentów sprzętowych. Implementacja metody wejścia multi-switch wymaga jedynie 4-pinowego przełącznika DIP, 5 rezystorów użytych do dzielnika napięcia i przewodu łączącego do połączeń. Do konfiguracji dodany został brzęczyk piezoelektryczny w celu realizacji selektora melodii pozytywki. Opcjonalnie, w zależności od typu użytego przełącznika, pomocne jest użycie gniazda 2x4 8-pinowego do podłączenia przełącznika do płytki stykowej, ponieważ standardowe kołki przełącznika wydają się być przeznaczone do lutowania do płytki perforowanej, a nie bezpośrednio do płytki stykowej. Gniazdo stabilizuje połączenia przełącznika dip i zapobiega łatwemu podniesieniu przełącznika podczas ustawiania przełączników dwustabilnych.

Nazwa Możliwe źródło Jak używany
4-pinowy przełącznik DIP Dostroić wybór
Gniazdo 2x4 pin (opcjonalnie) Amazonka Słupki na większości przełączników DIP nie trzymają zbyt dobrze przełącznika w płytce stykowej. Gniazdo pomaga uczynić połączenie bardziej solidnym. Alternatywą jest znalezienie przełącznika DIP, który jest naprawdę przeznaczony do użytku na płytce stykowej ze zwykłymi pinami IC.

rezystory:

  • 10 tys. x2
  • 20K
  • 40K
  • 80K
Implementuj dzielnik napięcia
pasywny brzęczyk piezo Amazonka Odtwarzaj melodię sterowaną przez aplikację za pomocą funkcji tonów Arduino

Krok 2: Wyjaśnienie metody multi-switch

Wyjaśnienie metody multi-switch
Wyjaśnienie metody multi-switch

W tej sekcji omówiono podstawowe koncepcje metody wieloprzełącznikowej i rozwinięto równania wymagane do samodzielnego obliczania unikalnych identyfikatorów dla każdej z 16 możliwych konfiguracji ustawień przełączników DIP. Te identyfikatory mogą być następnie użyte w aplikacji do skojarzenia konfiguracji przełącznika z akcją. Na przykład możesz chcieć, aby ustawienie - włącz 1, wyłącz 2, wyłącz 3, wyłącz 4 (1, 0, 0, 0) - aby grać w Amazing Grace i (0, 1, 0, 0), aby grać Lew dziś śpi. Dla zwięzłości i zwięzłości identyfikatory konfiguracji są określane jako komparatory w pozostałej części dokumentu.

Obraz
Obraz

Podstawową koncepcją metody multiswitch jest obwód dzielnika napięcia, który składa się z 2 szeregowych rezystorów podłączonych do napięcia wejściowego. Przewód napięcia wyjściowego jest podłączony między rezystorami, R1 i R2, jak pokazane powyżej. Napięcie wyjściowe dzielnika jest obliczane jako napięcie wejściowe pomnożone przez stosunek rezystora R2 do sumy R1 i R2 (równanie 1). Ten stosunek jest zawsze mniejszy niż 1, więc napięcie wyjściowe jest zawsze mniejsze niż napięcie wejściowe.

Jak pokazano na powyższym schemacie projektowym, multiswitch jest skonfigurowany jako dzielnik napięcia z R2 stałe i R1 równej łącznej/równoważnej rezystancji dla 4 oporników przełączników DIP. Wartość R1 zależy od tego, które przełączniki są włączone, a tym samym przyczyniają się do rezystancji kompozytu. Ponieważ rezystory przełączników dip są równoległe, równanie obliczania równoważnej rezystancji jest podane jako odwrotność rezystorów składowych. Dla naszej konfiguracji i przypadku, gdy wszystkie przełączniki są włączone, równanie staje się

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

dając R1 = 5333,33 woltów. Aby uwzględnić fakt, że w większości ustawień co najmniej jeden z przełączników jest wyłączony, stan przełącznika jest używany jako mnożnik:

1/R1 = s1*1/80000 + s2*1/40000 + s3*1/20000 + s4*1/10000 (2)

gdzie mnożnik stanu, si, jest równy 1, jeśli przełącznik jest włączony i równy 0, jeśli przełącznik jest wyłączony. r1 można teraz wykorzystać do obliczenia współczynnika rezystancji wymaganego w równaniu 1. Ponownie używając przypadku, w którym wszystkie przełączniki są włączone, jako przykładu

STOSUNEK = R2/(R1+R2) = 10000/(5333.33+10000) =.6522

Ostatnim krokiem w obliczeniu przewidywanej wartości komparatora jest pomnożenie współczynnika RATIO przez 1023 w celu emulacji działania funkcji analogRead. Identyfikator przypadku, w którym wszystkie przełączniki są włączone, to

komparator15 = 1023*.6522 = 667

Wszystkie równania są teraz gotowe do obliczania identyfikatorów dla 16 możliwych ustawień przełącznika. Podsumowując:

  1. r1 oblicza się z równania 2
  2. r1 i R2 służą do obliczania skojarzonej rezystancji RATIO
  3. RATIO mnoży się przez 1023, aby otrzymać wartość porównawczą
  4. opcjonalnie przewidywane napięcie wyjściowe można również obliczyć jako RATIO*Vin

Zestaw komparatorów zależy tylko od wartości rezystorów użytych w dzielniku napięcia i jest unikalnym podpisem dla konfiguracji. Ponieważ napięcia wyjściowe dzielnika będą się wahać od uruchomienia do uruchomienia (od odczytu do odczytu), unikatowe w tym kontekście oznacza, że chociaż dwa zestawy identyfikatorów mogą nie być dokładnie takie same, są one wystarczająco blisko, aby różnice między komparatorami składowymi mieściły się w określony interwał. Parametr rozmiaru interwału musi być wystarczająco duży, aby uwzględnić oczekiwane fluktuacje, ale na tyle mały, aby różne ustawienia przełącznika się nie pokrywały. Zwykle 7 działa dobrze dla połówkowej szerokości interwału.

Zestaw komparatorów dla konkretnej konfiguracji można uzyskać kilkoma metodami - uruchom program demonstracyjny i zapisz wartości dla każdego ustawienia; użyj arkusza kalkulacyjnego w następnej sekcji, aby obliczyć; skopiuj istniejący zestaw. Jak wspomniano powyżej, wszystkie zestawy najprawdopodobniej będą nieco inne, ale powinny działać. Proponuję skorzystać z zestawu identyfikatorów autora metody dla konfiguracji multiswitcha oraz arkusza kalkulacyjnego z następnej sekcji, jeśli którykolwiek z rezystorów zostanie znacząco zmieniony lub zostanie dodanych więcej rezystorów.

Poniższy program demonstracyjny ilustruje użycie komparatorów do identyfikacji aktualnego ustawienia przełącznika DIP. W każdym cyklu programu wykonywany jest odczyt analogowy w celu uzyskania identyfikatora dla bieżącej konfiguracji. Ten identyfikator jest następnie porównywany z listą porównawczą, aż do znalezienia dopasowania lub wyczerpania listy. Jeśli zostanie znalezione dopasowanie, wysyłany jest komunikat wyjściowy do weryfikacji; jeśli nie zostanie znaleziony, pojawi się ostrzeżenie. Do pętli wstawiane jest 3-sekundowe opóźnienie, aby okno wyjścia szeregowego nie było przeciążone komunikatami i aby dać trochę czasu na zresetowanie konfiguracji przełączników DIP.

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

// Program demonstracyjny do odczytywania danych wyjściowych dzielnika napięcia i używania go do identyfikacji // konfiguracji przełącznika DIP prądu przez wyszukanie wartości wyjściowej w tablicy // wartości porównawczych dla każdego możliwego ustawienia. Wartości w tablicy wyszukiwania można // uzyskać z poprzedniego uruchomienia konfiguracji lub przez obliczenia // na podstawie podstawowych równań. //------------------------------------------------ -------------------------------------- int komparator[16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Zdefiniuj zmienne przetwarzania int dipPin = A0; // pin analogowy wejścia dzielnika napięcia int dipIn = 0; // przechowuje wyjście napięcia dzielnika przetłumaczone przez analogRead int count = 0; // licznik pętli int epsilon = 7; // interwał porównania o połowie szerokości bool dipFound = false; // prawda, jeśli w tabeli wyszukiwania znaleziono aktualne wyjście dzielnika napięcia void setup() { pinMode(dipPin, INPUT); // skonfiguruj pin dzielnika napięcia jako INPUT Serial.begin(9600); // włącz komunikację szeregową } void loop() { delay(3000); // zapobiega zbyt szybkiemu przewijaniu danych wyjściowych // Zainicjuj parametry wyszukiwania count = 0; dipZnaleziono = fałsz; // Odczytaj i udokumentuj aktualne napięcie wyjściowe dipIn = analogRead(dipPin); Serial.print("wyjście dzielnika"); Serial.print(dipIn); // Przeszukaj listę porównawczą dla bieżącej wartości while((liczba < 16) && (!dipFound)) { if(abs(dipIn - comparator[liczba]) <= epsilon) { // znaleziono dipFound = true; Serial.print("znaleziono we wpisie"); Serial.print(liczba); Serial.println("wartość" + String(komparator[liczba])); przerwa; } liczba++; } if(!dipFound) { // wartość nie w tabeli; nie powinno się zdarzyć Serial.println("Ups! Nie znaleziono; lepiej zadzwoń do Pogromców Duchów"); } }

Krok 3: Arkusz porównawczy

Obraz
Obraz

Obliczenia dla 16 wartości porównawczych podano w powyższym arkuszu kalkulacyjnym. Towarzyszący plik Excel jest dostępny do pobrania na dole tej sekcji.

Kolumny arkusza kalkulacyjnego A-D rejestrują wartości rezystorów przełącznika DIP i 16 możliwych ustawień przełącznika. Należy pamiętać, że sprzętowy przełącznik DIP pokazany na schemacie Fritzing jest w rzeczywistości ponumerowany od lewej do prawej, a nie od prawej do lewej pokazanej w arkuszu kalkulacyjnym. Uważam, że jest to nieco mylące, ale alternatywa nie umieszcza konfiguracji „1” (0, 0, 0, 1) na pierwszym miejscu listy. Kolumna E wykorzystuje wzór 2 z poprzedniej sekcji do obliczenia równoważnej rezystancji dzielnika napięcia R1 dla ustawienia. Kolumna F wykorzystuje ten wynik do obliczenia skojarzonego RATIO rezystancji, a na koniec kolumna G mnoży RATIO przez wartość analogRead max (1023), aby uzyskać przewidywaną wartość komparatora. Ostatnie 2 kolumny zawierają rzeczywiste wartości z przebiegu programu demonstracyjnego wraz z różnicami między wartościami przewidywanymi i rzeczywistymi.

W poprzedniej sekcji wspomniano o trzech metodach uzyskania zestawu wartości porównawczych, w tym o rozszerzeniu tego arkusza kalkulacyjnego w przypadku znacznej zmiany wartości rezystorów lub dodania większej liczby przełączników. Wydaje się, że niewielkie różnice w wartościach rezystorów nie wpływają znacząco na wyniki końcowe (co jest dobre, ponieważ specyfikacje rezystorów dają tolerancję, powiedzmy 5%, a rezystor rzadko jest równy jego rzeczywistej wartości).

Krok 4: Odtwórz melodię

Odtwórz melodię
Odtwórz melodię

Aby zilustrować, w jaki sposób technika multi-switch może być wykorzystana w aplikacji, porównawczy program demonstracyjny z sekcji „Objaśnienie metody” został zmodyfikowany w celu zaimplementowania przetwarzania wyboru melodii dla programu pozytywki. Zaktualizowaną konfigurację aplikacji pokazano powyżej. Jedynym dodatkiem do sprzętu jest pasywny piezoelektryczny brzęczyk do odtwarzania wybranej melodii. Podstawową zmianą w oprogramowaniu jest dodanie procedury do odtwarzania melodii, po zidentyfikowaniu, za pomocą brzęczyka i procedury tonów Arduino.

Dostępne fragmenty tuningu są zawarte w pliku nagłówkowym Tunes.h, wraz z definicją niezbędnych struktur pomocniczych. Każda melodia jest zdefiniowana jako tablica struktur powiązanych z nutami, zawierająca częstotliwość i czas trwania nuty. Częstotliwości nut są zawarte w osobnym pliku nagłówkowym Pitches.h. Program i pliki nagłówkowe są dostępne do pobrania na końcu tej sekcji. Wszystkie trzy pliki powinny znajdować się w tym samym katalogu.

Selekcja i identyfikacja przebiega w następujący sposób:

  1. „Użytkownik” ustawia przełączniki DIP w konfiguracji związanej z żądaną melodią
  2. w każdym cyklu pętli programu identyfikator aktualnego ustawienia przełącznika DIP jest uzyskiwany przez analogRead
  3. Identyfikator konfiguracji kroku 2 jest porównywany z każdym z komparatorów na dostępnej liście melodii
  4. Jeśli zostanie znaleziony mecz, wywoływana jest procedura playTune z informacjami potrzebnymi do uzyskania dostępu do listy nut

    Korzystając z funkcji tonów Arduino, każda nuta jest odtwarzana przez brzęczyk

  5. Jeśli nie zostanie znalezione dopasowanie, nie zostanie podjęte żadne działanie
  6. powtórz 1-5

Ustawienia przełączników DIP dla dostępnych utworów pokazano w poniższej tabeli, gdzie 1 oznacza, że przełącznik jest włączony, a 0 wyłączony. Przypomnijmy, że sposób ustawienia przełącznika DIP umieszcza przełącznik 1 w skrajnej lewej pozycji (tej związanej z rezystorem 80K).

NAZWA Przełącznik 1 Przełącznik 2 Przełącznik 3 Przełącznik 4
Danny chłopiec 1 0 0 0
Mały niedźwiedź 0 1 0 0
Lew śpi dziś w nocy 1 1 0 0
Nikt nie zna kłopotów 0 0 1 0
Niesamowita łaska 0 0 0 1
Pusta przestrzeń 1 0 0 1
SzyderczyPtaki Wzgórze 1 0 1 1

Jakość dźwięku z brzęczyka piezo z pewnością nie jest świetna, ale jest przynajmniej rozpoznawalna. W rzeczywistości, jeśli tony są mierzone, są one bardzo zbliżone do dokładnej częstotliwości nut. Jedną z interesujących technik stosowanych w programie jest przechowywanie danych strojenia w sekcji pamięci flash/programu zamiast domyślnej sekcji pamięci danych za pomocą dyrektywy PROGMEM. Sekcja danych zawiera zmienne przetwarzania programu i jest znacznie mniejsza, około 512 bajtów dla niektórych mikrokontrolerów ATtiny.

Zalecana: