GiRock Inserito: 2 ore fa Segnala Inserito: 2 ore fa Da una richiesta letta sul Forum relativo alla Citofonia dove un Utente chiedeva se poteva collegare un Attuatore come Ripetitore di Chiamata al suo Videocitofono, mi è balenata questa idea dall'aria un po malsana ma pur sempre funzionante... Premetto che il Videocitofono non ha Attuatori di serie preposti allo scopo specifico, almeno così gli è stato risposto, alché non potendo rilevare eventuali Segnali dal BUS per la decodifica che sarebbe stato magari più semplice, mi sono chiesto se si poteva intercettare il Suono emesso dell'apparecchio ed in qualche modo dare il consenso al Relay ripetitore... Pensando ad un sistema di rilevazione abbastanza immune alle interferenze dei rumori di ambiente e non troppo sensibile al parlato, sono arrivato a realizzare un preamplificatore microfonico che praticamente resta sordo se il suono non proviene da una distanza di 5/10cm al massimo, difatti andrà montato molto vicino all'apparecchio da monitorare... Per giungere a questo, ho testato una serie di suonerie citofoniche registrate, arrivando alla conclusione che un filtro passa-banda abbastanza stretto del II° Ordine potesse adattarsi al caso in questione, diciamo che amplifica frequenze comprese tra 500Hz e 2500Hz che è il massimo valore riconosiuto dal programma, inoltre la frequenza di risonanza si attesta sui 1200Hz circa, frequenza che ho notato nei vari toni visualizzati con un analizzatore di spettro, un ulteriore filtro passa-basso è stato inserito nel circuito dell'operazionale amplificatore per ridurre maggiormente le inutili frequenze alte... Ho parlato di programma perché per semplificare sia la cattura del suono che l'analisi successiva, ho optato per Arduino Mini viste le dimensioni contenute, ma anche Arduino Uno va benissimo dato che il Mini necessita di un programmatore USB esterno da pochi €uri, oltretutto scrivere un programma in Arduino rende tutto il lavoro molto veloce visto che possiede tantissime librerie largamente testate... Ok, fino a qui ci siamo, ma come campionare e memorizzare dei suoni che assumeranno caratteristiche differenti a seconda della Suoneria impiegata??? Dopo aver rimurginato per qualche minuto, ho fin da subito pensato al Grande Fourier e la sua Trasformata, spulciando tra le librerie ho trovato che era presente la funzione FFT ed ho scelto di partire con quella... Fin dai primi test, il segnale acquisito dall'ADC veniva rapidamente elaborato mostrando correttamente la frequenza in cui la magnitudo era più elevata anzi, volendo la funzione restituisce 7 valori con magnitudo decrescente, Io ho preferito campionare 1s di suono con 128 punti ed estrapolare solamente due valori significativi, dopo che una volta aggiunto tutte le routine necessarie al programma, lo spazio a disposizione è sceso a valori bassi costringendomi a fare delle ottimizzazioni... Altra cosa che ho forzato nel preamplificatore per evitare di avere valori negativi sull'ADC che avrebbero complicato le letture delle frequenze, è stato quella di raddrizzare il segnale captato dal microfono a singola semionda tramite un diodo in uscita dall'operazionale, in fondo la frequenza corretta viene ugualmente rilevata così come la magnitudo risparmiando cicli macchina non strettamente necessari allo scopo e niente OFFSET da calcolare... Bene, dopo tutta questa premessa, è giunto il momento di mostrare lo schema: Funzionamento del circuito e programmazione/utilizzo dell'attuatore Come captatore di segnali ho utilizzato una semplice Capsula Microfonica ad Electrete, internamente questa contiene un FET che converte le variazioni del campo magnetico in segnali elettrici di entità maggiore, infatti per funzionare deve essere alimentato esternamente, per il calcolo della resistenza di caduta si deve procedere in questo modo: ID = 0.0005 (500uA) - Corrente necessaria al FET interno VDS >= 2V - 2V = Tensione minima di funzionamento del FET interno quindi partendo da un'alimentazione di 5V ho calcolato RA = (5V - 2V) / 0.0005 = 6000Ω valore commerciale 5k6, così ottengo 2.2V sul FET che è più di un buon valore per non aumentare troppo la sensibilità agli stimoli esterni... Subito sul I° stadio d'ingresso ad operazionale troviamo un filtro passa-banda del II° Ordine che attenua le frequenze non necessarie di 35dB, II° stadio amplificatore 40X con ulteriore passa-basso per aumentarne la pendenza, raddrizzatore a singola semionda, usctita disaccoppiata con condensatore e resistenza da 47k in parallelo all'ADC, questa serve per dimezzare l'impedenza vista in ingresso abbattendo notevolmente i disturbi ed il rumore sul convertitore... Lo stesso segnale ulteriormente disaccoppiato viene inviato tramite opportune resistenze ad un transistor NPN che ha il Collettore alimentato dalla resistenza di PULLUP interna di Arduino, questo si rende necessario per generare l'Interrupt che sveglia il micro quando messo in modalità a basso consumo, cosa che avviene quando il segnale sull'ADC supera una certa soglia... Fase di acquisizione e memorizzazione della Suoneria: all'accensione di Arduino il LED ROSSO lampeggia, ciò vuol dire che non sono stati trovati valori memorizzati nella EEPROM, per passare alla fase di programmazione bisogna premere il pulsante tra i 2s ed i 3s per poi rilasciarlo dopo aver Resettato la scheda, a questo punto il LED ROSSO rimarrà fisso in attesa di un Suono da elaborare, acquisito il suono il LED ROSSO si spegne e si accenderà quell GIALLO ad indicare che i dati sono stati memorizzati correttamente... Per cancellare i dati acquisiti precedentemente e ripartire da capo, basta tenere premuto il pulsante per più di 4s per poi rilasciarlo, Arduino cancellerà la EEPROM e si riavvierà mostrando ancora una volta il LED ROSSO lampeggiante... Non è necessario cancellare i dati tutte le volte, infatti se questi sono presenti la funzione di acquisizione del suono farà solo un UPDATE di questi evitando di scrivere dove i bit sono uguali ed evitando di usurare la memoria anche se sono garantiti 100.000 cicli... Per ogni fase descritta in precedenza è sempre meglio riavviare Arduino, se tutto è stato fatto nel giusto ordine, dopo il riavvio nessun LED sarà acceso ed il programma manda Arduino in attesa di Interrupt spegnendo anche il LED BLUE che indica quando sta lavorando, suonando ora il campanello, parte una nuova acquisizione che viene poi comparata con quella in memoria, se questi sono uguali o hanno un piccolo OFFSET che ho impostato 15Hz, solo allora parte il comando di attuazione e si accende il LED VERDE (Impulso da 500ms), poi tutto torna in stato di attesa come prima... Il circuito è alimentato esternamente a circa 9V tramite il connettore di Arduino che ha un A1117 che porta la tensione a 5V, anche il preamplificatore la riceve tramite i pin della scheda senza usare fonti esterne supplementari... Sto testando il circuito su BB e devo dire che nonostante l'oscilloscopio visualizzi le forme d'onda, se non ci si avvicina a breve distanza, il trigger non parte e Arduino non si risveglia. Oggi c'era un rumore assordante di una macchina taglierba, la TV accesa, Io che parlavo al telefono più il vicino col flessibile e vari suoni di motori transistanti che non ha fatto una piega, nonostante la mia percezione uditiva era sulla soglia del fastidio, la scheda non ha mai battuto ciglio, eppure in casa c'era un frastuono infernale ed era posizionata a 2m dalla finestra aperta... Questa è la versione 1.0 e avrà certamente bisogno di aggiustamenti futuri, la terrò ancora in bruciatura per monitorare il comportamento nelle varie situazioni domestiche, però mi sono divertito a sperimentare con questo circuito ibrido e sono abbastanza soddisfatto del risultato ottenuto, ho anche visto in rete che ci sono decine di richieste per un sistema così semplice, pensate che alcuni hanno messo un microfono wireless con un ricevitore/amplificatore per ripetere il segnale, in pratica ogni suono nei dintorni viene trasmesso e non solo quando serve tipo baby-monitor... Tutte le fasi sono dettagliate ed inviate tramite Seriale con i rispettivi messaggi, quindi tramite un Monitor seriale sarà possibile interagire con il programma evitando di mettere tutti i LEDs, a Voi la scelta... DISCLAIMER Non essendo un prodotto commerciale, i punti campionati sono solo due, non c'è il Watchdog e non si possono aggiustare altri parametri, perciò ogni tanto andrà resettato Arduino, l'unica cosa con cui interagire è il preamplificatore dove è possibile modificare sia il guadagno che la pendenza del filtro, ricordatevi di usare un buon alimentatore filtrato e stabile... P.S. Il codice per ora non lo pubblico, sarà disponibile solo il file HEX per chi è veramente interessato, quindi non fate richieste di upgrade, al limite posso aggiungere la regolazione per il tempo di intervento del relay se strettamente necessario...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora