Se sei già registrato           oppure    

Orario: 18/05/2024 14:15:19  

 

Energia Alternativa ed Energia Fai Da Te > Arduino

VISUALIZZA L'ALBUM

Pagine: (8)   1   [2]   3   4   5   6   7   8    (Ultimo Msg)


Termostato per termocamino con sensori
FinePagina

eolo1234
KiloWatt


Gruppo:Utente
Messaggi:253

Stato:



Inviato il: 14/01/2018 19:27:49

Faccine/Smileys_0003.gif

si cosi hai capito benissimo
il messaggio parte a 85 gradi insieme al buzz ma per me e ok anche come dici tu

GRAZIE



Modificato da eolo1234 - 14/01/2018, 22:33:37
 

eolo1234
KiloWatt


Gruppo:Utente
Messaggi:253

Stato:



Inviato il: 14/01/2018 19:50:17

ho cercato di dare una sistemata con le varie soglie e messaggi che ora sono su 4 righe visto che lcd e grande
per quello che riguarda la seconda sonda e il terzo rele li lasciamio li non si sa mai potrebbero servire in futuro
mi sono dimenticato di dirti che allinterno del programma ce anche un sensore di rumore ma e disabilitato chissa in futuro

Scarica allegato

Nuovo documento di testo.txt ( Numero download: 152 )



Modificato da eolo1234 - 14/01/2018, 20:15:53
 

eolo1234
KiloWatt


Gruppo:Utente
Messaggi:253

Stato:



Inviato il: 14/01/2018 22:35:44

lo schema in parte



Immagine Allegata: Slide1.jpg
 
ForumEA/S/Slide1_1.jpg

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 16/01/2018 13:51:19

Allora Eolo, ho modificato il codice per provare a migliorarlo, per prepararlo per le modifiche e per iniziare a capirci qualcosa in più...

Come puoi vedere ho spostato la lettura di ogni sensore in funzioni dedicate richiamate in sequenza dal Loop, in modo che possiamo ragionare su un problema per volta.

Non ho mai usato un RTC, non so come funziona, a occhio il codice inserito non è corretto, speriamo che calcola ci dia uno sguardo, altrimenti dovrò provare personalmente...

Intanto allego il codice:


#include <Wire.h>
#include <dht11.h>                          // Libreria sensore temperatura e umidità
#include <LiquidCrystal_I2C.h>              // Libreria display 20×4
#include <DS1302.h>                         // Libreria orologio
#include <DallasTemperature.h>
#include <Adafruit_BMP085.h>
#include <RTClib.h>

#define BACKLIGHT_PIN 13
#define ONE_WIRE_BUS 12
#define DHT11_PIN 7                         // Pin Digitale 7 per il DHT-11 Temperaturà e Umidità

// Dichiarazione Variabili
int mostrador = 0;
int IniTempVariable = 0;                    // Viaribile temperatura iniziale
int IniUmiVariable = 0;                     // Viaribile umidità iniziale
int Annuncio = 0;                           // Variabile per nascondere annuncio iniziale
int threshold = 500;                        // Variabile che imposta la soglia per il calcolo dell’inquinamento acustico
int volume;                                 // Variabile volume per la sezione inquinamento acustico
int buzzerPin = 9;                          // Pin Digitale 9 per il Buzzer
const int sensorPin= 1;                     // Pin Analogico 1 per MQ-2
int smoke_level;                            // Inizializzazione MQ-2 Sensore fumi

//Relè
byte relPin1Val = LOW;
byte relPin2Val = LOW;
byte relPin3Val = LOW;

int relPin1 = 2;                            // Pin digitale per Relè 1: Circolatore
int relPin2 = 3;                            // Pin digitale per Relè 2: Buzzer
int relPin3 = 8;                            // Pin digitale per Relè 3: Attualmente non utilizzato

int relPin1In = 2;
int relPin2In = 3;
int relPin3In = 8;


// Heizungs Status
int heiz1Val;
int heiz2Val;

//IMPOSTAZIONE PIN
int DS18S20_Pin = 12;                       // DS18S20 Signal pin on digital 2

float temperature1;                         // Temperatura letta dalla sonda Esterna al Termocamino
float temperature2;                         // Temperatura letta dalla sonda Interna al Termocamino

char buffer1[20];
char buffer2[20];

OneWire ds(DS18S20_Pin);                   // on digital pin 2
dht11 DHT11;                               // Inizializzazione DHT-11 Temperatura e Umidità
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
RTC_DS1307 RTC;
Adafruit_BMP085 bmp180;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup()
{
  Serial.begin(9600);
  lcd.begin(20,4);
  sensors.begin();

  pinMode(relPin1, OUTPUT);                // Impostazione Uscita per Relè 1
  pinMode(relPin2, OUTPUT);                // Impostazione Uscita per Relè 2
  pinMode(relPin3, OUTPUT);                // Impostazione Uscita per Relè 3

  pinMode(buzzerPin, OUTPUT);              // Impostazione Buzzer
  pinMode(sensorPin, INPUT);               // the smoke sensor will be an input to the arduino
}

void loop()
{
  // Leggo la temperatura interna ed esterna del termocamino e la mostro a display (DS18B20)
  Temperatura_Termocamino ();
  delay(5000);

  // Leggo Temperatura, Pressione e Altitudine fuori casa, mostrandola sul display (AS180)
  Temp_Pres_Alt_Esterna ();
  delay(3000);

  // Leggo l'ora dal Real-Time-Clock e la mostro sul display (DS1307)
  Leggi_Ora ();
  delay(1000);

  // Leggo Temperatura e Umidità dentro casa, mostrandola sul display
  Temperatura_Casa ();
  delay(5000);

  // Controllo la presenza di GAS in casa (MQ-2)
  Presenza_Gas ();
  delay(5000);
}





// Funzione per leggere la temperatura esterna ed interna con relativa accensione dei relè in base ai valori letti
void Temperatura_Termocamino ()
{
  sensors.requestTemperatures();
  
  // Leggo la temperatura dalla sonda Esterna e la mostro sulla prima riga del Display
  temperature1 = sensors.getTempCByIndex(0);
  lcd.setCursor(0, 0);
  lcd.print("T. Est.: ");
  lcd.print(temperature1);
  lcd.print((char)223); 
  lcd.print("C        ");
      
  // Leggo la temperatura dalla sonda Interna e la mostro sulla seconda riga del Display
  temperature2 = sensors.getTempCByIndex(1);
  lcd.setCursor(0, 1);
  lcd.print("T. Int: ");
  lcd.print(temperature2);
  lcd.print((char)223); 
  lcd.print("C        ");
   
  // Accendo il circolatore se la temperatura è maggiore di...
  if (temperature1 <= 27)
  {
    relPin1Val = LOW;
    lcd.setCursor(16, 0);
    lcd.print("P-OFF");
  }
  else
  {
    relPin1Val = HIGH;
    lcd.setCursor(16, 0);
    lcd.print("P-ON ");
  }

  // Accendo il buzzer se la temperatura è maggiore di...
  if (temperature2 <= 30)
  {
    relPin2Val = LOW;
    lcd.setCursor(16, 1);
    lcd.print("   Ok");    
  }
  else
  {
    relPin2Val = HIGH;
    lcd.setCursor(16, 1);
    lcd.print("Alrm.");   
  }

  digitalWrite(relPin1, relPin1Val);
  digitalWrite(relPin2, relPin2Val);
  digitalWrite(relPin3, relPin3Val);
}





// Funzione per leggere la temperatura, pressione e altitudine fuori casa, mostrandola a display
void Temp_Pres_Alt_Esterna ()
{
  float T_Out;
  
  if (!bmp180.begin()) 
  {
    T_Out = bmp180.readTemperature();
  
    lcd.setCursor(0, 2);
    lcd.print("Temp.: ");
    if (T_Out < 10) lcd.print(" "); 
    lcd.print(T_Out);
    lcd.print(" ");
    lcd.print((char)223); 
    lcd.print("C        ");
    lcd.setCursor(0, 3);
      
    if (mostrador == 0)
    {
      lcd.print("Altitudine: ");
      lcd.print(bmp180.readAltitude());
      lcd.print(" m     ");  
    }
    if (mostrador == 1)
    {
      lcd.print("Pressione: ");
      lcd.print(bmp180.readPressure());  
      lcd.print(" Pa     ");
    }
  }
}





// Funzione per leggere l'ora dal Real-Time-Clock e mostrarla sul display
void Leggi_Ora ()
{
  const int setpin = 6;
  boolean statepin = 0;

  pinMode (6, INPUT);
  digitalWrite (6, HIGH);

  Wire.begin();
  RTC.begin();
  if (! RTC.isrunning()) {
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }

  statepin = digitalRead (setpin);
  if (statepin == LOW) RTC.adjust(DateTime(__DATE__, __TIME__));
  DateTime now = RTC.now();
  sprintf(buffer1, "      %02d:%02d:%02d", now.hour(), now.minute(), now.second());
  lcd.setCursor(0,2);
  lcd.print(buffer1);
  sprintf(buffer2, "     %02d/%02d/%d", now.day(), now.month(), now.year());
  lcd.setCursor(0,3);
  lcd.print(buffer2);
}





