Contact: George Mocanu
Acest proiect urmărește realizarea unei orchestre muzicale formată din Floppy Driver-e, capabilă să redea un fișier muzical primit ca input (sub forma unui MIDI file).
Dar cum pot Floppy Driver-e să cânte??? Doar sunt niște dispozitive electronice și nu au voce . Ei bine, fiecare floppy drive are în interiorul său un motor stepper ce poate fi folosit la redarea unor sunete, controlând viteza și sensul mișcării al acestuia la un moment dat.
How a does stepper motor create music? 1)
When step motor moves, it creates the vibration with a specific frequency; the vibration makes the surrounding environment oscillate. The oscillation creates a mechanical wave. Frequency value is depended on the speed. When frequency value is between about 20 Hz and 20 kHz, it becomes sound wave and our ear can hear it.
By adjusting the speed, we can create the different frequency of sound. Therefore, we can create a different note of music.
By mapping music notes of a song to speed, moving step motor with the speed values in sequence, step motor can create melody of that song. We can use more than one motor to play a complex song.
Scopul proiectului este punerea la încercare a noțiunilor acumulate (sper eu) până acum, dar și dobândirea unor alte cunoștințe din domeniul muzical.
Microcontroller-ul ATmega324 de pe plăcuța de bază va controla Floppy Driver-ele (mai exact motorul stepper din interiorul fiecăruia), pentru a recrea o anumită notă muzicală, conform fișierului MIDI ce se dorește a fi redat.
Piesă | Scop | Modalitate de obținere |
---|---|---|
Placa de bază PM 2019 | … | Lipită în laborator, după posibilități |
6 x floppy drive (doar 4 functionale) | Dânsele or să cânte | 2 din calculatoare vechi, 4 cumparate |
Sursă ATX | Folosită la alimentarea floppy-urilor | Furată dintr-un PC vechi |
Breadboard | Pentru a pune la comun gnd-ul placii cu cel al floppy-urilor | Imprumutata de la un prieten |
Convertor USB-USART | Trimiterea noteleor pe seriala | Cumparat de la optimusdigital |
Multe fire mama-mama si mama-tata | Conexiuni placa - floopy-uri | Achizitie propie + imprumut |
Deocamdată dețin 2 floppy drivere, urmând să fac rost și de altele, în funcție de posibilitățile hardware ale plăcuței, dar și a flerului meu .
Implementarea s-a realizat pe Fedora 28 (orice distributie de Linux ar trebui sa fie capabila sa compileze codul sursa), folosind compilatorul avr-gcc. Intai s-a implementat logica miscarii capurilor de citire pentru generarea sunetelor - acestea se vor misca la o perioada de timp stabilita pentru a genera o anumita frecventa (s-a folosit un timer de 40us pentru a “masura” un tick ←–> la inregistrarea unui numar de tick-uri pentru un anume floppy, acesta va face un step in directia potrivita si va genera nota dorita), urmand si partea cu transmiterea fisierelor peste seriala. Fiindca informatiile primite pot fii multe, am ales sa folosesc o biblioteca deja implementata pentru comunicarea peste UART2), ce foloseste un buffer circular (in arhiva se regaseste si o versiune “basic” pe care am folosit-o la inceput, dar nu a dat randamentul dorit). Transmiterea informatiilor peste seriala de la calculator este destul de complicata, astfel ca am ales sa folosesc un tool deja existent ce citeste fisierele .midi si trimite informatiile necesare (a trebuit doar sa fac ca interpretarea mesajelor primite pe UART sa fie compatibila). Pentru testare s-a utilizat programul amintit 3), iar rularea acestuia s-a facut pe Windows, folosind NetBeans, si incarcand diferite fisiere .midi4) (cu numarul de canale cat mai mic, nu am decat 4 floppy-uri).
Din pacate am reusit sa utilizez doar 4 floppy-uri, avand 2 ce par sa fie defecte (una este reparabila, fiind necesare doar cateva lipituri).
Un video deomanstrativ: https://www.youtube.com/watch?v=iA3PDe6U8fA
Per total, a fost un proiect interesant, am vazut ce inseamna sa creezi un produs cap-coada, nu doar din punct de vedere Software, ci si Hardware. A fost o adevarata provocare dar si satisfactia este pe masura rezultatului.
https://github.com/SammyIAm/MoppyClassic
https://github.com/andygock/avr-uart
Documentația în format PDF