Disturbi esterni bloccano seriale, dramma !

Ho un dramma in corso.

Situazione:

arduino mega 256 con collegati 3 display a led TM1637, scheda a un relè con optoisolatori, tre 2n2222 che controllano altrettanti erogatori di scontrini a 12V, il tutto collegato a un PC via USB.
Ogni erogatore di scontrini è collegato a un'interrupt di arduino (che ne verifica la fuoriuscita).
Arduino e gli erogatori sono alimentati dall'alimentatore del PC.

Funzionamento:

il computer invia ad arduino due caratteri circa 20 volte al minuto, arduino li interpreta, incrementa il numero nel rispettivo display, eroga lo scontrino.

Tutto funziona perfettamente in laboratorio, e per circa 2 mesi è stato fatto il debug lasciando tutto in opera 24 su 24 senza il minimo problema.

Installato il tutto, iniziati i problemi.

Questa installazione è vicina a due motori e a un maleddo grosso solenoide che apre e chiude uno sportello (nulla di fisicamente collegato alla mia installazione, condividono "solo" la rete 220V).

Da subito ho notato che all'apertura e ancora peggio, alla chiusura di quello sportello, i display visualizzavano "caratteri strani" e il tutto smetteva di funzionare.

Ho provveduto a filtrare gli interrupt (in PULLUP esterno da 10 k) con resistenze e condesatori, ho quindi filtrato tutte le alimentazioni con dei filtri (FN2030-16-06, Schaffner) compreso il solenoide, ho parzializzato il solenoide inserendo con un condensatore da 0,47 uf in modo che sia sempre lievemente alimentato, ho avvolto tutti i cavi che arrivano ad arduino a dei nuclei di ferrite e la situazione è migliorata, ma il problema permane.

Non capendo cosa smettesse di funzionare, ho collegato un led ad arduino in modo che ogni 10.000 cicli del loop cambiasse lo stato, così da controllare se fosse lui ad andare in crash: il led lampeggia sempre, e risulta pure collegato alla USB (gestione periferiche lo vede), ma il PC e arduino non comunicano più.

L'unico modo per ripristinare la situazione è scollegare arduino dalla USB e ricollegarlo.
Le altre periferiche collegate alle altre USB del PC invece non risentono di nessun problema, quindi presumo che vada in crash la seriale di arduino.

Ora sono collegato a 19.200 e provvederò ad abbassare drasticamente la velocità di comunicazione "sperando" si tratti di quello, ma ne dubito fortemente.

Quindi cortesemente chiedo:

  • i disturbi possono entrare anche dai pin che ho usato per i DIO e CLK dei TM1637, e se si, come posso filtrare tali disturbi ? Condensatori da 100nf a massa interferirebbero con la comunicazione ?

  • i disturbi generalmente posso entrare anche dai pin di uscita ?

Devo trovare una soluzione al più presto, questa installazione è a 300 km di distanza, devo organizzarmi e portarmi tutto il possibile immaginabile e risolvere questo dramma !

Grazie per l'aiiuto.

Scusate, erroneamente ho postato il software anzichè hardware.

Per provare a rispondere sarebbe utile uno schema elettrico di tutto il sistema. :confused:

virul:
Scusate, erroneamente ho postato il software anzichè hardware.

Spostato nella giusta sezione :slight_smile:

Guglielmo

Ti dico solo quanto ho visto io in un laboratorio... prendilo come spunto: un "Controllino" ( https://controllino.biz/ ... praticamente un arduino vestito da festa), connesso via USB ad un PC... sparando con il generatore di ESD non c'è stato modo di evitare lo stesso blocco che riferisci tu.
Unica soluzione, staccare la usb ed usare ethernet per comunicare con il pc. qui nessun problema.

ciao

È simile a quanto mi capitava qui.

Perché vi ostinate ad usare Arduino per ciò che NON è fatto ... rileggeteivi il REGOLAMENTO, punto 15.5 ... ::slight_smile:

Riprendo una vecchia, ma giustissima, osservazione che, tempo fa, fece "icio" su questo forum :

Arduino e la quasi totalità delle sue shield non sono fatti per impianti civili, automazione industriale , domotica etc; i fotoaccoppiatori in tutte le schede Arduino sono totalmente assenti mentre in tutte le applicazioni suddette sono presenti e talvolta abbondanti.

Arduino è fatto per imparare, per le tesi di esame e nei corsi scolastici, il tutto DEVE restare sul tavolo e i loro cavi MAI fatti girare in quadri, tubi e canaline.

Come hanno detto anche i più esperti in questo sito, ASTENETEVI ALLA GRANDE a mettere queste schede in impianti civili e industriali, vi può capitare quande vi va bene una brutta figura e quando vi và male un danno con denuncia penale.

Guglielmo

Questa installazione è potenzialmente letale solo se qualcuno ingerisce un gran numero di scontrini, trattandosi di un sistema di monitoraggio dei tempi di attesa (un elimina code un po' più avanzato).

Oltretutto è in fase di sviluppo su specifiche, nulla di tragico, al massimo è come se non ci fosse. Poi verrà realizzata l'elettronica dedicata.

Per quello che riguarda il problema, ho constatato che comunque, anche scollegando tutto e lasciando solo il mega collegato al pc, il problema si presenta comunque è ora non a causa del solenoide: come descritto nei link postati, basta collegare un caricabatterie di un cellulare a una presa dove è connesso il pc (e quindi arduino) per bloccare tutto.

A questo punto mi viene da pensare e supporre che la soluzione potrebbe essere l'utilizzo di della libreria SoftwareSerial.

Qualcuno ha avuto modo di verificare se anch'essa è affetta da questo problema ?

Altra soluzione sarebbe qualcosa di simile a quanto presente nell'altro link postato è simile a quanto avevo fatto per una interfaccia midi: utilizzare opto isolatori esterni ed entrare direttamente in tx1 e rx1.

gpb01:
Perché vi ostinate ad usare Arduino per ciò che NON è fatto ... rileggeteivi il REGOLAMENTO, punto 15.5 ... ::slight_smile:

Riprendo una vecchia, ma giustissima, osservazione che, tempo fa, fece "icio" su questo forum :

Guglielmo

Devo dire che sono poco d'accordo su questa osservazione. Non TOTALMENTE in disaccordo, ci mancherebbe, ma non sono così estremista.
Arduino è stata una bella idea e continua a fare proseliti, nonostante la concorrenza.
Quello che, piuttosto, non vedo da chi lo ha proposto è una "attualizzazione" della scheda, tale da renderla "esente da disturbi". E non ci vuole molto!
Lo dico perché ho "aperto" (ehh lo so, a me le cose "chiuse" non sono mai piaciute...) un PLC Zelio della Schneider Electric e, sorpresa, c'è dentro un ATmega. E questo sarebbe il meno....
Ho voluto vedere come si fa a mettere una "specie di Arduino" dentro ad un PLC certificato e marchiato addirittura UL/CSA, oltre che CE ed altre rinomate certificazioni. Delusione! Nemmeno dei fotoaccoppiatori sulle uscite!
E gli ingressi? Un paio di resistenze per portarli leggibili a +24 e un condensatore classico...
Quindi è possibile!

https://drive.google.com/open?id=1efOIHy0Wz7yQa_I3RyzCzt2kP5fiPIvx
https://drive.google.com/open?id=13EDwg8_MmIK5aFclrBi7UCfT7KC49tl5

Ecco perchè consiglio di non fermarsi o addirittura "cambiare strada" se dei disturbi elettromagnetici ci rovinano la festa.
Ed il forum dovrebbe servire anche a questo: trovare soluzioni per evitare problemi.
Certo, dire che il prodotto non va bene per una tale applicazione toglie da ogni responsabilità e scocciatura. E' un po' come dire che l'Arduino originale è meglio del cinese... Se entrambi si accendono e fanno girare un programma sono esattamente fotocopie: si, magari uno è più bello dell'altro, a noi italiani fa figo avere il logo bianco su una schedina blu, ma se anche questa si "inchioda" con un disturbo elettromagnetico, la cosa fa abbastanza incazzare, no?
E' solo un post "domenicale", non fatemi caso... :slight_smile:

virul:
A questo punto mi viene da pensare e supporre che la soluzione potrebbe essere l'utilizzo di della libreria SoftwareSerial.

...piuttosto elimina in chip USB-232 di Arduino, e prova ad entrare sui pin ttl RX e TX, magari proprio dissaldando le resistenze ce li collegano ad chip. Oppure usa una delle altre com, che la MEGA offre.

steve-cr:
Devo dire che sono poco d'accordo su questa osservazione.

Tu puoi essere in accordo o disaccordo, questo NON sposta di una virgola il fatto che :

Di tutte le schede Arduino, nessuna è certificata per uso industriale/civile e non sono in nessun modo certificabili a tale uso.

Questo però non significa che non si può usare l'ambiente di sviluppo (IDE) di Arduino per prodotti commerciali; è possibile farlo a patto che si sviluppi un hardware Arduino Like che sia in regola con le vigenti normative per la destinazione d'uso.

Quindi, ovvio che puoi usare la MCU che ti pare (inclusi gli Atmel, ci mancherebbe) per produrre una cosa che tali norme rispetti ... purché riprogetti TU la scheda e superi le varie certificazioni.

Ribadisco ... con Arduino, puoi realizzare quello che ti pare fino a che rimane allo stato di prototipo e non lo colleghi ad un sistema dove è previsto il rispetto di regolamentazioni specifiche (il che include praticamente quasi tutto ciò che è al difuori del tavolo del laboratorio).

Guglielmo

P.S.: Poi, ognuno fa quello che gli pare, ma ... in caso di problemi, sarà lui a risponderne.

gpb01:
P.S.: Poi, ognuno fa quello che gli pare, ma ... in caso di problemi, sarà lui a risponderne.

Siamo grandi, Guglielmo, e non penso che se qualcuno fa casini scarica la colpa su Arduino o su Atmel...

Il mio post era incentrato all'affidabilità di Arduino che è troppo facile scaricare con un "non usarlo" e basta. Il progetto di cui si parla in questo post non ha violato nessuna regola, altrimenti avresti già chiuso il topic, no?

Io ho solo fatto notare che un ATMEGA128 viene usato in un PLC industriale certificato e senza nemmeno dei fotoaccoppiatori sulle uscite....

steve-cr:
Siamo grandi, Guglielmo, e non penso che se qualcuno fa casini scarica la colpa su Arduino o su Atmel...

e chi ha mai affermato questo ? ? ? :o ... ho detto che ne risponde personalmente.

L'OP fa lo spiritoso dicendo che "l'unico pericolo è se qualcuno ingurgita gli scontrini" e NON pensa che, ad esempio, se per una malaugurato caso, il suo bel impianto fatto con Arduino (e quindi NON certificato) fa corto e provoca un incendio ... l'assicurazione NON paga ed è lui civilmente e penalmente responsabile. Tutto qui.

steve-cr:
Il mio post era incentrato all'affidabilità di Arduino che è troppo facile scaricare con un "non usarlo" e basta.

Allora NON vuoi capire ...
... NON va usato perché ... è illegale usarlo, così come è, in un impianto civile/industriale.

Tu progetti la tua scheda, concettualmente basata su Arduino, la certifichi / la fai certificare per gli scopi in cui la vuoi usare e .... nessuno ha nulla da obiettare.

steve-cr:
Il progetto di cui si parla in questo post non ha violato nessuna regola, altrimenti avresti già chiuso il topic, no?

Chi ha parlato di violazione di regole ? ? ?

Ho spiegato perché l'OP non dovrebbe usare Arduino in un impianto civile come quello che sta mettendo su (... che non credo che stia facendo privatamente per casa sua) poi, ribadisco ...
... fate come vi pare.

Guglielmo

Vabbè, Guglielmo, io non volevo assolutamente rovinarti la domenica ma mi sembra che parliamo due lingue diverse, e questo A PRESCINDERE DA QUELLO CHE UNO FA ( e che non deve fare) CON ARDUINO.

Lui ha problemi di disturbi sulla USB e gli viene risposto "non usare Arduino" (quindi cosa facciamo? Chiudiamo il forum e andiamo tutti in vacanza?)

Avrei gradito che qualcuno gli risolvesse il problema e non si attaccasse a "dove puoi usarlo e dove non puoi usarlo".

Un domani un altro utente usa Arduino per fare accendere dei led e gli si presenta lo stesso problema, cosa facciamo? Lui è bravo perché usa i led quindi gli risolviamo il problema e l'altro invece è cattivo perché emette scontrini e gli diciamo di usare dell'altro???

Quindi, per non far alterare altre persone e non venire continuamente frainteso mi asterrò da future considerazioni...
Scusate il disturbo.

steve-cr:
Vabbè, Guglielmo, io non volevo assolutamente rovinarti la domenica ma mi sembra che parliamo due lingue diverse

SI, decisamente !

steve-cr:
Un domani un altro utente usa Arduino per fare accendere dei led e gli si presenta lo stesso problema, cosa facciamo? Lui è bravo perché usa i led quindi gli risolviamo il problema e l'altro invece è cattivo perché emette scontrini e gli diciamo di usare dell'altro???

Esatto,
uno sta giocando sulla sua scrivania / a casa sua, l'altro sta lavorando su un "impianto civile" e mi sembra corretto dirgli che è sbagliato e che dovrebbe usare un prodotto certificato per "impianti civili".

Guglielmo

virul:
scollegando tutto e lasciando solo il mega collegato al pc

E il mega collegato a nient'altro? O c'è altro, magari a sua volta alimentato da qualche altro alimentatore tale per cui si può creare un circuito chiuso?

basta collegare un caricabatterie di un cellulare a una presa dove è connesso il pc (e quindi arduino) per bloccare tutto.

Tutto cosa? Solo la comunicazione o si resetta Arduino?

la soluzione potrebbe essere l'utilizzo di della libreria SoftwareSerial

Se si resetta Arduino (ma mi pare di aver capito di no) non servirebbe.
Se il problema è nella sezione convertitore USB/seriale (come suppongo) non servirebbe lo stesso.

steve-cr:
un ATMEGA128 viene usato in un PLC industriale certificato e senza nemmeno dei fotoaccoppiatori sulle uscite....

I fotoaccoppiatori non bloccano tutto, i burst a radiofrequenza passano come se fossero resistenze da pochi cento ohm. Per questo tipo di disturbi (oltre alle ferriti sui cavi) meglio condensatori di fuga verso terra (bastano 100..1000pF) e un adeguato layout delle masse e dei collegamenti. Probabilmente in quel PLC queste cose sono state studiate dall'inizio per superare i vari test nella condizione di utilizzo prevista.

puoi usare la MCU che ti pare (inclusi gli Atmel, ci mancherebbe) per produrre una cosa che tali norme rispetti ... purché riprogetti TU la scheda e superi le varie certificazioni.

Il che suona un po' surreale ad esempio per un semplice orologio da appendere alla parete, o per accendere dei LED di un presepio in esposizione, che, formalmente, rientrano in pieno negli utilizzi "illegali" :confused:

Claudio_FF:
Il che suona un po’ surreale ad esempio per un semplice orologio da appendere alla parete, o per accendere dei LED di un presepio in esposizione, che, formalmente, rientrano in pieno negli utilizzi “illegali” :confused:

E che posso farci io se la legge prevede questo ? Non le scrivo mica io le normative sugli impianti … ::slight_smile:

Del resto, se il tuo bel presepio “aperto al pubblico” prende fuoco … so’ cavoli …

Ma l’ho detto e ripetuto … le cose stanno così, poi voi fate un po’ come cavolo vi pare (… e mi sono anche rotto le scatole di ripeterlo) !

Guglielmo

gpb01:
Del resto, se il tuo bel presepio "aperto al pubblico" prende fuoco ... so' cavoli ...

Vero, ma strettamente parlando Arduino non c'entra.

Il discorso si applica a qualsiasi cosa autocostruita o assemblata, di qualsiasi genere, realizzata con qualsiasi componente (fosse anche con PLC a norme avioniche) che sia priva di certificazione e destinazione d'uso.

E quindi ci ricadono (nel senso che legalmente non bisogna usare):

  • Il 100% dei progetti amatoriali per uso personale (sia hardware che software, sia dentro casa che fuori... niente robottino giocattolo comandato con il cellulare... o Predator computer cosplay!!!!).
  • Il 100% dei progetti amatoriali per uso esterno/lavorativo non certificati e/o certificabili. Per questi secondi che si utilizzino o meno componenti certificati, legalmente non cambia nulla, sempre fuori norma restano. Quello che può cambiare è solo dal punto di vista tecnico/funzionale/sicurezza.

"Non c'è peggior sordo di chi non vuol sentire", per cui ...
... mi autoquoto:

gpb01:
(... e mi sono anche rotto le scatole di ripeterlo) !

... e "le scatole" è un dolce eufemismo.

Fate come ve pare, per me l'argomento è chiuso ... (per eventuali danni citano voi non me).

Buona notte,

Guglielmo

Se la mettiamo dal lato "certificazioni", allora non lo si dovrebbe nemmeno usare per imparare/studiare/sviluppare: chi mi dice che qualcuno non incendi la casa ?

Come ho già detto, quanto da me realizzato è a puro scopo DI SVILUPPO, poi verrà realizzata una board dedicata e certificata, come ho già fatto almeno due dozzine di volte.

La comodità nell'utilizzo di Arduino in fase di sviluppo è innegabile, permette di implementare/modificare/sviluppare risparmiando tempo.

Poi anche la stazione di servizio vende materiale potenzialmente dannoso: se uno riempie una bottiglia e sopra ci mette una stoppa ha creato una bomba, ma nessuno punterà mai il dito verso il distributore di carburate...

Per rientrare nuovamente nel topic, quello che si pianta è proprio e solo la comunicazione seriale via USB.

Come ho descritto, ho inserito nel codice che ogni 10.000 cicli del loop, un led cambi il suo stato, e lui lampeggia allegramente anche dopo che si sia piantata la comunicazione.

Anzi, gli interrupt rispondono perfettamente ma niente comunicazione.

Quando ho detto "basta collegare un caricabatterie perchè si pianti" intendevo proprio quello che ho detto: arduino collegato al PC via USB, nessun'altra periferica collegata, nulla, solo loro due.
Colleghi qualsiasi cosa alla rete, forse la prima volta ti va bene, forse pure la seconda se hai fortuna, ma alla terza sicuramente si pianta la comunicazione.

Ho sostituito tutto, dal PC a Arduino, provato alimentazioni separate (scollegando nella USB le alimentazioni) e piuttosto che migliorare peggiora, diversi cavi USB, inserito filtri alimentazione sia sulla rete che sui 12v che alimentano Arduino, ferriti da tutte le parti.

Non c'è verso, e non posso nemmeno attribuire il problema all'impianto elettrico che è nuovissimo e con una messa a terra di circa 1 ohm.

Oltretutto ho repilicato il problema anche in laboratorio, e si presenta tale e quale.

Ora provo due soluzioni diverse: max232 e connessione seriale con il PC e libreria SoftwareSerial con optoisolatori.