Model kuće s pametnom rasvjetom

Tehnička škola Daruvar

Osim klasične rasvjete u svakoj od prostorija u kući koja se aktivira pritiskom tipkala postavljenog iza prolaza u prostoriju, rasvjeta se jednako tako pali u svakoj od prostorija pomoću mobilne aplikacije. Vanjska rasvjeta na prilazu u kuću se prvenstveno automatski pali s malim intenzitetom kada vanjska svjetlost padne ispod odgovarajuće razine. Nailaskom osobe prilazu kuće aktivira se optički senzor i rasvjeta se pali punim intenzitetom. Dolaskom do ulaznih vrata aktivira se ultrazvučni mjerač udaljenosti te nakon ulaska osobe u kuću vanjska se rasvjeta ponovno prebacuje na slabi intenzitet. Rasvjeta u dnevnom boravku ima mogućnost regulacije intenziteta rasvjete pomoću daljinskog upravljača i pomoću mobilne aplikacije. U projektu je prvenstveno zamišljeno i pasivno osvjetljivanje kućom pomoću automatskog podizanja i spuštanja roleta. No pojavio se problem s mehanikom i prijenosom kružnog gibanja na izrađeni model, tako da taj dio ne radi.

Video snimka

Izrada projekta

Prilaz ka kući, senzor prolaza nije aktiviran led diode gore smanjenim intenzitetom. Aktivacija se vrši optičkim senzorom smještenim u lijevom zidiću. Iznad ulaznih vrata nalazi se ultrazvučni mjerač udaljenosti koji s kašnjenjem vrši gašenje vanjske rasvjete nazad na slabiji intenzitet. Isti senzor vrši uključenje rasvjete punim intenzitetom i gašenje iste aktivacijom optičkog senzora na izlasku iz prilaza.

Tipkala koja predstavljaju sklopke, na ulazu u svaku prostoriju. Pritiskom na njih vrši se paljenje i gašenje rasvjete u prostoriji.

Izgled MKR100 razvojne platforme sa spojenim ulazima i izlazima, izvedbama napajanja svih elemenata. Mosfet tranzistor za aktivaciju prilazne rasvjete na napajanje 12V.

Nadalje primjećuje se i infracrveni senzor koji omogućuje upravljanje intenzitetom rasvjete unutar prostorije gdje je smješten MKR100.

Izgled mehanizma i makete automatske rolete, nažalost neuspjele, preslabi motor, ne uspije nikako pokrenuti mehanizam uz PWM regulaciju.

Mobilna aplikacija

Na slici ja svaki gumb jasno opisan s pripadajućom oznakom.

Shema projekta

Prikaz svih spojenih elemenata na MKR 1000 razvojnu platformu.

Arduino program

#define BLYNK_PRINT Serial

//Ucitavamo biblioteke
#include 
#include 
#include 
#include 

// Autorizacijski kod za aplikaciju Blynk
char auth[] = "d84613170f9c40ea8b781fc07b3e2242";

// Podatci za WiFi
char ssid[] = "Hotspotzabudale";
char pass[] = "lozinka1234";

// ----- Inicializacija senzora -----
const int senzorUlaz = 1;

// ----- Inicializacija IR Senzora
int IRpin = 9;

// ----- Inicializacija ledica -----
const int ledBorDim = 2;
const int ledKuh = 6;
const int ledTrp = 7;
const int ledKup = 8;
const int lediceUlaz = 5;
const int ledSpav = 10;

// ----- Ultrasonic senzor -----
const int trigPin = 4;
const int echoPin = 0;

// ----- Foto Otpornik -----
const int fotoOtp = A2;

// ----- Inicializacija gumbova -----
const int gumbKuh = 11;
const int gumbKup = 12;
const int gumbSpav = 13;
const int gumbBor = 14;

// ----- Kontrolne varijable -----
//Stanje svjetlecih dioda
int stanjeLedKuh = 0;
int stanjeLedKup = 0;
int stanjeLedBor = 0;
int jacinaLedBor = 0;
int stanjeLedSpav = 0;
int stanjeLedUlaz = 0;
//Stanje gumbova
int gumbStanjeKuh = 0;
int gumbStanjeSpav = 0;
int gumbStanjeBor = 0;
int gumbStanjeKup = 0;
//Stanje senzora na ulazu
int stanjeSenzorUlaz = 0;

//Udaljenost na ultrasonicnom senzoru
long trajanje;
int udaljenost;

//Fotooptornik
int fotoVrijednost = 0;

//IR kontrola
IRrecv irrecv(IRpin);
decode_results signals;

void setup()
{
// ----- Inicijalizacija izlaza
  pinMode(ledBorDim, OUTPUT);
  pinMode(ledKuh, OUTPUT);
  pinMode(ledKup, OUTPUT);
  pinMode(lediceUlaz, OUTPUT);
  pinMode(ledSpav, OUTPUT);
// ----- Inicializacija gumbova
  pinMode(gumbKuh, INPUT_PULLUP);
  pinMode(gumbKup, INPUT_PULLUP);
  pinMode(gumbSpav, INPUT_PULLUP);
  pinMode(gumbBor, INPUT_PULLUP);
// ----- Inicijalizacija ultrazvucnog senzora
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  
  // Debug console
  Serial.begin(9600);
  //Povezivanje na WiFi i na aplikaciju Blynk
  Blynk.begin(auth, ssid, pass);

  irrecv.enableIRIn(); //Omogucavamo IR prijemnik
}

void loop()
{
  //Pozivamo funkcije koje trebaju u petlji raditi
  Blynk.run();
  gumbKuhinja();
  gumbKupaonica();
  gumbSpavaca();
  gumbBoravak();
  ulazKuce();
  
  //U ovome dijelu ocitavamo koji gumb je pritisnut i
  //zatim odlucujemo sto zelimo napraviti s obzirom na to
  //koji je gumb pritisnut na daljinskom upravljacu
  if (irrecv.decode(&signals)) {
       //Serial.println(signals.value);
       irrecv.resume(); // Uzmi slijedeci signal
  }
  if (signals.value == 16754775) //Usporedujemo vrijednost dobivenog signala i trazenog
  {//Ako se signal poklapa izvrsavamo sljedeci kod
    if (jacinaLedBor < 225) //Provjeravamo dali je svjetlost manja od 225 { jacinaLedBor = jacinaLedBor + 25; analogWrite(ledBorDim, jacinaLedBor); //Povecavamo jacinu PWM signala za ledBorDim za 25 } } else if (signals.value == 16769055) //Usporedujemo vrijednost dobivenog i trazenog signala { //Ako vrijednost odgovara izvrsavamo slijedeci kod if (jacinaLedBor > 0) //Provjeravamo dali je svjetlost veca od 0
    {
    jacinaLedBor = jacinaLedBor - 25;
    analogWrite(ledBorDim, jacinaLedBor);
    //Smanjujemo jacinu PWM signala za ledBorDim za 25
    }
  }
  //Serial.print("jacinaLedBor: ");
  //Serial.println(jacinaLedBor);
  signals.value = 0;
}

//Slijedeci kod se ponavlja za svaki gumb koji imamo u aplikaciji BLYNK
//BLYNK_WRITE govori da cekamo da se dogodi promjena u aplikaciji na portu V3
//zatim sa paramnasInt() povlacimo vrijednost gumba sa aplikacije i primjenjujemo ga na lokalnu varijablu
//posto se prakticni indenticni kod ponavlja za svaki gumb necu svaku ovu funkciju ponovo objasnjavati red za redom

