scusate se la domanda è banale, ma sono veramente alla prime armi.
Seguendo quanto trovato sul sito di Arduino, e precisamente qui (Arduino Playground - OneWireKeypad Library) ho realizzato il progetto per leggere un tastierino numerico 4x3 con un solo pin analogico.
ora, finché lo uso, come nell'esempio riportato, con un led, tutto funziona alla grande.
Provando però a comandare, con uno dei tasti del tastierino, un relay, quando il relay è attivato, i tasti del tastierino sono letti male (non correttamente, sballa i valori), mentre a relay spento tutto funziona correttamente.
facendo un minimo di debug (per quanto sia in grado di fare) mi sono accorto che quando il relè è attivo, il valore analogico letto dal pin di riferimento del tastierino è diverso da quello letto quando è spento.
immagino qunidi che il relay attivo abbassi/modifichi la tensione di riferimento.
è una scheda con un relè sopra (comperata in un kit di 37 sensori della elego) edi foto.
Ha in uscita 3 pin, segnale, VCC GND.
li ho collegati a VCC e GND (Di arduino, riportati su breadboard), segnale al pin 3 (ma è uno a caso).
Per ora il carico è a vuoto, ma preciso che ci voglio comandare una striscia led a 24V (vedi punto 15 del regolamento ).
credo di dover realizzare un circuito di alimentazione esterna, non credo che arduino ce la faccia a comandarlo, anche se lo fa, ma sballa i riferimenti di tensione del resto del sistema
zaulino:
immagino qunidi che il relay attivo abbassi/modifichi la tensione di riferimento.
Non è possibile che abbassa la tensione solo su Aref in quanto è la stessa di alimentazione del micro, come configurazione di default, se questa si abbassa per effetto di un eccessivo assorbimento di corrente anche Aref si abbassa di conseguenza.
Dato che il tuo utilizzo analogico è di tipo raziometrico (legato alla tensione di alimentazione) ne consegue che la lettura analogica, a parità di pulsante premuto, è costante indipendentemente dal valore della tensione di alimentazione/Aref.
Di quanto cambia la lettura analogica con il relè attivo e non attivo ?
davvero non riesco a capire, un po lo legge piu grande, un po piu piccolo..
Il progetto (e la schedina con le resistenze sono presi da qui: Arduino Playground - OneWireKeypad Library
Grazie a chiunque potrà darmi una mano
Buona notte
Zaulino
innanzi tutto grazie per l'aiuto e l'nteressamento.
Ho verificato, il cablaggio del pinpad è corretto.
La verifica la ho fatta leggendo la resistenza (con il tester) tra VCC e il piedino di OUT della mia schedina saldata, premendo uno ad uno tutti i pulsanti, rilevando i corretti valori rispetto allo schema che è al link Arduino Playground - OneWireKeypad Library (fatto salvo la tolleranza della resistenza).
P.S. il mio pinpad è della serie R1R2R3R4C1C2C3.
Adesso provo a fare un altro esperimento, mettendo una resistenza direttamente sul piedino di ingresso analogico di Arduino e leggendo il valore con i rele acceso e spento.
Una oscillazione di +/- 1 count sul ADC durante una serie di letture consecutive è la norma, non avrai mai una lettura perfettamente costante.
Una variazione di 3-4 count con i relè accesi è sintomo di scarsa stabilizzazione/filtratura sull'alimentazione, quando attivi il relè l'incremento di consumo fa aumentare il rumore e questo porta ad una maggiore instabilità del ADC
astrobeed:
Una oscillazione di +/- 1 count sul ADC durante una serie di letture consecutive è la norma, non avrai mai una lettura perfettamente costante.
Una variazione di 3-4 count con i relè accesi è sintomo di scarsa stabilizzazione/filtratura sull'alimentazione, quando attivi il relè l'incremento di consumo fa aumentare il rumore e questo porta ad una maggiore instabilità del ADC
E' quindi questo comportamento che mi fa leggere valori sballati del tastierino a relè acceso?
Il valore che leggo è sempre quello prima (decodificato dalla libreria), quindi ha senso, almeno in teoria.
Come posso risolverlo?
zaulino:
E' quindi questo comportamento che mi fa leggere valori sballati del tastierino a relè acceso?
Un errore di qualche count del ADC non può farti sbagliare il tasto premuto, con 12 tasti puoi avere una separazione di oltre 80 count tra di loro, se hai errori di tasti premuti a questo punto vuol dire che hai anche dei problemi software.
Il mio codice, un po pasticciato, è in allegato.
non ho sempre un delta di 80 count tra i vari tasti (vedi valori riportati in un post precedente) , quindi, o uso male io la libreria (se potessi aiutarmi a correggerlo nel caso te ne sarei grato), o la libreria ha un difetto/bug (nel qual caso non ho minimamente le competenze per correggerla).
astrobeed:
Un errore di qualche count del ADC non può farti sbagliare il tasto premuto, con 12 tasti puoi avere una separazione di oltre 80 count tra di loro, se hai errori di tasti premuti a questo punto vuol dire che hai anche dei problemi software.
prendiamo ad esempio la selezione del tasto "0".
Si ottiene mediante un partitore di tensione tra 1K e 15.1K. il valore teorico letto dall' ADC è 64
ora prendiamo ad esempio il tasto #
Si ottiene mediante un partitore di tensione tra 1K e 16.1K. il valore teorico letto dall' ADC è 60
il delta dei valori è 4, insufficiente considerando il mondo reale, dove l'ADC può avere le fluttuazioni che mi dici e le resistenze hanno una tolleranza
E' corretto il mio ragionamento?
Ed in caso sai dove posso trovare uno schema con resistenze dimensionate dividendo il range, come mi indicavi, con step paritari da 80?