Spisu treści:

Tworzenie utworów za pomocą Arduino i silnika prądu stałego: 6 kroków
Tworzenie utworów za pomocą Arduino i silnika prądu stałego: 6 kroków

Wideo: Tworzenie utworów za pomocą Arduino i silnika prądu stałego: 6 kroków

Wideo: Tworzenie utworów za pomocą Arduino i silnika prądu stałego: 6 kroków
Wideo: Lesson 53: Using L298N Motor Driver for DC Motor Control | Arduino Step By Step Course 2024, Listopad
Anonim
Tworzenie utworów za pomocą Arduino i silnika prądu stałego
Tworzenie utworów za pomocą Arduino i silnika prądu stałego

Któregoś dnia, przeglądając artykuły o Arduino, zauważyłem ciekawy projekt, w którym do tworzenia krótkich melodii używano sterowanych przez Arduino silników krokowych. Arduino używał pinu PWM (Pulse Width Modulation) do uruchamiania silnika krokowego na określonych częstotliwościach, odpowiadających nutom muzycznym. Dzięki odmierzeniu czasu, które częstotliwości były odtwarzane, z silnika krokowego można było usłyszeć wyraźną melodię.

Jednak kiedy sam to wypróbowałem, stwierdziłem, że silnik krokowy, który posiadam, nie może obracać się wystarczająco szybko, aby wytworzyć ton. Zamiast tego użyłem silnika prądu stałego, który jest stosunkowo prosty do zaprogramowania i podłączenia do Arduino. Do łatwego sterowania silnikiem z pinu PWM Arduino można użyć wspólnego układu scalonego L293D, a funkcja natywnego tone() w Arduino może generować niezbędną częstotliwość. Ku mojemu zaskoczeniu nie znalazłem żadnych przykładów ani projektów wykorzystujących silnik prądu stałego w Internecie, więc ta instrukcja jest moją odpowiedzią na to, aby temu zaradzić. Zacznijmy!

PS Zakładam, że masz już pewne doświadczenie z Arduino i znasz jego język programowania i sprzęt. Powinieneś wiedzieć, czym są macierze, czym jest PWM i jak z niego korzystać, jak działa napięcie i prąd, żeby wymienić tylko kilka rzeczy. Jeśli jeszcze tam nie jesteś lub dopiero zacząłeś korzystać z Arduino, nie martw się: wypróbuj tę stronę wprowadzającą z oficjalnej strony Arduino i wróć, gdy będziesz gotowy.:)

