Se sei già registrato           oppure    

Orario: 29/03/2024 08:56:26  

 

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: 28/01/2018 12:57:55

Finito dovrebbe venire una cosa del genere manca solo una cover per coprire la millefori



Immagine Allegata: 20180128_125111_resized.jpg
 
ForumEA/S/20180128_125111_resized.jpg

 

eolo1234
KiloWatt


Gruppo:Utente
Messaggi:253

Stato:



Inviato il: 10/02/2018 11:16:59

Dopo una brutta influenza sono riuscito a montarlo lo sto testando sul camino

///http://www.energialternativa.info/Public/NewForum/Discussione.php?214979&4




#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>
#include <SchedulerLCD.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 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;                          // Pin pulsante   Su  +
const int tgiu = 13;                         // Pin pulsante   Giu -
const int tout = 11;                        // Pin pulsante   Menù
int valtsu = 0;
int valtgiu = 0;
int valtout = 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);

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()
{
  sensors.requestTemperatures();
  temperature1 = sensors.getTempCByIndex(1);
  temperature2 = sensors.getTempCByIndex(0);
  valtout = digitalRead(tout);
  Serial.print(valtsu);
  Serial.print(" | ");
  Serial.print(valtgiu);
  Serial.print(" | ");
  Serial.print(valtout);
  Serial.print(" | ");
  Serial.print(valoremenu);
    Serial.print(" | ");
  Serial.println(soglia);
  if (valtout == 1){
    delay(3000);
    if (valoremenu == 0){
      valoremenu = 1;
    }
    else if (valoremenu == 1){
      valoremenu = 0;
    }
    
  }
    if(valoremenu == 1){
      menu ();
    }
  // Leggo la temperatura interna ed esterna del termocamino e la mostro a display (DS18B20)
  
  else if (valoremenu == 0){
    Temperatura_Termocamino ();
  delay(3000);
 

  // 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(3000);

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

  // Controllo rumore casa
  Volume_casa ();
  delay(1000);
  
  // Controllo la presenza di GAS in casa (MQ-2)
  Presenza_Gas ();
  delay(3000);
  }
}


void menu (){     
    valtsu = digitalRead(tsu);
  valtgiu = digitalRead(tgiu);
      Serial.print(valtsu);
      Serial.print(" | ");
      Serial.print(valtgiu);
      Serial.print(" | ");
      Serial.print(valtout);
      Serial.print(" | ");
      Serial.println(soglia);
      if(valtsu == 1){
        soglia = soglia + 1;
      }
      if(valtgiu == 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 ()
{
  
  // Leggo la temperatura dalla sonda Esterna e la mostro sulla prima riga del Display
  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
  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.: ");
    lcd.print(" "); 
    lcd.print(T_Out);
    lcd.print(" ");
    lcd.print((char)223); 
    lcd.print("C ");
      
    if (mostrador == 0){
      lcd.setCursor(0, 3);
      lcd.print("Altitud: ");
      lcd.print(bmp180.readAltitude());
      lcd.print(" m  ");  
    }
    else if(mostrador == 1)
    {
      lcd.setCursor(0, 3);
      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 < 50)
  {
    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);
  }
}




Immagine Allegata: 20180210_111436_resized.jpg
 
ForumEA/S/20180210_111436_resized.jpg

 

eolo1234
KiloWatt


Gruppo:Utente
Messaggi:253

Stato:



Inviato il: 11/02/2018 19:06:32

sono un po deluso ho testato il programma che ho postato sopra quello con i pulsanti e si blocca dopo circa 4 ore invece questo senza dopo 24 ore potete dare un occhio cortesemente grazie
non so se puo essere influente su entrambi quando lo spengo e riaccendo si resetta l orologio




///http://www.energialternativa.info/Public/NewForum/Discussione.php?214979&4




#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 = 13;
const int tout = 11;
//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 rumore casa
  Volume_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(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 <= 50)
  {
    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.");   
  }

  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);
  }
}

 

sabin

Avatar
MegaWatt


Gruppo:Utente
Messaggi:522

Stato:



Inviato il: 11/02/2018 20:20:43

Se devi usare i pulsanti dovresti sostituire i delay() con un sistema a tempo, perchè il delay ti ferma il loop e durante la pausa non legge niente.
Per i pulsanti utilizzo uno schema diverso. Utilizzo un pin analogico.
Nello schema una parte del circuito rimane vicino ad Arduino, e una parte sul pannello o quadro dove ci sono i pulsanti.
Lo scopo è leggere la variazione della tensione al passaggio nelle varie resistenze. Normalmente leggerà il valore di 1024 che è il valore dei 5 volt. Premendo i pulsanti i 5 volt saranno dirottati a massa e a secondo del valore resistivo la lettura della tensione varierà.
Riguardo al codice. Ci sono tre variabili con assegnato il valore della lettura, e una variabile con la cifra di tolleranza.
Purtroppo questo metodo deve avere per forza il circuito collegato altrimenti il pin leggendo un valore assente o molto basso lo considera come un pulsante premuto e interrompe il loop per fare le scelte programmate.
Allora ho fatto alcune righe di codice che se legge un valore fuori dal campo dei pulsanti salta nel codice che visualizza la lettura dei pulsanti, molto utile quando si realizza un quadro nuovo, per reimpostare (se cambiano) i valori delle tre variabili.
Le variabili le ho sintetizzate con le lettere "vapiup" (valore pin up)