// Funzione per leggere la temperatura e l'umidità di casa che viene mostrata su display
void Temperatura_Casa ()
{
  int chk = DHT11.read(DHT11_PIN);

  lcd.setCursor(0,2);
  lcd.print("T. Casa: ");
  lcd.print(DHT11.temperature);
  lcd.print((char)223);
  lcd.print("C        ");
  lcd.setCursor(0,3);
  lcd.print("Umidità = ");
  lcd.print(DHT11.humidity);
  lcd.print("%        ");
}





// Funzione per leggere la presenza di GAS in casa
void Presenza_Gas ()
{
  smoke_level= analogRead(sensorPin);
  if (smoke_level < 15)
  {
    lcd.setCursor(0,2);
    lcd.print("Livello Gas: ");
    lcd.print(smoke_level);
    lcd.print("      ");
    lcd.setCursor(0,3);
    lcd.print("Nessun GAS          ");
    digitalWrite(buzzerPin, LOW);
  }
  else
  {
    lcd.setCursor(0,2);
    lcd.print("Livello Gas: ");
    lcd.print(smoke_level);
    lcd.print("      ");
    lcd.setCursor(0,3);
    lcd.print("Attenzione GAS !!!  ");
    digitalWrite(buzzerPin, HIGH);
  }
}


Non so se hai notato, ho modificato il php del forum per inserire la funzionalità di visualizzazione colorata dei codice (tutto ciò inserito tra i tag "CODE").

Carica il codice sulla tua piattaforma, testalo e poi dimmi cosa non va o è da modificare...

Elix



Modificato da BellaEli - 16/01/2018, 13:54:26


---------------
C'è un limite al fai da te ???
Si, ma lo stabiliamo noi !!!

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 16/01/2018 15:53:51


#include <Wire.h>
#include <dht11.h>                          // Libreria sensore temperatura e umidità
#include <LiquidCrystal_I2C.h>              // Libreria display 20×4
#include <DS1302.h>                         // Libreria orologio
#include <DallasTemperature.h>
#include <Adafruit_BMP085.h>
#include <RTClib.h>

#define BACKLIGHT_PIN 13
#define ONE_WIRE_BUS 12
#define DHT11_PIN 7                         // Pin Digitale 7 per il DHT-11 Temperaturà e Umidità

// Dichiarazione Variabili
int mostrador = 0;
int IniTempVariable = 0;                    // Viaribile temperatura iniziale
int IniUmiVariable = 0;                     // Viaribile umidità iniziale
int Annuncio = 0;                           // Variabile per nascondere annuncio iniziale
int threshold = 500;                        // Variabile che imposta la soglia per il calcolo dell’inquinamento acustico
int volume;                                 // Variabile volume per la sezione inquinamento acustico
int buzzerPin = 9;                          // Pin Digitale 9 per il Buzzer
const int sensorPin= 1;                     // Pin Analogico 1 per MQ-2
int smoke_level;                            // Inizializzazione MQ-2 Sensore fumi

//Relè
byte relPin1Val = LOW;
byte relPin2Val = LOW;
byte relPin3Val = LOW;

int relPin1 = 2;                            // Pin digitale per Relè 1: Circolatore
int relPin2 = 3;                            // Pin digitale per Relè 2: Buzzer
int relPin3 = 8;                            // Pin digitale per Relè 3: Attualmente non utilizzato

int relPin1In = 2;
int relPin2In = 3;
int relPin3In = 8;


// Heizungs Status
int heiz1Val;
int heiz2Val;

//IMPOSTAZIONE PIN
int DS18S20_Pin = 12;                       // DS18S20 Signal pin on digital 2

float temperature1;                         // Temperatura letta dalla sonda Esterna al Termocamino
float temperature2;                         // Temperatura letta dalla sonda Interna al Termocamino

char buffer1[20];
char buffer2[20];

OneWire ds(DS18S20_Pin);                   // on digital pin 2
dht11 DHT11;                               // Inizializzazione DHT-11 Temperatura e Umidità
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
RTC_DS1307 RTC;
Adafruit_BMP085 bmp180;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup()
{
  Serial.begin(9600);
 
  Wire.begin();
  lcd.begin(20,4);
  sensors.begin();

  pinMode(relPin1, OUTPUT);                // Impostazione Uscita per   Relè 1
  pinMode(relPin2, OUTPUT);                // Impostazione Uscita per Relè 2
  pinMode(relPin3, OUTPUT);                // Impostazione Uscita per Relè 3

  pinMode(buzzerPin, OUTPUT);              // Impostazione Buzzer
  pinMode(sensorPin, INPUT);               // the smoke sensor will be an input to the arduino

  RTC.begin();
  if (! RTC.isrunning()) { RTC.adjust(DateTime(__DATE__, __TIME__));}
}

void loop()
{
  // Leggo la temperatura interna ed esterna del termocamino e la mostro a display (DS18B20)
  Temperatura_Termocamino ();
  delay(5000);

  // Leggo Temperatura, Pressione e Altitudine fuori casa, mostrandola sul display (AS180)
  Temp_Pres_Alt_Esterna ();
  delay(3000);

  // Leggo l'ora dal Real-Time-Clock e la mostro sul display (DS1307)
  Leggi_Ora ();
  delay(1000);

  // Leggo Temperatura e Umidità dentro casa, mostrandola sul display
  Temperatura_Casa ();
  delay(5000);

  // Controllo la presenza di GAS in casa (MQ-2)
  Presenza_Gas ();
  delay(5000);
}



// Funzione per leggere la temperatura esterna ed interna con relativa accensione dei relè in base ai valori letti
void Temperatura_Termocamino ()
{
  sensors.requestTemperatures();
  
  // Leggo la temperatura dalla sonda Esterna e la mostro sulla prima riga del Display
  temperature1 = sensors.getTempCByIndex(0);
  lcd.setCursor(0, 0);
  lcd.print("T. Est.: ");
  lcd.print(temperature1);
  lcd.print((char)223); 
  lcd.print("C        ");
      
  // Leggo la temperatura dalla sonda Interna e la mostro sulla seconda riga del Display
  temperature2 = sensors.getTempCByIndex(1);
  lcd.setCursor(0, 1);
  lcd.print("T. Int: ");
  lcd.print(temperature2);
  lcd.print((char)223); 
  lcd.print("C        ");
   
  // Accendo il circolatore se la temperatura è maggiore di...
  if (temperature1 <= 27)
  {
    relPin1Val = LOW;
    lcd.setCursor(16, 0);
    lcd.print("P-OFF");
  }
  else
  {
    relPin1Val = HIGH;
    lcd.setCursor(16, 0);
    lcd.print("P-ON ");
  }

  // Accendo il buzzer se la temperatura è maggiore di...
  if (temperature2 <= 30)
  {
    relPin2Val = LOW;
    lcd.setCursor(16, 1);
    lcd.print("   Ok");    
  }
  else
  {
    relPin2Val = HIGH;
    lcd.setCursor(16, 1);
    lcd.print("Alrm.");   
  }

  digitalWrite(relPin1, relPin1Val);
  digitalWrite(relPin2, relPin2Val);
  digitalWrite(relPin3, relPin3Val);
}




// Funzione per leggere la temperatura, pressione e altitudine fuori casa, mostrandola a display
void Temp_Pres_Alt_Esterna ()
{
  float T_Out;
  
  if (!bmp180.begin()) 
  {
    T_Out = bmp180.readTemperature();
  
    lcd.setCursor(0, 2);
    lcd.print("Temp.: ");
    if (T_Out < 10) lcd.print(" "); 
    lcd.print(T_Out);
    lcd.print(" ");
    lcd.print((char)223); 
    lcd.print("C        ");
    lcd.setCursor(0, 3);
      
    if (mostrador == 0)
    {
      lcd.print("Altitudine: ");
      lcd.print(bmp180.readAltitude());
      lcd.print(" m     ");  
    }
    if (mostrador == 1)
    {
      lcd.print("Pressione: ");
      lcd.print(bmp180.readPressure());  
      lcd.print(" Pa     ");
    }
  }
}





// Funzione per leggere l'ora dal Real-Time-Clock e mostrarla sul display
void Leggi_Ora ()
{
  const int setpin = 6;
  boolean statepin = 0;

  pinMode (6, INPUT);
  digitalWrite (6, HIGH);

  statepin = digitalRead (setpin);
  if (statepin == LOW) {RTC.adjust(DateTime(__DATE__, __TIME__))};
  DateTime now = RTC.now();
  sprintf(buffer1, "      %02d:%02d:%02d", now.hour(), now.minute(), now.second());
  lcd.setCursor(0,2);
  lcd.print(buffer1);
  sprintf(buffer2, "     %02d/%02d/%d", now.day(), now.month(), now.year());
  lcd.setCursor(0,3);
  lcd.print(buffer2);
}





