Pametna vanjska rasvjeta

Elektrotehnička i ekonomska škola Nova Gradiška

Izrađeno je upravljanje vanjskom rasvjetom ceste i parka putem mobilne aplikacije. Kao model odabran je park u Starom Petrovom Selu, rodnom mjestu učenika Ivana Paunova. Park je podijeljen u 3 sektora: rasvjeta ceste, te dva segmenta parka. Pomoću LED dioda simuliraju se pojedine svjetiljke u parku i na cesti, a pomoću modula sa RGB diodom simulira se boja rasvjete koja može biti ugrađena u park. Napravljena su tri moda rada: ručni, putem senzora i putem timera. U ručnom načinu korisnik sam putem aplikacije pali ili gasi pojedini segment rasvjete. Paljenje rasvjete putem senzora odvija se preko modula sa fotootpornikom, koji mjeri razinu dnevne svjetlosti. U trećem modu korisnik u aplikaciji postavlja vrijeme paljenja i gašenja rasvjete. Pomoću zeRGBa widgeta korisnik odabire boju rasvjete u parku te preko klizača postavlja intenzitet svjetlosti rasvjete. Ove opcije se mogu koristiti u sva tri moda rada.

Video snimka

Izrada projekta

Slika prikazuje smještaj elektronike u projektu.

Mobilna aplikacija

Pomoću menu widgeta odabire se mod rada: ručno, senzor ili timer. Pomoću zeRGBa widgeta odabire se boja rasvjete u parku a pomoću slider widgeta odabire se intenzitet rasvjete. Ove opcije su dostupne u sva tri moda rada. Za ručni mod koriste se 3 button widgeta za paljenje pojedinog segmenta rasvjete. RGB modul povezan je sa park1 button widgetom. Ako se odabire senzor mod rasvjete omogućuje se automatsko paljenje rasvjete kada nastane mrak i gašenje rasvjete kada izađe sunce. Za timer mod koriste se RTC i time input widget. RTC se koristi za očitanje trenutnog vremena a time input widget omogućuje korisniku postavljanje vremena paljenja i gašenja rasvjete.

Shema projekta

Na pin D7 spojene su LED diode koje predstavljaju rasvjetu ceste. Na pin D8 spojene su LED diode prvog dijela parka, a na D9 LED diode drugog dijela parka. LED RGB modul spojen je na pinove D3,D4 i D5. Vrijednost fotootpornika se očitava preko ulaza A6.

Shemu ovoga projekta možete preuzeti ovdje.

Arduino program

#define BLYNK_PRINT /*

  
  #define BLYNK_PRINT Serial
  #include 
  #include 
  #include 
  #include 
  #include 
  #include 
  /* broj pina na koji se spajaju LED diode i senzor*/
  int ledR = 3, ledG = 4, ledB = 5;
  int ledCesta = 7, ledPark1 = 8, ledPark2 = 9;
  int sensor = A6;
  /*inicijalizacija varijabli korištenih u projektu */
  int R, G, B;                // vrijednosti za RGB diodu primljene iz zeRGBa widgeta
  bool cesta, park1, park2;   // varijable za spremanje stanja buttona
  int mode;                   // u varijablu mode se sprema nacin rasvjete 1-rucno, 2- senzor, 3-timer
  int foto,slider = 50;       //ocitanje analognog ulaza sa fotootpornika i slider widgeta
  bool isFirstConnect = 1;     //pomoćna varijabla za početno spajanje na Blynk server
  long startsecondswd;        //varijabla za pocetno vrijeme iz time input widgeta    
  long stopsecondswd;         //varijabla za konačno vrijeme iz time input widgeta    
  long nowseconds;            //varijabla za trenutno vrijeme iz RTC widgeta    
  /* podatci o wifi mreži i tokenu projekta  */
  char auth[] = "7f3363218b4b4184b40e6ee47d95c036"; 
  char ssid[] = "Arduino";
  char pass[] = "rasvjeta";
  
  
  SimpleTimer timer; //inicijalizacija timer objekta, za periodičko čitanje virtualnih pinova
  WidgetRTC rtc; //inicijalizacija RTC objakta
  

  
  void setup()
  {
    /* inicijalizacija ulaza i izlaza*/
    pinMode(ledR, OUTPUT);
    pinMode(ledG, OUTPUT);
    pinMode(ledB, OUTPUT);
    pinMode(ledCesta, OUTPUT);
    pinMode(ledPark1, OUTPUT);
    pinMode(ledPark2, OUTPUT);
    pinMode(sensor, INPUT);
   /*inicijalizacija serijske komunikacije - korištena za testiranje*/
    Serial.begin(9600);
  
    
    Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442); //spajanje na Blynk server
    rtc.begin();                                            //pokretanje RTC objekta
    timer.setInterval(10000L, syncVrijeme);                 //postavljanje vremena na 10s - za citanje virtualnih pinova
  
  }
  /* funkcija koja se pokreće kada se Arduino prvi put spoji na server, pomoću naredbe Blynk.syncAll()
  očitava sve vrijednosti sa virtualnih pinova*/
  BLYNK_CONNECTED()
  {
    if (isFirstConnect)
    {
      Blynk.syncAll();
      isFirstConnect = false;
    }
  }
  
  
  void loop()
  {
    Blynk.run();            //pokretanje Blynk komunikacije
    timer.run();            //pokretanje timera
    foto = analogRead(A6);  //očitanje vrijednosti analognog pina sa fotootpornika
   
    if (foto < 200 && mode == 2) //ako je vrijednost sa fotootpornika manja od 200 i odabran je automatski mod { //ugasi svu rasvjetu analogWrite(ledCesta, 0); analogWrite(ledPark1, 0); analogWrite(ledPark2, 0); analogWrite(ledR, 0); analogWrite(ledG, 0); analogWrite(ledB, 0); } else if (mode == 2 && foto >= 200)  //ako je vrijednost veća od 200  upali svu rasvjetu
    {
      analogWrite(ledCesta, slider);    // upali segmente rasvjete intenzitetom postavljenim preko slider widgeta
      analogWrite(ledPark1, slider);
      analogWrite(ledPark2, slider);
      analogWrite(ledR, R);             //upali RGB diodu prema boji namještenoj preko zeRGBa widgeta
      analogWrite(ledG, G);
      analogWrite(ledB, B);
    }
  
  }
  void syncVrijeme() //funkcija kojoj smo prethodno pomoću timera namjestili ponavljanje svakih 10s
  {
    if (mode == 3)  //ako je odabran timer mod rasvjete osvježava vrijeme za paljenje i gašenje rasvjete
    {
      Blynk.syncVirtual(V4);
    }
  }
  
  /*              funkcije za očitanje virtualnih pinova, pokreću se kada se promjeni stanje na widgetima      */
  
  /*očitavanje vrijednosti virtualnog pina VO.
  Na VO spojen je menu widget, odabir se sprema u varijablu mode: 1-ručno, 2-senzor, 3- timer */ 
  BLYNK_WRITE(V0) 
  {
    mode = param.asInt();
  
  }
  /*očitavanje vrijednosti virtualnog pina V1.
  Na V1 spojen je button widget, pomoću kojeg se upali ili ugasi rasvjeta ceste u ručnom modu */ 
  BLYNK_WRITE(V1) 
  {
    cesta = param.asInt(); 
    if (cesta == 1 && mode == 1) //ako je button widget pritisnut i odabran je ručni mod
    {
    analogWrite(ledCesta, slider); //upali rasvjetu ceste intenzitetom namještenim sliderom
  }
  if (cesta == 0 && mode == 1) //ako button widget nije pritisnut
  {
    analogWrite(ledCesta, 0); //ugasi rasvjetu ceste
  }
}

 /*očitavanje vrijednosti virtualnog pina V2.
  Na V2 spojen je button widget, pomoću kojeg se upali ili ugasi rasvjeta prvog dijela parka i LED dioda u ručnom modu */ 
BLYNK_WRITE(V2) 
{
  park1 = param.asInt();
  if (park1 == 1 && mode == 1) //ako je button widget pritisnut i odabran je ručni mod
  {
    analogWrite(ledPark1, slider); //upali rasvjetu parka intenzitetom namještenim sliderom
    analogWrite(ledR, R);          //upali RGB diodu, prema vrijednostima iz zeRGBa widgeta
    analogWrite(ledG, G);
    analogWrite(ledB, B);
  }
  if (park1 == 0 && mode == 1) //ako button widget nije pritisnut
  {
    analogWrite(ledPark1, 0); //ugasi rasvjetu parka i RGB diodu
    analogWrite(ledR, 0);
    analogWrite(ledG, 0);
    analogWrite(ledB, 0);
  }
}
/*očitavanje vrijednosti virtualnog pina V3.
  Na V3 spojen je button widget, pomoću kojeg se upali ili ugasi rasvjeta drugog dijela parka u ručnom modu 
  korištena identična logika kao i za rasvjetu ceste*/ 