//Ledica kuhinja
BLYNK_WRITE(V3)
{
  int pinValue = param.asInt(); //Pinvalue postavljamo da bude vrijednost ono sto postavimo na aplikaciji
  //Serial.print("ledKuh = "); //Ispis na ekran trenutno stanje
  //Serial.println(pinValue);
  if (pinValue == 1) //Ako je gumb presao u stanje 1/On
  {
    digitalWrite(ledKuh, HIGH); //Ovom funkcijom palimo ledice
    stanjeLedKuh = 1; //Postavljamo kontrolnu varijablu na 1 kako bi kasnije mogli saznati dali ledice rade
  } if (pinValue == 0) //Ako je gumb presao u stanje 0/Off
  {
    digitalWrite(ledKuh, LOW);  //Ovom funkcijom gasimo ledice
    stanjeLedKuh = 0; //Postavljamo kontrolnu varijablu u stanje 0 kako bi kasnije mogli saznat dali ledice rade
  }
}

//Ledica za kupaonicu
BLYNK_WRITE(V5)
{
  int pinValue = param.asInt(); //Pinvalue postavljamo da bude vrijednost ono sto postavimo na aplikaciji
  Serial.print("ledKup = "); //Ispis na ekran trenutno stanje
  Serial.println(pinValue);
  if (pinValue == 1)
  {
    digitalWrite(ledKup, HIGH); //Promjena stanja na izlazu arduina
    stanjeLedKup = 1;
  } if (pinValue == 0)
  {
    digitalWrite(ledKup, LOW); //Promjena stanja na izlazu arduina
    stanjeLedKup = 0;
  }
}

//Paralelni spoj ledica na ulazu
BLYNK_WRITE(V6)
{
  int pinValue = param.asInt(); //Pinvalue postavljamo da bude vrijednost ono sto postavimo na aplikaciji
  Serial.print("lediceUlaz = "); //Ispis na ekran trenutno stanje
  Serial.println(pinValue);
  if (pinValue == 1)
  {
    digitalWrite(lediceUlaz, HIGH); //Promjena stanja na izlazu arduina
    stanjeLedUlaz = 1;
  } if (pinValue == 0)
  {
    digitalWrite(lediceUlaz, LOW); //Promjena stanja na izlazu arduina
    stanjeLedUlaz = 0;
  }
}

//Dimmer za Boravak
BLYNK_WRITE(V1)
{
  int pinValue = param.asInt(); //Ucitamo vrijednost
  //Serial.print("Dimmer vrijednost: "); //Ispisemo na serial
  //Serial.println(pinValue);
  analogWrite(ledBorDim, pinValue); //Na izlaz postavljamo vrijednost
  if (pinValue == 0) //Ako je vrijednost 0 to znaci da je zaruljica ugasena
  {
    Blynk.virtualWrite(V10, 0); //Ovom funkcijom mozemo pisati vrijednosti U aplikaciju umjesto da citamo samo iz aplikacije kako smo do sad radili
    stanjeLedBor = 0;
  } else if (pinValue > 0) //Ako je vrijednost makar 1 znaci da zaruljica radi
  {
    Blynk.virtualWrite(V10, 1); //Ponovo pisemo vrijednost U aplikaciju kako bi iskljucili gumb
   stanjeLedBor = 1;
  }
}

//Button za boravak
BLYNK_WRITE(V10)
{
  int pinValue = param.asInt(); 
  if (pinValue == 1) //Ako je na gumbu vrijednost 1/On znaci da zaruljica radi na najjacem intenzitetu
  {
    analogWrite(ledBorDim, 255);
    Blynk.virtualWrite(V1, 255);
    stanjeLedBor = 1;
  } if (pinValue == 0) //Ako je na gumbu vrijednost 0/Off znaci da je zaruljicu gasimo tj. postavljamo na najnizi intenzitet
  {
    analogWrite(ledBorDim, 0);
    Blynk.virtualWrite(V1, 0);
    stanjeLedBor = 0;
  }
}

//Nakon sto se pozove ova funkcija ocitavamo vrijednost sa gumba i ako smo saznali
//da je gumb pritisnut zelimo da izmjenimo vrijednost na izlazu.
//Ako su svijetla upaljena zelimo ih ugasiti i obrnuto
//Takoder na aplikaciji mjenjamo odgovarajuci gumb u odgovarajuce stanje
//Npr. Ugasimo li kuhinju, gumb za kuhinju u aplikaciji takoder postavimo u stanje 0

//Jednaki kod se ponavlja za svaki slijedeci gumb pa necu ponovo komentirati svaki red

void gumbKuhinja()
{
  gumbStanjeKuh = digitalRead(gumbKuh); //Ocitavamo vrijednost gumba
  if (gumbStanjeKuh == LOW) //Ako je gumb pritisnut
  {
    if(stanjeLedKuh == 1) //Ako su ledice trenutno upaljene
    {
      digitalWrite(ledKuh, LOW); //ugasi ledice u kuhinji
      Blynk.virtualWrite(V3, 0); //Promjeni stanje gumba u aplikaciji za kuhinju u 0/Off
      //Serial.println("Ledica na V3/D6 je LOW"); //ispisi na Serial Monitor da je promjenjena vrijednost
      stanjeLedKuh = 0; //Promjeni kontrolnu varijablu za stanje ledica u kuhinju u 0

    } else if (stanjeLedKuh == 0) //Ako su ledice trenutno ugasene
    {
      digitalWrite(ledKuh, HIGH); //Upali ledicu u kuhinji
      Blynk.virtualWrite(V3, 1); //Promjeni stanje gumba u aplikaciji za kuhinju u 1/On
      //Serial.println("Ledica na V3/D6 je HIGH"); //Ispisi na Serial Monitor promjenu stanja
      stanjeLedKuh = 1; //Promjni kontrolnu varijablu za stanje ledica u kuhinji

    }
    delay(100); //Pauziraj program 100ms
  }
}

//Gumb za kupaonicu
void gumbKupaonica()
{
  gumbStanjeKup = digitalRead(gumbKup); //Ocitavamo vrijednost
  if (gumbStanjeKup == LOW)
  {
    if(stanjeLedKup == 0)
    {
      digitalWrite(ledKup, HIGH);
      Blynk.virtualWrite(V5, 1);
      //Serial.println("Ledica na V5/D8 je AKTIVNA");
      stanjeLedKup = 1;
      
    } else if (stanjeLedKup == 1)
    {
      digitalWrite(ledKup,LOW );
      Blynk.virtualWrite(V5, 0);
      //Serial.println("Ledica na V5/D8 je UGASENA");
      stanjeLedKup = 0;
    }
    delay(100);
  }
}

//Gumb za spavacu
void gumbSpavaca()
{
  gumbStanjeSpav = digitalRead(gumbSpav); //Ocitavamo vrijednost
  if (gumbStanjeSpav == LOW)
  {
    if(stanjeLedSpav == 1)
    {
      digitalWrite(ledSpav, LOW);
      Blynk.virtualWrite(V6, 0);
      //Serial.println("Ledica na V6/D10 je LOW");
      stanjeLedSpav = 0;
    } else if (stanjeLedSpav == 0)
    {
      digitalWrite(ledSpav, HIGH);
      Blynk.virtualWrite(V6, 1);
      Serial.println("Ledica na V6/D10 je HIGH");
      stanjeLedSpav = 1;
    }
    delay(100);
  }
}

void gumbBoravak()
{
  gumbStanjeBor = digitalRead(gumbBor);
  if (gumbStanjeBor == LOW)
  {
    
    if(stanjeLedBor == 1)
    {
      analogWrite(ledBorDim, 0);
      Blynk.virtualWrite(V10, 0);
      Blynk.virtualWrite(V1, 0);
      Serial.println("Ledica na V1/D2 je 0");
      stanjeLedBor = 0;
    } else if (stanjeLedBor == 0)
    {
      analogWrite(ledBorDim, 255);
      Blynk.virtualWrite(V10, 1);
      Blynk.virtualWrite(V1, 255);
      Serial.println("Ledica na V1/D2 je 255");
      stanjeLedBor = 1;
    }
    delay(200);
  }
}

void ulazKuce()
{
  //ocitavamo vrijednost ultrasonicnog senzora 
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  trajanje = pulseIn(echoPin, HIGH);

  //Racunamo udaljenost u cm po slijedecoj formuli
  udaljenost = trajanje*0.034/2;

  //Ocitavamo vrijednost foto otpornika
  fotoVrijednost = analogRead(fotoOtp);
  Serial.println(fotoVrijednost);
      
  //niz provjera kako bi uvrdili dali korisnik dolazi
  //kuc i da treba upaliti ledice na ulazu ili dali
  //korisnik odlazi pa treba upaliti svjetla ako je vani mrak
        
  if (fotoVrijednost > 350) //Provjeravamo dali je noc
  {//Ako je noc...
    if(stanjeLedUlaz == 0){analogWrite(lediceUlaz, 25);} //Pobrinjavamo se da ledice cijelu noc barem malo svijetle
    stanjeSenzorUlaz = digitalRead(senzorUlaz); //Ocitavamo Foto senzor na ulazu u kucu
    //Serial.print("Stanje senzora na ulazu:");
    //Serial.println(stanjeSenzorUlaz); 
    if (stanjeSenzorUlaz == LOW) //Ako je senzor na ulazu aktivan
    {
      if(stanjeLedUlaz == 0) //Ako su ledice na ulazu ugasene
      {
        analogWrite(lediceUlaz, 255); //Palimo ledice na ulazu na najveci intenzitet 
        Serial.println("Vani je noc, sensor je aktivan i ledice su ugasene pa ih palimo");
        stanjeLedUlaz = 1; //Mjenjamo kontrolnu varijablu za stanje ledica na ulazu u kucu u 1/On
      } else if (stanjeLedUlaz == 1) //Ako su ledicu na ulazu upaljene
      {
        analogWrite(lediceUlaz, 25); //Upali ledice na najveci intenzitet
        Serial.println("Vani je noc, sesnor je aktivan i ledice su upaljene pa ih gasimo");
        stanjeLedUlaz = 0; //Mjenjamo kontronu varijablu za stanje ledica na ulazu u kucu u 0/Off
      }
      delay(750); //Pauziraj 750ms
     //kraj provjere ako je sensor aktivan
    }else if (udaljenost < 10) //Ako stojimo ispod ultrasonicnog senzora
    {
      if (stanjeLedUlaz == 0) //Ako su ledice na ulazu ugasene
      {
        analogWrite(lediceUlaz, 255); //Palimo ledice na najveci intenzitet
        Serial.println("Vani je noc, udaljenost manja od 8 i ledice ugasene pa ih palimo");
        stanjeLedUlaz = 1; //Mjenjamo kontrolnu varijablu za ledice na ulazu u stanje 1/On
      } else if (stanjeLedUlaz == 1) //Ako su ledice na ulazu upaljene
      {
        /* Razlog zasto pauziramo 10s je jer smatramo da korisnik treba vremena dok otkljuca kucu 
        ude u nju i zatvori vrata i za sve to treba vremena pa mislimo da je 10s dovoljno vremena za 
        sve to kad dodemo do vrata */
        delay(5000); //Pauziraj 5s
        analogWrite(lediceUlaz, 25); //Postavi ledice na ulazu na slijedeci intenzitet (25)
        Serial.println("Vani je noc, udaljenost manja od 8 i ledice rade pa ih gasimo.");
        stanjeLedUlaz = 0; //mjenjamo kontrolnu varijablu za stanje ledica na ulazu u 0/Off
      }
    } // kraj provjere udaljenosti
    delay(750); //Pauziraj 750ms
  } else if (fotoVrijednost < 350)// kraj provjere fotoVrijednost
  {
    analogWrite(lediceUlaz, 0); //Vani je dan i nema potrebe da rade ledice
  }
} //kraj funkcije ulazKuce()




Arduino program ovoga projekta možete preuzeti ovdje.

Autori

Projekt su izradili Bruno Řehak , Luka Vavra i Teo Opić uz mentorstvo Tomislava Krala iz Tehničke škole Daruvar.

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