lunedì 22 settembre 2014

Domotica - Controllo tenda

L’innalzamento e l’abbassamento della tenda è ottenuto tramite pulsanti fisici inoltre se la tenda è del tutto abbassata e si preme il pulsante per abbassarla, il programma non farà nulla; lo stesso avviene per la tenda del tutto avvolta.Sono presenti due sensori: un anemometro, che permette alla centralina di determinare la velocità del vento, e un pluviostato, speciale trasduttore che riesce a determinare se sta piovendo oppure no  grazie al variare della sua resistenza. Questi due sensori tengono sotto controllo le condizioni ambientali esterne, non appena uno dei due rileva un  valore che supera quello prefissato nel programma la tenda viene riavvolta automaticamente per evitare danni.

Programma Arduino

const int btSuTenda = 5;
const int SuTendaPin = 22;
int StTSu = 0;
const int btGiuTenda = 6;
const int GiuTendaPin = 52;
int StTGiu = 0;
int StTenda = 0;

void setup() {
pinMode (btSuTenda, INPUT);
pinMode (btGiuTenda, INPUT);
pinMode (SuTendaPin, OUTPUT);
pinMode (GiuTendaPin, OUTPUT);
pinMode (pluvPin, INPUT);
pinMode (AnPin, INPUT);
}

void loop() {
ce = 0;
  t = millis();
  for (se = 0; se < 10000; se++) {  
    state = digitalRead(AnPin);
    if (state != oldstate) {
      ce++;
      oldstate = state;
    }
  }
  t = millis() - t;
  ce = ce / 2;
  f = 1000 * ce / t;

Questo ciclo for all'interno del programma rappresenta il contatore della frequenza di un treno di impulsi (segnali ottenuti dal pluviostato) in ingresso in una entrata digitale. Quest'azione viene ripetuta sempre durando 10000 cicli. Durante questo tempo il programma conta gli impulsi in ingresso e tramite opportuni calcoli matematici li trasforma in frequenza. 

  StTGiu = digitalRead(btGiuTenda);
  StTSu = digitalRead (btSuTenda);
  if ((StTGiu == HIGH) && (StTenda == 0)) {
    digitalWrite(GiuTendaPin, HIGH);
    delay(9500);
    digitalWrite(GiuTendaPin, LOW);
    StTenda = 1;
    delay(50);
  }

Parte di programma che abbassa la tenda non appena si pigia il pulsante, L'azione viene completata solamente se la tenda è alzata (stato definito dalla variabile StTenda, variabile a 0 la tenda è alzata mentre se la variabile è a 1 la tenda è abbassata).

  if ((StTSu == HIGH) && (StTenda == 1)) {
    digitalWrite(SuTendaPin, HIGH);
    delay(9500);
    digitalWrite(SuTendaPin, LOW);
    StTenda = 0;
  }

Parte di programma che alza la tenda non appena si pigia il pulsante, L'azione viene completata solamente se la tenda è abbassata (stato definito dalla variabile StTenda, variabile a 0 la tenda è alzata mentre se la variabile è a 1 la tenda è abbassata).

  if ((StTenda == 1) && ((analogRead(pluvPin) < 500) || (f >= 4))) {
    digitalWrite(SuTendaPin, HIGH);
    delay(9500);
    digitalWrite(SuTendaPin, LOW);
    StTenda = 0;
  }
}

Parte in cui se il programma riconosce che la tenda è abbassata e se la lettura del pluviostato è al di sotto di un determinato valore (fissato da noi per far riconoscere al programma che sta piovendo) oppure se la frequenza in ingresso dall'anemometro è troppo alta la centralina alzerà automaticamente la tenda per evitare danni. 

Nessun commento:

Posta un commento