Home Forum MICROCONTROLLORI SENSORE DI TEMPERATURA 9700AE E ARDUINO UNO

Questo argomento contiene 13 risposte, ha 4 partecipanti, ed è stato aggiornato da  AntonioSFERRA 1 anno fa.

Stai vedendo 14 articoli - dal 1 a 14 (di 14 totali)
  • Autore
    Articoli
  • #60203

    buonasera, sono un nuovo utente e ho un problema con arduino uno e i sensori 9700AE, in particolare ne ho collegato 1 al pin A0 e uno al pin A1. Per un paio di giorni leggevo a monitor i gradi centigradi con precisione al decimo di grado. Ho inserito una terza sonda, dello stesso tipo, sul pin A4 e sul pin A0 ho cominciato a leggere il valore 400 contro i 20,3 gradi della sonda collegata al pin A1 e pin A4. ho tolto dal programma il pin 4 e scollegato la sonda ma il problema persiste. Potete essere così gentili da trovare l’errore se è software o se bisogna inserire qualcosa sul sensore? i tre pin del sensore sono collegati al +, – e ingresso analogico. tensione di alimentazione 5V.
    grazie

    allego sketch.

    /*
    sferra
    software di gestionne impianto ACS

    descrizione ingressi uscite:
    * A0 sensore bollitore
    * A1 sensore scambiatore
    * A2 sonda ambiente
    * 1 ingresso solo bollitore = on = solo bollitore “se ingresso 1 e 2 a off impianto in automatico
    * 2 ingresso solo riscaldamento ON = SOLO RISCALDAMENTO
    * 12 Valvola deviatrice sanitaria (OFF manda su RUBINETTTO ON manda in CALDAIA)
    * 13 Valvola deviatrice riscaldamento (OFF acqua a radiatori ON acqua a BOLLITORE)
    * 11 LED 30°
    * 10 LED 40°
    * 9 LED 50°
    * 8 LED 60°
    * 7 LED 70°
    * 6 LED 80°
    * LED anodo pin lungo attaccato uscita
    * LED catodo pin corto attacato al meno
    */

    const float SONDABOLLITORE = A0; // SONDA BOLLITTORE
    float TBOLLITORE = 0.0; // valore iniziale
    const float SONDASCAMBIATORE = A1; // SONDA SCAMBIATORE
    float TSCAMBIATORE = 0.0; // valore iniziale
    const float SONDAAMBIENTE = A2; // SONDA AMBIENTE
    float TAMBIENTE = 0.0; // valore iniziale

    float setpoint1 = 23.0; // start acqua calda
    float setpoint2 = 26.0; // stop acqua calda
    float setpoint5 = 19.5; // minima temperatura ambiente per start bollitore

    float setpoint3 = 42; // valore acqua X INGRESSO CALDAIA USCITA 12 HIGH
    float setpoint4 = 47; // valore acqua X non ingresso CALDAIA USCITA 12 LOW
    const int ingresso3 = 3; // variabile ingresso 1 estate inverno 0=estate
    const int ingresso2 = 2; // variabile ingresso 2 on = solo riscaldamento
    int D3 = 0; // 1 solo produzione acs
    int D2 = 0; // 1 solo riscaldamento
    boolean manbollitore = 0; // bit appogio bollitore manuale
    boolean autbollitore = 0; // bit appogggio bollitore automatico

    void setup() {
    // DICHIARAZIONE INGRESSI USCITE:
    pinMode(13, OUTPUT);
    pinMode(12, OUTPUT);

    pinMode(11, OUTPUT);
    pinMode(10, OUTPUT);
    pinMode(9, OUTPUT);
    pinMode(8, OUTPUT);
    pinMode(7, OUTPUT);
    pinMode(6, OUTPUT);
    pinMode(ingresso3, INPUT);
    pinMode(ingresso2, INPUT);
    Serial.begin(9600);

    }

    void loop() {

    TBOLLITORE = analogRead(SONDABOLLITORE)* 5.0/1024 ; // LEGGE TEMPERATURA BOLLITORE
    TBOLLITORE = (TBOLLITORE -0.5); // OFFESET SENSORE
    TBOLLITORE = (TBOLLITORE / 0.1); // GRADI C°
    TSCAMBIATORE = analogRead(SONDASCAMBIATORE) * 5.0/1024 ; // LEGGE TEMPERATURA SCAMBIATORE
    TSCAMBIATORE = (TSCAMBIATORE -0.5); // OFFESET SENSORE
    TSCAMBIATORE = (TSCAMBIATORE / 0.01); // GRADI C°
    TAMBIENTE = analogRead(SONDAAMBIENTE)*5.0/1024 ; // LEGGE TEMPERATURA SCAMBIATORE
    TAMBIENTE = (TAMBIENTE -0.5); // OFFESET SENSORE
    TAMBIENTE = (TAMBIENTE / 0.01); // GRADI C°
    D3 = digitalRead(ingresso3); // legge ingresso 1 estate inverno
    D2 = digitalRead(ingresso2); // legge ingresso 2 on = solo riscaldamento
    Serial.print(“bollitore: “);
    Serial.println(TBOLLITORE);
    Serial.print(“scambiatore: “);
    Serial.println(TSCAMBIATORE);
    Serial.print(“ambiente: “);
    Serial.println(TAMBIENTE);
    delay (1000);

    // accendi led in funzione della temperatura
    if (TBOLLITORE >= 10) {
    digitalWrite(11, HIGH); // LED 30° ON
    }
    else {

    digitalWrite(11, LOW);
    }
    if (TBOLLITORE >= 40) {
    digitalWrite(10, HIGH); // LED 40° ON
    }
    else {

    digitalWrite(10, LOW);
    }
    if (TBOLLITORE >= 50) {
    digitalWrite(9, HIGH); // LED 50° ON
    }
    else {

    digitalWrite(9, LOW);
    }
    if (TBOLLITORE >= 60) {
    digitalWrite(8, HIGH); // LED 60° ON
    }
    else {

    digitalWrite(8, LOW);
    }
    if (TBOLLITORE >= 70) {
    digitalWrite(7, HIGH); // LED 70° ON
    }
    else {

    digitalWrite(7, LOW);
    }

    if (TBOLLITORE >= 60)

    {
    digitalWrite(6, HIGH); // LED 80° ON
    }
    else {

    digitalWrite(6, LOW);
    }

    if (TBOLLITORE < = setpoint3 ) {
    digitalWrite(12, HIGH); // ingresso acqua caldaia
    }

    if (TBOLLITORE >= setpoint4 )
    {
    digitalWrite(12, LOW); // ingresso acqua caldaia
    }

    if

    ((((((TBOLLITORE< =setpoint1)|| (autbollitore==1)) && (D2==LOW)&&(D3==LOW)&&(TBOLLITORE<=setpoint2)&& (TAMBIENTE>setpoint5)))))

    {
    (autbollitore=1); // riscaldamento bollitore automatico
    }
    else
    {

    (autbollitore=0); // riscaldamento bollitore automatico
    }

    if (((((autbollitore==1)||(D3==HIGH)) && (TBOLLITORE <85) && (TBOLLITORE < =TSCAMBIATORE) && (D2==LOW) && (TSCAMBIATORE <90)))) // 13 ON se impianto in manuale o automatico; OFF se impianto in solo riscaldamento o supero 90°
    {

    digitalWrite(13, HIGH); // riscaldamento BOLLITORE
    }

    else
    {
    digitalWrite (13, LOW);
    }

    if (TSCAMBIATORE >90)
    {

    delay (300000); // attendi 5 minuti
    }

    else
    {
    delay (500);
    }
    }

    #74703
    Piero Boccadoro
    Piero Boccadoro
    Partecipante

    Buondì :)
    Una domanda, giusto perchè non ho capito: il problema è iniziato quando hai collegato la sonda oppure quando hai messo mani al codice?!
    Perchè in questo caso vorrei vedere il codice prima ;)

    #74704
    slovati
    slovati
    Partecipante

    Ciao Antonio,
    il sensore che stai utilizzando ha una sensibilità pari a 10 mV per grado centigrado. Quindi, nella formula che “calcola” la temperatura, occorre mettere come ultima istruzione una divisione per 0.01. Da una rapida controllata al codice allegato, vedo che questa divisione è correttamente eseguita per le variabili TAMBIENTE e TSCAMBIATORE, mentre per la variabile TBOLLITORE c’è una divisione per 0.1 anzichè per 0.01. Prova ad apportare questa modifica al codice e verifica se torna tutto a posto.
    Saluti

    #74705
    Piero Boccadoro
    Piero Boccadoro
    Partecipante

    In effetti hai ragione.
    Però non so se basta solo questo sai?
    Lui ha detto che p valori che legge son 400 a fronte di 20 e spiccioli…
    Oddio, spero che i valori scritti si riferissero alle stesse temperature…

    #74707

    Marven
    Membro

    Ciao gente
    ho dato una rapida occhiata e, oltre all’osservazione di slovati, noto che c’è un’incongruenza in queste linee

    if (TBOLLITORE >= 60) <– non dovrebbe essere 80???
    {
    digitalWrite(6, HIGH); // LED 80° ON
    Ciao
    Mario

    #74712
    Piero Boccadoro
    Piero Boccadoro
    Partecipante

    Well spotted out, Marven.;)

    Chissà se si è risolto il problema… :D

    #74717

    grazie per l’interessamento. il problema è il sensore in “corto” come diciamo in elettrotecnica dovuto all’immersione in acqua con cattivo isolante. Ho preso il tester è ho misurato la tensione tra la massa e il pin centrale del sensore che è risultata essere di quasi 5 volt, quindi fondo scala. Ho sostituito il sensore è tutto funziona perfettamente (in teoria). in pratica oggi ho testato il progetto realmente, quindi con la sonda scambiatore a 2m da arduino e la sonda bollitore a 10m da arduino.
    la sonda scambiatore misura la temperatura in modo preciso (per la mia applicazione) con oscillazione massima di +/- 2°C, mentre la sonda bollitore ha avuto un oscillazione di +/- 10°C per circa due ore e dopo è andata in tilt, in particolare sul monitor veniva visualizzato -50.00°C e la tensione tra la massa e il pin centrale e zero.
    La sonda è collegata con 3 dei 7 fili di un cavo fror, i restanti sono fase, neutro, terra e uno libero. adesso provo a utilizzare un cavo dedicato alla sonda ma devo prendere altre preucazioni? la temperatura della sonda dovrebbe variare tra 5 e 100°. saluti

    #74718

    grazie per l’interessamento. La divisione per 0.1 è stata una prova per togliere le “centinaia”, invece il problema era del sensore che mandava 5 Volt a arduino che procedeva correttamente ad eseguire le operazioni matematiche.
    ciao, addesso ho il problema del sensore instabile e che invia 0 volt ad arduino anche se siamo a 30°C.

    #74719

    Hai un occhio formidabile, in effetti oggi vedevo i led 80° spegnersi prima del led 70° e ho capito che qualcosa non andava e l’ho modificato.

    #74720

    in parte, perchè adesso non capisco perchè la sonda collegata a circa 10 metri da arduino ha funzionato, anche se male, per circa due ore e poi si è rotta.

    #74727

    Marven
    Membro

    Grazie Piero e Antonio :-)
    ho un po perso la mano nella programmazione ma evidentemente “l’occhio” è rimasto ;-)
    Ma alla fine funziona tutto adesso?
    Ciao
    Mario

    #74730

    ok con cavo “isolato” sta funzionando da 36 ore. il prossimo passo, purtroppo obbligatorio, è utilizzare un cavo schermato da posare in adiacenza ad altri cavi elettrici già presenti.

    grazie.

    ho una domanda:
    Alla fine dello schetch ho messo un ritardo di 5 minuti in caso di supero dei 90 gradi, ma in realtà non dovrei fermare il programma ma mandare a off l’uscita 13 per 5 minuti o per un tempo impostato su una variabile (setpoint).

    #74731

    Marven
    Membro

    Ciao Antonio
    se ho capito bene quello che hai scritto, secondo me basta aggiungere altre due righe di programma nel punto in cui hai inserito il “digitalWrite(300000)”, una prima e una dopo come segue:
    {
    digitalWrite(13,LOW);
    delay (300000); // attendi 5 minuti
    digitalWrite(13,HIGH);

    Spero di aver capito giusto
    Ciao
    Mario

    #74732

    scusa, mi sono spiegato male. Quando la temperatura del sensore supera i 90 gradi l’uscita 13 va ad off in quanto la condizione di on non è più valida.
    Al fine di evitare che l’uscita 13 diventi instabile perchè il sensore potrebbe lavorare a 89 o 88 o 90 0 91 per tempi inferiori al minuto, ho inserito un delay di 5 minuti alla fine del programma. questa funzione, nel punto dove l’ho messa (vedi fine schetch) arresta il loop, quindi ho bloccato il programma. Volevo evitare di bloccare il loop per 5 minuti ma mantenere l’uscita 13 a off per altri 5 minuti dopo che la temperatura sia ritornata sotto i 90 gradi.

    grazie

Stai vedendo 14 articoli - dal 1 a 14 (di 14 totali)

Devi aver eseguito l’accesso per poter rispondere a questa discussione.