Salve a tutti,
mi trovo davanti a un dilemma abbastanza serio (per me). Mi servirebbe rilevare sei frequenze audio diverse, nello stesso tempo (non contemporaneamente, ma nel giro di pochi millisecondi).
Da buon blasfemo ho pensato di usare la libreria FreqCount e un 74HC4051. La libreria in questione esegue lo scan della frequenza ogni 30 cicli di arduino (regolabili). Ho inserito un flag per cambiare il pin di acquisizione del 4051, per ottenere così 6 input, mettendo una resistenza tra i due pin inutilizzati dell'integrato e il gnd. Il tutto funziona se e solo se vado a controllare un solo input (se collego fisicamente un input del multiplexer). Se collego due input allora non funziona più nulla, il che lo rende totalmente inutile. Come potrei fare? Sicuramente, come mio solito, avrò dimenticato qualche dettaglio, in caso, chiedete!
Ciao,
no, devo rilevare un gange di frequenze. In pratica mi servirebbe acquisire il segnale da 6 pickup magnetici, quelli da chitarra elettrica. Dovrei rilevare quindi sei frequenze, e il range è tutto fuorché basso. Quindi non mi serve riconoscere una frequenza e basta, ma circa da 82 a 1050 Hz. Ovviamente questo range si può restringere, semplicemente per il fatto che ogni corda ha il suo intervallo diverso dalle altre.
Per esempio la prima corda (Mi basso) andrebbe da 80 a 260Hz; grazie mille per la risposta così immediata, ma serve qualcosa di più complesso.
Salve di nuovo,
mi sono apparentemente dimenticato la board sulla quale far girare questo progetto. Ho a disposizione una Uno, Due, Pro Mini e infine, una Galileo. Per ora ho usato la Uno, per ovvie ragioni di sperimentazione (non vorrei licenziare le altre prima dei loro giorni!). Ovviamente disposto a usarle tutte previo consiglio (non so proprio come fare). Quindi non so, qualche consiglio?
Giovicavalla:
La libreria in questione esegue lo scan della frequenza ogni 30 cicli di arduino (regolabili).
Scordati di farlo con Arduino UNO, è impossibile misurare sei frequenze diverse in pochi ms.
La misura della frequenza si può fare in due modi, il primo è contare i cicli per un secondo, o 0.1 secondi se ti basta una risoluzione di 10 Hz, il che ci porta ad un tempo minimo di acquisizione delle sei frequenze leggermente maggiore a 0.6 S se usi il gate a 0.1S oppure 6S se usi il gate a 1S, in questo caso la risoluzione è il singolo Hertz.
Il secondo metodo è la misura del periodo di un ciclo, in questo caso si possono eseguire molto misure in un secondo, quante dipende dalla frequenza, p.e. a 100 Hz acquisisci la frequenza in 10 ms se si tratta di impulsi, in 5 ms se si tratta di segnali con duty cycle al 50%, p.e. onde quadre o sinusoidi.
Arduino è in grado di usare il primo metodo per frequenze fino a 7 MHz, è un limite hardware, mentre per il secondo sistema sei limitato dalla risoluzione dei suoi timer, max 16 bit, il che ci porta a poter misurare solo frequenze molto basse, non più di 100-200 Hz, se vuoi mantenere una discreta precisione.
Per fare quello che chiedi ti serve un micro dotato di timer a 32 bit il che ci porta ad Arduino DUE, però non credo esista una librerie che ti permette di fare quello che chiedi pertanto dovrai scriverti tutto il software per la gestione del timer low level.
Ciao,
Astrobeed: non c'è un modo per usare il mio primo metodo? Nel senso, sono riuscito a misurare perfettamente delle frequenze con Arduino UNO, una per volta ovviamente. Non so se hai dato un occhio alla libreria FreqMeasure (non ricordo da dove l'ho scaricata, ma dovrebbe essere famosa)) sicuramente si. Usa 30 cicli (impostabili) per misurare la frequenza, con a sola disposizione del pin 8 per l'input. Ora se riuscissi a usare un Multiplexer, cosa che ho provato, fallendo tra l'altro, potrei cambiare input molto facilmente. La mia idea era quella di fare questi 30 cicli, cambiare l'entrata del multiplexer, farne altri 30, e cosi via. In teoria dovrei riuscire a elaborare tutte le frequenze nel giro di 180 cicli di arduino, che potrei pure farmi bastare.
Inoltre ho trovato appena ora uno sketch per arduino DUE, che forse potrebbe aiutarmi, appena arrivo a casa lo provo, ma in ogni caso mi servono quei sei input. Il link è questo. Comunque, per la mia prima idea? Rivoluzione o vicolo cieco?
Giovicavalla:
Ciao,
Astrobeed: non c'è un modo per usare il mio primo metodo? Nel senso, sono riuscito a misurare perfettamente delle frequenze con Arduino UNO, una per volta ovviamente. Non so se hai dato un occhio alla libreria FreqMeasure
Credo che non ti sia chiaro come funziona quella libreria, conta il numero di impulsi in ingresso ad un contatore, timer a 16 bit, per un certo tempo impostabile a piacere da 1 a 65000 ms, se vuoi misurare la frequenza con la risoluzione di 1 Hz devi impostare il gate a 1000 (1 S).
Non è mi è chiaro cosa vuoi fare esattamente con la lettura dal pick up della chitarra, se si tratta di un accordatore non c'è problema nel leggere la frequenza una volta al secondo in modo da ottenerla precisa al singolo hertz, ovviamente una corda per volta.
Ciao,
scusa, ma quando ho provato la libreria, non ci metteva un secondo a calcolare la frequenza. Volevo capire che problema c'è a usare un Multiplexer. Perché non si può usare? perché se inserisco fisicamente più di un input va in palla? Non capisco, sono qui per una mano a farlo. Grazie ancora per le delucidazioni, ora mi studio bene quella libreria.
Ciao,
in pratica vorrei capire perché una roba del genere (allegato immagine) non potrebbe funzionare (l'ho fatto in fretta, scusate la confusione).
Ciao, Giovicavalla