(RISOLTO più meno)odellinoca: problema con modulo rtc, dht11, lcd, e servo sg90

Salve a tutti, da circa 1 settimana sto provando a risolvere 2 problemi presentatomisi nel mio modellino di casa domotica.
1 problema, quello che al momento mi importa di più risolvere: quando abilito il codice nella sezione —Inizio programma di scrittura data, orario, temperatura e umidità su schermo LCD— tutti i servo motori vanno in tilt, come se arduino gli stesse dicendo di muoversi di 5 gradi, addirittura a volte si aprono e chiudono fino a metà corsa(nel caso se volete provo a mandarvi un video).
2 problema, con il lettore RFID,: nella parte del programma —Inizio programma impianto d’allarme—, quando abilito questa parte tutto il programma si blocca e non funziona niente.

Ora, il cablaggio non ha nessun problema.
Non possono essere dei falsi contatti dei pulsanti, altrimenti nella porta seriale vedrei che è stato premuto un determinato pulsante.
Ho provato a caricare il programma con la parte del monitor, DHT11 e RTC e scollegando tali sensori dal circuito e il problema persiste.
Ho provato a caricare anche una sola qualsiasi riga di quel codice e il problema persiste.
Ho provato anche ad alimentarli separatamente al circuito ma non è cambiato nulla.

Per il lettore RFID, non ho fatto ancora nulla, ma accetto comunque dei consigli.

Ultima osservazione, tutti i programmi, in totale sono 5, se caricati singolarmente e con lo stesso cablaggio non presentano problemi.

codice casa domotica.zip (8.64 KB)

schemi casa domotica 1.zip (1.46 MB)

Ciao, sono alle prime armi e non posso aiutarti, ma se dovessi mettere il codice magari qualcuno potrebbe farlo.

... aggiungo, metti anche uno schema esatto di tutti i collegamenti (incluse le alimentazioni) e vediamo se ci sono conflitti anche li ... ::slight_smile:

Guglielmo

Salve, ho modificato il post caricando il codice e 2 schemi elettrici, ne mancano 3 che per il limite di spazio non ho potuto caricare, comunque nel codice è specificato che cosa c'è collegato al rispettivo ingresso di arduino.

Ma non c'era il commando per caricare documenti anche nei commenti?

albettoita:
… ne mancano 3 che per il limite di spazio non ho potuto caricare …

… basta fare un ulteriore “post” ed allegarli a quello. Ogni post ha il limite di 2MB di allegati e 9KB di testo.

Guglielmo

basta fare un ulteriore “post” ed allegarli a quello. Ogni post ha il limite di 2MB di allegati e 9KB di testo.

okk capito, grazie per il promemoria.

schemi casa domotica 2.zip (1.54 MB)

Ulteriori prove che ho fatto in questo periodo.
Ho preso e alimentato il motore a 9V, quello che esegue uno scatto di mezza apertura della finestra, nel codice è indicata con SFC, pensando che magari il voltaggio di 4,8 non fosse sufficiente, ma non ho risolto nulla.

Nel codice, nella parte dell’antifurto ho aggiunto la visualizzazione nel monitor della password e lo stato dell’allarme se attivo o no, e non si sono presentati problemi. Non so se questa modifica sia presente nel codice che vi ho mandato perchè stavo facendo dei tentativi su delle copie del codice originale.

Ho anche provato ad accorciare il codice togliendo valorepulsante e inserendo direttamente if (digitalread (pulsantepin)) e ad usare la memoria Flash (se si chiamava così) ma non è cambiato nulla.

schemi casa domotica 3.zip (1 MB)

Solo un piccolo paio di osservazioni iniziali ...

  1. la libreria IRremote, di base, anche sulla MEGA, usa il timer 2 che è anche il timer usato da un paio di pin PWM ... verifica di non avere conflitti con tale timer.

  2. vedo che usi il pin 53 per MagnetePin ... ti ricordo che il pin 53, sulla mega, è il pin SS del bus SPI (quello usato dal lettore RFID) e quindi hai un conflitto su pin ... o hai modificato la libreria per usare un'altro pin di SS?

Guglielmo

Grazie Guglielmo per il tuo tempo, in fine settimana farò delle prove.

  1. vedo che usi il pin 53 per MagnetePin … ti ricordo che il pin 53, sulla mega, è il pin SS del bus SPI (quello usato dal lettore RFID) e quindi hai un conflitto su pin … o hai modificato la libreria per usare un’altro pin di SS?