#define pad A0 // lettura pulsanti
int lpad;
int vapidif = 60; // margine tolleranza
int vapiup = 415; // valore pin, pulsante
int vapidw = 319;
int vapiset = 190;

long tempo1 = 0.0; // tempo loop, menu, (millis)

void setup()
{   // pulsanti
  pinMode( pad, INPUT );
}

void loop() // inizio loop
{
pin(); 					// --- controllo pulsanti ------
	if(lpad < 800) 	{ pulsanti(); }
} // fine loop
	
	
void pin() // lettura pin per settaggi
{ lpad = analogRead(pad); } // fine lettura pin

void pulsanti() // scelta pulsanti
{ 
lcd.clear();
if (( lpad >= vapiset - vapidif ) && ( lpad <= vapiup + vapidif )) // se tra lettura minima e lettura massima 
	{ 
		if (( lpad <= vapiset + vapidif ) && ( lpad >= vapiset - vapidif ))
		{  lcd.clear(); delay(1000); menu();}
		if (( lpad <= vapiup + vapidif ) && ( lpad >= vapiup - vapidif )) 
		{  lcd.clear(); delay(1000); info(); } // UP va direttamente su temperature max
		if (( lpad <= vapidw + vapidif ) && ( lpad >= vapidw - vapidif )) 
		{  lcd.clear(); delay(1000); rispmat(); } // DW va direttamente su RsMt
	} else {leggipin();} // altrimenti visualizza valore letto

} // fine void

void leggipin() // legge valore pin pulsanti
{	
tempo1 = millis(); lcd.clear(); delay(500);
while (millis() < tempo1 + 10000) // 10 sec.
{ pin (); // verifica pin pad
    lcd.clear();
lcd.setCursor(0,0); lcd.print(" Valore pin A0 "); // colonna, riga
lcd.setCursor(0,1); lcd.print("     > "); lcd.print(lpad);
lcd.setCursor(0,2); lcd.print("10 sec. esce ");
delay(300);    

if ( lpad < 800) { tempo1 = millis(); }
} 
} // fine void leggi pin


http://www.energialternativa.info/Public/NewForum/ForumEA/S/180200_schema.jpg



---------------
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: 11/02/2018 22:31:28

Grazie sabin
se ho capito il problema risiede nel circuito dei pulsanti che ad un certo punto ha delle letture che arduino interpreta a modo suo e blocca , dovrei utilizzare quello nel tuo schema e usare il pin A0



Modificato da eolo1234 - 12/02/2018, 01:08:51
 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 12/02/2018 07:57:58

No, per i pulsanti sabin ha usato il circuito con pin analogico e resistenze in serie e ti spiega come funziona il suo, in pratica usa il circuito che volevi fare tu. Quel circuito funziona, ha il pregio di usare solo un pin analogico, ma ha il difetto che le resistenze chiuse dentro una scatola possono riscaldare molto e variare il loro valore resistivo, quindi l'arduino legge valori leggermente diversi e non li sa interpretare. Uso quel sistema nella centralina della serra ed in estate non sempte funziona. Secondo me, se si può, é sempre meglio impiegare un pin digitale per ogni pulsante. Le resistenze di pull-up tengono stabile il segnale e non vi sono errori di lettura. Se il tuo codice non gira bene, vi sarà qualche errore, va provato e sistemato, ora in questi giorni non posso, ma appena potrò cercherò di correggerlo.



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

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 12/02/2018 08:26:02

Nel frattempo é meglio che spieghi cosa secondo te dovrebbe fare, perché é molto pasticciato e non si capisce. All'inizio del loop che cosa sono quelle visualizzazioni, non fanno parte del menù? Perché le fai vedere prima del menù? Il setup, permette di impostare solo il valore soglia? Spiega bene cosa vorresti fare.



---------------
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: 12/02/2018 11:38:24

ciao calcola

Nel video si vede bene cosa fa permette di alzare e abbassare la soglia di accensione della pompa (in seguito avrei voluto inserire anche la soglia del buzz temperatura massima e la soglia del gas)
ed e quello che fa con il problema che si blocca dopo poche ore
lo so che il programma e pasticciato

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 13/02/2018 06:42:47

Dicendoti che il programma é pasticciato non era mia intenzione offenderti, solo far presente che leggendolo non si capisce cosa vorresti che faccia. Chiaramente non posso riscrivertelo tutto, posso darti una mano per sistemare la gestione del menù. Inoltre non possiedo alcuni dei sensori che usi e non potendo replicare il circuito non ho modo di provarne il funzionamento.

Ho cercato il link del video a cui accenni, ma non l'ho trovato, mi potresti indicare più chiaramente dov'è?



---------------
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: 13/02/2018 08:20:59

No calcola non mi hai offeso lo so che è pasticciato ma è il massimo per le mie capacità il video si trova nella pagina precedente

questo e il link
https://www.youtube.com/watch?v=Ae9BJFIaPZM



Modificato da eolo1234 - 13/02/2018, 08:31:45
 

sabin

Avatar
MegaWatt


Gruppo:Utente
Messaggi:522

Stato:



Inviato il: 13/02/2018 11:08:15

Come ti dicevo ti conviene sostituire i delay più pesanti (oltre un secondo),
con un meccanismo a tempo.
Potrebbe essere questo. (non l'ho testato)


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


void loop()
{
// qui inserire controllo pulsante
	
 if ((millis() > cp1millis + 5000) && ( scelta == 1))  
 {scelta = 2; visualizza = 2; cp1millis = millis();}
 
 if ((millis() > cp1millis + 5000) && ( scelta == 2))  
 {scelta = 3; visualizza = 3; cp1millis = millis();}
 // ripetere per altre visualizzazioni
 
 // visualizzazione finale
 if ((millis() > cp1millis + 5000) && ( scelta > 2))  
 {scelta = 1; visualizza = 1; cp1millis = 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 ();
 } 

} // fine loop



---------------
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: 13/02/2018 11:42:42

Grazie sabin
Puoi cortesemente inserirlo tu sul programma non vorrei fare casini

 

sabin

Avatar
MegaWatt


Gruppo:Utente
Messaggi:522

Stato:



Inviato il: 13/02/2018 20:34:24

Il codice non posso provarlo perchè dovrei cercare le stesse librerie che utilizzi.
La parte che ti suggerivo l'ho messa nell'ultimo codice che hai postato.




#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 = 13;
const int tout = 11;
//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);

// millis
long cp1millis = 0; // memorizza millis per tempo minimo mantenimento posizione
long cp2millis = 0; // memorizza millis per aggiornamento visualizzazioni
byte scelta = 1; // 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
}

void loop()
{
// qui inserire controllo pulsante
	
 if ((millis() > cp1millis + 5000) && ( scelta < 2)) // 5000 = 5 secondi
 {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 = 1; 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





// 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 <= 50)
  {
    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.");   
  }

  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);
  }
}
 



---------------
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: 13/02/2018 23:03:25

grazie sabin

Faccine/Smileys_0006.gif



gli ho dato una sistemata perche non leggeva la 1 schermata ora e ok e spero domani di testarlo ho notato la velocita a leggere le varie sonde ed e in tempo reale
ora mancherebbe inserire i menu con i relativi pulsanti
ringrazio chiunque ci si voglia cimentare




#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 = 13;
const int tout = 11;
//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);

// millis
long cp1millis = 0; // memorizza millis per tempo minimo mantenimento posizione
long cp2millis = 0; // memorizza millis per aggiornamento visualizzazioni
byte scelta = 1; // 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
}

void loop()
{
// qui inserire controllo pulsante
 if ((millis() > cp1millis + 5000) && ( scelta == 1))  
 {scelta = 2; visualizza = 1; cp1millis = millis();}
 	
 if ((millis() > cp1millis + 5000) && ( scelta < 2)) // 5000 = 5 secondi
 {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 = 1; 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





// 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 <= 50)
  {
    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.");   
  }

  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);
  }
}



Modificato da eolo1234 - 13/02/2018, 23:17:27
 

sabin

Avatar
MegaWatt


Gruppo:Utente
Messaggi:522

Stato:



Inviato il: 14/02/2018 11:07:28

CITAZIONE (eolo1234, 13/02/2018 23:03:25 ) Discussione.php?214979&5#MSG86


..........
gli ho dato una sistemata perche non leggeva la 1 schermata ora e ok e spero domani di testarlo ho notato la velocita a leggere le varie sonde ed e in tempo reale
ora mancherebbe inserire i menu con i relativi pulsanti
ringrazio chiunque ci si voglia cimentare

Si, una svista
Puoi migliorarlo con questa correzione



byte scelta = 0; // ingranaggio sequenziale


 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 > 5))  
 {scelta = 0; visualizza = 6; cp1millis = millis();}



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

 
 InizioPagina
 

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

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum