Se sei già registrato           oppure    

Orario: 18/05/2024 11:19:12  

 

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: 09/01/2018 22:20:34

ciao a tutti da un po di tempo mi era venuto in mente di sostituire il termostato del
termocamino con qualcosa di piu efficente allora ho cominciato a girare su internet
per trovare qualcosa che facesse al mio caso e viste le mie poche capacita di programmazione
ho fatto un bel po di copia incolla
Be i risultati li potete capire vedendo il mio programma .
non sono cosi deludenti il tutto funziona (almeno a banco).
Diciamo che e un termostato un po troppo alternativo
sul mio nano con Display SERIALE 20x4 I2C ho inserito 2 sensori
DS18B20 per rilevare la temperatura del termocamino sia interna che esterna che comandano
un modulo a 2 RELE' uno che parte a una certa temperatura (diciamo 50 gradi e l altro che
a 90 gradi ti avvisa che l acqua sta andando in ebbollizione)ho anche inserito un
MQ-2 Sensore di rilevamento propano butano fumo (non si sa mai visto che il mio
termocamino si trova in cucina ho pensato ad un po di sicurezza un po per il fumo e un po
per il gas , con Buzzer Cicalino che parte ad una certa percentuale di gas fumo)
e visto che non e mai troppo ho inserito un DS1307 OROLOGIO tanto per essere sempre in orario
non contento un bel (DHT-11 temperatura ambiente e umidità DHT-11)dovessi scaldare troppo casa .
Lo so sono stato un po esagerato ma non contento visto che il camino e rasente al muro esterno
ho pensato di vedere anche che temperatura facesse fuori senza dover uscire e da li ho inserito
un AS180 - Sensore pressione barometrica BMP180 .
lo so ho pastrocchiato un po (troppi copia incolla)
e difatti mi chiedevo se qualcuno di voi potesse dargli un occhio
il tutto funziona pero vorrei inserire alcune modifiche di cui io non sono ingrado
inserire l isteresi per il rele temperatura
dei pulsanti per poter impostare le teperature
le varie scritte che ora ruotano
(io le vorrei una in primo piano su 2 righe le temperature del termocamino e le altre che ruotano sulla 3 e 4 riga)
ed altro che purtoppo da solo non potrei

ringrazio tutti quelli che hanno perso 5 minuti del loro tempo per leggere questo e
chiunque voglia aiutarmi .



Modificato da eolo1234 - 11/01/2018, 17:26:55
 

eolo1234
KiloWatt


Gruppo:Utente
Messaggi:253

Stato:



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

scusate ma ieri ho aperto la stessa discussione su Pellettatrici mi sono accorto di aver sbagliato e oggi l ho riaperta su arduino credo che questa sia quella giusta
altra foto



Immagine Allegata: 20180108_201140_1515439028845_resized.jpg
 
ForumEA/S/20180108_201140_1515439028845_resized_1.jpg



Modificato da eolo1234 - 09/01/2018, 22:35:06
 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 10/01/2018 20:40:38

Hai allegato un file testo che non contiene il codice



---------------
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: 10/01/2018 22:33:08

Ciao Calcola cosi dovrebbe essere meglio


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

char buffer1[20];
char buffer2[20];
RTC_DS1307 RTC;

Adafruit_BMP085 bmp180;
 
int mostrador = 0;
int IniTempVariable = 0;                   // Viaribile temperatura iniziale
int IniUmiVariable = 0;                    // Viaribile umidità iniziale
//int PostTempVariable = 0;                // Viaribile temperatura per rilevare eventuali variazioni
//int PostUmiVariable = 0;                 // Viaribile umidità per rilevare eventuali variazioni
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

//IMPOSTAZIONE PIN
int DS18S20_Pin = 12;                      // DS18S20 Signal pin on digital 2
OneWire ds(DS18S20_Pin);                   // on digital pin 2
int buzzerPin = 9;                         // Pin Digitale 9 per il Buzzer
const int sensorPin= 1;                    // Pin Analogico 1 per MQ-2

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

//lcd.backlight();                         // Accensione Display
dht11 DHT11;                               // Inizializzazione DHT-11 Temperatura e Umidità

LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

int smoke_level;                           // Inizializzazione MQ-2 Sensore fumi


//Relè
int relPin1 = 2;                           // Pin digitale per Relè 1
int relPin2 = 3;                           // Pin digitale per Relè 2
int relPin3 = 8;                           // Pin digitale per Relè 3

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

int relPin1Val;
int relPin2Val;
int relPin3Val;

// Heizungs Status
int heiz1Val;
int heiz2Val;

#define BACKLIGHT_PIN 13
#define ONE_WIRE_BUS 12

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
 }

void loop()
{
  float temperature1, temperature2;
  
  sensors.requestTemperatures();
  
  temperature1 = sensors.getTempCByIndex(0);
  lcd.setCursor(0, 0);
  lcd.print("Esterno: ");
  lcd.print(temperature1);
  lcd.print("°C        ");
      
  temperature2 = sensors.getTempCByIndex(1);
  lcd.setCursor(0, 1);
  lcd.print("Interno: ");
  lcd.print(temperature2);
  lcd.print("°C        ");
   
  //Je nach Temperatur Farbe der RGB-LED anpassen und Rel 1 schalten
  if (temperature1 <= 27)
  {
    relPin1Val = HIGH;
    relPin3Val = HIGH;
    lcd.setCursor(16, 0);
    lcd.print("offi");
  }
  else if (temperature1 > 27 && temperature1 < 29)
  {
    relPin1Val = LOW;
    relPin3Val = HIGH;
    lcd.setCursor(16, 0);
    lcd.print("oni ");
  }
  else if (temperature1 > 30)
  {  
    relPin1Val = LOW;
    relPin3Val = LOW;
    lcd.setCursor(16, 0);
    lcd.print("over");
  } 

  //Je nach Temperatur Farbe der RGB-LED anpassen und Rel 2 schalten
  if (temperature2 <= 27)
  {
    relPin2Val = HIGH;
    lcd.setCursor(16, 1);
    lcd.print("offD");    
  }
  else if (temperature2 > 27 && temperature2 < 30)
  {
    relPin2Val = LOW;
    lcd.setCursor(16, 1);
    lcd.print("onD ");   
  }
  else if (temperature2 > 30)
  {
    relPin3Val = LOW;
    lcd.setCursor(16, 1);
    lcd.print("100 ");
  } 

  digitalWrite(relPin1, relPin1Val);
  digitalWrite(relPin2, relPin2Val);
  digitalWrite(relPin3, relPin3Val);
  delay(5000);

  /////////////////////////////////////////////////////////////////////////////
  if (!bmp180.begin()) lcd.setCursor(0, 0);
  lcd.print("Temp.: ");
  Serial.print("Temperatura: ");
   
  if (bmp180.readTemperature() < 10)
  {
    lcd.print(" "); 
    lcd.print(bmp180.readTemperature());
     
    Serial.print(bmp180.readTemperature());
    Serial.println(" °C");
  }
  else
  {
    lcd.print(bmp180.readTemperature(), 1);
     
    Serial.print(bmp180.readTemperature(), 1);
    Serial.println(" °C");
  }
  lcd.print(" ");
  lcd.print((char)223); 
  lcd.print("C   ");
      
  if (mostrador == 0)
  {
    lcd.setCursor(0, 1);
    lcd.print("                ");
    lcd.setCursor(0, 1);
    lcd.print("Altit.: ");
    Serial.print("Altitude : ");
    lcd.print(bmp180.readAltitude());
    Serial.print(bmp180.readAltitude());
    Serial.println(" m");
    lcd.print(" m");  
  }
  if (mostrador == 1)
  {
    lcd.setCursor(0, 1);
    lcd.print("                ");
    lcd.setCursor(0, 1);
    lcd.print("Press.: ");
    Serial.print("Pressao : ");
    lcd.print(bmp180.readPressure());  
    Serial.print(bmp180.readPressure());  
    Serial.println(" Pa");
    lcd.print(" Pa");
  }
   
  delay(3000);

  ///////////////////////////////////////////////////////////////////////////////////

  pinMode(buzzerPin, OUTPUT);              // Impostazione Buzzer

  pinMode(sensorPin, INPUT);               //the smoke sensor will be an input to the arduino
  pinMode(buzzerPin, OUTPUT);              //the buzzer serves an output in the circuit
  ////////////////////////////////////////////

  const int setpin = 6;
  boolean statepin = 0;

  pinMode (6, INPUT);
  digitalWrite (6, HIGH);
  Wire.begin();
  RTC.begin();
  lcd.begin(16, 2);
  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,0);
  lcd.print( buffer1 );
  sprintf(buffer2,  "     %02d/%02d/%d", now.day(), now.month(), now.year());
  lcd.setCursor(0,1);
  lcd.print( buffer2 );
  delay(1000);

  /////////////////////////////////////////////// const int setpin = 6;

  volume = analogRead(A0);
  int chk = DHT11.read(DHT11_PIN);

  smoke_level= analogRead(sensorPin);
  if (smoke_level > 15)
  {
    digitalWrite(buzzerPin, HIGH);
  }

  if (smoke_level < 15) 
  {
    digitalWrite(buzzerPin, LOW);
    delay(5000);
  }

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Temp. ");
  lcd.print((char)223);
  lcd.print("C = ");
  lcd.print(DHT11.temperature);
  lcd.setCursor(0,1);
  lcd.print("Umidita % = ");
  lcd.print(DHT11.humidity);
  delay(5000);

  lcd.clear();


  if(smoke_level < 15)
  {
    lcd.setCursor(0,0);
    lcd.print("Livello Gas: ");
    lcd.print(smoke_level);
    lcd.setCursor(0,1);
    lcd.print("Nessun GAS");
    delay(5000);
  }
  if(smoke_level > 15)
  {
    lcd.setCursor(0,0);
    lcd.print("Livello Gas: ");
    lcd.print(smoke_level);
    lcd.setCursor(0,1);
    lcd.print("Attenzione GAS");
    delay(5000);
  }
}



Modificato da BellaEli - 15/01/2018, 21:24:36
 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 13/01/2018 23:23:49

Ciao Eolo,

ho cercato di sistemare alla meglio il codice (almento grossolanamente), tuttavia devi spiegare meglio cosa fa il codice...

Ci sono molte parti di codice non commentato e capire cosa deve fare è molto impegnativo, perchè non lo fai tu che dovresti conoscerlo a memoria ?

Inoltre devi essere + preciso su cosa succede adesso e ciò che vuoi, magari con qualche foto che ci fa capire la situazione senza dover replicare il tuo circuito...

Elix



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

 

eolo1234
KiloWatt


Gruppo:Utente
Messaggi:253

Stato:



Inviato il: 13/01/2018 23:49:28

Grazie ELIX
Domani posterò delle foto o un video e cercherò di spiegare cosa fa e cosa vorrei che facesse per ora ti ringrazio

 

eolo1234
KiloWatt


Gruppo:Utente
Messaggi:253

Stato:



Inviato il: 14/01/2018 12:14:39

il programma comincia visualizzando i 2 sensori DS18S20



Immagine Allegata: 20180108_201159_1515918970237_resized.jpg
 
ForumEA/S/20180108_201159_1515918970237_resized.jpg

 

eolo1234
KiloWatt


Gruppo:Utente
Messaggi:253

Stato:



Inviato il: 14/01/2018 12:16:43

si toglie la schermata dei sensori DS18S20 e compare temperatura e altitidine bmp180



Immagine Allegata: 20180108_201140_1515918977338_resized.jpg
 
ForumEA/S/20180108_201140_1515918977338_resized.jpg

 

eolo1234
KiloWatt


Gruppo:Utente
Messaggi:253

Stato:



Inviato il: 14/01/2018 12:19:02

cambia ancora e legge l orologio



Immagine Allegata: 20180108_201142_1515918975600_resized.jpg
 
ForumEA/S/20180108_201142_1515918975600_resized.jpg

 

eolo1234
KiloWatt


Gruppo:Utente
Messaggi:253

Stato:



Inviato il: 14/01/2018 12:22:16

cambia ancora e legge il sens DHT11 temp e umidita



Immagine Allegata: 20180108_201148_1515918974111_resized.jpg
 
ForumEA/S/20180108_201148_1515918974111_resized.jpg

 

eolo1234
KiloWatt


Gruppo:Utente
Messaggi:253

Stato:



Inviato il: 14/01/2018 12:57:37

in ultimo il sensore fumo e gas
dopo di che ricomincia
Il programma funziona in questo modo parte con le letture dei 2 sensori DS18S20 le soglie vanno regolate all interno del programma (ora sono in prova ma diciamo che dopo userei solo 1 dei 2 sensori le mettero con partenza primo rele a 55 gradi per far partire la pompa dei termosifoni e il 2 rele impostato a 85 gradi per far partire un buzzer per avvisare soglia di ebollizione)
la seconda schermata evidenzia il sensore bmp180 che usero all esterno e mi dira la temperatura che c e fuori e l altitudine,la terza mi informa ora e data,la quarta sens DHT11 temperatura e umidita interna (diciamo in cucina dove e posizionato il termocamino),la quinta visualizza un rilevatore di fumo e gas all interno con buzz che parte non appena si supera una certa soglia (come ho gia detto il mio term e in cucina e quindi per sicurezza un rilevatore cosi mi fa comodo sia per le fughe gas che per eventuali fumi dovuti a scarzo tiraggio) .
le pagine ruotano ogni 5 secondi ma si puo anche aumentare .
vorrei se possibile inserire 2 pulsanti per poter settare la temperatura del sensore DS18S20 manualmente visto che ora va inserita con il pc,.
come tu hai avuto modo di vedere il mio programma e un Frankenstein (praticamente messo su con molti copia e incolla di altri programmi e tanto cu.... )ho paura che sia instabile e quindi vorrei che qualcuno gli dia un occhio .
comunque e una settimana che lo provo a banco e pare che vada ma sarebbe stupendo poter aggiungere 2 bottoni per regolare la temperatura di partenza della pompa (io come ho gia detto non sono in grado )



Immagine Allegata: 20180108_201155_1515918972546_resized.jpg
 
ForumEA/S/20180108_201155_1515918972546_resized.jpg



Modificato da eolo1234 - 14/01/2018, 13:07:51
 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 14/01/2018 16:32:42

Mi spieghi i 3 relè cosa comandano ?

Mi spieghi cosa sono le scritte "offi", "oni", "over", "offD", "onD", "100" ?

Mi spieghi perchè le scritte di sopra dipendono dalle temperature, ovvero
< 27, tra 27 e 30, > 30 ?

Posteresti uno schema elettrico dove si capisce ogni uscita di arduino a cosa è collegata ?

Elix



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

 

eolo1234
KiloWatt


Gruppo:Utente
Messaggi:253

Stato:



Inviato il: 14/01/2018 18:59:40

Ciao Hai ragione in effetti i rele 3 ma lavoreranno solo 2 uno fara accendere la pompa e l altro accendera un buzz.
cerco di spiegarmi meglio le 6 soglie stanno per("offi" rele off interno, "oni" rele on interno, "over" sta per ebbollizione, "offD" per rele interno spento, "onD"per rele interno acceso , "100" per ebollizione ?)in realta sono legati dalla temperatura rilevata diciamo che se la temperatura e sotto i 27 gradi i rele sono spenti e la pompa non funziona al momento che arriva tra i 27 e i 30 la pompa si accende oltre i 30 si accende il buzz e avvisa che l acqua del camino entra in ebollizione purtroppo sto facendo delle prove scaldando i sensori tra le mani ma dopo le 3 temperature dovranno essere cambiate in
sotto i 55 gradi (< 55 rele 2e3 spento ) tra i > 55 e <150(rele 2 acceso quindi pompa accesa), > 85 gradi buzz acceso quindi rele 3 acceso

 

eolo1234
KiloWatt


Gruppo:Utente
Messaggi:253

Stato:



Inviato il: 14/01/2018 19:15:44

per lo schema io non sono capace di disegnarlo posso dirti a cosa corrispondono le uscite

A4 SDA (sono collegati sensore di gas - lcd -orologio - altimetro)
A5 SCL (sono collegati sensore di gas - lcd -orologio - altimetro)
A1 (sensore di gas)
D7 (DH11 sensore temp e umidita)
D12 ( DS18S20 sensore temperatura)
D9 (positivo buzz per sensore di fumo)
D8 ( int relPin3)
D3 ( int relPin2)
D2 (int relPin1 )

aggiungo uno schema che in parte ho usao e rispecchia un po



Modificato da eolo1234 - 14/01/2018, 19:26:53
 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 14/01/2018 19:23:46

E' difficile prima di tutto capire ciò che vuoi fare...

Vediamo di provare a interpretare:

I relè sono 3 ma in realtà ne utilizzerai solo 2, il primo per azionare la pompa, il secondo per azionare il buzzer.

Quindi il primo relè dovrà accendersi quando la temperatura supera i 55 gradi e, per logica, non deve mai spegnersi se la temperatura sale troppo...

Il secondo, invece, dovrà accendersi sopra gli 85 gradi e, come il primo, non dovrà mai spegnersi finchè la temperatura non scende, giusto ???

Cioè se la temperatura per sbaglio sale oltre la soglia (85°) sia buzzer che pompa devono rimanere accesi finche l'allarme non rientra, corretto ?

Quindi le 3 sigle: "offi", "oni", "over" relative alla pompa e le 3 sigle: "offD", "onD", "100" relative al buzzer potrebbero trasformarsi in:
"On" e "Off" per la pompa, "Ok" e "Alm" (Allarme) per il buzzer, che dici ?

Per quanto riguarda cambiare il messaggio sopra i 150 gradi non ha senso poichè la temperatura è già visibile sul display, quindi basta leggere le T per capire cosa sta succedendo...

Facciamo un passo per volta.

Elix



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

 
 InizioPagina
 

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

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum