Selettore ingressi e temperatura

Salve a tutti appena iscritto e già vi posto il mio problema, che mi sta facendo passare notti insonni, mi spiego in modo da farmi capire.

Il mio progetto con arduino dovrebbe fare le seguenti cose:

tramite pulsante devo attivare 3 relè in sequenza infinita , cioè premo si attiva il primo relè, ripremo si disattiva il primo e si attiva il secondo, ripremo si disattiva il secondo e si attiva il terzo, ripremo si disattiva il terzo e si riattiva il primo e cosi via , fino a qui nessun problema , questo funzionamento riesco a farlo.
Nello stesso tempo devo monitorare la temperatura tramite una sonda, ed ecco i problemi, il funzionamento che voglio ottenere è il seguente :
ogni qualvolta finisco di premere il pulsante per attivare i relè , dopo un tempo prestabilito voglio che mi appaia a display il valore della temperatura misurata, ho provato di tutto ma non riesco a farla apparire , o meglio se mi appare mi si blocca la selezione dei relè o funziona a scatti.

Grazie a chi mi potrà aiutare a risolvere questo problema.
Cordialmente Tiziano

selettore_ingressi__temp_prova.ino (2.92 KB)

Grazie mille ragazzi gentilissimi e sempre pronti :smiling_imp: :smiling_imp: :smiling_imp: :smiling_imp:

tix88:
Grazie mille ragazzi gentilissimi e sempre pronti :smiling_imp: :smiling_imp: :smiling_imp: :smiling_imp:

Battute come queste te le puoi risparmiare dato che, sia ben chiaro, qui TUTTI sono volontari (NON pagati) che dedicano al forum il loro tempo libero e NON hanno alcun obbligo di aiutare alcuno ... lo fanno dove possono e quando hanno tempo !

Se ti occorre un aiuto urgente, chiedi ad uuno specialista, lo paghi e quello ti risolve i problemi ... se chiedi al forum ... beh, può succedere che nessuno ti risponda ... magari perché non è chiara la domanda, magari perché chi la legge non sa cosa rispondere e magari perché a volte qualche thread sfugge.

Quindi ... inutile fare certo "spirito polemico" !

Guglielmo

Devi salvare il valore di millis() quando premi il pulsante. Poi nel loop verifichi quando la differenza tra il millis() attuale e il valore salvato è superiore all'intervallo desiderato, e in tal caso leggi la temperatura.

Grazie mille ragazzi gentilissimi e sempre pronti

Solo perchè così "forse" impari qualcosa

selettore_ingressi__temp_prova.ino (2.88 KB)

>tix88: Come vedi, molto probabilmente, il tuo thread era finito sotto altri thread ed era probabilmente sfuggito ...
... la prossima volta, invece di fare il "sarcastico", dopo 48 ore prova semplicemente a fare "up" riportando in testa il thread e rendendolo di nuovo visibile.

Guglielmo

Grazie mille, e scusatemi se sono stato sarcastico, non era mia intenzione ma ormai dopo 1000 prove non sapevo cosa fare.

Volevo chiedere visto che ormai so come procedere per il mio problema, se vorrei aggiungere un'altro sensore di temperatura il procedimento postato da BRUNELLO è sempre valido?

Grazie infinite ancora

Salve ragazzi, ho modificato il mio progetto con l'aggiunta di qualche altro relè e cambiato il sensore di temperatura con 2 ntc, che verranno montati direttamente su dei dissipatori.

Il funzionamento del progetto a questo punto prevede il seguente funzionamento :

All'accensione dopo aver stampato a schermo varie scritte, dopo un tot tempo si devono eccitare i 2 relè di accensione amplificatori che fungeranno anche come protezione per temperatura elevata, in modo che se la temperatura dei 2 amplificatori supererà un certo valore , va a diseccitare i 2 relè e non li riattiverà più, mentre tutti i relè per le ventole di raffreddamento resteranno eccitati per raffreddare il tutto, per riattivare i relè degli ampli si procederà ad un reset totale del sistema , allego lo sketch sarei felice se gli dareste una controllata per vedere se ci sono errori gravi o risolvibili in maniera più semplice , grazie mille .

selettore_ingressi_ntc.ino (5.32 KB)

Rieccomi di nuovo, ho apportato altre modifiche al progetto ed in questo modo dovrebbe :smiling_imp: essere completo , ho aggiunto un modulo amperometro per monitorare l'assorbimento totale istantaneo degli amplificatori, le misure restituitemi sono molto realistiche, messe a confronto con una pinza amperometrica professionale hioki , tralasciando le misure che mi aggradano abbastanza, riscontro un piccolo problema , con lo sketch postato sotto, posso selezionare gli ingressi solamente quando ho il risultato della misurazione, mi spiego meglio, se premo un tot volte il pulsante in veloce successione, seleziono l'ingresso solamente quando il display mi visualizza gli ampere misurati, e non sempre in continuo come faccio con la sola misura della temperatura, dove sta l'errore? :astonished: :astonished: :astonished: :astonished:

selettore_ingressi_ntc_amp.ino (6.18 KB)

Ogni secondo vai a leggere la temperatura e la corrente, se in quest'ultima ci metti un ciclo di 150 letture, con un ritardo di 3ms tra ogni lettura,

  for (int x = 0; x < 150; x++){ //Get 150 samples
  AcsValue = analogRead(A3);     //Read current sensor values   
  Samples = Samples + AcsValue;  //Add samples together
  delay (3); // let ADC settle before next sample 3ms

un mezzo secondo te li porta via.
Quindi nel tuo sketch hai per mezzo secondo la lettura del pulsante e per un'altro mezzo secondo è bloccato.
Puoi ad esempio ridurre il delay(3) , poi ridurre i cicli di lettura (150 sono un po' troppi). Ma chiaramente andrà trovata una giusta combinazione, se riduci troppo potresti avere un'errore maggiore.
E comunque quella formula prevede che la tesnione di alimentazione sia esattamente di 5V e non è detto che lo sia
E togli quel delay(50) in fondo alla funzione AMP().
Puoi anche fare le letture non ogni secondo ma un po' più di rado

Brunello:
-Ogni secondo vai a leggere la temperatura e la corrente, se in quest'ultima ci metti un ciclo di 150 letture, con un ritardo di 3ms tra ogni lettura,
un mezzo secondo te li porta via.
Quindi nel tuo sketch hai per mezzo secondo la lettura del pulsante e per un'altro mezzo secondo è bloccato.

-E comunque quella formula prevede che la tesnione di alimentazione sia esattamente di 5V e non è detto che lo sia

Immaginavo che il problema era dato dal ritardo delle letture, procederò come mi hai consigliato,
per quanto riguarda la formula , per leggere la tensione di alimentazione, dovrei impegnare un pin analogico di arduino per leggerla, e dopo sostituire il valore? o posso farla leggere direttamente dal modulo acs712?

Rieccomi, Il mio progetto si è evoluto abbastanza, e dopo che è filato tutto liscio per un po mi ritrova ad un punto morto, vorrei replicare il comando del pulsante che mi aziona i relè con il telecomando questo è un pezzo di codice che mi regola il volume tramite telecomando apple e i vari case corrispondono al tasto su e giù come da descrizione

while(digitalRead(REMOTEPIN)==LOW){
    if((IRkey=getIRkey())==255){
      // Do nothing
    }
    else if(IRkey==0){  // Repeat
      IRkey=previousIRkey;
    }
    else {  // New command
      previousIRkey=IRkey;
    }
    switch(IRkey){
    case 10:  // 10 is the up key, we will use for volume up
     if (volume > 0)
        {
          volume=volume-0.5;
        }
    setVol(volume);
    break;
    case 12:  // 12 is the down key, we will use for volume down
      if (volume < 127)
        {
          volume=volume+0.5;
        }
    setVol(volume);
   break;
   
    }
  }

Desso io vorrei inserire un'altro case che corrisponde al tasto menù per replicare questo altro pezzo di codice che mi seleziona gli ingressi

 buttonState = digitalRead(BUTTON);
   delay(10);
  if (buttonState != lastButtonState) {
    if (buttonState == LOW) {
      buttonPushCounter++;
      delay(50);
      if (buttonPushCounter > 3) buttonPushCounter = 1;
      switch (buttonPushCounter) {
        case 1:
          CD_on();
          break;
        case 2:
          DAC_on();
          break;
        case 3:
          AUX_on();
          break;
      } 
    }

.

Come potrei inserire l'istruzione?

Nessuno può aiutarmi?

Ciao ragazzi.
Dopo due giorni di sbattimento ufficialmente ci rinuncio.
Ai moderatori potete chiudere