Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

problema su programma

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteMassimoB, Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[11] Re: problema su programma

Messaggioda Foto UtentePaolino » 24 ott 2019, 8:59

Un consiglio: fai stampare a schermo il valore analogico letto dal sensore LM35 e il corrispondente valore calcolato di temperatura. Verifica che il codice stia eseguendo i calcoli in modo corretto.

E come dice Foto UtenteMarcoD, usa una variabile Ntemp alla quale assegnare il valore analogico letto!

Ciao.

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

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

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

0
voti

[12] Re: problema su programma

Messaggioda Foto UtenteEcoTan » 24 ott 2019, 9:48

Probabilmente l'interferenza è dovuta ai cablaggi. Non so nulla di Arduino e sicuramente dirò una grossa bestialità.. ma se dopo ogni analogRead mettessi un breve delay, e magari ripetessi la stessa analogRead, cambierebbe qualcosa?
Avatar utente
Foto UtenteEcoTan
5.493 4 10 13
Expert EY
Expert EY
 
Messaggi: 3355
Iscritto il: 29 gen 2014, 8:54

0
voti

[13] Re: problema su programma

Messaggioda Foto UtenteJackd » 29 nov 2019, 19:24

EcoTan ha scritto:...sicuramente dirò una grossa bestialità.. ma se dopo ogni analogRead mettessi un breve delay, e magari ripetessi la stessa analogRead, cambierebbe qualcosa?


Non è una bestialità, il delay non serve o meglio non in quel posto li, ma la doppia lettura invece può essere estremamente utile,
leggevo in inglese, ma non capivo bene il motivo (è un metro piu avanti a dove son arrivato io), che apparentemente sembra ci sia un problema con le letture analogiche di piedini diversi, e se non ho travisato, per un discorso di impedenze, può essere che il condensatore di sample Hold non faccia in tempo a caricarsi, però chi scriveva metteva in mezzo poi tutto un discorso di registri che mi ha mandato un po fuori strada.

per quanto riguarda il codice c'è comunque qualcosa che si può sistemare tolgo i tuoi commenti e metto i miei


Codice: Seleziona tutto
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

int ACS714 = A6;
int partitore = A0;
int lm35 = A7;
int relay = 7;
int reading = 0;
int sensorValue = 0;
int outputValue = 0;
float vout = 0.0;
float amps = 0.0;
float ampsTmp = 0.0;
float vref = 5.0;
int valV = 0;
float volt = 0.0;
float R1 = 68220.0;
float R2 = 9781.0;  
float corr 
= 1.02;    
float temp
; 
float tempOld
;

void setup() {

  lcd.init(); //dipende da che libreria usi ma potrebbe non servire, vedi sotto
  lcd.clear();
  lcd.backlight();
  pinMode(relay, OUTPUT);
//qui tu vai a leggere i pin analogici senza assegnare il valore letto ad alcuna variabile
//cosi com'è non è un operazione utile al resto del programma
  analogRead(lm35);
  analogRead(ACS714);
  analogRead(partitore);
  
  lcd
.begin(16, 2);  //in teoria questo dovrebbe richiamare lcd.init() - da verificare su documentazione libreria che stai usando
  
  delay 
(100);

  // Test LCD
  lcd.print("Test LCD OK") ; // messaggio di test
  delay(1000); // pausa di 1 secondi
  lcd.clear(); // cancellazione display
  delay(10); // pausa per effettuazione operazione
}

void loop() {
//leggiamo due volte il sensore
temp = analogRead(lm35);
temp = analogRead(lm35);
temp = temp * 0.488; //calcolo per trovare temperatura come consiglia MarcoD
   
//    amps = 0.0742 * analogRead(ACS714) - 37.87;
//riscriviamo in 2 passaggi per fare la doppia lettura
ampsTmp = analogRead(ACS714);
ampsTmp = analogRead(ACS714);
amps = 0.0742 * ampsTmp - 37.87;
if (amps < 0.15) amps = 0.0;

//solita doppia lettura
valV = analogRead(partitore); //Lettura del valore fornito dal partitore
valV = analogRead(partitore);

// sebbene questa parte sia formalmente corretta, fai lavorare per niente il micro nel senso che
// il rapporto R2/r1+r2 è sempre uguale ogni ciclo, come pure Vref e 1024
//per cui potresti calcolarti il rapporto totale in setup, o addirittura con la calcolatrice e metterlo come costante
//e sostutuire

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

//con
//vOut = valV * rapportoTotale;

//aggiunto uno spazio su "on ", ora on e off si sovrascrivono senza lasciare caratteri in più
//eliminato lcd.clear, spostato setCursor
//aggiunto S.D.P.
//valutare aggiunta isteresi per evitare che l'uscita "vibri" tra on ed off e viceversa in fase di passaggio della temperatura per il setpoint

if (temp != tempOld){ //se temperatura attuale diversa da temperatura old
    lcd.setCursor(13, 1); //imposto posizione
    if (temp > 28) {
        digitalWrite(7, HIGH);
        lcd.print("on ");  
        
}
    else if (temp < 28) {
       digitalWrite(7, LOW);
       lcd.print("off");
       }
   tempOld=temp;
}

    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
 }

Avatar utente
Foto UtenteJackd
570 2 7
Frequentatore
Frequentatore
 
Messaggi: 196
Iscritto il: 15 set 2014, 19:10
Località: Padova

0
voti

[14] Re: problema su programma

Messaggioda Foto Utenteconsole6 » 29 nov 2019, 23:38

Foto Utentedanielealfa hai meritato il voto per aver postato lo schema, bravo :ok:
ƎlectroYou e ne sai di più!
Avatar utente
Foto Utenteconsole6
1.736 1 10 12
Expert EY
Expert EY
 
Messaggi: 765
Iscritto il: 15 nov 2011, 13:08
Località: World wide

Precedente

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite