Se sei già registrato           oppure    

Orario: 17/05/2024 07:16:10  

 

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

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 22/02/2018 18:27:57

Non posso provare il codice, fai tu la prova



#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 1
#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
const int tsu = 10;
const int tgiu = 11;
const int tout = 13;
int valtsu = 0;
int valtgiu = 0;
int valtout = 0;
byte blocco = 0;

//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;

int soglia = 50;
// Heizungs Status
int heiz1Val;
int heiz2Val;
boolean valoremenu = 0;
//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);

// millis
long cp1millis = 0; // memorizza millis per tempo minimo mantenimento posizione
long cp2millis = 0; // memorizza millis per aggiornamento visualizzazioni
byte scelta = 0; // ingranaggio sequenziale
byte visualizza = 1; // indica cosa visualizzare


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
 
 pinMode(tsu,INPUT);
  pinMode(tgiu,INPUT);
  pinMode(tout,INPUT);

  }

void loop()
{
// controllo pulsante
   valtout = digitalRead(tout);
  if (valtout == 1){blocco = 1 -blocco; delay (500); menu ();}


 
 if ((millis() > cp1millis + 5000) && ( scelta < 1))  // 5000 = 5 secondi
 {scelta = 1; visualizza = 1; cp1millis = millis();}
   
 if ((millis() > cp1millis + 5000) && ( scelta == 1))
 {scelta = 2; visualizza = 2; cp1millis = millis();}
 
 if ((millis() > cp1millis + 5000) && ( scelta == 2))  
 {scelta = 3; visualizza = 3; cp1millis = millis();}
 
 if ((millis() > cp1millis + 5000) && ( scelta == 3))  
 {scelta = 4; visualizza = 4; cp1millis = millis();}
 
 if ((millis() > cp1millis + 5000) && ( scelta == 4))  
 {scelta = 5; visualizza = 5; cp1millis = millis();}
 
 // visualizzazione finale
 if ((millis() > cp1millis + 5000) && ( scelta > 4))  
 {scelta = 0; visualizza = 6; cp1millis = millis();}


 // Aggiorna visualizzazioni ogni secondo
 if (millis() > cp2millis + 1000)
 { cp2millis = millis();

 if (visualizza == 1)
 {  // Leggo la temperatura interna ed esterna del termocamino e la mostro a display (DS18B20) .. 5 sec. tempo mantenimento posizione
 Temperatura_Termocamino ();
 }
  
  if (visualizza == 2)
 {  // Leggo Temperatura, Pressione e Altitudine fuori casa, mostrandola sul display (AS180)
  Temp_Pres_Alt_Esterna ();
 } 
  
  if (visualizza == 3)
 {  // Leggo l'ora dal Real-Time-Clock e la mostro sul display (DS1307)
  Leggi_Ora ();
 } 
  
  if (visualizza == 4)
 {  // Leggo l'ora dal Real-Time-Clock e la mostro sul display (DS1307)
  Temperatura_Casa ();
 }  
  
  if (visualizza == 5)
 {  // Leggo l'ora dal Real-Time-Clock e la mostro sul display (DS1307)
  Volume_casa ();
 }
 
  if (visualizza == 6)
 {  // Leggo l'ora dal Real-Time-Clock e la mostro sul display (DS1307)
  Presenza_Gas ();
 }  
 } // fine ogni secondo
 
 } // fine loop