// Funzione per leggere la temperatura e l'umidità di casa che viene mostrata su display
void Temperatura_Casa ()
{
  int chk = DHT11.read(DHT11_PIN);

  lcd.setCursor(0,2);
  lcd.print("T. Casa: ");
  lcd.print(DHT11.temperature);
  lcd.print((char)223);
  lcd.print("C        ");
  lcd.setCursor(0,3);
  lcd.print("Umidità = ");
  lcd.print(DHT11.humidity);
  lcd.print("%        ");
}





// Funzione per leggere la presenza di GAS in casa
void Presenza_Gas ()
{
  smoke_level= analogRead(sensorPin);
  if (smoke_level < 15)
  {
    lcd.setCursor(0,2);
    lcd.print("Livello Gas: ");
    lcd.print(smoke_level);
    lcd.print("      ");
    lcd.setCursor(0,3);
    lcd.print("Nessun GAS          ");
    digitalWrite(buzzerPin, LOW);
  }
  else
  {
    lcd.setCursor(0,2);
    lcd.print("Livello Gas: ");
    lcd.print(smoke_level);
    lcd.print("      ");
    lcd.setCursor(0,3);
    lcd.print("Attenzione GAS !!!  ");
    digitalWrite(buzzerPin, HIGH);
  }
}


Ho spostato l'istruzione per il prelievo dell'ora al primo avvio dell'RTC nel setup, l'istruzione legge l'RTC e se non lo trova in funzione setta l'orario prelevando con i dati dal pc tramite la porta USB.


Nel sottoprogramma leggi_ora, l'istruzione RTC.adjust(DateTime(__DATE__, __TIME__)) permette l'aggiornamento dell'orario se la variabile statepin è LOW, ciò presuppone un circuito a pulsante che in condizione normale tenga il pin6 in HIGH e che se pigiato permette l'aggiornamento dell'ora.

Purtroppo la funzione RTC.adjust(DateTime(__DATE__, __TIME__)) preleva l'ora mediante l'usb dal pc quindi quando si pigia il pulsante l'arduino deve essere connesso ad un pc. Quando in passato ho usato una cosa simile l'ho sempre impiegata con l'IDE aperto, non so se funziona anche con l'IDE chiuso.



---------------
Impara l'arte e mettila da parte
14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.

 

eolo1234
KiloWatt


Gruppo:Utente
Messaggi:253

Stato:



Inviato il: 16/01/2018 23:21:01

Grazie CALCOLA per la partecipazione
purtroppo mi da problemi si blocca qui

if (statepin == LOW) {RTC.adjust(DateTime(__DATE__, __TIME__))};

sketch_jan16a.cpp: In function 'void Leggi_Ora()':
sketch_jan16a:207: error: expected `;' before '}' token


mentre quello di Elix e molto rallentata la lettura dei sensori
non appare la schermata di pressione e altitudine e mi appare la 3 cifra dei secondi (23:12:158)
intanto ho dato una sistemata alle scritte vi rigiro il programma

Scarica allegato

Nuovo documento di testo.txt ( Numero download: 155 )

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 16/01/2018 23:34:21

Ma col codice nuovo modificare i tempi è davvero semplicissimo... Basta cambiare i valori dei delay nel loop... Le pause, ora, sono solo lì!!!

Che vuol dire non appare la pressione? Non esce il numeretto o manca proprio la scritta?

Posti il codice come abbiamo fatto io e calcola? Così lo visualizzamo anche senza scaricarlo...

Per l'errore del codice di calcola io vedo una importante differenza tra il tuo e il suo: il ";" va prima della parentesi graffa, non dopo come hai fatto tu...



Modificato da BellaEli - 16/01/2018, 23:40:11


---------------
C'è un limite al fai da te ???
Si, ma lo stabiliamo noi !!!

 

eolo1234
KiloWatt


Gruppo:Utente
Messaggi:253

Stato:



Inviato il: 16/01/2018 23:59:04

CITAZIONE (BellaEli, 16/01/2018 23:34:21 ) Discussione.php?214979&2#MSG25

Ma col codice nuovo modificare i tempi è davvero semplicissimo... Basta cambiare i valori dei delay nel loop... Le pause, ora, sono solo lì!!!

Che vuol dire non appare la pressione? Non esce il numeretto o manca proprio la scritta?

Posti il codice come abbiamo fatto io e calcola? Così lo visualizzamo anche senza scaricarlo...

Per l'errore del codice di calcola io vedo una importante differenza tra il tuo e il suo: il ";" va prima della parentesi graffa, non dopo come hai fatto tu...

Manca la scritta e i numeri sia sulla riga 2 che 3
Per le pause non e il problema dei tempi e un problema di letture rallentate ci mettono molto a salire le varie temperature

Per quanto riguarda il codice mi spieghi come lo metti sulla pagina

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 17/01/2018 00:24:48

Ma il codice lo riesci a capire o per nulla???

Le letture rallentare è un problema che risolveremo successivamente, l'aggiornamento attuale è ogni 19 secondi, ovvero la somma di tutti i delay presenti nel loop...

È un problema che c'era anche prima solo che era nascosto poiché la temperatura era uno dei dati che veniva mostrato ogni tanto, non fisso come ora...

Per i valori mancanti modifica questa riga così:
if (!bmp180.begin()) 0;

Per inserire il codice clicca sul pulsantino CODE qui a sinistra e inserisci il codice (copia/incolla da Arduino al sito) tra i Tag [_code_] il codice va inserito qui [_/code_] (gli _ non c'entrano, li ho dovuti mettere altrimenti il sito interpretava le mie indicazioni come codice...



---------------
C'è un limite al fai da te ???
Si, ma lo stabiliamo noi !!!

 

eolo1234
KiloWatt


Gruppo:Utente
Messaggi:253

Stato:



Inviato il: 17/01/2018 00:30:31

Ho capito però per oggi vado a nanna sono morto e non connetto ci aggiorniamo domani grazie mille

 

Claudio

Avatar
PetaWatt


Gruppo:MODERATORE
Messaggi:15119

Stato:



Inviato il: 17/01/2018 02:11:06

Comincia a girare anche se non ho collegato i sensori

Ma se si usa
#include LiquidCrystal_I2C.h
Questo non va bene
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

A me funziona così

LiquidCrystal_I2C lcd(0x27,20,4);
e poi va abilitato con

void setup()
{
lcd.init(); //initialize the lcd
lcd.backlight(); //open the backlight
}

Sbaglio??



---------------
Inverter Sofar Solar HYD6000-EP, 5250W pannelli, 14kWh lifepo4.

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 17/01/2018 06:18:17

Come diceva elix si blocca perché nel tuo codice mancavano in quel punto le parentesi { }, non metterle nel codice dell'arduino può portare a errori di compilazione, solo che inserendole ho lasciato il ; fuori, deve stare sempre prima della chiusura così ;}



---------------
Impara l'arte e mettila da parte
14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 17/01/2018 08:34:48


CITAZIONE

Sbaglio??

Dipende dalla libreria che usi per pilotare il display...
Di LiquidCrystal_I2C ne esistono molte versioni, scritte da autori diversi, anche a me dava errori poi, per non complicare la vita a eolo, ne ho scaricata un altra che funziona correttamente con l'istruzione inserita nel codice.
Il numeretto esadecimale 2xXX indica l'indirizzo della periferica I2C, ovvero se installassi 2 display LCD dovresti assegnargli indirizzi diversi. L'indirizzo si setta sulla periferica (nello specifico il display) con dei ponticelli (spesso a saldare).

CITAZIONE
solo che inserendole ho lasciato...

No, no, tu le hai messe correttamente, e stato eolo che ha spostato il ; fuori dalle parentesi!



---------------
C'è un limite al fai da te ???
Si, ma lo stabiliamo noi !!!

 

Claudio

Avatar
PetaWatt


Gruppo:MODERATORE
Messaggi:15119

Stato:



Inviato il: 17/01/2018 09:22:26

Faccine/thumbup1.gif



---------------
Inverter Sofar Solar HYD6000-EP, 5250W pannelli, 14kWh lifepo4.

 

eolo1234
KiloWatt


Gruppo:Utente
Messaggi:253

Stato:



Inviato il: 17/01/2018 09:42:10

Benvenuto anche a Claudio
buongiorno a tutti lo sto testando cosi
Ora si vedono le letture di tutti i sensori (come dicevo ieri sera sono rallentati di 19 secondi come dicevi tu Eli )
subito dopo avviato il programma diciamo dopo 3 secondi scompaiono le prime 2 lettere della prima riga e le prime tre della seconda per riapparire a fine rotazione ma nello stesso tempo nella 3 e 4 riga riappare con le lettere incomplete la schermata del sensore di gas e come se a fine ciclo non riesce a pulire la 3 4 riga

Per quanto riguarda lcd Claudio puoi mettere il programma modificato e inserire la tua libreria cosi lo provo grazie






  #include <Wire.h>
#include <dht11.h>                          // Libreria sensore temperatura e umidità
#include <LiquidCrystal_I2C.h>              // Libreria display 20×4
#include <DS1302.h>                         // Libreria orologio
#include <DallasTemperature.h>
#include <Adafruit_BMP085.h>
#include <RTClib.h>

#define BACKLIGHT_PIN 13
#define ONE_WIRE_BUS 12
#define DHT11_PIN 7                         // Pin Digitale 7 per il DHT-11 Temperaturà e Umidità

// Dichiarazione Variabili
int mostrador = 0;
int IniTempVariable = 0;                    // Viaribile temperatura iniziale
int IniUmiVariable = 0;                     // Viaribile umidità iniziale
int Annuncio = 0;                           // Variabile per nascondere annuncio iniziale
int threshold = 500;                        // Variabile che imposta la soglia per il calcolo dell’inquinamento acustico
int volume;                                 // Variabile volume per la sezione inquinamento acustico
int buzzerPin = 9;                          // Pin Digitale 9 per il Buzzer
const int sensorPin= 1;                     // Pin Analogico 1 per MQ-2
int smoke_level;                            // Inizializzazione MQ-2 Sensore fumi

//Relè
byte relPin1Val = LOW;
byte relPin2Val = LOW;
byte relPin3Val = LOW;

int relPin1 = 2;                            // Pin digitale per Relè 1: Circolatore
int relPin2 = 3;                            // Pin digitale per Relè 2: Buzzer
int relPin3 = 8;                            // Pin digitale per Relè 3: Attualmente non utilizzato

int relPin1In = 2;
int relPin2In = 3;
int relPin3In = 8;


// Heizungs Status
int heiz1Val;
int heiz2Val;

//IMPOSTAZIONE PIN
int DS18S20_Pin = 12;                       // DS18S20 Signal pin on digital 2

float temperature1;                         // Temperatura letta dalla sonda Esterna al Termocamino
float temperature2;                         // Temperatura letta dalla sonda Interna al Termocamino

char buffer1[20];
char buffer2[20];

OneWire ds(DS18S20_Pin);                   // on digital pin 2
dht11 DHT11;                               // Inizializzazione DHT-11 Temperatura e Umidità
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); 

RTC_DS1307 RTC;
Adafruit_BMP085 bmp180;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup()
{
  Serial.begin(9600);
  lcd.begin(20,4);
  sensors.begin();

  pinMode(relPin1, OUTPUT);                // Impostazione Uscita per Relè 1
  pinMode(relPin2, OUTPUT);                // Impostazione Uscita per Relè 2
  pinMode(relPin3, OUTPUT);                // Impostazione Uscita per Relè 3

  pinMode(buzzerPin, OUTPUT);              // Impostazione Buzzer
  pinMode(sensorPin, INPUT);               // the smoke sensor will be an input to the arduino
}

void loop()
{
  // Leggo la temperatura interna ed esterna del termocamino e la mostro a display (DS18B20)
  Temperatura_Termocamino ();
  delay(5000);

  // Leggo Temperatura, Pressione e Altitudine fuori casa, mostrandola sul display (AS180)
  Temp_Pres_Alt_Esterna ();
  delay(5000);

  // Leggo l'ora dal Real-Time-Clock e la mostro sul display (DS1307)
  Leggi_Ora ();
  delay(5000);

  // Leggo Temperatura e Umidità dentro casa, mostrandola sul display
  Temperatura_Casa ();
  delay(5000);

  // Controllo la presenza di GAS in casa (MQ-2)
  Presenza_Gas ();
  delay(5000);
}





// Funzione per leggere la temperatura esterna ed interna con relativa accensione dei relè in base ai valori letti
void Temperatura_Termocamino ()
{
  sensors.requestTemperatures();
  
  // Leggo la temperatura dalla sonda Esterna e la mostro sulla prima riga del Display
  temperature1 = sensors.getTempCByIndex(0);
  lcd.setCursor(0, 0);
  lcd.print("T.Est:");
  lcd.print(temperature1);
  lcd.print((char)223); 
  lcd.print("C        ");
      
  // Leggo la temperatura dalla sonda Interna e la mostro sulla seconda riga del Display
  temperature2 = sensors.getTempCByIndex(1);
  lcd.setCursor(0, 1);
  lcd.print("T.Int:");
  lcd.print(temperature2);
  lcd.print((char)223); 
  lcd.print("C        ");
   
  // Accendo il circolatore se la temperatura è maggiore di...
  if (temperature1 <= 27)
  {
    relPin1Val = LOW;
    lcd.setCursor(15, 0);
    lcd.print("P-OFF");
  }
  else
  {
    relPin1Val = HIGH;
    lcd.setCursor(16, 0);
    lcd.print("P-ON ");
  }

  // Accendo il buzzer se la temperatura è maggiore di...
  if (temperature2 <= 30)
  {
    relPin2Val = LOW;
    lcd.setCursor(16, 1);
    lcd.print(" Ok");    
  }
  else
  {
    relPin2Val = HIGH;
    lcd.setCursor(16, 1);
    lcd.print("Alrm.");   
  }

  digitalWrite(relPin1, relPin1Val);
  digitalWrite(relPin2, relPin2Val);
  digitalWrite(relPin3, relPin3Val);
}





// Funzione per leggere la temperatura, pressione e altitudine fuori casa, mostrandola a display
void Temp_Pres_Alt_Esterna ()
{
  float T_Out;
  
  if (!bmp180.begin()) 0; 
  {
    T_Out = bmp180.readTemperature();
  
    lcd.setCursor(0, 2);
    lcd.print("Temp.: ");
    if (T_Out < 10) lcd.print(" "); 
    lcd.print(T_Out);
    lcd.print(" ");
    lcd.print((char)223); 
    lcd.print("C        ");
    lcd.setCursor(0, 3);
      
    if (mostrador == 0)
    {
      lcd.print("Altitud: ");
      lcd.print(bmp180.readAltitude());
      lcd.print(" m     ");  
    }
    if (mostrador == 1)
    {
      lcd.print("Pressione: ");
      lcd.print(bmp180.readPressure());  
      lcd.print(" Pa     ");
    }
  }
}





// Funzione per leggere l'ora dal Real-Time-Clock e mostrarla sul display
void Leggi_Ora ()
{
  const int setpin = 6;
  boolean statepin = 0;

  pinMode (6, INPUT);
  digitalWrite (6, HIGH);

  Wire.begin();
  RTC.begin();
  if (! RTC.isrunning()) {
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }

  statepin = digitalRead (setpin);
  if (statepin == LOW) RTC.adjust(DateTime(__DATE__, __TIME__));
  DateTime now = RTC.now();
  sprintf(buffer1, "      %02d:%02d:%02d ", now.hour(), now.minute(), now.second());
  lcd.setCursor(0,2);
  lcd.print(buffer1);
  sprintf(buffer2, "     %02d/%02d/%d   ", now.day(), now.month(), now.year());
  lcd.setCursor(0,3);
  lcd.print(buffer2);
}





// Funzione per leggere la temperatura e l'umidità di casa che viene mostrata su display
void Temperatura_Casa ()
{
  int chk = DHT11.read(DHT11_PIN);

  lcd.setCursor(0,2);
  lcd.print("T. Casa: ");
  lcd.print(DHT11.temperature);
  lcd.print((char)223);
  lcd.print("C        ");
  lcd.setCursor(0,3);
  lcd.print("Umidita = ");
  lcd.print(DHT11.humidity);
  lcd.print("%        ");
}





// Funzione per leggere la presenza di GAS in casa
void Presenza_Gas ()
{
  smoke_level= analogRead(sensorPin);
  if (smoke_level < 35)
  {
    lcd.setCursor(0,2);
    lcd.print("Livello Gas: ");
    lcd.print(smoke_level);
    lcd.print("      ");
    lcd.setCursor(0,3);
    lcd.print("Nessun GAS          ");
    digitalWrite(buzzerPin, LOW);
  }
  else
  {
    lcd.setCursor(0,2);
    lcd.print("Livello Gas: ");
    lcd.print(smoke_level);
    lcd.print("      ");
    lcd.setCursor(0,3);
    lcd.print("Attenzione GAS !!!  ");
    digitalWrite(buzzerPin, HIGH);
  }
}



Modificato da eolo1234 - 17/01/2018, 10:24:26
 
 InizioPagina
 

Pagine: (8)   1   [2]   3   4   5   6   7   8    (Ultimo Msg)

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum