Pametna ulična rasvjeta

Tehnička škola Bjelovar

Projekt pokazuje način rada ulične rasvjete, koja se može koristiti na cestama izvan gradova pri čemu bi se štedjela električna energija. Rasvjeta ima više načina rada kako bi se pokazala kakve se može kontrola imati nad takvom rasvjetom.

Video snimka

Izrada projekta

Izrada bandera i provlačenje žica kroz bandere.

Nakon što smo napravili sve bandere i provukli žice, namontirali smo sve bandere na postolje, provukli žice i provjerili radi li sve.

Spajanje LED diode na MKR 1000, prema shemi kako bi radio posebni način multipleksiranja.

Spajanje ultrasoničnih senzora na Arduino prema shemi.

Mobilna aplikacija

Slika aplikacije za upravljanje pametnom rasvjetom.

Slika kako je napravljen menu za odabir.

Shema projekta

Shema na desno strani prikazuje Arduino mega (koji glumi MKR 1000) spojen na mrežu LED dioda, koju upravlja na način na koji mi želimo. Na lijevoj strani Arduino mega na kojeg je spojeno 6 HC-SR04 senzora za mjerenje udaljenosti koji javljaju preko serijske komunikacije gdje se nalazi auto.

Shemu ovoga projekta možete preuzeti ovdje.

Arduino program

#define BLYNK_PRINT /*

#include 
#include 
#include 

#define BLYNK_PRINT Serial

int led[13][2] = {                            //Tablica ledica, potrebna dva pita radi multipleksiranja
          {0,7},  //1      0                    broj 16 nema veze s ni jednim pinom, tamo stoji samo tako da bude neki broj
          {1,16}, //2      1
          {10,16},//3      2
          {3,16}, //4      3
          {4,7},  //5      4
          {0,8},  //6      5
          {4,8},  //9      6
          {5,7},  //10     7
          {5,8},  //11     8
          {6,7},  //12     9
          {6,8},  //13     10
          {2,7},  //14     11
          {2,8}   //15     12
      };

int nacin_rada = 0;                                //Sluzi za pospremanje vrijednosti nacina rada iz Blynk aplikacije  
int trenutno_stanje = 0;                           //Pomocna varijabla za provjeru u prekidanju petlje

char auth[] = "16e0da18ec8043998a43b7d9f89c4f0f";  //Token
char ssid[] = "Ksenija";                           //Ime wifia
char pass[] = "mmbr9C3J";                          //Šiffra wifia

void Pali_odredenu(int);                           //Funkcija za paljenje određene ledice
void Gasi_odredenu(int);                           //Funkcija za gašenje određene ledice
void Gasi_sve();                                   //Funkcija za gašenje svih ledica 
void ON();                                         //Funkcija glavnog autonomnog nacina rada pametne rasvijete
void OFF();                                        //Funkcija koja gasi svu rasvijetu i ostavlja ju ugasenu
void ODRZAVANJE();                                 //Funkcija za paljenje načina rada gdje se privjerava dali je svaka ledica ispravna 
void PISTA();                                      //Funkcija za paljenje načina rada gdje svijetla glume pistu za sljetanje
void KAOS();                                       //Funkcija za paljenje načina rada gdje se svijetla ponašaju kao da je apokalipsa 

BLYNK_WRITE(V0)                                    //Blynk funkcija za uzivanje vrijednosti sa virtualnog pina V0
{
  nacin_rada = param.asInt();
}

void setup()
{
  Serial1.begin(9600);                             //Pokretanje serijeske komunikacije 
  Blynk.begin(auth, ssid, pass);                   //Spajanje MKR-a na internet 
  for(int i=0;i<11;i++)                            //Postavljanje digitalnih pinova na HIGH
    pinMode(i,OUTPUT);
}

void loop()
{
  Blynk.run();                                     //Uzimanje vrijednosti s Blynk aplikacije
  switch(nacin_rada){                              //Provjera koji način rada želimo
    case 1: {                                      //Pokretanje funkcije ON()
      trenutno_stanje = 1;
      ON();
      break;
    }
    case 2: {                                      //Pokretanje funkcije OFF()
      trenutno_stanje = 2;      
      OFF();
      break;
    }
    case 3: {                                      //Pokretanje funkcije ODRZAVANJE()
      trenutno_stanje = 3;      
      ODRZAVANJE();
      break;
    }
    case 4: {                                      //Pokretanje funkcije PISTA()
      trenutno_stanje = 4;      
      PISTA();
      break;
    }
    case 5: {                                      //Pokretanje funkcije KAOS()
      trenutno_stanje = 5;
      KAOS();
      break;
    }
  }
}

void Pali_odredenu(int trenutna)                   //Funkcija za paljenje određene ledice
{
  digitalWrite(led[trenutna-1][0],1);              //Pošto koristimo multipliciranje ledica, moramo paliti dva pina odjednom 
  digitalWrite(led[trenutna-1][1],1);
}

void Gasi_odredenu(int prijsanja)                  //Funkcija za gašenje određene ledice
{
  digitalWrite(led[prijsanja-1][0],0);             //Pošto koristimo multipliciranje ledica, moramo gasiti dva pina odjednom 
  digitalWrite(led[prijsanja-1][1],0);
}

void Gasi_sve()                                    //Funkcija za gašenje svih ledica 
{
  for(int i=0;i<11;i++)                            //Najlakše gasimo sve ledica tako da sve pinove stavimo na 0
    digitalWrite(i,0);
}
 
void ON()                                          //Funkcija glavnog autonomnog nacina rada pametne rasvijete
{
  Pali_odredenu(3);                                //Pošto su kružanja malo opasnija mjesta prometa, tamo svijetlo stalno radi
  int pozicija,trenutna_pozicija=-1;               //Pošto sve ledice rade u parvima onda mozemo onda tranzistora stavit da propuštaju struju
  digitalWrite(7,1);
  digitalWrite(8,1);
  while(1){                                        //Petlja u kojoj gledamo gdje se nalazi auto i tako palimo svijetla 
    Blynk.run();                                   //Uzimanje vrijednosti s Blynk aplikacije
    if(nacin_rada != trenutno_stanje){             //Provjera dali se stanje rada promijenilo
      Serial1.write(2);                            //Slanje vrijednosti koje obaviještava drugi arduino da ne šalje ništa
      Gasi_sve();                                  //Gasimo sve ledice i tranzistore   
      break;
    }
    Serial1.write(1);                              //Govorimo drugom arduinu da počne slati vrijednosti
    delay(100);
    if(Serial1.available()){                       //Provjeravamno jeli nešto poslano
      pozicija = Serial1.read();                   //Čitanje primljene vrijednosti
      if(pozicija!=trenutna_pozicija){             //Prvjera jeli auto promjenio poziciju s jedne bandere na drugu
        trenutna_pozicija=pozicija;                //Ako je mjenjamo stanje auta 
        Gasi_sve();                                //Gasimo sve ledice i tranzistore   
      }
    }
    switch(pozicija){                              //Biranje pozicije auta
      case 1:{ //Prva pozicija lijevo
        digitalWrite(led[0][0],1);
        break;
      }
      case 2:{ //Prva pozicija dolje
        digitalWrite(led[9][0],1);
        break;
      }
      case 3:{ //Prva pozicija desno
        digitalWrite(led[4][0],1);
        break;
      }
      case 4:{ //Druga pozicija lijevo
        digitalWrite(led[0][0],1);
        digitalWrite(led[1][0],1);
        break;
      }
      case 5:{ //Druga pozicija dolje
        digitalWrite(led[7][0],1);
        digitalWrite(led[9][0],1);
        break;
      }
      case 6:{ //Druga pozicija desno
        digitalWrite(led[3][0],1);
        digitalWrite(led[4][0],1);
        break;
      }
      case 7:{ //Ispred raskrizja lijeva
        digitalWrite(led[0][0],1);
        digitalWrite(led[1][0],1);
        break;
      }
      case 8:{ //Ispred raskrizja dolje
        digitalWrite(led[9][0],1);
        digitalWrite(led[7][0],1);
        break;
      }
      case 9:{ //Ispred raskrizja desno
        digitalWrite(led[4][0],1);
        digitalWrite(led[3][0],1);
        break;
      }
      case 10:{ //Raskrizju
        digitalWrite(led[1][0],1);
        digitalWrite(led[3][0],1);
        digitalWrite(led[7][0],1);
        break;
      }    
    }
  }
}

void OFF()                                         //Funkcija koja gasi svu rasvijetu i ostavlja ju ugasenu
{
  Gasi_sve();                                      //Gasimo sve ledice
  while(1){                                        //Ulazimo u petlju koja ne dopušta završetak funkcije
    Blynk.run();                                   //Uzimanje vrijednosti s Blynk aplikacije
    if(nacin_rada != trenutno_stanje){             //Provjera dali se stanje rada promijenilo
      Gasi_sve();                                  //Gasimo sve ledice i tranzistore   
      break;
    }
  }
}

void ODRZAVANJE()                                  //Funkcija za paljenje načina rada gdje se privjerava dali je svaka ledica ispravna 
{
  Gasi_sve();                                      
  while(1){                                        //Petlja koja ne dopušta završetak funkcije 
    Blynk.run();                                   //Uzimanje vrijednosti s Blynk aplikacije
    if(nacin_rada != trenutno_stanje){             //Provjera dali se stanje rada promijenilo
      Gasi_sve();                                  //Gasimo sve ledice i tranzistore   
      break;
    }
    for(int i=1;i<14;i++){                         //Petlja za paljenje ledica
    Blynk.run();                                   //Uzimanje vrijednosti s Blynk aplikacije
    if(nacin_rada != trenutno_stanje){             //Provjera dali se stanje rada promijenilo
      Gasi_sve();                                  //Gasimo sve ledice i tranzistore   
      break;
    }
    Pali_odredenu(i);                              //Paljnje i-te ledice
    delay(1000);
    Gasi_odredenu(i);                              //Gašenje i-te ledice
   }
  }
}

void PISTA()                                       //Funkcija za paljenje načina rada gdje svijetla glume pistu za sljetanje
{ 
  Gasi_sve();
  while(1){                                        //Petlja koja ne dopušta završetak funkcije 
    Blynk.run();                                   //Uzimanje vrijednosti s Blynk aplikacije
    if(nacin_rada != trenutno_stanje){             //Provjera dali se stanje rada promijenilo
      Gasi_sve();                                  //Gasimo sve ledice i tranzistore   
      break;
    }
       Pali_odredenu(1);                           //Paljenje prvog para banderi
       Pali_odredenu(6);
       delay(500);
       Gasi_odredenu(1);                           //Gašenje prvog para banderi
       Gasi_odredenu(6);
    Blynk.run();                                   //Uzimanje vrijednosti s Blynk aplikacije
    if(nacin_rada != trenutno_stanje){             //Provjera dali se stanje rada promijenilo
      Gasi_sve();                                  //Gasimo sve ledice i tranzistore   
      break;
    }
       Pali_odredenu(2);                           //Paljenje drugog para banderi
       Pali_odredenu(12);
       delay(500);
       Gasi_odredenu(2);                           //Gašenje drugog para banderi
       Gasi_odredenu(12);
    Blynk.run();                                   //Uzimanje vrijednosti s Blynk aplikacije
    if(nacin_rada != trenutno_stanje){             //Provjera dali se stanje rada promijenilo
      Gasi_sve();                                  //Gasimo sve ledice i tranzistore   
      break;
    }
       Pali_odredenu(3);                           //Paljenje središnje bandere
       delay(500); 
       Gasi_odredenu(3);                           //Gašenje središnje bandere
    Blynk.run();                                   //Uzimanje vrijednosti s Blynk aplikacije
    if(nacin_rada != trenutno_stanje){             //Provjera dali se stanje rada promijenilo
      Gasi_sve();                                  //Gasimo sve ledice i tranzistore   
      break;
    }
        Pali_odredenu(4);                           //Paljenje treceg para banderi
       Pali_odredenu(13);
       delay(500);
       Gasi_odredenu(4);                           //Gašenje treceg para banderi
       Gasi_odredenu(13);
    Blynk.run();                                   //Uzimanje vrijednosti s Blynk aplikacije
    if(nacin_rada != trenutno_stanje){             //Provjera dali se stanje rada promijenilo
      Gasi_sve();                                  //Gasimo sve ledice i tranzistore   
      break;
    }
       Pali_odredenu(5);                           //Paljenje četvrtog para banderi
       Pali_odredenu(7);
       delay(500);
       Gasi_odredenu(5);                           //Gašenje četvrtog para banderi
       Gasi_odredenu(7);
       
      }
      
  
}

void KAOS()                                        //Funkcija za paljenje načina rada gdje se svijetla ponašaju kao da je apokalipsa 
{
  int trenutna1= random(1,13),trenutna2= random(1,13),trenutna3= random(1,13);  //Uziamnje inicijalne vrijednosti za bandere
  Gasi_sve();
  while(1){                                        //Petlja koja ne dopušta završetak funkcije 
    Blynk.run();                                   //Uzimanje vrijednosti s Blynk aplikacije
    if(nacin_rada != trenutno_stanje){             //Provjera dali se stanje rada promijenilo
      Gasi_sve();                                  //Gasimo sve ledice i tranzistore   
      break;
    }
    Gasi_odredenu(trenutna1);                      //Gašenje random bandere
    trenutna1 = random(1,13);                      //Uzimanje nove vrijednosti za random bandere
    Pali_odredenu(trenutna1);                      //Paljenje random bandere
    delay(300);
    Gasi_odredenu(trenutna2);                      //Gašenje random bandere
    trenutna2 = random(1,13);                      //Uzimanje nove vrijednosti za random bandere
    Pali_odredenu(trenutna2);                      //Paljenje random bandere
    delay(300);
    Gasi_odredenu(trenutna3);                      //Gašenje random bandere
    trenutna3 = random(1,13);                      //Uzimanje nove vrijednosti za random bandere
    Pali_odredenu(trenutna3);                      //Paljenje random bandere
    delay(300);
  }
}

Arduino program ovoga projekta možete preuzeti ovdje.

#define BLYNK_PRINT /*

#include                //Library za Ultrasoonične senzore HC-SR04

NewPing sonar1(3,2,20);            //Incijalizacije prvog senzora
NewPing sonar2(5,4,20);            //Incijalizacije drugog senzora
NewPing sonar3(7,6,100);           //Incijalizacije trečeg senzora
NewPing sonar4(9,8,100);           //Incijalizacije četvrtog senzora
NewPing sonar5(11,10,20);          //Incijalizacije petog senzora
NewPing sonar6(13,12,20);          //Incijalizacije šestog senzora

int mod = 2;                       //Varijabla kojom provjera morali slati podatke ili jos uvjek ceka

void Interupt();                   //Funkcija koja provjera jeli potrebno išta slati 

void setup() {
  Serial.begin(9600);
}

void loop() {
  while(mod==2){                    //Ceka da glavni arduino krene u ON funkciju
    if(Serial.available()){
      mod = Serial.read();
    }
  }
  while(mod==1){
    delay(50);
    Interupt();
    unsigned int uS1 = sonar1.ping()/ US_ROUNDTRIP_CM;;       //Dobivanje vrijednosti udaljenosti s prvog senzora
    unsigned int uS2 = sonar2.ping()/ US_ROUNDTRIP_CM;;       //Dobivanje vrijednosti udaljenosti s drugog senzora
    unsigned int uS3 = sonar3.ping()/ US_ROUNDTRIP_CM;;       //Dobivanje vrijednosti udaljenosti s trečeg senzora
    unsigned int uS4 = sonar4.ping()/ US_ROUNDTRIP_CM;;       //Dobivanje vrijednosti udaljenosti s četvrtog senzora
    unsigned int uS5 = sonar5.ping()/ US_ROUNDTRIP_CM;;       //Dobivanje vrijednosti udaljenosti s petog senzora
    unsigned int uS6 = sonar6.ping()/ US_ROUNDTRIP_CM;;       //Dobivanje vrijednosti udaljenosti s šestog senzora
    if(uS6!=0)             //Provjera i slanje pozicije
      Serial.write(4);
    if(uS5!=0)             //Provjera i slanje pozicije             
      Serial.write(7);
    if(uS4>0&&uS4<20) //Provjera i slanje pozicij Serial.write(10); if(uS4>20&&uS4<45) //Provjera i slanje pozicije Serial.write(8); if(uS4>45&&uS4<65) //Provjera i slanje pozicije Serial.write(5); if(uS4>65)             //Provjera i slanje pozicije
      Serial.write(2);
    if(uS2!=0)             //Provjera i slanje pozicije
      Serial.write(9);
    if(uS1!=0)             //Provjera i slanje pozicije
      Serial.write(6);
  }
}

void Interupt()
{
  if(Serial.available()){
    mod = Serial.read();
  }  
}

Arduino program ovoga projekta možete preuzeti ovdje.

Autori

Projekt su izradili Matija Rajković i Luka Ravenščak uz mentorstvo Ljudevita Sakala iz Tehničke škole Bjelovar.

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