BLYNK_WRITE(V3) 
{ 
  park2 = param.asInt();
  if (park2 == 1 && mode == 1)
  {
    analogWrite(ledPark2, slider);
  }
  if (park2 == 0 && mode == 1)
  {
    analogWrite(ledPark2, 0);
  }
}
/*očitanje vrijednosti virtualnog pina V5
Na V5 spojen je slider widget, pomoću kojeg se namješta intenzitet svjetljenja rasvjete u svim modovima*/
BLYNK_WRITE(V5) 
{
  slider = param.asInt();
  Blynk.syncVirtual(V1); //nakon spremanja vrijednosti slidera, ponovno se očitavaju V1, V2 i V3, kako bi se mogao
  Blynk.syncVirtual(V2);  // promjeniti intenzitet LED dioda
  Blynk.syncVirtual(V3);  //potrebno zato što BLYNK_WRITE osvježava vrijednosti samo kada nastaje promjena na widgetu
                          // a unutar BLYNK_WRITE se upravlja LED diodama

}

/*očitanje vrijednosti virtualnog pina V6
Na V6 spojen je zeRGBa widget, pomoću kojeg se namješta boja RGB rasvjete u svim modovima*/
BLYNK_WRITE(V6) //rgb led
{
  R = param[0].asInt(); //R komponenta boje
  G = param[1].asInt(); //G komponenta boje
  B = param[2].asInt(); //B komponenta boje
  Blynk.syncVirtual(V2); // osvježavanje vrijednosti buttona2 i timera, kako bi se mogla promjeniti boja LED diode
  Blynk.syncVirtual(V4);
}

/*očitanje vrijednosti virtualnog pina V4
Na V6 spojen je time input widget, pomoću kojeg se namješta vrijeme paljenja i gašenja rasvjete u timer modu*/
/* odabrano vrijeme se uspoređuje sa trenutnim vremenom dobivenim preko RTC widgeta te u ovisnosti o postavljenom vremenu 
upali ili ugasi rasvjetu*/ 
BLYNK_WRITE(V4) 
{
  TimeInputParam t(param);      //spremanje odabranih vremena u t objekt
  nowseconds = ((hour() * 3600) + (minute() * 60) + second()); // pretvaranje trenutnog vremena u sekunde
  
  if (t.hasStartTime())  //ako je u widgetu postavljeno vrijeme paljenja rasvjete
  {
    startsecondswd = (t.getStartHour() * 3600) + (t.getStartMinute() * 60); // pretvaranje vremena paljenja rasvjete u sekunde
    
    if (nowseconds >= startsecondswd && mode == 3) // ako je trenutno vrijeme veće od vremena paljenja i odabran je timer mod
    {
      analogWrite(ledCesta, slider); // upali svu rasvjetu
      analogWrite(ledPark1, slider);
      analogWrite(ledPark2, slider);
      analogWrite(ledR, R);
      analogWrite(ledG, G);
      analogWrite(ledB, B);
    }

  }
  if (t.hasStopTime()) //ako je u widgetu postavljeno vrijeme gašenja rasvjete
  {
    stopsecondswd = (t.getStopHour() * 3600) + (t.getStopMinute() * 60); // pretvaranje vremena gašenja rasvjete u sekunde
    
    if (nowseconds >= stopsecondswd && nowseconds <= startsecondswd && mode == 3) //ako je trenutno vrijeme u intervalu između gašenja i paljenja rasvjete
    {
      analogWrite(ledCesta, 0); // ugasi svu rasvjetu
      analogWrite(ledPark1, 0);
      analogWrite(ledPark2, 0);
      analogWrite(ledR, 0);
      analogWrite(ledG, 0);
      analogWrite(ledB, 0);
    }
    if (nowseconds <= stopsecondswd && mode == 3)  // ako je trenutno vrijeme manje od vremena gašenja rasvjete
    {
      analogWrite(ledCesta, slider); //upali svu rasvjetu
      analogWrite(ledPark1, slider);
      analogWrite(ledPark2, slider);
      analogWrite(ledR, R);
      analogWrite(ledG, G);
      analogWrite(ledB, B);
    }

  }
}

Arduino program ovoga projekta možete preuzeti ovdje.

Autori

Projekt su izradili Ivan Paunov i Filip Cica uz mentorstvo Borisa Grgića iz Elektrotehnička i ekonomska škola Nova Gradiška.

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