Kieszonkowe dzieci

  • Arduino (użyłem UNO, ale możesz użyć innego Arduino, jeśli chcesz)
  • Standardowy silnik 5 V DC, najlepiej taki, który może mieć dołączony wentylator (patrz rysunek w "Montaż obwodu"
  • Układ scalony L293D
  • Tyle przycisków, ile nut w utworze, który chcesz odtworzyć
  • Deska do krojenia chleba
  • Przewody połączeniowe

Krok 1: Przegląd

Oto jak działa ten projekt: Arduino wygeneruje falę prostokątną o określonej częstotliwości, którą wysyła do L293D. L293D jest podłączony do zewnętrznego zasilacza, który wykorzystuje do zasilania silnika z częstotliwością podaną przez Arduino. Zapobiegając obracaniu się wału silnika prądu stałego, można usłyszeć, jak silnik wyłącza się i włącza z częstotliwością, która wytwarza dźwięk lub nutę. Arduino możemy zaprogramować do odtwarzania nut po naciśnięciu przycisków lub do automatycznego ich odtwarzania.

Krok 2: Montaż obwodu

Składanie obwodu
Składanie obwodu
Składanie obwodu
Składanie obwodu

Aby zmontować obwód, po prostu postępuj zgodnie z powyższym schematem Fritzing.

Wskazówka: Dźwięk z silnika najlepiej słychać, gdy wał się nie obraca. Umieściłem wentylator na wale mojego silnika i użyłem taśmy klejącej, aby utrzymać wentylator nieruchomo podczas pracy silnika (patrz zdjęcie). Uniemożliwiło to obracanie się wału i wytworzyło wyraźny, słyszalny dźwięk. Być może będziesz musiał dokonać pewnych poprawek, aby uzyskać czysty dźwięk z silnika.

Krok 3: Jak działa obwód

Jak działa obwód
Jak działa obwód

L293D to układ scalony używany do sterowania urządzeniami o stosunkowo wysokim napięciu i wysokim prądzie, takimi jak przekaźniki i silniki. Arduino nie jest w stanie sterować większością silników bezpośrednio z wyjścia (a tylna siła elektromotoryczna z silnika może uszkodzić wrażliwe obwody cyfrowe Arduino), więc układ scalony, taki jak L293D, może być używany z zewnętrznym zasilaczem, aby łatwo napędzać silnik prądu stałego. Wprowadzenie sygnału do L293D spowoduje wysłanie tego samego sygnału do silnika prądu stałego bez ryzyka uszkodzenia Arduino.

Powyżej znajduje się schemat pinout / funkcjonalny L293D z jego arkusza danych. Ponieważ napędzamy tylko 1 silnik (L293D może napędzać 2), potrzebujemy tylko jednej strony układu scalonego. Pin 8 to zasilanie, piny 4 i 5 to GND, pin 1 to wyjście PWM z Arduino, a piny 2 i 7 kontrolują kierunek silnika. Gdy pin 2 jest WYSOKI, a pin 7 NISKI, silnik obraca się w jedną stronę, a gdy pin 2 jest NISKI, a pin 7 WYSOKI, silnik obraca się w drugą stronę. Ponieważ nie obchodzi nas, w którą stronę obraca się silnik, nie ma znaczenia, czy piny 2 i 7 są NISKI lub WYSOKI, o ile różnią się od siebie. Piny 3 i 6 łączą się z silnikiem. Możesz podłączyć wszystko z drugiej strony (piny 9-16), jeśli chcesz, ale pamiętaj, że piny zasilania i PWM zamieniają się miejscami.

Uwaga: Jeśli używasz Arduino, który nie ma wystarczającej liczby pinów dla każdego przycisku, możesz użyć sieci rezystorów, aby podłączyć wszystkie przełączniki do jednego pinu analogowego, tak jak w tej instrukcji. To, jak to działa, wykracza poza zakres tego projektu, ale jeśli kiedykolwiek używałeś DAC-a R-2R, powinieneś go uznać za znajomy. Pamiętaj, że użycie pinu analogowego będzie wymagało przepisania dużej części kodu, ponieważ biblioteki przycisków nie można używać z pinami analogowymi.

Krok 4: Jak działa kod

Aby ułatwić sobie obsługę wszystkich przycisków, wykorzystałem bibliotekę madleech o nazwie „Button”. Najpierw włączyłem bibliotekę. Następnie w wierszach 8-22 określiłem częstotliwości dla nut potrzebnych do grania Twinkle, Twinkle, Little Star (przykładowy utwór), pin, którego użyję do sterowania L293D oraz przyciski.

W funkcji konfiguracji zainicjowałem szeregowy, przyciski i ustawiłem pin sterownika dla L293D w tryb wyjściowy.

Na koniec w pętli głównej sprawdziłem, czy nie został wciśnięty jakiś przycisk. Jeśli tak, Arduino odtwarza odpowiednią notatkę i drukuje nazwę notatki na monitorze szeregowym (przydatne, aby wiedzieć, które notatki są na płycie prototypowej). Jeśli nuta zostanie zwolniona, arduino zatrzymuje każdy dźwięk za pomocą noTone().

Niestety, ze względu na strukturę biblioteki, nie mogłem znaleźć sposobu, aby sprawdzić, czy przycisk został naciśnięty lub zwolniony w mniej szczegółowy sposób niż przy użyciu 2 warunkowych na nutę. Kolejną wadą tego kodu jest to, że gdybyś wcisnął dwa przyciski jednocześnie, a następnie zwolnił jeden z nich, obie nuty zostałyby zatrzymane, ponieważ noTone() zatrzymuje generowanie wszelkich nut, niezależnie od tego, która nuta je wywołała.

Krok 5: Programowanie utworu

Zamiast używać przycisków do grania nut, możesz również zaprogramować Arduino, aby automatycznie odtwarzał melodię. Oto zmodyfikowana wersja pierwszego szkicu, który odtwarza Twinkle, Twinkle, Little Star na silniku. Pierwsza część szkicu jest taka sama – definiuje częstotliwości nut i tonePin. Do nowej części dochodzimy przy bpm="100". Ustawiam uderzenia na minutę (bpm), a następnie używam matematyki, aby obliczyć liczbę milisekund na uderzenie, z którą równa się bpm. Aby to zrobić, użyłem techniki zwanej analizą wymiarową (nie martw się - nie jest tak trudna, jak się wydaje). Jeśli kiedykolwiek uczęszczałeś na kurs chemii w szkole średniej, na pewno użyłeś analizy wymiarowej do konwersji jednostek. Funkcja floats() jest po to, aby zapewnić, że nic w równaniu nie zostanie zaokrąglone do samego końca dla dokładności.

Po określeniu liczby ms na uderzenie podzieliłem lub pomnożyłem ją odpowiednio, aby znaleźć wartości milisekund różnych czasów trwania nut występujących w muzyce. Następnie tworzę tablicę każdej nuty w porządku chronologicznym i kolejną z czasem trwania każdej nuty. Bardzo ważne jest, aby indeks każdej nuty odpowiadał indeksowi czasu jej trwania, w przeciwnym razie twoja melodia zabrzmi. Jako przykład umieściłem notatki do Twinkle, Twinkle, Little Star, ale możesz wypróbować dowolną piosenkę lub sekwencję nut, którą chcesz.

Prawdziwa magia dzieje się w funkcji pętli. Dla każdej nuty odtwarzam ton przez czas określony w tablicy beat_values. Zamiast używać tutaj opóźnienia, które powodowałoby, że dźwięk nie byłby odtwarzany, zapisałem czas od uruchomienia programu za pomocą funkcji millis() i odjąłem go od czasu bieżącego. Gdy czas przekroczy czas, który określiłem jako ostatnią nutę w tablicy beat_values, zatrzymuję nutę. Opóźnienie po pętli for ma na celu dodanie przerwy między nutami, zapewniając, że kolejne nuty o tej samej częstotliwości nie będą się ze sobą mieszać.

Krok 6: Informacje zwrotne

To tyle w przypadku tego projektu. Jeśli jest coś, czego nie rozumiesz lub masz jakieś sugestie, nie wahaj się ze mną skontaktować. Ponieważ jest to mój pierwszy Instruktaż, byłbym bardzo wdzięczny za komentarze i sugestie dotyczące ulepszenia tej treści. Do zobaczenia następnym razem!

Zalecana: