Problema disturbo ingressi digitali arduino

Salve, ho appena realizzato una scheda con arduino che gestisce l'automazione delle tapparelle di casa. Ho realizzato il tutto con arduino degli integrati e dei rele su una scheda e il tutto funziona correttamente. Per le uscire utilizzo degli shift register e poi dei transistor per comandare i piccoli rele a 12v. Su gli ingressi di arduino invece acquisisco direttamente i pulsanti che ho in giro per casa (facendo girare il 5volt di arduino nei pulsanti come comune).

Ora ho un problema, sembrerebbe che si creano dei disturbi quando accendo le luci o utilizzo qualcosa di elettrico per casa. Questo mi crea un disturbo sugli ingressi che probabilmente viene intercettato da arduino come la pressione del pulsante e quindi comandandomi le tapparelle.

Secondo voi è possibile un problema del genere? E se si come posso risolverlo?

Grazie

Ora non ho mai provato ma forse con dei filtri… prima prova con delle resistenze di pull-up o pull-down …
il filtro potresti farlo favendo passere i fili prima che arrivino all’arduino attaraverso(ci fai tre quattro spire attorno…come nei trasformatori toroidali…) un toroide di ferrite tipo quelli degli alimentatori o collegandoci in serie un induttore ma qui non so come potrebbe comportarsi… :wink:

Le resistenze di pull-down ci sono sugli ingressi. Delle induttanze in serie?

si intendo poste tra il filo che porta il segnale all'atmega e l'atmega stesso....le usano per esempio in alcuni alimentatori switching cioè tutti ormai :P prova con una da 1uH o 3.3uH u=micro H=Henry fammi sapere la cosa è interessante :)

Ma devo utilizzare quelli simil bobina o quelli nei contenitori di plastica da circuito stampato?

Beh di formati ne trovi vari l'importante è che abbiano almeno una decina di giri nel filamento puoi usare quelli che vuoi.....:) io ne ho in smd , avvolte in aria, in scatolette metalliche fatte a trasformatore mini, avvolte in ferrite ne trovi di come vuoi :)

Ciao Ivan, un problema molto simile l'ho risolto con un condensatore da 2,2µF al tantalio (ma va bene anche elettrolitico) per bloccare i disturbi ed una resistenza in serie da 120Ohm per proteggere l'ingresso di Arduino; in realtà poi ho scritto alcune righe di codice per realizzare una sorta di contaimpulsi. Ma bisognerebbe capire che tipo di pulsanti usi, come funzionano, ecc.; in ogni caso il circuito C-R funzionava a meraviglia.

Come dovrei collagare il condensatore e la resistenza? La logica software interpreta il conteggio dei click fatti dal pulsante nell'arco di 2000ms dal primo click. Nel senso devo capire se ha fatto un solo click o piu click e nel caso eseguo 2 operazioni diverse. Pero capita che coi distuebi delle tensioni (220v) la logica sente come se avessi fatto un click co un determinato pulsante.

avevo pensato anche io ad una rete rc però non sapevo se passa basso alto o passa banda tenendo conto anche che non sono impulsi a frequenza....

La resistenza la colleghi: un capo sul pin d'ingresso, all'altro capo invece colleghi il segnale; il condensatore lo colleghi col positivo al segnale ed il negativo a GND; fai la prova, non costa nulla; se la cosa migliora puoi arrivare fino ad una decina di µF; se dopo aver filtrato i primi disturbi gli altri passano devi mettere in parallelo al condensatore un'altra resistenza di valore alto 10KOhm o maggiore.

Ok ho provato per ora con un condensatore che avevo qui da 22pf troppo piccolo e la situazione sembra migliorata ma lo fa ancora.
Ora procuro un condensatore piu grosso e provo.
Ma il positivo del condensatore lo metto prima della resistenza o dopo(vicino al controllore)?

Anch'io avevo lo stesso identico problema e ho risolto via software: semplicemente ignoro impulsi più brevi di un tot di ms (ora non ricordo di preciso quanti, fai delle prove) ... i disturbi solitamente riescono a far leggere lo stato HIGH all'ingresso solo per pochissimo tempo, mentre tu con il pulsante anche facendo un click di breve durata tieni lo stato HIGH per qualche ms.

Comunque vorrei sistemare questa cosa anche a livello hardware perchè se un disturbo riesce ad essere letto significa che arriva almento a 3-4V ... non vorrei che qualche giorno superasse i 5V e mi bruciasse l'ingresso.

Credo che la soluzione ideale sia ignorare gli impulsi brevissimi via software e proteggere gli ingressi con dei fotoaccoppiatori, in questo modo invece che portarti in giro per casa il 5V ti porti il 12V o il 24V che danno meno problemi sulle lunghe distanze e sono meno influenzabili dai disturbi. (se il 24V ti diventa 26V non è un problema, ma se il 5V diventa 7V ... beh allora rischi l'ingresso !)

[quote author=Ivan Pagnoncelli link=topic=60392.msg436580#msg436580 date=1304763088] Ok ho provato per ora con un condensatore che avevo qui da 22pf troppo piccolo e la situazione sembra migliorata ma lo fa ancora. Ora procuro un condensatore piu grosso e provo. Ma il positivo del condensatore lo metto prima della resistenza o dopo(vicino al controllore)? [/quote] 22pF è una capacità ridicola per questo tipo di operazione, trova un elettrolitico tra 1 (ma meglio 2,2µF come minimo) e 10µF, il positivo lo devi mettere prima della res, questa serve proprio per proteggere il micro dalle tensioni di accumulo che potrebbe avere il condensatore. In pratica applichi il segnale ad un capo della R ed al positivo del C, il negativo del C lo metti a massa (GND), l'latro capo della R va al pin di ingrsso di Arduino. Abolisci la R di pull-up e attiva quella interna dell'ATmega: in "setup" devi inviare un high al pin che hai adottato come ingresso: digitalWrite(pin,HIGH); questo comando, applicato ai pin impostati come ingressi, abilita la R di pull-up interna al micro, così eviti quella esterna e non "infastidisci" in C quando sei in condizione di riposo (assenza di impulsi).

Ciao a tutti, con un condensatore da 100uf e una resistenza da 220ohm ho risolto il problema dei disturbi che attualmente non si verifica piu.

Grazie a tutti per i consigli. :grin:

Bene, però quella capacità mi sembra esagerata, io non supererei i 22µF.

Ho sbagliato scusa, sono 10µf…

XD

Ciao a tutti, il problema dei disturbi è tornato e in modo molto casuale. Ora ho preso degli optoisolatori e volevo implementarli. Qualcuno ha gia implementato questi componenti?

Grazie

Probabilmente col passare del tempo sono aumentati i rimbalzi sui pulsanti; a questo punto l'unica è implementare un debounce; in poche parole devi bloccare la lettura dell'ingresso subito dopo il primo impulso per un tempo che in genere varia da 100 a 200msec, così vengono ignorati i falsi contatti successivi. Esiste una libreria che si chiama "bounce", se non ricordo male, è la versione nuova della "debounce", implementala e imposta il ritardo in base alle prove che farai, fino a bloccare il problema.

hai risolto con gli optoisolatori ?