Pametna kuća s Arduinom

Tehnička škola, Bjelovar

Radi se o upravljanju kućnom rasvjetom pomoću Arduina. Mogu ga koristiti svi u svojim domovima. Namijenjen je lakšem i bržem upravljanju rasvjetom.

Izrada projekta

Ovdje vidimo Arduino sa spojenim pinovima na ostalo sklopovlje.

.

Prikazuje svjetla u kupaonici, hodniku i kuhinji. Cijeli uradak je spojen na eksperimentalnoj pločici.

Pomoću aplikacije Blynk smo uključili plavi segment RGB diode pritiskom na odgovarajuću tipku unutar aplikacije te ispisali boju na LCD zaslon.

Mobilna aplikacija

Prikazuje 6 gumbova za upravljanje rasvjetom. Aplikacija je razvijena u MIT-ovom App Inventoru. Pritiskom na gumbe Boravak, Soba1 i Soba2, otvara se poseban izbornik koji omogućuje promjenu boje svjetla u odabranoj prostoriji. Pritiskom na gumbe Hodnik, Kupaonica i Kuhinja samo se pale i gase svijetla u odabranoj prostoriji. Pri vrhu se nalazi mali text box u koji se upisuje IP adresa Arduina. U našem slučaju je to 192.168.43.150 (kod različitih Arduina različita je adresa). Ispred IP adrese potrebno je napisati http:// .

Prikazuje izbornik boja.

Shema projekta

Sve komponente smo spojili prema gornjoj shemi. Koristili smo tranzistore jer smo koristili shemu sličnu multipleksiranju i kako bi se ostvarilo strujno pojačanje(max. struja Arduina je 7mA). Na ovaj način se mijenjaju boje u prostorijama uz minimalan broj pinova.

Prilikom spajanja potrebno je paziti na polaritete LED dioda i na izvode tranzistora kako bi sklop ispravno radio.

Arduino program

#include               //uključivanje potrebnih arduino library-a kako bismo imali željene funkcije
#include            //za kompajlanje ovog programa potrebno je preuzeti WiFi101 library koja je dostupna na internetu
#include 
#include 
#include 
 
#include 

#define r 3                       //definicija konstante r koja je kratica od red(crvena)
#define g 4                       //definicija konstante g koja je kratica od green(zelena)
#define b 5                       //definicija konstante b koja je kratica od blue(plava)
#define boravak 6                 //definicija konstante boravak
#define soba1 7                   //definicija konstante soba1
#define soba2 8                   //definicija konstante soba2

char ssid[] = "chamil";           //spremanje imena wifi mreže u varijablu ssid(promijeniti u ime Vaše mreže)
char pass[] = "startrek";         //spremanje lozinke wifi mreže u varijablu pass(promijeniti u lozinku Vaše mreže)
//definiranje globalnih varijabli koje se koriste u programu
bool toggle_b = false;
bool toggle_c = false;
bool toggle_f = false;
int control;
 
int status = WL_IDLE_STATUS;
WiFiServer server(80);
 
void setup() {
  Serial.begin(9600);            //definiranje brzine komunikacije serijskog porta
  pinMode(0, OUTPUT);            //postavljanje pina 0 kao izlaz(kuhinja)
  pinMode(1, OUTPUT);            //postavljanje pina 1 kao izlaz(kupaonica)
  pinMode(2, OUTPUT);            //postavljanje pina 2 kao izlaz(hodnik)
  pinMode(r, OUTPUT);            //postavljanje pina r kao izlaz(crvena boja rgb ledica)
  pinMode(g, OUTPUT);            //postavljanje pina g kao izlaz(zelena boja rgb ledica)
  pinMode(b, OUTPUT);            //postavljanje pina b kao izlaz(plava boja rgb ledica)
  pinMode(boravak, OUTPUT);      //postavljanje pina boravak kao izlaz(soba boravak)
  pinMode(soba1, OUTPUT);        //postavljanje pina soba1 kao izlaz(soba soba1)
  pinMode(soba2, OUTPUT);        //postavljanje pina soba2 kao izlaz(soba soba2)
  while ( status != WL_CONNECTED) {  //dok varijabla status ne postane jednaka "spojeno"
    status = WiFi.begin(ssid, pass); //pokušavaj se spojiti na zadanu wifi mrežu
    delay(10000);                    //pričekaj 10 sekundi
  }
  server.begin();                //kada se spojiš pokreni server
  printWifiStatus();             //idi na funkciju printWifiStatus()
}
void loop() {
  WiFiClient client = server.available();            //definiraj lokalnu varijablu client kao WiFiClient i pridruži ju dostupnosti servera
 
  if (client) {                                      //ako je klijent dostupan
    Serial.println("new client");                    //ispiši "new client"
    String currentLine = "";                         //postavi lokalnu varijablu currentLune da bude tipa string i pridruži joj vrijednost ""
    while (client.connected()) {                     //ako je klijent spojen
      if (client.available()) {                      //i ako je dostupan
        char c = client.read();                      //definiraj lokalnu varijablu c kao char i isčitavaj što je došlo s klijenta
        Serial.write(c);                             //ispiši vrijednost varijable c
        if (c == '\n') {                             //ako je c jednako \n
 
          if (currentLine.length() == 0) {           //ako je duljina varijable currentLine jednaka 0
            client.println("HTTP/1.1 200 OK");       //klijentu pošalji "HTTP/1.1 200 OK"
            client.println("Content-type:text/html");//klijentu pošalji "Content-type:text/html"
            client.println();                        //ovo je potrebno ako se arduino upravlja iz web preglednika
            break;                                   //iziđi iz if 
          }
          else {                                     //inače currentLine = ""
            currentLine = "";
          }
        }
        else if (c != '\r') {                        //ako je c različito od \r
          currentLine += c;                          //currentLine = currentLine + c
        }
        receive(currentLine);                        //idi na funkciju receive sa parametrom currentLine
      }
    }
    client.stop();
    Serial.println("client disonnected");
  }
}
 
void printWifiStatus() { //definiranje funkcije printWifiStatus()
  //ispiši na serial monitoru ime mreže na koju si spojen
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());
 
  //ispiši na serial monitoru IP adresu wifi modula
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);
 
  //ispiši jakost signala mreže
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
  Serial.print("To see this program in action, type in Arduino Controller: http://");
  Serial.println(ip);
}

void receive(String inLine){          //definiraj funkciju receive i uvedi varijablu inLine kao string
  if (inLine.endsWith("GET /A")) {    //ako inLine završava na GET /A
    control = 1;                      //postavi varijablu control u 1
  }
  if (inLine.endsWith("GET /B")) {    //ako inLine završava na GET /B
    toggle_b = !toggle_b;             //invertiraj stanje varijable toggle_b
    digitalWrite(0, toggle_b);        //postavi pin 0 u stanje varijable toggle_b
  }
  if (inLine.endsWith("GET /C")) {    //ako inLine završava na GET /C
    toggle_c = !toggle_c;             //invertiraj stanje varijable toggle_c
    digitalWrite(1, toggle_c);        //postavi pin 1 u stanje varijable toggle_c
  }
  if (inLine.endsWith("GET /D")) {    //ako inLine završava na GET /D
    control = 2;                      //postavi varijablu control u 2
  }
  if (inLine.endsWith("GET /E")) {    //ako inLine završava na GET /E
    control = 3;                      //postavi varijablu control u 3
  }
  if (inLine.endsWith("GET /F")) {    //ako inLine završava na GET /F
    toggle_f = !toggle_f;             //invertiraj stanje varijable toggle_f
    digitalWrite(2, toggle_f);        //postavi pin 2 u stanje varijable toggle_f
  }
  switch(control){
    case 1:{                          //u slučaju da je control 1
      digitalWrite(boravak, HIGH);    //uključi boravak
      digitalWrite(soba1, LOW);       //isključi sobu 1
      digitalWrite(soba2, LOW);       //isključi sobu 2
      if(inLine.endsWith("GET /G")){  //ako inLine završava na GET /G
        digitalWrite(r, HIGH);        //uključi crvenu led
        digitalWrite(g, LOW);         //isključi zelenu i plavu
        digitalWrite(b, LOW);
      }
      if(inLine.endsWith("GET /H")){  //ako inLine završava na GET /H
        digitalWrite(r, LOW);         //isključi crvenu i plavu
        digitalWrite(g, HIGH);        //uključi zelenu
        digitalWrite(b, LOW);
      }
      if(inLine.endsWith("GET /I")){  //ako inLine završava na GET /I
        digitalWrite(r, LOW);         //isključi crvenu i plavu
        digitalWrite(g, LOW);
        digitalWrite(b, HIGH);        //uključi plavu
      }
      if(inLine.endsWith("GET /J")){  //ako inLine završava na GET /J
        digitalWrite(r, HIGH);        //uključi crvenu i zelenu (žuta)
        digitalWrite(g, HIGH);        //isključi plavu
        digitalWrite(b, LOW);
      }
      if(inLine.endsWith("GET /K")){  //ako inLine završava na GET /K
        digitalWrite(r, LOW);         //isključi crvenu
        digitalWrite(g, HIGH);        //uključi zelenu i plavu (cijan)
        digitalWrite(b, HIGH);
      }
      if(inLine.endsWith("GET /L")){  //ako inLine završava na GET /L
        digitalWrite(r, HIGH);        //uključi crvenu i plavu (magenta)
        digitalWrite(g, LOW);         //isključi zelenu
        digitalWrite(b, HIGH);
      }
      if(inLine.endsWith("GET /M")){  //ako inLine završava na GET /M
        digitalWrite(r, HIGH);        //uključi sve ledice (bijela)
        digitalWrite(g, HIGH);
        digitalWrite(b, HIGH);
      }
      if(inLine.endsWith("GET /N")){  //ako inLine završava na GET /N
        digitalWrite(r, LOW);         //isključi svjetlo
        digitalWrite(g, LOW);
        digitalWrite(b, LOW);
      }
      break;                          //iziđi iz case
    }
    case 2:{                          //u slučaju da je 2
      digitalWrite(boravak, LOW);     //isključi boravak
      digitalWrite(soba1, HIGH);      //uključi sobu 1
      digitalWrite(soba2, LOW);       //isključi sobu 2
      if(inLine.endsWith("GET /G")){  //ako inLine završava na GET /G
        digitalWrite(r, HIGH);        //uključi crvenu led
        digitalWrite(g, LOW);         //isključi zelenu i plavu
        digitalWrite(b, LOW);
      }
      if(inLine.endsWith("GET /H")){  //ako inLine završava na GET /H
        digitalWrite(r, LOW);         //isključi crvenu i plavu
        digitalWrite(g, HIGH);        //uključi zelenu
        digitalWrite(b, LOW);
      }
      if(inLine.endsWith("GET /I")){  //ako inLine završava na GET /I
        digitalWrite(r, LOW);         //isključi crvenu i plavu
        digitalWrite(g, LOW);
        digitalWrite(b, HIGH);        //uključi plavu
      }
      if(inLine.endsWith("GET /J")){  //ako inLine završava na GET /J
        digitalWrite(r, HIGH);        //uključi crvenu i zelenu (žuta)
        digitalWrite(g, HIGH);        //isključi plavu
        digitalWrite(b, LOW);
      }
      if(inLine.endsWith("GET /K")){  //ako inLine završava na GET /K
        digitalWrite(r, LOW);         //isključi crvenu
        digitalWrite(g, HIGH);        //uključi zelenu i plavu (cijan)
        digitalWrite(b, HIGH);
      }
      if(inLine.endsWith("GET /L")){  //ako inLine završava na GET /L
        digitalWrite(r, HIGH);        //uključi crvenu i plavu (magenta)
        digitalWrite(g, LOW);         //isključi zelenu
        digitalWrite(b, HIGH);
      }
      if(inLine.endsWith("GET /M")){  //ako inLine završava na GET /M
        digitalWrite(r, HIGH);        //uključi sve ledice (bijela)
        digitalWrite(g, HIGH);
        digitalWrite(b, HIGH);
      }
      if(inLine.endsWith("GET /N")){  //ako inLine završava na GET /N
        digitalWrite(r, LOW);         //isključi svjetlo
        digitalWrite(g, LOW);
        digitalWrite(b, LOW);
      }
      break;                          //iziđi iz case
    }
    case 3:{                          //u slučaju da je 3
      digitalWrite(boravak, LOW);     //isključi boravak
      digitalWrite(soba1, LOW);       //isključi sobu 1
      digitalWrite(soba2, HIGH);      //uključi sobu 2
      if(inLine.endsWith("GET /G")){  //ako inLine završava na GET /G
        digitalWrite(r, HIGH);        //uključi crvenu led
        digitalWrite(g, LOW);         //isključi zelenu i plavu
        digitalWrite(b, LOW);
      }
      if(inLine.endsWith("GET /H")){  //ako inLine završava na GET /H
        digitalWrite(r, LOW);         //isključi crvenu i plavu
        digitalWrite(g, HIGH);        //uključi zelenu
        digitalWrite(b, LOW);
      }
      if(inLine.endsWith("GET /I")){  //ako inLine završava na GET /I
        digitalWrite(r, LOW);         //isključi crvenu i plavu
        digitalWrite(g, LOW);
        digitalWrite(b, HIGH);        //uključi plavu
      }
      if(inLine.endsWith("GET /J")){  //ako inLine završava na GET /J
        digitalWrite(r, HIGH);        //uključi crvenu i zelenu (žuta)
        digitalWrite(g, HIGH);        //isključi plavu
        digitalWrite(b, LOW);
      }
      if(inLine.endsWith("GET /K")){  //ako inLine završava na GET /K
        digitalWrite(r, LOW);         //isključi crvenu
        digitalWrite(g, HIGH);        //uključi zelenu i plavu (cijan)
        digitalWrite(b, HIGH);
      }
      if(inLine.endsWith("GET /L")){  //ako inLine završava na GET /L
        digitalWrite(r, HIGH);        //uključi crvenu i plavu (magenta)
        digitalWrite(g, LOW);         //isključi zelenu
        digitalWrite(b, HIGH);
      }
      if(inLine.endsWith("GET /M")){  //ako inLine završava na GET /M
        digitalWrite(r, HIGH);        //uključi sve ledice (bijela)
        digitalWrite(g, HIGH);
        digitalWrite(b, HIGH);
      }
      if(inLine.endsWith("GET /N")){  //ako inLine završava na GET /N
        digitalWrite(r, LOW);         //isključi svjetlo
        digitalWrite(g, LOW);
        digitalWrite(b, LOW);
      }
      break;                          //iziđi iz case
    }
  }
}

Arduino program ovoga projekta možete preuzeti ovdje.

Autori

Projekt je izradio Josip Matić uz mentorstvo Ljudevita Sakala iz Tehničke škole u Bjelovaru.

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

Daljinsko upravljanje rasvjetom

Daljinsko upravljanje rasvjetom

Pali – gasi

Pali – gasi

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