void menu (){     
    valtsu = digitalRead(tsu);
    valtgiu = digitalRead(tgiu);
    valtout = digitalRead(tout);
  
  if (valtout == 1){blocco = 1 -blocco; delay (500);}

      Serial.print(valtsu);
      Serial.print(" | ");
      Serial.print(valtgiu);
      Serial.print(" | ");
      Serial.print(valtout);
      Serial.print(" | ");
      Serial.println(soglia);
      
      if((valtsu == 1) && (blocco == 1)){ soglia = soglia + 1;}
      if((valtgiu == 1) && (blocco == 1)){ soglia = soglia - 1;}
      
      lcd.setCursor(0, 0);
      lcd.print("T.Est:");
      lcd.print(temperature1);
      lcd.print((char)223); 
      lcd.print("C");
    
      lcd.setCursor(0, 1);
      lcd.print("T.Int:");
      lcd.print(temperature2);
      lcd.print((char)223); 
      lcd.print("C");
    
     if (temperature2 <= soglia)
  {
    relPin1Val = HIGH;
    lcd.setCursor(15, 0);
    lcd.print("P-OFF");
  }
  else
  {
    relPin1Val = LOW;
    lcd.setCursor(15, 0);
    lcd.print("P-ON ");
  }

  // Accendo il buzzer se la temperatura è maggiore di...
  if (temperature2 <= 80)
  {
    relPin2Val = HIGH;
    lcd.setCursor(15, 1);
    lcd.print(" Ok  ");    
  }
  else
  {
    relPin2Val = LOW;
    lcd.setCursor(15, 1);
    lcd.print("Alrm.");   
  }
   
   lcd.setCursor(0, 2);
   lcd.print("Set. Soglia  +/-  ");
   lcd.setCursor(0, 3);
   lcd.print("Temp. Pompa ");
   lcd.print(soglia);
   lcd.print((char)223);
   lcd.print("C");
    }

  
  
// 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(1);
  //lcd.setCursor(0, 2);
  //lcd.print("Temp.Soglia Pompa");
  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(0);
  //lcd.setCursor(0, 3);
  //lcd.print("Inpostata a :+50");
  //lcd.print((char)223);
  //lcd.print("C");
  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 (temperature2 <= soglia)
  {
    relPin1Val = HIGH;
    lcd.setCursor(15, 0);
    lcd.print("P-OFF");
  }
  else
  {
    relPin1Val = LOW;
    lcd.setCursor(15, 0);
    lcd.print("P-ON ");
  }

  // Accendo il buzzer se la temperatura è maggiore di...
  if (temperature2 <= 80)
  {
    relPin2Val = HIGH;
    lcd.setCursor(15, 1);
    lcd.print(" Ok  ");    
  }
  else
  {
    relPin2Val = LOW;
    lcd.setCursor(15, 1);
    lcd.print("Alrm.");   
  }
  lcd.setCursor(0,3);
  lcd.print("Impostata a :+");
  lcd.print(soglia);
  lcd.print((char)223);
  lcd.print("C");
  
  lcd.setCursor(0, 2);
  lcd.print("Temp.Soglia Pompa");

  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);
/////////////////////////////////////////
  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(" %  ");
}
/////////////////////////////////


void Volume_casa ()
{
  
volume = analogRead(A0); 


lcd.setCursor(0,2);
lcd.print("Rumore DB: ");
lcd.print(volume);
if(volume>=threshold){
lcd.setCursor(0,3);
lcd.print("Inq. Acus. ALTO");
}
else{
lcd.setCursor(0,3);
lcd.print("Inq. Acus. BASSO");
//delay(5000);
  }
}

// Funzione per leggere la presenza di GAS in casa
void Presenza_Gas ()
{
  smoke_level= analogRead(sensorPin);
  if (smoke_level < 40)
  {
    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);
  }
}




---------------
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: 22/02/2018 23:39:21

ti ringrazio calcola capisco che se non hai la mia configurazione sara impossibile purtoppo non va ora ruota ma non funzionano i tasti
sto provando anche io da giorni ma con scarsi risultati
non pensavo fosse cosi complicato

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 23/02/2018 07:40:54

In realtà non è complicato, ma per me è difficile sistemare il codice senza poter provare su un LCD a 4 righe, vedo se riesco a farmene prestare uno. Altrimenti mi spiace, non posso aiutarti.



---------------
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: 23/02/2018 09:19:30

Buongiorno calcola
Stai già facendo il massimo grazie

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 23/02/2018 16:45:59

Niente da fare è un monitor grafico 12864 a 20 pin non si può collegare all'interfaccia I2C che è a 16 pin.

