Pagina 1 di 2

problema su programma

MessaggioInviato: 22 ott 2019, 20:08
da danielealfa
ciao a tutti.
ho da pco iniziato a usare arduino,ed ho messo su un piccolo programma
Codice: Seleziona tutto
#include <Wire.h> //includo le librerie
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);
// definizione dei pin
int ACS714 = A6;
int partitore = A0;
int lm35 = A7;
int relay = 7;
int reading = 0;
//definizione valori integer e float per calcolo valori corrente e tensione
int sensorValue = 0;
int outputValue = 0;
float vout = 0.0;
float amps = 0.0;
float vref = 5.0;
int valV = 0;
float volt = 0.0;
float R1 = 68220.0;   // !! Valore della resistenza R1 !!
float R2 = 9781.0;    // !! Valore della resistenza R2 !!
float corr = 1.02;    // Valore di correzione lettura tensione

float temp;          //Variabile in cui verrà memorizzata la temperatura rilevata




void setup() {

  lcd.init();                      // initialize the lcd
  lcd.clear();
  lcd.backlight();
  pinMode(relay, OUTPUT);
  analogRead(lm35);
  analogRead(ACS714);    // prima lettura analogica della corrente
  analogRead(partitore); // prima lettura analogica della tensione
  lcd.begin(16, 2);      //inizializzazione lcd 16x2
  delay (100);

  // Test LCD

  lcd.print("Test LCD OK") ; // messaggio di test
  delay(1000); // pausa di 2 secondi

  lcd.clear(); // cancellazione display
  delay(10); // pausa per effettuazione operazione
}

void loop() {
temp = analogRead(lm35);
temp = (5.0 * temp * 100.0)/1024.0;//calcoli per trovare temperatura in gradi celsius
   
    amps = 0.0742 * analogRead(ACS714) - 37.87;
    if (amps < 0.15) amps = 0.0;

    valV = analogRead(partitore); //Lettura del valore fornito dal partitore
    vout = (valV * vref) / 1024.0; //Conversione del valore in di
    volt = (vout / (R2 / (R1 + R2))) * corr; //Calcolo valore letto


      if (temp > 28) {
      digitalWrite(7, HIGH);
        lcd.clear();
        lcd.setCursor(13, 1);
        lcd.print("on");

      } else if (temp < 28) {
      digitalWrite(7, LOW);
        lcd.clear();
        lcd.setCursor(13, 1);
        lcd.print("off");

      }
    lcd.setCursor(0, 0);      //setta il cursore sulla prima linea display
    lcd.print("A ");          //scrivi la parola A:
    lcd.print(amps, 1);       // riporta il valore calcolato degli ampere
    lcd.setCursor(11, 0);

    lcd.print (temp);     //Stampo sul  LCD la temperatura con ",1" imposto il numero di decimali dopo la virgola

    lcd.setCursor(0, 1); // setta il cursore sulla prima linea display
    lcd.print("V "); // scrive la parola volt:
    lcd.print(volt, 1);   // riporta il valore calcolato dei volt
    delay (500); //pausa lettura
  }

so che non e' dei migliori ma funziona...e' il primo che faccio , prendendo pezzi qui e li...
allora e' un volt\ampermetro temperatura e rele che si accende ad una tot temperatura.
funziona tutto, ma quando metto un ingresso(dopo il partitore 68k\10k e zener da 5,1volt )
si sballa la lettura della temperatura.la tensione ci da di 1.4 volt ma ci puo stare,e' da regolare qualche valore.
gli amp non so ancora ma credo che ....
ho messo in parallelo a vcc gnd del lm35 un condensatore da 100nF ma non serve a niente...
dove commetto l errore?
grazie mille in anticipo

Re: problema su programma

MessaggioInviato: 22 ott 2019, 20:09
da DrCox
uno schema?

Re: problema su programma

MessaggioInviato: 22 ott 2019, 21:44
da lucaking
E si, mi sa che servira un po piu di chiarezza perche qualcuno possa aiutarti.
Uno schema di come hai collegato il tutto per capire cosa hai fatto.
Che range di temperature devi leggere?

Re: problema su programma

MessaggioInviato: 22 ott 2019, 22:01
da danielealfa
semplicemete ,
12 volt modulo regolatore lm2576 di quelli regolabile , messo a vcc 5 volt
con i 5 volt alimento
lcd 2x16 con protocollo ic2
lm35
e rele' comandato da bc 547 a vcc 5 volt

Re: problema su programma

MessaggioInviato: 23 ott 2019, 8:51
da lucaking
Dal momento che non sei stato molto chiaro, lo schema sarebbe servito oltre che per capire come hai collegato il tutto, per dirti cose tipo: misura con un multimetro che tensione c'è sul pin A7 piuttosto che su un altro pin e comunque piu in generale per capire cosa hai fatto.

Ad esempio "semplicemente", non si capisce per cosa (e come) tu usi il partitore resistivo e lo zener.
Che tensione legge?
Anche lui quella dell' LM35?

Vedi, tutte queste domande con uno schema ce le saremmo risparmiate, ma siccome non mi sembra che tu abbia voglia o tempo per farlo, devi sperare che qualche utente più esperto e volenteroso ti voglia dedicare del tempo.

Non sei nuovo del forum, dovresti aver capito che chi sta qui ci sta per condividere una passione comune, cercando di aiutarsi e imparare insieme qualcosa e non per farsi i cavoli altrui. ;-)

Re: problema su programma

MessaggioInviato: 23 ott 2019, 9:16
da Paolino
danielealfa ha scritto:semplicemete ...

...è sufficiente uno schema con FIDOCADJ :ok:
Il più dettagliato possibile.

Ciao.

Paolo.

Re: problema su programma

MessaggioInviato: 23 ott 2019, 14:58
da danielealfa
ciao , grazie per il vostro aiuto sta sera faccio lo schema.
l alimentazione del lm35 arriva dal regolatore con lm2576
il partitore e' collegato cosi
+ (alimentazione da misure) resistenza da 68k resistenza da 10k verso gnd e zener in parallelo alla resistenza da 10k, dove si collegano la res da 68k quella da 10k e lo zener, da li vado serso A0
dopo a casa faccio il disegno
per ora tante grazie

Re: problema su programma

MessaggioInviato: 23 ott 2019, 19:27
da danielealfa

Re: problema su programma

MessaggioInviato: 23 ott 2019, 20:17
da lucaking
Sorvoliamo sulla chiarezza dello schema e apprezziamo la buona volontà. :-)

La prima cosa che vedo è che l' LM35 ha due terminali collegati sullo stesso polo, è un errore nel disegno o lo hai collegato così?

Onestamente mi sa che sia piu un problema di collegamenti che software.

Quando ti sballa le letture di temperatura, hai controllato col multimetro che tensione c' è tra GND e il pin A7?
qual è la tensione massima che puo entrare sul partitore?
lucaking ha scritto:Che range di temperature devi leggere?

Re: problema su programma

MessaggioInviato: 23 ott 2019, 20:33
da MarcoD
LM35 fornisce 0V a 0 C°, e 1 V a 100 C°
Il conv AD di arduino fornisce un numero Ntemp di 1023 a +5V, con 1V fornisce 204,6

temp = (5.0 * temp * 100.0)/1024.0;//calcoli per trovare temperatura in gradi celsius
E' corretto 5*100/1023 = 0.488
float temp = Ntemp * 0.488; è la stessa cosa ma mi piace di più
assegnare due valori alla stessa variabile, permette di risparmiare 4 byte, ma facilita gli errori.
O_/