Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2023:avaduva:arduino-ipod [2023/05/26 19:38]
cosmin.petolea
pm:prj2023:avaduva:arduino-ipod [2023/05/27 15:27] (current)
cosmin.petolea
Line 103: Line 103:
  
 ==== Flow de Funcționare ==== ==== Flow de Funcționare ====
 +  - **Start** - Dispozitivul pornește, se inițializează afișând un mesaj de welcome și asteaptă apăsarea butonului Play/Pause.
 +  - **Playing** - Melodiile sunt redate începând cu prima, iar interacțiunea cu dispozitivul are efectele descrise în secțiunea anterioară. LCD-ul afișează modurile de Repeat și Shuffle, urmat de melodia curent redată.
 +  - **Paused** - Similar cu starea de start, dizpozitivul nu are playback și asteaptă apăsarea butonului Play/Pause. LCD-ul afișează melodia care era în playback inainte de pauzare.
 +  - **Resumed** - Se continuă playback-ul de unde a rămas, în rest comportamentul este identic cu cel de la **Playing**. LCD-ul afișează melodia curentă.
  
 ==== Format Fisiere ==== ==== Format Fisiere ====
-Arduino iPod accepta fisiere ​care au:+Arduino iPod acceptă fișiere ​care au:
   * Formatul WAV   * Formatul WAV
   * Bit Resolution = 8 Bit   * Bit Resolution = 8 Bit
Line 111: Line 115:
   * Audio Channels = Mono   * Audio Channels = Mono
  
-Pentru a pune fisierele ​pe SD, ele trebuiesc formatate astfel ​incat sa poata fi interpretate de codul arduino. Pentru a facilita acest lucru, am creat un script de Python care primeste ​path-ul ​catre un director, extrage toate fisierele ​WAV si creaza ​un nou folder ​in acel director care contine ​versiunea ​formatata ​fisierelorpregatita ​pentru copiere pe SD. +Pentru a seta acest format audio în mod automat melodiilor, am creat un script de Python care primește folder-ul de melodii în orice format (mp3, flac etc.) și le setează ca mai sus. 
-=== Script Python ===+=== Script Python WAV === 
 +<code python>​ 
 +from pydub import AudioSegment 
 +import os 
 + 
 +path = input("​Path:​ ") 
 +if not os.path.exists("​wav_out"​):​ 
 +    os.mkdir("​wav_out"​) 
 + 
 +def convert_audio(file):​ 
 +    audio = AudioSegment.from_file(os.path.join(path,​ file)) 
 + 
 +    # Set channels to mono 
 +    audio = audio.set_channels(1) 
 + 
 +    # Set frame_rate (frequency) to 16000 
 +    audio = audio.set_frame_rate(16000) 
 + 
 +    # Set sample_width (bit resolution) to 8 
 +    audio = audio.set_sample_width(1) ​ # 1 byte = 8 bit 
 + 
 +    # Save the result 
 +    audio.export(os.path.join("​wav_out",​ os.path.splitext(file)[0] + "​.wav"​),​ format="​wav"​) 
 + 
 +if __name__ == '​__main__':​ 
 +    files = [filename for filename in os.listdir(path) if 
 +                 ​os.path.isfile(os.path.join(path,​ filename))] 
 +    for file in files: 
 +        convert_audio(file) 
 +</​code>​ 
 + 
 +Pentru a pune fișierele ​pe SD, ele trebuiesc formatate astfel ​încât să poată ​fi interpretate de codul arduino. Pentru a facilita acest lucru, am creat un script de Python care primește ​path-ul ​către ​un director, extrage toate fișierele ​WAV și creează ​un nou folder ​în acel director care conține ​versiunea ​formatată ​fișierelorpregătită ​pentru copiere pe SD. 
 +=== Script Python ​Formatare ​===
 <code python> <code python>
 import re import re
Line 151: Line 187:
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
 +
 +Demo: https://​drive.google.com/​file/​d/​1WAYAqx93Ky4MkJhvtuAF9bdixta-ynb7/​view?​usp=sharing
  
 ===== Concluzii ===== ===== Concluzii =====
 +
 +Arduino iPod a fost un proiect foarte plăcut de implementat,​ oferind atât experiența relaxantă de a scrie cod voluminos și simplu, cât și cea engaging de a purta o luptă îndelungată pentru o funcție de câteva linii de care depinde tot restul programului. Partea de design a fost diferită de ce am lucrat până acum și, mai mult ca orice, resursele pe care le aveam puneau challenge-uri cu totul noi pe care niciodată nu le-am avut.
 +
 +Dificultăți întâlnite:​
 +  * Cum era de așteptat pentru un breadboard, la un moment dat am fost surprins să văd că 3 butoane diferite nu fac absolut nimic. A fost o luptă îndelungată până când am acordat atenție faptului ca butoanele erau consecutiv așezate pe breadboard și am realizat că lamela de GND nu mai era funcțională de la un anumit punct până în capăt.
 +  * Memoria unui Arduino este extrem de limitată față de un PC sau chiar și un Android. Am fost foarte suprins să văd un vector de string-uri ocupând întreaga memorie, și a fost o experiență nouă și educativă să vin cu un sistem care să nu aibă codul de Arduino ca bottleneck pentru numărul maxim de melodii acceptate.
 +  * Logica Butoanelor a fost mai complicată decât mă așteptam. Eu le estimam dificultatea de implementare ca și componente separate însă nu mă gândisem la combinația lor, care s-a dovedit a fi un challenge mult mai mare.
 +Experiențele preferate:
 +  * A fost ceva foarte util și nou să învăț să lucrez cu librării în afara celei standard de Arduino, în mod particular TMRpcm.
 +  * Dezvoltarea sistemului de next_index și a scriptului de Python a fost un challenge foarte satisfăcător,​ atât ca design, cât și ca logică algoritmică.
 +  * Testarea finală în care am văzut toata munca de circuit și coding funcționând exact așa cum ar trebui mi-a oferit foarte multă satisfacție. Încă folosesc proiectul pe post de music player în loc de Spotify doar pentru că știu că este music player-ul "​meu",​ făcut de mine.
  
 ===== Download ===== ===== Download =====
 +
 +{{:​pm:​prj2023:​avaduva:​petolea_cosmin_335cb.zip|}}
  
 ===== Jurnal ===== ===== Jurnal =====
 +07.05.2023 - Adăugare documentație\\
 +19.05.2023 - Completat hardware\\
 +25.05.2023 - Completat Software\\
 +27.05.2023 - Finalizat Documentație\\
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
 +  * https://​www.instructables.com/​Audio-Player-Using-Arduino-With-Micro-SD-Card/​
 +  * https://​ocw.cs.pub.ro/​courses/​pm
 +  * https://​reference.arduino.cc/​reference/​en/​libraries/​sd/​
 +  * https://​reference.arduino.cc/​reference/​en/​libraries/​tmrpcm/​
 +  * https://​reference.arduino.cc/​reference/​en/​libraries/​liquidcrystal-i2c/​
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
pm/prj2023/avaduva/arduino-ipod.1685119133.txt.gz · Last modified: 2023/05/26 19:38 by cosmin.petolea
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0