Ti ripeto è difficile senza monitor riuscire a capire l'errore, anche perchè molte righe sono ripetute, mentre sarebbe stato meglio concentrare le istruzioni di visualizzazione tutte in un void da richiamare di volta in volta. Comunque se il problema con l'ultima versione è che non riesci a modificare le soglie potrebbe dipendere dall'accesso al sottoprogramma menu', così dovresti risolvere:

 
#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 1
#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
const int tsu = 10;
const int tgiu = 11;
const int tout = 13;
int valtsu = 0;
int valtgiu = 0;
int valtout = 0;
byte blocco = 0;

//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;

int soglia = 50;
// Heizungs Status
int heiz1Val;
int heiz2Val;
boolean valoremenu = 0;
//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);

// millis
long cp1millis = 0; // memorizza millis per tempo minimo mantenimento posizione
long cp2millis = 0; // memorizza millis per aggiornamento visualizzazioni
byte scelta = 0; // ingranaggio sequenziale
byte visualizza = 1; // indica cosa visualizzare


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
 
 pinMode(tsu,INPUT);
  pinMode(tgiu,INPUT);
  pinMode(tout,INPUT);

  }

void loop()
{
// controllo pulsante
   valtout = digitalRead(tout);
  if (valtout == 1){blocco = 1 -blocco; delay (500);}
  if (blocco == 1){menu();}
  Serial.println(valtout);
  Serial.print("blocco "); Serial.println(blocco);


 
 if ((millis() > cp1millis + 5000) && ( scelta < 1))  // 5000 = 5 secondi
 {scelta = 1; visualizza = 1; cp1millis = millis();}
   
 if ((millis() > cp1millis + 5000) && ( scelta == 1))
 {scelta = 2; visualizza = 2; cp1millis = millis();}
 
 if ((millis() > cp1millis + 5000) && ( scelta == 2))  
 {scelta = 3; visualizza = 3; cp1millis = millis();}
 
 if ((millis() > cp1millis + 5000) && ( scelta == 3))  
 {scelta = 4; visualizza = 4; cp1millis = millis();}
 
 if ((millis() > cp1millis + 5000) && ( scelta == 4))  
 {scelta = 5; visualizza = 5; cp1millis = millis();}
 
 // visualizzazione finale
 if ((millis() > cp1millis + 5000) && ( scelta > 4))  
 {scelta = 0; visualizza = 6; cp1millis = millis();}


 // Aggiorna visualizzazioni ogni secondo
 if (millis() > cp2millis + 1000)
 { cp2millis = millis();

 if (visualizza == 1)
 {  // Leggo la temperatura interna ed esterna del termocamino e la mostro a display (DS18B20) .. 5 sec. tempo mantenimento posizione
 Temperatura_Termocamino ();
 }
  
  if (visualizza == 2)
 {  // Leggo Temperatura, Pressione e Altitudine fuori casa, mostrandola sul display (AS180)
  Temp_Pres_Alt_Esterna ();
 } 
  
  if (visualizza == 3)
 {  // Leggo l'ora dal Real-Time-Clock e la mostro sul display (DS1307)
  Leggi_Ora ();
 } 
  
  if (visualizza == 4)
 {  // Leggo l'ora dal Real-Time-Clock e la mostro sul display (DS1307)
  Temperatura_Casa ();
 }  
  
  if (visualizza == 5)
 {  // Leggo l'ora dal Real-Time-Clock e la mostro sul display (DS1307)
  Volume_casa ();
 }
 
  if (visualizza == 6)
 {  // Leggo l'ora dal Real-Time-Clock e la mostro sul display (DS1307)
  Presenza_Gas ();
 }  
 } // fine ogni secondo
 
 } // fine loop



