Pametna kuća

Elektrostrojarska škola

Osmislili smo upravljanje kućnom rasvjetom pomoću aplikacije i raznim senzorima. Na ulaz smo postavili senzor pokreta koji uključuje svijetlo ispred ulaza i tipkalo koje uključuje zvono. Jednostavniji način otključavanja vrata osmislili smo pomoću servo motora i aplikacije. U hodnik smo postavili dvije led diode koje se uključuju kad se vanjska svjetlost smanji ispod određene razine. Kao indikator svjetlosti koristili smo fotootpornik koji smo postavili na vanjski zid makete. U dnevnoj sobi svijetlo se uključuje pomoću pljeska. Kamin koji se nalazi u dnevnoj sobi mijenja svoju jačinu isijavanja ovisno o vanjskoj temperaturi. Temperaturu i vlagu prikazuje nam display postavljen na zid dnevne sobe. U spavaćoj sobi svijetlom se upravlja pomoću touch senzora. Aplikacijom se može upravljati sa svim rasvjetnim tijelima.

Izrada projekta

Dio kuće.

Mobilna aplikacija

U mobilnoj aplikaciji su dostupne kontrole za upravljane senzorima koji služe za automatsko uključivanje I isključivanje svjetla (Crvene tipke) pomoću kojih se svaki od senzora može odvojeno isključiti ili uključiti prema potrebi korisnika. Desno od tih tipki nalazi se zelena tipka, ona služi za zaključavanje/otključavanje ulaznih vrata. Na posljetku, tipke u donjem redu (žute) služe za upravljanje svjetlima u svakoj prostoriji.

Shema projekta

Spojeno prema shemi.

Arduino program

#define BLYNK_PRINT /*

/*
  IoT Source
  Softver za automatizirano upravljanje pametnom kucom putem senzora
  ili direktno pomocu mobilne aplikacije.

  Kao "mozak" sustava koristi se Arduino MKR1000, svi digitalni ulazi
  (tipkala, enkoder, senzor zvuka, senzor dodira...) funkcioniraju
  na bazi interrupt-ova, LDR senzor i DHT11 senzor temperature i vlage
  osvjezavaju se u realnim intervalima (LDR 5 sekundi, DHT 1 minuta).
  Povezivanje na internet je moguce i bez uporabe racunala (pod uvjetom
  da SSID i lozinka nisu dulji od 16 znakova, te da sadrze samo znakove
  A-Z, a-z, 0-9, "-" i "_"), a o komunikaciji sa mobilnom aplikacijom se
  brine Blynk library.

  NAPOMENA: RGB dioda ovdje glumi plamen u kaminu pa bi realno bila zamijenjena
  sustavom grijanja.

  Napisano 26.2.2018.
    Tomislav Kerezi
 */



//////////KNJIZNICE////////////
#include                 //
#include    //  KNJIZNICE KORISTENE
#include               //     U OVOME KODU
#include     //
#include                  //
#include                   //
#include                 //
#include                   //

////////////DEFINICIJE PINOVA//////////////
#define ENC_CLK 0 //
#define ENC_DT 14 // Definirani pinovi enkodera
#define ENC_SW 1  // (koristi se odvojeno tipkalo)

#define DHT_BUS A6    //Definiran pin za podatkovnu vezu sa senzorom DHT11
#define DHTTYPE DHT11 //Definiran tip DHT senzora

#define SW_1 6     //
#define SOUND_1 7  //Definirani pinovi za ostale ulazne senzore
#define TOUCH_1 4  //
#define PIR_1 5    //

#define LCD_SDA 11 //Definirani pinovi za komunikaciju (I2C protokol)
#define LCD_SCL 12 //sa LCD displayem

#define LDR_IN A1 //Definiran analogni ulaz za senzor svjetlosti

#define BUZZ_OUT 9 //Definiran izlazni pin za "zvono" (buzzer)
#define LOCK_OUT 2 //Definiran izlazni pin za upravljanje servom za zakljucavanje

#define RGB_R 3  //
#define RGB_G 10 //Definirani izlazi za RGB diodu
#define RGB_B 13 //

#define LED_1 A2 //
#define LED_2 A3 //Definirani ostali izlazi za rasvjetu
#define LED_3 A4 //
#define LED_4 A5 //
/////////INICIJALIZACIJA VARIJABLI/////////////////

long int loopTime = 0; //Vremenska varijabla
int LDRVar; // Vrijednost LDR senzora

int lastR = 0; //
int lastG = 0; // RGB Vrijednosti na RGB diodi
int lastB = 0; //

float temp; //Temperatura (DHT11)
float hum;  //Vlaga u zraku (DHT11);

bool LDR_Enable = true; // Aktivnost LDR senzota

char auth[] = "0ab9821f9bc5448a9fdebfc679f3ace1"; // AUTENTIFIKACIJSKI TOKEN ZA APLIKACIJU

volatile int selVar; // Pozicija enkodera
volatile bool ESWVar = false; // Pozicija tipkala pri enkoderu

volatile bool soundVar = true; // Pomocne varijable za kontrolu nad
volatile bool touchVar = true; // senzorima pomocu mobilne aplikacije
volatile bool pirVar = true;   //

////////////INICIJALIZACIJA LCD-A I DHT11 SENZORA//////////////
LiquidCrystal_I2C lcd(0x27, 16 ,2); // Inicijalizacija LCD-a
DHT dht(DHT_BUS, DHTTYPE); // Inicijalizacija DHT11 senzora
                
/*byte LCDAddress;
byte scanI2C(){
  byte error, address;
  for(address = 1; address < 127; address++ ) { Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { return address; Serial.println(address, HEX); } delay(100); } }*/ /////////////ZVUK ZVONA///////////////// void bell(){ } //////////////FUNKCIJA ZA PROMJENU BOJE NA RGB DIODI//////////// void RGB(int r, int g, int b){ if(r > lastR){
    while(r > lastR){
      lastR--;
      analogWrite(RGB_R, lastR);
      delay(5);
    }
  }
  else if(r < lastR){
    while(r < lastR){ lastR++; analogWrite(RGB_R, lastR); delay(5); } } if(g > lastG){
    while(g > lastG){
      lastG--;
      analogWrite(RGB_G, lastG);
      delay(5);
    }
  }
  else if(g < lastG){
    while(g < lastG){ lastG++; analogWrite(RGB_G, lastG); delay(5); } } if(b > lastB){
    while(b > lastB){
      lastB--;
      analogWrite(RGB_B, lastB);
      delay(5);
    }
  }
  else if(b < lastB){
    while(b < lastB){
      lastB++;
      analogWrite(RGB_B, lastB);
      delay(5);
    }
  }
}
///////////////////////////////////////////////////////////////
//                         SETUP                             //
///////////////////////////////////////////////////////////////
void setup() {
///////////POSTAVLJANJE ULAZA I IZLAZA PRIPADAJUCIM PINOVIMA/////////
pinMode(ENC_CLK, INPUT);
pinMode(ENC_DT, INPUT);
pinMode(ENC_SW, INPUT);

pinMode(DHT_BUS, INPUT);

pinMode(SW_1, INPUT);
pinMode(SOUND_1, INPUT);
pinMode(TOUCH_1, INPUT);

pinMode(LDR_IN, INPUT);

pinMode(LCD_SDA, OUTPUT);
pinMode(LCD_SCL, OUTPUT);

pinMode(BUZZ_OUT, OUTPUT);

pinMode(LOCK_OUT, OUTPUT);
analogWrite(LOCK_OUT, 254);

pinMode(RGB_R, OUTPUT);
pinMode(RGB_G, OUTPUT);
pinMode(RGB_B, OUTPUT);
pinMode(LED_1, OUTPUT);
pinMode(LED_2, OUTPUT);
pinMode(LED_3, OUTPUT);
pinMode(LED_4, OUTPUT);
                 // DEBUGGING SETUP//
  Serial.begin(115200);

//////////POSTAVLJANJE INTERRUPT-OVA/////////////
attachInterrupt(ENC_CLK,ISR_ENC, FALLING);
attachInterrupt(ENC_SW, ISR_ESW, FALLING);
attachInterrupt(SW_1, ISR_SW, FALLING);
attachInterrupt(SOUND_1, ISR_SOUND, RISING);
attachInterrupt(TOUCH_1, ISR_TOUCH, RISING);
attachInterrupt(PIR_1, ISR_PIR, CHANGE);
interrupts(); // ukljucivanje interrupt-ova

////////////POVEZIVANJE S LCD-EM I DHT SENZOROM///////////
Wire.begin();      // Inicijalizacija I2C protokola
//LCDAddress = scanI2C();
lcd.init();        // Inicijalizacija LCD-a
lcd.backlight();   // Ukljucivanje pozadinskog osvjetljenja
dht.begin();       // Inicijalizacijja DHT senzora

/////////VARIJABLE ZA POVEZIVANJE S MREZOM I INTERNETOM/////////
  char SSIDArr[16]; //SSID Mreze
  char PASSArr[16]; //WPA2-PSK Lozinka
  
//////////SKUP DOSTUPNIH ZNAKOVA ZA UNOS/////////
  char selArr[67] =  {NULL, ' ', 'A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'E', 'e', 'F', 'f', 'G', 'g', 'H', 'h', 'I', 'i', 'J', 'j', 'K', 'k',
                    'L', 'l', 'M', 'm', 'N', 'n', 'O', 'o', 'P', 'p', 'Q', 'q', 'R', 'r', 'S', 's', 'T', 't', 'U', 'u',
                    'V', 'v', 'W', 'w', 'X', 'x', 'Y', 'y', 'Z', 'z', '_', '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
//////////UNOS SSID-a MREZE//////////
labelWIFI_SSID:
  lcd.clear();
  lcd.print("SSID: ");
  for(int i=0; i<16; i++){ while(!ESWVar){ if(selVar > sizeof(selArr)){
        selVar = 0;
      }
      SSIDArr[i] = selArr[selVar];
      lcd.setCursor(i,1);
      lcd.write(SSIDArr[i]);
      delay(50);
    }
    while(ESWVar){
      ESWVar = !ESWVar;
    }
  }
////////////UNOS LOZINKE MREZE//////////
labelWIFI_PASS:
  lcd.clear();
  lcd.print("PASSWORD: ");
  for(int k=0; k<16; k++){ while(!ESWVar){ if(selVar > sizeof(selArr)){
      }
      PASSArr[k] = selArr[selVar];
      lcd.setCursor(k,1);
      lcd.write(PASSArr[k]);
      delay(50);
    }
    while(ESWVar){
      ESWVar = !ESWVar;
    }
  }
///////////////POVEZIVANJE NA MREZU/////////
  lcd.clear();
  lcd.print("CONNECTING..");
  WiFi.begin(SSIDArr, PASSArr);
  delay(10000); // Pricekaj da se WiFi modul poveze

/////////////IZJAVA STANJA VEZE NAKON POKUSAJA POVEZIVANJA NA MREZU/////////
  if(WiFi.status() == WL_CONNECTED){
    Blynk.begin(auth, SSIDArr, PASSArr); ///POVEZIVANJE NA INTERNET///
    lcd.clear();
    lcd.print("Connected.");
    delay(1000);
    lcd.clear();
  }
  else if(WiFi.status() == WL_NO_SSID_AVAIL){
    lcd.clear();
    lcd.print("SSID not found.");
     delay(1000);
    lcd.clear();
    lcd.print("Retype Info.");
    delay(1000);
    for(int k=0; k<16; k++){
      PASSArr[k] = 0;
    }
    goto labelWIFI_SSID;
  }
  else if(WiFi.status() == WL_CONNECT_FAILED){
    lcd.clear();
    lcd.print("Failed.");
    delay(1000);
    lcd.clear();
    lcd.print("Retype password.");
    delay(1000);
    for(int j=0; j<16; j++){
      PASSArr[j] = 0;
    }
    goto labelWIFI_PASS;
  }
  else {
    lcd.clear();
    lcd.print("Unknown Error,");
    lcd.setCursor(0,1);
    lcd.print("Please reset.");
    delay(2000);
    lcd.clear();
  }


}
//////////////////////////////////////////
//                  LOOP                //
//////////////////////////////////////////
void loop() {
///////OCITAVANJE VRIJEDNOSTI LDR SENZORA //////////
  if(LDR_Enable == true){ // Je li senzor aktivan?
    if((loopTime % 500) == 0){ //Interval osvjezavanja
      LDRVar = analogRead(LDR_IN);
      if(LDRVar < 600) { // Razina svjetlosti ispod koje se pali rasvjeta
        digitalWrite(LED_4, HIGH);
      }
      else {
        digitalWrite(LED_4, LOW);
      }
    }
  }
///////////////OCITAVANJE VRIJEDNOSTI DHT SENZORA I ISPISIVANJE NA LCD///////////
  if((loopTime % 6000) == 0){
    temp = dht.readTemperature();
    hum = dht.readHumidity();
    lcd.clear();
    lcd.setCursor(1, 0);
    lcd.print("Temp: ");
    lcd.print((float)temp);
    lcd.print((char)223);
    lcd.print("C");
    lcd.setCursor(1, 1);
    lcd.print("Hum: ");
    lcd.print((float)hum);
    lcd.print(" %");
///////////POSTAVLJANJE BOJE RGB DIODE/////////
    if(temp < 10){
      RGB(248,85,7);
    }
    else if(temp < 15){
      RGB(198,138,15);
    }
    else if(temp < 20){
      RGB(109,77,10);
    }
    else {
      RGB(30,21,2);
    }
    
  }
  Blynk.run(); //Pokretanje veze sa aplikacijom


///////////////POSTAVLJANJE OSNOVNOG VREMENSKOG INTERVALA/////////
  loopTime++;
  if(loopTime == 1000000){ //Overflow reset
    loopTime = 0;
  }
  delay(10); //OSNOVNI INTERVAL
}

//////////////////////////////////////
//           ISR FUNKCIJE           //
//////////////////////////////////////
void ISR_ENC(){ //Enkoder
  if(!digitalRead(ENC_DT)){
    selVar++;
  }
  else {
    selVar--;
  }
  delayMicroseconds(35000);
}

void ISR_ESW(){ //Tipkalo pri enkoderu
  ESWVar = !ESWVar;
  delayMicroseconds(150000);
}

void ISR_SW(){ //Tipkalo za zvono
  bell();
  delayMicroseconds(150000);
}

void ISR_SOUND(){ // Zvucni senzor
  digitalWrite(LED_2, soundVar);
  soundVar = !soundVar;
  delayMicroseconds(150000);
}

void ISR_TOUCH(){ // Senzor dodira
  digitalWrite(LED_1, touchVar);
  touchVar = !touchVar;
  delayMicroseconds(150000);
}
void ISR_PIR(){ // IR senzor prisutnosti
  digitalWrite(LED_3, pirVar);
  pirVar = !pirVar;
  delayMicroseconds(25000);
}

///// UPRAVLJANJE SENZORIMA (IZ APLIKACIJE) ////////
    BLYNK_WRITE(V0){
     if (param.asInt()){
         detachInterrupt(SOUND_1);
       } 
      else {
        attachInterrupt(SOUND_1, ISR_SOUND, RISING);
     }
    }
    BLYNK_WRITE(V1){
     if (param.asInt()){
         detachInterrupt(PIR_1);
       } 
      else {
        attachInterrupt(PIR_1, ISR_PIR, CHANGE);
     }
    }
    BLYNK_WRITE(V2){
     if (param.asInt()){
         LDR_Enable = false;
       } 
      else {
        LDR_Enable = true;
     }
    }
    BLYNK_WRITE(V3){
     if (param.asInt()){
         analogWrite(LOCK_OUT, 254);
       } 
      else {
        analogWrite(LOCK_OUT, 128);
     }
    }

Arduino program ovoga projekta možete preuzeti ovdje.

Autori

Projekt su izradili Tomislav Kereži i Mihael Loborec uz mentorstvo Krunoslava Grudičeka iz Elektrostrojarska škola.

Projekt je prijavljen na temu: Internet of Things: Pametna rasvjeta.

Drugi projekti

Pametna rasvjeta – Zastora pomoću mobitela

Pametna rasvjeta – Zastora pomoću mobitela

Sustav pametne rasvjete baziran na prisutnosti korisnika

Sustav pametne rasvjete baziran na prisutnosti korisnika

Vanjska pametna rasvjeta – sensor

Vanjska pametna rasvjeta – sensor

Zvučna rasvjeta

Zvučna rasvjeta

Pametna rasvjeta za stan

Pametna rasvjeta za stan

Ambijetalno svjetlo

Ambijetalno svjetlo

Pametna rasvjeta

Pametna rasvjeta

Solarna energija

Solarna energija

Svjetlo u tami

Svjetlo u tami

Pametna rasvjeta (detektor zvuka)

Pametna rasvjeta (detektor zvuka)

Policijska sirena i oznaka Starta

Policijska sirena i oznaka Starta

Pali – gasi

Pali – gasi

Daljinsko upravljanje rasvjetom

Daljinsko upravljanje rasvjetom

Pametna rasvjeta – Music reacting circuit

Pametna rasvjeta – Music reacting circuit

Anti-theft

Anti-theft

Connect IT Pametni hodnik

Connect IT Pametni hodnik

Protuprovalni sustav

Protuprovalni sustav

Pametni stan

Pametni stan

Pametni tanjurić za šalicu

Pametni tanjurić za šalicu

Pametna kuća s Arduinom

Pametna kuća s Arduinom

Pametna kuća

Pametna kuća

Protuprovalno svjetlo u ormaru

Protuprovalno svjetlo u ormaru

Pametna rasvjeta

Pametna rasvjeta

Pametne osvijetljene stube

Pametne osvijetljene stube

Svijetliš u noći

Svijetliš u noći

Careduino

Careduino

Rainclock

Rainclock

Pljeskalica

Pljeskalica

Zebra

Zebra

Pametna rasvjeta informatika

Pametna rasvjeta informatika

Pametna rasvjeta

Pametna rasvjeta

Signalizacija

Signalizacija

Pametna rasvjeta

Pametna rasvjeta

Svjetlo za ugođaj

Svjetlo za ugođaj

Pametna rasvjeta

Pametna rasvjeta

Snimanje filma s mobitelom uz pomoć pametne rasvjete

Snimanje filma s mobitelom uz pomoć pametne rasvjete

Pametna ulična rasvjeta

Pametna ulična rasvjeta

Neka bude svjetlo

Neka bude svjetlo

Emotion light

Emotion light

Gasi letriku!

Gasi letriku!

Svjetlosni komunikator

Svjetlosni komunikator

iHouse

iHouse

Pametna rasvjeta s Arduinom

Pametna rasvjeta s Arduinom

Pametna rasvjeta kuće

Pametna rasvjeta kuće

Model kuće s pametnom rasvjetom

Model kuće s pametnom rasvjetom

Pametna rasvjeta – Zaštita kuće od provalnika

Pametna rasvjeta – Zaštita kuće od provalnika

Pametna rasvjeta na pljeskalački pogon

Pametna rasvjeta na pljeskalački pogon

Pametna rasvjeta

Pametna rasvjeta

Uređaj za mjerenje količine svjetlosti, vlage i temperature

Uređaj za mjerenje količine svjetlosti, vlage i temperature

Pametna budilica

Pametna budilica

Ambijentalna rasvjeta

Ambijentalna rasvjeta

Pametna garaža

Pametna garaža

Laserski brojač ljudi

Laserski brojač ljudi

Pametna vanjska rasvjeta

Pametna vanjska rasvjeta

Pametna rasvjeta

Pametna rasvjeta

Blynk pametna rasvjeta sa ESP8266

Blynk pametna rasvjeta sa ESP8266

Rasvjeta u igraonici

Rasvjeta u igraonici

Svjetionik

Svjetionik

IoT pametna rasvjeta ovisno o vremenu dana

IoT pametna rasvjeta ovisno o vremenu dana

Arduino smart light switch

Arduino smart light switch

Slabo pokretne osobe

Slabo pokretne osobe

RGB mixer

RGB mixer

Pametna rasvjeta

Pametna rasvjeta

Zujalica i svjetlo na senzor

Zujalica i svjetlo na senzor

Žuta i zelena soba

Žuta i zelena soba

Pametna rasvjeta

Pametna rasvjeta

Ako upališ, ugasi!

Ako upališ, ugasi!

Upozorenje na upaljena svjetla

Upozorenje na upaljena svjetla

GPS rasvjeta

GPS rasvjeta

RGB svjetlo

RGB svjetlo

Pametan parking

Pametan parking

Priprema, pozor, sad

Priprema, pozor, sad

Disco light

Disco light

Aurora Borealis

Aurora Borealis

Pametni hladnjak

Pametni hladnjak

Pametna rasvjeta

Pametna rasvjeta

Pametna rasvjeta u kući

Pametna rasvjeta u kući

Noćna rasvjeta

Noćna rasvjeta

Noćni prozor

Noćni prozor

Otvori me, zatvori me

Otvori me, zatvori me

House and garden lights

House and garden lights

IOT_Rasvjeta_4

IOT_Rasvjeta_4

Smart rasvjeta

Smart rasvjeta

IOT-Stubišni automat

IOT-Stubišni automat

Lego Arduino pametna rasvjeta

Lego Arduino pametna rasvjeta

IOT_Rasvjeta_2

IOT_Rasvjeta_2

IOT_Rasvjeta_1

IOT_Rasvjeta_1

Svjetlo za bicikl

Svjetlo za bicikl