Go Down

Topic: ' automazione tapparella (Read 514 times) previous topic - next topic

david15

Ciao a tutti... sto facendo un progetto per creare una specie di domotica...cioè attraverso una stazione di controllo dotata di display e pulsanti automatizzo una tapparella e le luci...ha tre modalità MANUALE da TELECOMANDO e AUTOMATICO... la programmazione per le prime due funziona bene( la discesa e salita della tapparella è regolata tramite la funzione millis che permette di far trascorrere il tempo necessario per arrivare al fine corsa della tapparella senza bloccare il programma)
 nella modalità AUTOMATICO tramite un interruttore crepuscolare viene stabilito giorno e notte e di conseguenza la salita e la discesa della tapparella e l'accensione delle luci..
il problema è che nell'automatico la funzione millis non funziona..se qualcuno è disposto a darmi una mano gliene sono infinitamente grato .allego lo sketch,,
Code: [Select]
#include <Wire.h> //librerie LCD
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Addr, En, Rw, Rs, d4, d5, d6, d7, backlighpin, polarity

#define ACCESO 1 //definisco le variabili ACCESO e SPENTO che sostituiscono HIGH e LOW per semplificare
#define SPENTO 0
int stato_rele_salita = 0; // conserva lo stato rele salita tapparella
int stato_rele_discesa = 0; // conserva lo stato rele discesa tapparella


int val_fotoresistenza=0;


const byte RELE1 = 2; //rele' illuminazione esterna

const byte RELE3 = 5; //rele' salita tapparella
const byte RELE4 = 6; //rele' discesa tapparella

const byte SENSORE_CREPUSCOLARE = A0; //interrutore crepuscolare per tapparella

boolean stato_notte = false;  //varibile booleana stato notte
boolean stato_giorno = false; //variabile booleana stato giorno

unsigned long lastmillis = millis();  //variabile tempo relè tapparella SALITA
unsigned long lastmillis1 = millis(); //variabile tempo relè tapparella DISCESA


unsigned long attesa = 10000;  //tempo azionamento relè tapparella SALITA
unsigned long attesa1 = 10000; //tempo azionamento relè tapparella DISCESA


//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
void setup()

{
  delay(1000);
  pinMode(SENSORE_CREPUSCOLARE, INPUT);

  pinMode(RELE1, OUTPUT);

  pinMode(RELE3, OUTPUT);
  pinMode(RELE4, OUTPUT);
 
  digitalWrite(RELE1, SPENTO);
  digitalWrite(RELE2, SPENTO);
  digitalWrite(RELE3, SPENTO);
  digitalWrite(RELE4, SPENTO);
  digitalWrite(RELE5, SPENTO);
  digitalWrite(RELE6, SPENTO);
  Serial.begin(9600); //inizializzo la porta seriale
  irrecv.enableIRIn(); // avvio la ricezione IR
  lcd.begin(20,4);
  lcd.backlight();
 
}

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

void loop()
///////////////////////////////////AUTOMATICO//////////////////////////////////////////////////////////////
   
{
  lcd.setCursor(0, 0);        //First column, first row
  lcd.print("MODALITA'AUTOMATICO ");
  val_fotoresistenza = analogRead(SENSORE_CREPUSCOLARE); //salva il valore della fotoresistenza nella varibile
  val_temperatura = analogRead(SENSORE_TEMPERATURA);
 
  if(stato_notte == true && val_fotoresistenza<500)//NOTTE MA STATO GIA' VERIFICATO
 
     { 
       digitalWrite(RELE3,SPENTO); //salita spenta
       digitalWrite(RELE4,SPENTO); //discesa spenta
       digitalWrite(RELE1,ACCESO); //illuminazione accesa
       lcd.setCursor(0,1);   
       
       lcd.print("MODALITA' SERA      ");
     }
     
  if(stato_giorno == true && val_fotoresistenza>500)//GIORNO MA STATO GIA' VERIFICATO
   
     {
       digitalWrite(RELE3,SPENTO); //salita spenta
       digitalWrite(RELE4,SPENTO); //discesa spenta
       digitalWrite(RELE1,SPENTO); //illuminazione spenta
       lcd.setCursor(0,1);   
       lcd.print("MODALITA' GIORNO   ");
     }
     
  if(val_fotoresistenza<500 && stato_notte == false ) //NOTTE
     
     { 
        stato_rele_discesa = ACCESO;
        stato_rele_salita = SPENTO;
        digitalWrite(RELE4, stato_rele_discesa);
        digitalWrite(RELE3, stato_rele_salita);
        digitalWrite(RELE1,ACCESO);
        lcd.setCursor(0,1);   
        lcd.print("MODALITA' SERA      ");
        lcd.setCursor (0,2);      //imposta la seconda riga
        lcd.print("DISCESA TAPPARELLA  ");
       
       
       
        lastmillis1 = millis();
        stato_notte = true;
        stato_giorno = false;
     }
       
       
      if(val_fotoresistenza>501 && stato_giorno == false)  //GIORNO
     { 
        stato_rele_salita = ACCESO;
        stato_rele_discesa = SPENTO;
        digitalWrite(RELE3, stato_rele_salita); // accende il rele' di salita
        digitalWrite(RELE4, stato_rele_discesa); //mi assicuro che sia spento il rele' di abbassamento
        digitalWrite(RELE1,SPENTO);
        lcd.setCursor(0,1);   
        lcd.print("MODALITA' GIORNO    ");
        lcd.setCursor (0,2);      //imposta la seconda riga
        lcd.print("SALITA TAPPARELLA   ");
       
       
       
        lastmillis = millis();
        stato_giorno = true;
        stato_notte = false;
     }
     
     
     
 if ((millis() - lastmillis) >= attesa) {
    lastmillis = millis();
    if (stato_rele_salita == ACCESO) {
       stato_rele_salita = SPENTO;
      digitalWrite(RELE3, stato_rele_salita);
      lcd.setCursor (0,1);      //imposta la seconda riga
      lcd.print("                   ");
      lcd.setCursor (0,2);      //imposta la seconda riga
      lcd.print("                   ");
    }
  }
 
  if ((millis() - lastmillis1) >= attesa1) {
    lastmillis1 = millis();
    if (stato_rele_discesa == ACCESO) {
      stato_rele_discesa = SPENTO;
      digitalWrite(RELE4, stato_rele_discesa);
      lcd.setCursor (0,1);      //imposta la seconda riga
      lcd.print("                   ");
      lcd.setCursor (0,2);      //imposta la seconda riga
      lcd.print("                    ");
    }
  }
 
       
 
 
 
 
 }
 

Go Up