void menu (){     
    valtsu = digitalRead(tsu);
    valtgiu = digitalRead(tgiu);
    valtout = digitalRead(tout);
  
  if (valtout == 1){blocco = 1 -blocco; delay (500);}

      Serial.print(valtsu);
      Serial.print(" | ");
      Serial.print(valtgiu);
      Serial.print(" | ");
      Serial.print(valtout);
      Serial.print(" | ");
      Serial.println(soglia);
      
      if((valtsu == 1) && (blocco == 1)){ soglia = soglia + 1;}
      if((valtgiu == 1) && (blocco == 1)){ soglia = soglia - 1;}
      
      lcd.setCursor(0, 0);
      lcd.print("T.Est:");
      lcd.print(temperature1);
      lcd.print((char)223); 
      lcd.print("C");
    
      lcd.setCursor(0, 1);
      lcd.print("T.Int:");
      lcd.print(temperature2);
      lcd.print((char)223); 
      lcd.print("C");
    
     if (temperature2 <= soglia)
  {
    relPin1Val = HIGH;
    lcd.setCursor(15, 0);
    lcd.print("P-OFF");
  }
  else
  {
    relPin1Val = LOW;
    lcd.setCursor(15, 0);
    lcd.print("P-ON ");
  }

  // Accendo il buzzer se la temperatura è maggiore di...
  if (temperature2 <= 80)
  {
    relPin2Val = HIGH;
    lcd.setCursor(15, 1);
    lcd.print(" Ok  ");    
  }
  else
  {
    relPin2Val = LOW;
    lcd.setCursor(15, 1);
    lcd.print("Alrm.");   
  }
   
   lcd.setCursor(0, 2);
   lcd.print("Set. Soglia  +/-  ");
   lcd.setCursor(0, 3);
   lcd.print("Temp. Pompa ");
   lcd.print(soglia);
   lcd.print((char)223);
   lcd.print("C");
    }

  
  
// 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(1);
  //lcd.setCursor(0, 2);
  //lcd.print("Temp.Soglia Pompa");
  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(0);
  //lcd.setCursor(0, 3);
  //lcd.print("Inpostata a :+50");
  //lcd.print((char)223);
  //lcd.print("C");
  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 (temperature2 <= soglia)
  {
    relPin1Val = HIGH;
    lcd.setCursor(15, 0);
    lcd.print("P-OFF");
  }
  else
  {
    relPin1Val = LOW;
    lcd.setCursor(15, 0);
    lcd.print("P-ON ");
  }

  // Accendo il buzzer se la temperatura è maggiore di...
  if (temperature2 <= 80)
  {
    relPin2Val = HIGH;
    lcd.setCursor(15, 1);
    lcd.print(" Ok  ");    
  }
  else
  {
    relPin2Val = LOW;
    lcd.setCursor(15, 1);
    lcd.print("Alrm.");   
  }
  lcd.setCursor(0,3);
  lcd.print("Impostata a :+");
  lcd.print(soglia);
  lcd.print((char)223);
  lcd.print("C");
  
  lcd.setCursor(0, 2);
  lcd.print("Temp.Soglia Pompa");

  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);
/////////////////////////////////////////
  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(" %  ");
}
/////////////////////////////////


void Volume_casa ()
{
  
volume = analogRead(A0); 


lcd.setCursor(0,2);
lcd.print("Rumore DB: ");
lcd.print(volume);
if(volume>=threshold){
lcd.setCursor(0,3);
lcd.print("Inq. Acus. ALTO");
}
else{
lcd.setCursor(0,3);
lcd.print("Inq. Acus. BASSO");
//delay(5000);
  }
}

// Funzione per leggere la presenza di GAS in casa
void Presenza_Gas ()
{
  smoke_level= analogRead(sensorPin);
  if (smoke_level < 40)
  {
    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);
  }
}
  



---------------
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: 23/02/2018 17:51:04

E PERFETTO GRAZIE CALCOLA
Faccine/Smileys_0003.gif
lo comincio a testare subito a banco e domani sul camino

domandina che ne pensi di sostituire il rele normale in solido per evitare blocchi
che ne dici di questo da 2A dovrebbe bastare per una pompa da 120w max .
dovrei modificare il programma per metterlo sul pin digitale o lo collego direttamente cosi ?



Immagine Allegata: rele.PNG
 
ForumEA/S/rele.PNG

 

eolo1234
KiloWatt


Gruppo:Utente
Messaggi:253

Stato:



Inviato il: 23/02/2018 18:07:51

oppure questo gia pronto

http://www.ebay.it/itm/Modulo-rele-5V-1-ch-a-stato-solido-SSR-G3MB-240V-2A-con-fusibile-di-protezione/312009403906?hash=item48a535ae02:g:pl0AAOSwFO5aFqz~

mi sembra di capire che si monta anche con i pin digitali



Immagine Allegata: rele 2.PNG
 
ForumEA/S/rele 2.PNG

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 24/02/2018 11:19:24

non spendere soldi inutilmente
Non è il relè, piuttosto come lo alimenti? Non usare la 5V prelevata da arduino, prendi la 5V per alimentarlo a monte dell'arduino e collega tra di loro il gnd del relè e quello dell'arduino



---------------
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: 24/02/2018 14:17:24

Grazie
Si già è collegato così avevo già letto di problemi creati alimentando il relè diretto da Arduino

 

sabin

Avatar
MegaWatt


Gruppo:Utente
Messaggi:522

Stato:



Inviato il: 24/02/2018 15:12:45

Le parti di Arduino più sensibili ai disturbi provocati da contatti meccanici sono subito visibili negli lcd non collegati con il sistema seriale I2C. Credo che quelli collegati con l'interfaccia I2C subiscono meno l'effetto. Lo scoprirò superata l'emergenza freddo. Sostituirò un quadretto che controlla una caldaia a legna di tipo semplice, sostituirò sensori di temperatura, e collegamenti.

Il disturbo lo può dare anche un apparecchio indipendente anche a un metro di distanza.
Del disturbo ne parlavo nel link sotto
LINK

LINK



---------------
Inverter UPS Power Star W7 (onda pura) ingresso 24 v... 220V 2 Kw con spunto da 6 Kw? (direi 3Kw)
Pannelli 11,1 mq. Wp 1320 (x120 Wp mq)... n° 5 monoc. 72 celle 750 Wp (SO) su MPPT SolarMate 40A
n° 3 polic. 60 celle 570 Wp (Sud) su PWM 30A... batterie: 2 coppie SMA (trazione) 24V 120 Ah C/10 (+ 2 avviamento 70Ah)
Switch enel/batterie con Arduino Pro Mini

 

eolo1234
KiloWatt


Gruppo:Utente
Messaggi:253

Stato:



Inviato il: 25/02/2018 22:40:29

Buonasera a tutti
Sabin ho visitato i 2 LINK ho capito un po sui disturbi negli lcd e ho visto anche il tuo progetto interessante

per quanto riguarda i test proseguono sono 2 giorni che e montato in parallelo con la vecchia centralina sul termocamino senza alimentare la pompa e non ha perso un colpo
per sostituirlo completamente aspetto che saro a casa almeno 1 giorno per sicurezza

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 25/02/2018 22:57:51

Ricordo di aver letto da qualche parte che hanno risolto il problema dei blocchi dell'LCD mettendo due condensatori in parallelo all'alimentazione dell'LCD. Forse l'ha scritto luca450mhz in una discussione, ma non ne sono sicuro.



---------------
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.

 

Luca450Mhz

Avatar
GigaWatt


Gruppo:Utente
Messaggi:3204

Stato:



Inviato il: 26/02/2018 10:09:21

Io avevo problemi con i motori delle tapparelle, ai fine corsa facevano impazzire l'ESP e di conseguenza i circuiti collegati (PCF8574 in particolare). Risolto mettendo un consendatore poliestere vicino l'alimentazione e uno vicino ai circuiti integrati (PCF8574). Le interferenze introdotto dai motori in questo modo non creano più problemi



---------------
Pannelli: 6975 Wp (poli e mono). Inverter UPS PSW7 6kW 48V toroidale con switch comandato dal mio sistema di domotica (RaspberryPi + vari Wemos D1 Mini - ESP8266). Regolatore di carica: Mpp Solar PCM8048.
Batterie: 24 elementi trazione pesante 315Ah C5 48V.

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 26/02/2018 13:51:03

l'integrato PCF8574 è il componente dell'interfaccia usata per connettere l'LCD alla I2C



---------------
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: 28/02/2018 15:37:15

ciao a tutti e grazie

calcola ho capito il problema dei blocchi dell lcd e ringrazio Luca450Mhz ma spero che non si presenti

 
 InizioPagina
 

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

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum