Jump to content
PLC Forum


Sign in to follow this  
ic910

Rilevazione Di Un Battito Di Mani Con Pic

Recommended Posts

ic910

Livio dal microfono quando batto le mani escono un insieme di frequenze che vanno dai 1000 Hz ai 5000 Hz. Mentre con il fischio vado anche delle volte sopra i 1000 Hz.

Ho provato a mettere un derivatore dopo il primo operazionale tra il pin 1 e il pin 5 .Il derivatore l ho dimensionato con un condensatore da 100nF e una resistenza da 470 ohm verso

massa. Ho fatto cosi cercando di tagliare fuori le frequenze sotto i 1000 Hz.

Ho messo anche un trimmer da 10 Kohm in serie alla resistenza R2 per regolare il guadagno del primo operazionale. Ho ottenuto un risultato migliore a prima ma non pienamente

soddisfacente.

Il problema è che in un battitto di mani ci sono un insieme di frequenze tra le quali rientrano anche le frequenze di un fischio o anche le frequenze di un semplice battitto di un attrezzo sul

piano di lavoro .

Edited by ic910

Share this post


Link to post
Share on other sites

Livio Orsini
Livio dal microfono quando batto le mani escono un insieme di frequenze che vanno dai 1000 Hz ai 5000 Hz. Mentre con il fischio vado anche delle volte sopra i 1000 Hz.

Sei sicuro delle frequenze del battito? Più che un battito di mani quello sembrerebbe......un battito d'ossa. :smile:

Comunque fischi e battiti, anche se dubito un poco dei valori che riporti, hanno inequivocabilmente il medesimo campo di frequanza.

Ho fatto cosi cercando di tagliare fuori le frequenze sotto i 1000 Hz.

Arridaje. Non è la frequenza da discriminare, ma il fronte.

Comunque se ti soddisfa così....lascialo così.

Il problema è che in un battitto di mani ci sono un insieme di frequenze tra le quali rientrano anche le frequenze di un fischio o anche le frequenze di un semplice battitto di un attrezzo sul piano di lavoro .

Certamente. In quella gamma di frequnze c'è una gran quantità di rumori, proprio per questo o si implementa un filtro molto complesso che discrimina parecchie componenti oppure si cerca di lavorare sugli attacchi.

Share this post


Link to post
Share on other sites
ic910

Non mi soddisfa cosi

La cosa da fare se non vado errato è realizzare un discriminatore che mi faccia passare i suoni di breve durata e mi tagli quelli di durata superiore.

Edited by ic910

Share this post


Link to post
Share on other sites
Livio Orsini

No, perchè anche un fischietto od un urlo potrebbe essere di breve durata, simile ad un battito di mani.

Quello che ti serve è rivelare un suono che cresce all'imporvviso come fosse un impulso.

Share this post


Link to post
Share on other sites
dott.cicala

per quello che continuo a insistere con.....attenuare.

Se ha scaricato VA con l'analizzatore di spettro può facilmente verificare com'è composto il segnale...Il filtro va bene per escludere le frequenze più alte.

In ogni caso, commuterà ugualmente con un rumore improvviso...con quel tipo di circuito.

Share this post


Link to post
Share on other sites
ic910

Oltre che con l'oscillo ho verificato le varie frequenze generate da un battito o un fischio con il programma audacity che ti fà visualizzare tutto lo spettro del segnale.

Ho notato con le misure fatte con l'oscillo che il battito di mani presenta un picco di ampiezza rapido molto alto rispetto alla sinusoide del fischio.

Si potrebbe realizzare uno schema tenendo conto di questa caratteristica.

Livio e Stefano avete un idea di come discriminare ?

Share this post


Link to post
Share on other sites
dott.cicala

se attenui...rimane solo il picco....tutto quello che sta sotto sparisce....lo vedi anche con l'oscilloscopio, più alzi la scala e più si rimpicciolisce il segnale...e rimane solo il picco.

Share this post


Link to post
Share on other sites
ic910

Ho provato ad attenuare mettendo un trimmer sul primo operazionale .Attenuando è vero che con il fischio non si attiva più nulla ma devo sbattere di più le mani per farmi sentire.

Share this post


Link to post
Share on other sites
dott.cicala

Da un circuito del genere non si può pretendere che distingua un battito di mani da un altro rumore.

Puoi mettere un trimmer multigiri e trovare il compromesso...di più non credo si possa fare.

Share this post


Link to post
Share on other sites
gabri-z
Da un circuito del genere non si può pretendere che distingua un battito di mani da un altro rumore.

Ma si potrebbe modificare in modo che servano '' due o più battiti '' con una certa cadenza .

Share this post


Link to post
Share on other sites
dott.cicala

Ho provato ad attenuare mettendo un trimmer sul primo operazionale

spero l'abbia messo sull'ingresso del primo op amp, cioè sul microfono e non sull'uscita

Ma si potrebbe modificare in modo che servano '' due o più battiti '' con una certa cadenza .

quello lo dovrebbe fare col pic....

Share this post


Link to post
Share on other sites
ic910

Già ho predisposto per i 2 battiti a livello software.

ll trimmer l ho messo tra la R2 e massa cosi modifico il gain da 10 a 100 volte

Tramite software stavo pensando anche di porre una condizione decisionale sulla durata del suono captato per cercare di migliorare la discriminazione ma penso che non sia la soluzione risolutiva.

Share this post


Link to post
Share on other sites
Livio Orsini
presenta un picco di ampiezza rapido molto alto

E' quello che sto cercando di spiegarti dal mio primo messaggio.

Quel fronte rapido è la discriminante di tutto.

Derivi il segnale in modo opportuno e ti rimane solo, magari esaltato, il picco d'attacco del battito.

E' ovvio che c'è il pericolo che qualsiasi altro suono che assomigli per forma al battito di mani, come uno schocco di dita particolarmente "robusto" può essere riconosciuto dal circuito.

Ma questi comandi impropri si possono eliminare solo con l'uso di filtri molto complessi e sofisticati, aul tipo dei filtri per il riconoscimento vocale.

Share this post


Link to post
Share on other sites
ic910

Intanto buon Ferragosto a tutti.

Ho pensato di mettere sotto interrupt l'uscita del comparatore interno al Pic. Quando mi varia e si porta a livello logico 1 inizia un conteggio di tempo .

Se il tempo è minore o uguale a quel picco dovuto solo al battito di mani và ad incrememtnare una variabile e di conseguenza mi rileva il battito se invece e maggiore viene ignorato.

Ora il problema è che già stò utilizzando un Interrupt nel programma si può avere un interrupt per 2 differenti cause ?

Share this post


Link to post
Share on other sites
Livio Orsini

Devi verificare nel vettore di interrupt se c'è possiiblità di conflitto.

Si possono avere più interrupts interni ed esterni, ognuno con la sua priorità.

Se durante il servizio di un interrupt si attiva un interrupt di maggiore priorità, si ha la sospestione automatica dell'interrupt a più bassa priorità sino al completamento del servizio dell'interrupt a priorità più alta.

VIceversa nel caso che si stia servendo un interrupt a priorità elevata e capiti un'interrupt a minor priorità, questo rimarrà pendente sino al termine del servizio dell'interruopt più prioritario.

L'evento di annidamenti di interrupts (bested interrupts) è abbastanza frequente in caso di programmi di media complessità. Se si prevede questa possiiblità bisogna porre attenzione allo stack, onde evitare di andare oltre il limite possibile.

Le priorità di servizio agli interrupts le puoi trovare nel capitolo dedicato del data sheet del tuo micro.

Share this post


Link to post
Share on other sites
ic910

Io ho un interrupt continuo ogni 10 mS. Tramite questo mi vado a fare anche le varie temporizzazioni mi fa da riferimento temporale . Ora dovrei aggiungere un ulteriore interrupt di rilevazione battito. Però se 2 interrupt contemporaneamente non posso accadere allora come faccio e misurare il tempo del battito ?

Inoltre ho trovato anche questo ulteriore schema che utilizza un buzzer per la rilevazione del suono.La rivista afferma che già utilizzando un buzzer si ha un ottimo filtraggio per le frequenze basse.

Poi si vede il 1 inverter che fà da stadio amplificatore mentre il 2 e il 3 fanno da discriminatori per segnali sonori di lunga durata

Ho provato anche questa soluzione tramite bread bord però non avendo il 4069 ho utilizzato un 4049 e non avendo le 4,7 Mohm ho messo 2 da 10 Mohm in parallelo il circuito però sembra

non andare quando inserisco il buzzer in uscita sul pin 6 del 4049 ho un onda quadra mentre se tolgo il buzzer trovo in uscita un livello logico 0. Ho alimentato il tutto a 5 V.

http://i62.tinypic.com/2hgtkzb.jpg

Share this post


Link to post
Share on other sites
Livio Orsini
Io ho un interrupt continuo ogni 10 mS.

Con questo interrupt puoi campionare al più frequenze sino a 50Hz.

Se i dati di frequnza che hai riportato sono reali ti serve almeno un campionamento <=100µs

Però se 2 interrupt contemporaneamente non posso accadere allora come faccio e misurare il tempo del battito ?

A parte il fatto che pui sempre decidere quale è l'interrupt più prioritario, puoi sempre decidere di usare il comparatore esterno, cosa che io trovo comunque preferibile. Poi inivii l'uscita del comparatore all'ingresso che abilita e blocca un contatore del pic, come si fa per misurare il periodo.

Io comunque risolverei il problema o tutto in Hw, oppure la rivelazione del battito la farei via Sw leggendo in continuazione un ingresso analogico in cui introdurrei come segnale l'uscita filtrata del microfono.

Ho provato anche questa soluzione

Attenzione che quel circuito ha la tendenza ad autooscillare, basta un niente per innescare la reazione.

Share this post


Link to post
Share on other sites
ic910

Allora anche utilizzando il comparatore interno posso tener presente la variazione della sua uscità, tenendo sotto controllo il CMCON.7. Attualmente la condizione era legata proprio al

CMCON.7 .Quando il CMCON.7 mi passava da 0 a 1 andavo nella routine di incremento dove incremento la variabile battiti. Successivamente passo nella routine condizioni di attuazione

(3 battiti on 3 battiti off).

Ora oltre al CMCON.7 = 1 ora devo porre un altra condizione ovvero che la variabile mS (indica la durata di CMCON.7 a 1) sia incrementata se non supera un determinato tempo si può

andare ad incrementare i battiti.

Il tempo lo misuro con lo stesso interrupt ho messo un If CMCON.7 = 1 nella routine di interrupt se si verifica và ad incrementare la variabile per misurare il tempo del suono.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...