No, io personalmente non ho modificato la libreria, e non ne sarei in grado, ho riguardato il codice di esempio e il pin 53 non viene proprio menzionato, di conseguenza non utilizzato per il modulo RFID, comunque proverò a lasciarlo libero e userò un pin analogico per il MagnetePin.
Grazie comunque alla tua osservazione, mi hai ricordato un dettaglio importantissimo, quando scollegavo dal pin 53 i 3.3V, quindi aprivo il circuito dell’interruttore magnetico, tutto il programma si blocca, resta bloccato anche se mando nuovamente i 3.3V. Per farlo ripartire dovevo resettare arduino. Mentre se il pin lo lasciavo alimentato, funziona tutto bene, in particolare l’antifurto potevo attivarlo e disattivarlo, ma non farlo suonare perchè poi si blocca tutto.
(La cosa che un po’ mi sembra strana è che non si presenta questo problema nel codice dedicato solo all’allarme, ed è lo stesso del programma unificato.)

  1. la libreria IRremote, di base, anche sulla MEGA, usa il timer 2 che è anche il timer usato da un paio di pin PWM … verifica di non avere conflitti con tale timer.

Questo argomento non lo ho mai capito, proverò a leggere nuovamente qual cosa in rete. Ad occhio mi viene da pensare e chiederti, i delay e i millis possano essere collegati con questo timer2?

albettoita:
Questo argomento non lo ho mai capito, proverò a leggere nuovamente qual cosa in rete. Ad occhio mi viene da pensare e chiederti, i delay e i millis possano essere collegati con questo timer2?

No, quelle funzioni usano l'interrupt generato da Timer1.

Guglielmo

Buonasera, sono riuscito a risolvere il problema legato al RFID , come ha detto Guglielmo era presente un conflitto nel pin 53, è bastato cambiare il magnetepin su un altro pin libero, poi per fortuna nella libreria del modulo avevo degli esempi per leggere le carte e mi sono accorto di aver modificato il pin sda nel mio codice di esempio.

Per quanto riguarda le vibrazioni dei motori ci sto ancora lavorando, vi terrò aggiornati.

Ciao Guglielmo, oggi ho fatto dei test e mi sono documentato un po' sui timer, dal quel che ho capito i pin pwm non operano tutti alla stessa frequenza, perciò sui motori dovrei usare dei pin possibilmente tutti con la stessa frequenza. Non ho trovato una lista delle frequenze che sono presenti nei vari pwm, e non li posso misurare perchè non ho un oscilloscopio, ma ho trovato una lista che mi dice a quali timer corrispondono i vari pin, quindi se ho capito bene sarebbe meglio usare i pin corrispondenti al timer 3 e 4. Se mi sbaglio correggimi pure.

Adesso ti elenco tutte le prove che ho svolto, ma tutte senza successo. Sono andato ad operare solo dai pwm dal 2 al 13, quelli dal 44 al 46 li ho lasciati stare tranne sul primo tentativo, che li ho solamente rimossi dal programma.

1 Ho provato tutti i pwm dal 2 al 13, abilitandoli 1 alla volta, con un altro servo motore sempre sg90, non vibrava ma ogni tanto eseguiva uno scatto, con un angolo più stretto rispetto a quello che fa SFC.
2 Ho provato il punto precedente ma disattivando anche la libreria del modulo IR e il suo relativo codice, altrimenti il compilatore dava errori, il motore si comporta nella stessa maniera.
3 Ho provato a disattivare tutti i pwm e la libreria IR, ma il modulo IR ho notato che a volte accendeva il led che indica un segnale in arrivo. Ho abilitato un pwm a caso e il modulo IR continuava ad accendersi, allora lo ho prima cambiato pensando fosse guasto, ma non è cambiato niente, poi lo ho scollegato fisicamente ma il motore continuava a fare lo scatto.(anche riattivando la libreria e tutto il codice)
4 Disattivando i pwm il ricevitore rimaneva spento, ho provato un po' il programma del IR relativo ai motori e si attivava solo quando io gli davo il commando.
5 Ho provato a sostituire tutti i pin che sto usando con quelli presenti su timer 3 e 4 ma niente.

Stavo pensando che magari il quarzo del modulo RTC possa in qualche modo essere collegato al problema, solo che anche un semplice lcd.setcursor mi fa vibrare i motori.

Hai qualche altra soluzione da proporre?

Sono riuscito a risolvere anche il problema dei servomotori che vibrano utilizzando le funzioni atach e detached.
Anche se non mi sembra la soluzione più adatta.