Problema con sensore magnetico reed

Salve a tutti,
scusate se ho sbagliato argomento ma sn nuovo del forum (abbiate piatà)
avrei un problemuccio con arduino mega e delle ampolle magnetiche.
Le ho montete su un circuito di un trenino x automatizzarlo ma non riesco a farle funzionare.
Mi spiego meglio:
le ampolle sono 2 e devono farmi accendere e spegnere un led.
fatto il programmino funziona al quanto bene (magnete sulla prima ampolla led=on; magnete sulla seconda ampolla led=off)
quando ci faccio camminare il trenino sui binari il led impazzisce.....si accende e si spegne come gli pare!!!!

Ps...sto impazzendo anche io.

potete aiutarmi se qualcuno lo sa o almeno sa indirizzarmi???
grazie.

Comunicazione di servizio:
La prox volta apri una discussione nuova e non agganciarti a quella di un altro utente: anche se stai usando lo stesso tipo di
componente, il tuo è un problema del tutto differente.

Detto questo, dovresti per favore darci lo schema dei collegamenti ed i componenti che stai usando nonché lo sketch in uso.

Se dice che gli funziona bene il problema non è né di sketch e né di circuito. Semplicemente è un problema meccanico (vibrazioni provocate dal movimento del treno) oppure elettromagnetico (il campo generato dal circuito di alimentazione dell'intero plastico disturba le ampolle). Non so quanto sia grande il tuo plastico, puoi fare due prove:
1 - Fai muovere il treno manualmente con le alimentazioni spente e vedi se le ampolle continuano a funzionare.
2 - Fai circolare il treno in un punto molto lontano dalle ampolle e vedi cosa succede.

Potrebbe però trattarsi anche del classico problema del debounce (quindi avrebbe ragione Leo a voler vedere lo sketch), ma in questo caso avresti il problema "pazzia" solo nel momento in cui il magnete entra in contatto con l'ampolla.

Diciamo che visto che non sappiamo da dove viene il problema, dobbiamo iniziare ad analizzare sia la parte HW (ecco perché servono i collegamenti) sia quella SW (lo sketch).

va bene Capo, era solo per risparmiare un passaggio :wink:

grazie di aver risposto alla mia domanda..... e scusate di aver sbagliato forum.
cmq ho fatto il circuito con fritzing e il programma è un semplice codice x tenere su un pulsante.
ecco tutto:

const int amp4 = 47;
const int amp6 = 51;
const int releb = 40;



int ampolla4 = 0;
int ampolla6 = 0;
int relebstato = 0;


 void setup()  { 
   
pinMode(amp4, INPUT);
pinMode(amp6, INPUT);
pinMode(releb, OUTPUT);
 }
 
 
 void loop()  { 
   ampolla4 = digitalRead(amp4);
   ampolla6 = digitalRead(amp6);



 if ((ampolla4==HIGH) && (relebstato==0))  {
     digitalWrite(releb, HIGH);
     relebstato=1;
     delay(500);
   }
   
   else if ((ampolla6==HIGH) && (relebstato==1))  {
     digitalWrite(releb, LOW);
     relebstato=0;
     delay(500);
   }

 }

Spero vi possa essere utile x capire che hanno le mie ampolle.
Ps: ho anche cambiato ampolle con delle nuove pensando che erano rotte ma il risultato è lo stesso.
cmq a trenino senza alimentazione (cioè se lo spingo io sulle ampolle) il circuito funziona benissimo.
il problema si verifica quando do alimentazione ai binari e le ampolle sono tra i due binari;
non vorrei che siano soggette a campi elettromagnetici x via del motorino del treno ?!?!?! BHAA..

HELP ME.

edit by mod: per favore includi il codice usando gli appositi tag

I treni elettrici hanno dei motori internamente, e questi hanno dei magneti.
Non vorrei che quando il treno ci passa sopra, questi facciano scattare i reed. Prova facendo un semplicissimo circuito con 1 led in serie al sensore reed e poi controlla cosa succede:

PIN 5V ------ R 330 ohm ----- LED ROSSO ------ SENSORE REED ------ GND

In questo modo se il treno interagisce coi reed lo vedi subito.

ho già provato a farlo ma l' OUTPUT di arduino va HIGH anche quando il treno si trova a 1 matro e mezzo dalle due ampolle.

ho misurato anche con un tester x capire se erano segnali spuri in entrata ed effettivamente un piccle tenzine c è ma x me irrilevante ma siccome è un tester digitale non riesco a vedere bene nel tempo i cambiamenti delle ampolle mi ci vorrebbe
un oscilloscopio che non posseggo.

oggi ho anche fatto un altra prova:
invece di collegare direttamente le ampolle ad arduino le ho collegate a dei relè e poi ad arduino in modo da isolare elettricamente
le ampolle da arduino facendo arrivare ad i pin di ingrsso di arduino dei contatti puliti e una 5 volt pulita senza interferenze.
RISULTATO: FUNZIONA PERFETTAMENTE ANCHE CON TRENO ALIMENTATO.

qualcuno sa spiegarmi il perchè?????

Allora è qualche disturbo elettromagnetico che viaggia sulle linee ed entra nei pin di Arduino.
Al posto dei relé potresti provare ad isolare il circuito di gestione dei reed dall'Arduino mediante dei fotoaccoppiatori.

Ottieni lo stesso isolamento al prezzo di una gestione più semplificata. Un 4N35 può andar bene, se ce l'hai in casa puoi fare la prova.

no al momento non me lo trovo ma faro' la prova al più presto....
ma non c'è qualche componete passivo da mettere magari come filtro x questi disturbi???
io ho anche provato a scendere la R di pullUp a 5 Kohm e devo dire che in apparenza il risultato è leggermente migliorato ma
cmq non accettabile sempre restando il condensatore ai capi del motore del treno.

Volevo solo sapere se non c'è rimedio se no uso dei relè o dei fotoaccoppiatori...
intanto grazie x dritte...... leo72 e se hai delle idee fammi sapere.

La pull-up lasciala a 10k, prova invece a mettere un C da 1nF-10nF (puoi provare fino a 100nF) tra il pin dov'è collegata l'ampolla e massa; il comportamento è dato probabilmente da molteplici microvibrazioni dell'ampolla, il relé assorbe tutto col ritardo del suo tempo di eccitazione, probabilmente col condensatore aggiuntivo risolvi, ma puoi anche implementare il debounce software.

Puoi provare ad aggiungere un piccolo C ceramico da 0.1uF in parallelo al pin dell'Arduino collegato a massa, per filtrare le componenti ad alta frequenza.

non si può moderare il Forum tenendo un'occhio alle trasmissioni sulle elezioni :grin:

Doppio post. Ormai l'avevo scritto, non mi andava di cancellarlo :stuck_out_tongue:

grazie ragazzi dei consigli....
sto appena ora provando con dei condensatore da 10 uF in parallelo ai pin di arduino in entrata e pare che funzioni bene....

speriamo che continui così...lo provo x un po e poi vediamo.

grazie ancora.

10µF sono tantini però.... se sta funzionando comunque il problema lo puoi risolvere implementando tre righe di codice nel tuo sketch, è il cosiddetto debounce (antirimbalzo), in pratica il software conta il primo impulso ed ignora poi tutti quelli che arrivano nel successivo lasso di tempo, impostabile da te; non è altro che la simulazione di ciò che fai col condensatore, che conviene lasciare, ma non superando i 100nF. Guardati l'esempio "Debounce", presente nell'IDE, e vedrai che è piuttosto semplice da usare.