Na pewno każdy z was kiedyś zobaczył jakiś filmik na którym była stacja dyskietek grająca muzykę. Otóż chciałbym wam pokazać mój sposób na granie muzyki z FDD przy pomocy Arduino. Uprzedzam, że przyda się wiedza muzyczna (ja np. gram na gitarze) ale o tym później.
Co będzie potrzebne?
- Arduino
- Stacja dyskietek
- Opcjonalnie dyskietka
- taśma FDD (ułatwia prace)
- Zasilacz ATX
- Płytka stykowa i parę kabelków
Zaczynamy!
Najpierw radze otworzyć stacje by lepiej brzmiała. W tym celu podwarzamy cztery zatrzaski po obu stronach napędu,
możesz wsunąć dyskietkę która poprawia brzmienie.
Kolejnym krokiem jest połączenie kabelków z taśmą (podłączenie kabelków do środkowej wtyczki tam gdzie nie ma “obrócony kabelków”).
Czerwony kabelek pod pin 6 od dołu, żółty dolny 9, drugi żółty 10.
Do płytki i Arduino podłączamy to w taki sposób:
Żeby nie było wątpliwości:
Podłącz FDD pod zasilacz ATX, uprzednio łącząc zielony kabelek z najbliższym czarnym w tej dużej wtyczce (ATX).
Czas na kod!
I tutaj przyda nam się wiedza muzyczna, ponieważ musimy znać się na dźwiękach i ich częstotliwościach by móc przepisać piosenkę do Arduino (nie ma tak łatwo :P).
(Ciekawe czy poznacie ten utwór :D)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
void setup() { pinMode(8, OUTPUT); // Piny z podpiętą stacją pinMode(9, OUTPUT); } void loop () { //WSTĘp piosenki SoundBeep(97, 300); SoundBeepp(103, 300); SoundBeep(110, 300); SoundBeepp(116, 500); SoundBeep(207, 300); SoundBeepp(232, 350); // SoundBeep(232, 100); SoundBeepp(232, 200); // SoundBeep(130, 300); SoundBeepp(138, 300); SoundBeep(146, 300); SoundBeepp(156, 500); SoundBeep(277, 300); SoundBeepp(313, 300); SoundBeep(313, 150); SoundBeepp(313, 200); SoundBeep(97, 300); SoundBeepp(103, 300); SoundBeep(110, 300); SoundBeepp(116, 500); SoundBeep(207, 300); SoundBeepp(232, 350); // SoundBeep(232, 100); SoundBeepp(232, 200); // SoundBeep(130, 300); SoundBeepp(138, 300); SoundBeep(146, 300); SoundBeepp(156, 500); SoundBeep(277, 300); SoundBeepp(313, 300); SoundBeep(313, 150); SoundBeepp(313, 200); SoundBeep(97, 300); SoundBeepp(103, 300); SoundBeep(110, 300); SoundBeepp(116, 500); SoundBeep(207, 300); SoundBeepp(232, 350); // SoundBeep(232, 100); SoundBeepp(232, 200); // SoundBeep(130, 300); SoundBeepp(138, 300); SoundBeep(146, 300); SoundBeepp(156, 500); SoundBeep(277, 300); SoundBeepp(313, 300); SoundBeep(313, 150); SoundBeepp(313, 200); SoundBeep(97, 300); SoundBeepp(103, 300); SoundBeep(110, 300); SoundBeepp(116, 500); SoundBeep(207, 300); SoundBeepp(232, 350); // SoundBeep(232, 100); SoundBeepp(232, 200); // SoundBeep(130, 300); SoundBeepp(138, 300); SoundBeep(146, 300); SoundBeepp(156, 500); SoundBeep(277, 300); SoundBeepp(313, 300); SoundBeep(313, 150); SoundBeepp(313, 200); //ZAGRYWKA piosenki SoundBeep(233, 200); delay(25); SoundBeepp(233, 200); delay(100); SoundBeep(207, 200); delay(25); SoundBeepp(207, 200); delay(100); SoundBeep(233, 200); delay(25); SoundBeepp(233, 200); delay(50); SoundBeep(277, 200); SoundBeepp(277, 300); // SoundBeep(277, 400); SoundBeepp(233, 400); SoundBeep(233, 200); SoundBeepp(233, 200); delay(25); SoundBeep(207, 300); SoundBeepp(174, 300); SoundBeep(207, 300); SoundBeepp(233, 400); SoundBeep(233, 400); delay(25); SoundBeepp(277, 300); SoundBeep(313, 300); SoundBeepp(313, 300); SoundBeep(313, 300); } void SoundBeep(long frequency, long length) { long delayValue = 1000000/frequency/2; long numCycles = frequency * length/ 1000; for (long i=0; i < numCycles; i++){ digitalWrite(8,HIGH); digitalWrite(9, LOW); delayMicroseconds(delayValue); digitalWrite(8,LOW); digitalWrite(9, HIGH); delayMicroseconds(delayValue); } } void SoundBeepp(long frequency, long length) { long delayValue = 1000000/frequency/2; long numCycles = frequency * length/ 1000; for (long i=0; i < numCycles; i++){ digitalWrite(9,HIGH); digitalWrite(8, LOW); delayMicroseconds(delayValue); digitalWrite(9,LOW); digitalWrite(8, HIGH); delayMicroseconds(delayValue); } } |
SoundBeep(częstotliwość dźwięku, długość dźwięku) – głowica rusza się w jedną stronę
SoundBeepp(częstotliwość dźwięku, długość dźwięku) – głowica rusza się w drugą stronę (zwróć uwagę na podwójne P)
Używamy tych komend na przemiennie by nie “udusić silnika”.
By dowiedzieć się jaką częstotliwość w piosence ma dźwięk możemy skorzystać z tej strony http://www.phy.mtu.edu/~suits/notefreqs.html
Lub tak jak ja robię, wygrywam dźwięk na gitarze i mierze go miernikiem (używam gStrings na Androida).
Jeśli zrozumiesz działanie kodu możesz dodawać piny i dokładać więcej stacji lub np. dysk twardy (tak jak na moim filmie)
Polecam również wsunąć dyskietkę by lepiej brzmiała stacja :P
FILM:
To mój pierwszy post, jestem początkujący więc jeśli macie jakieś uwagi to piszcie.
Znane ale fajne !
5 piąteczka leci za pomysł oraz muzyczny temat na majsterkowo !:D
Witam:)
Czy można zrobić tak samo na dysko cd?
I czy ta wiedza na dźwiękach jest na pewno konieczna?
Pozdrawiam:)
Wieża niestety jest konieczna. Co to napędu CD planuje to zrobić i jak zrobię to opiszę z chęcią :D
wiedza nie wieża :)
Wielka szkoda, że to nie jest Twój kod!! :(
http://www.faludi.com/itp/arduino/buzzer_example.pde
Polecałbym dodać chociaż nick autora.
Tak czy inaczej pomysł bardzo fajny, lekko prześmigany, ale zaciekawiłeś mnie nieźle :). Proponowałbym dać img z opisem wyjść tej tasiemki i może rozszerzyć ten etap o kilka zdań.
Tak to prawda wpadłem na pomysł z FDD po przerobieniu tego z buzzerem. Niemniej jednak kod przerobiłem i mam zamiar go jeszcze bardziej przerobić żeby był łatwiejszy do używania :P
a ty podajesz autora programu w którym piszesz te posty? Palancino
Istnieją łatwiejsze sposoby, chociażby funkcja Tone z arduino, oraz(wykonany przeze mnie) syntezator midi na FDD, aczkolwiek nie ułatwię wam poszukiwań i nie podam bezpośredniego linku, zainteresowani wiedzą czego i gdzie szukac.
Podpowiem, że jest to projekt składający się z programu w javie na PC i programu na arduino, który umożliwia podpięcie nawet 16(!) stacji dyskietek, jednak na arduino Uno wykorzystamy “tylko” 8
Super!
Film poprawiłem :) Aby wyświetlił się w poście, wystarczy wstawić do niego linka. Ważne, żeby był to sam link (ale nie klikalny) umieszczony w osobnej linii i w żaden sposób nie ostylowany (nie pogrubiony, itp). Wtedy zostanie on automatycznie zamieniony na odtwarzacz :)
Pozdrawiam! I czekamy na więcej! :D
Piąteczka się należy, dzisiaj zakładam zespół :)
Na necie jest wiele utworów z podziałem na tony, kiedyś grałem sobie na Arduino przy pomocy Buzzera :)
biste normalnie powala na nogi nie wiedziałem że to takie łatwe.
O kurde skąd ja dyskietkę wytrzasnę: D
W Komputroniku trochę drogie są, możesz kupić na Allegro używki.
A kto podłączy stacje dyskietek do gnd w Arduino ;) Bez tego nie chciało mi działać :)
Ja nie musiałem podłączać do GND :)
Tu też dyskietki ładnie grają ;D
http://www.cda.pl/video/2290580/Gra-na-stacjach-dyskietek
Złożyłem i niewiem jaka to piosenka. mógłbyktoś podać tytuł?:)
Usprawniłeś kod?
Pozdrawiam
Można prosić o tytuł piosenki lub inne kody na wypróbowanie ?
Seek and destroy
Witam.
Bardzo dobry projekt: zachęcił mnie do zbudowania tego ustrojstwa, chociaż wiedziałem o tym już od dawna :D
Wszystko działa w porządku, mam jednak pytanie dotyczące projektu. , Chcę podłączyć drugi flopp i grać na dwa głosy. Podłączyłem go tak jak pierwszy, tylko pod porty 6 i 7 no i wszystko ruszyło, ale albo jeden gra, albo drugi… A ja chcę żeby razem grały (jeden co innego, drugi co innego). Jak to rozwiazać? Myślę że to kwestia oprogramowania…
No, w końcu znalazłem jak dokładnie to zrobić na arduino, krok po kroku. tego było trzeba, wisze piwo przy okazji :D
Dzięki za super poradnik :) Jeszcze lepiej by było jakby jeszcze odczytywało tą muzykę z dyskietki, ale jednocześnie to nie jest zbyt wykonywalne nawet jakby się już udało podłączyć ;)
Witam, mi coś nie działa to wszystko :( mimo że robię wszystko dokładnie z instrukcją i było wszystko testowane na 6 różnych stacjach dyskietek nadal nie działa :(
wydaje mi się, że ta funkcja z dodanym “p” na końcu jest totalnie niepotrzebna, już w tej normalnej funkcji jest zadbane o to, aby nie zajechać silniczka bo czas jest dzielony na 2 i leci on raz w jedna raz w druga stronę
Czarodzieju, wszystko pięknie i ładnie przedstawiłeś. Próbowałem zbudować dzisiaj grającą stację dyskietek wg. tego artykułu ale… Jedna stacja poruszała silnik tylko w jedną stronę, głowica się nie cofała. Gdy dojechała ona do końca swoich możliwości, ząbek na gwincie przeskakiwał i tyrkotało nieznośnie. W dodatku działało tak tylko gdy podpiąłem wg. schematu, ale pod parzyste piny a pod nieparzyste w pionach dodałem po GRD. Dodatkowo też kabel z pinu 6, podpiąłem pod pin 7 a nie pod Arduino – pin 8. Druga stacja, w ogóle się nie uruchamiała a sprawna na 100%, wyciągnięta świeżo z PC’ta, w dodatku nowsza od poprzedniej o 6 lat.
Na rysunku schematycznym z wtyczką, pinami i podpięciem do Arduino jest błąd. Sprawdzałem obie stacje i oba kable – mają 34 piny, nie jak na rysunku – 32.
Tak czy inaczej dzięki za pomysł, realizacja zajęła mi chwile, dodatkowo się nauczyłem czegoś :)
P.S.
Jeśli wiesz więcej od innych to podziel się wiedzą, jak masz pisać w ten sposób – najlepiej nie pisz w ogóle. Chodziło o MoppyDesk + parę drobiazgów. Na YT jest nawet krok po kroku jak się do tego zabrać.
P.S. do Murzyn’a.
hej! czy udało się komuś podłączyć dysk twardy? Nie mam pojęcia jak podłączyć piny w taśmie… mógłby ktoś pomóc? Pozdrawiam!
Masz jeszcze jakieś inne gotowe kody z utworami?