Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

problema su programma

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[1] problema su programma

Messaggioda Foto Utentedanielealfa » 22 ott 2019, 20:08

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
Avatar utente
Foto Utentedanielealfa
243 2 4 7
Expert
Expert
 
Messaggi: 1313
Iscritto il: 27 mag 2009, 22:51

0
voti

[2] Re: problema su programma

Messaggioda Foto UtenteDrCox » 22 ott 2019, 20:09

uno schema?
"The past is not really the past until it has been registered. Or put another way, the past has no meaning or existence unless it exists as a record in the present."
John Archibald Wheeler
Avatar utente
Foto UtenteDrCox
2.738 2 8 12
Master EY
Master EY
 
Messaggi: 744
Iscritto il: 8 giu 2010, 21:42

0
voti

[3] Re: problema su programma

Messaggioda Foto Utentelucaking » 22 ott 2019, 21:44

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?
Avatar utente
Foto Utentelucaking
1.651 4 5 8
Expert
Expert
 
Messaggi: 1445
Iscritto il: 29 mag 2015, 14:28

0
voti

[4] Re: problema su programma

Messaggioda Foto Utentedanielealfa » 22 ott 2019, 22:01

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
Avatar utente
Foto Utentedanielealfa
243 2 4 7
Expert
Expert
 
Messaggi: 1313
Iscritto il: 27 mag 2009, 22:51

3
voti

[5] Re: problema su programma

Messaggioda Foto Utentelucaking » 23 ott 2019, 8:51

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. ;-)
Avatar utente
Foto Utentelucaking
1.651 4 5 8
Expert
Expert
 
Messaggi: 1445
Iscritto il: 29 mag 2015, 14:28

3
voti

[6] Re: problema su programma

Messaggioda Foto UtentePaolino » 23 ott 2019, 9:16

danielealfa ha scritto:semplicemete ...

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

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[7] Re: problema su programma

Messaggioda Foto Utentedanielealfa » 23 ott 2019, 14:58

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
Avatar utente
Foto Utentedanielealfa
243 2 4 7
Expert
Expert
 
Messaggi: 1313
Iscritto il: 27 mag 2009, 22:51

2
voti

[8] Re: problema su programma

Messaggioda Foto Utentedanielealfa » 23 ott 2019, 19:27

Avatar utente
Foto Utentedanielealfa
243 2 4 7
Expert
Expert
 
Messaggi: 1313
Iscritto il: 27 mag 2009, 22:51

0
voti

[9] Re: problema su programma

Messaggioda Foto Utentelucaking » 23 ott 2019, 20:17

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?
Avatar utente
Foto Utentelucaking
1.651 4 5 8
Expert
Expert
 
Messaggi: 1445
Iscritto il: 29 mag 2015, 14:28

0
voti

[10] Re: problema su programma

Messaggioda Foto UtenteMarcoD » 23 ott 2019, 20:33

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_/
Avatar utente
Foto UtenteMarcoD
12,2k 5 9 13
Master EY
Master EY
 
Messaggi: 6696
Iscritto il: 9 lug 2015, 16:58
Località: Torino

Prossimo

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti