Connect IT Pametni hodnik

Connect IT Slavonski Brod

Hodnik koji vodi od ulaza do naše učionice/radionice danju je zbog prozora dobro osvijetljen. No često se razne aktivnosti naše udruge zbivaju u večernjim satima, kada je u hodniku mrak. Tada su u njemu svjetla (najčešće cijelo vrijeme) upaljena, iako za to nema potrebe. Zato smo osmislili sustav koju bi niz žarulja duž hodnika palio i gasio kako se netko kreće hodnikom. Za to nam je bio potreban veći broj senzora koji bi detektirali kretanje, pa smo odlučili “posuditi” ultrazvučne senzore s naših m-bot robota. 10 robota -10 senzora… to bi trebalo biti dovoljno za cijeli hodnik. Izračunali smo da je 5 žarulja dovoljno za duljinu hodnika, pa smo pribavili i 5 releja.

Tako je svaka žarulja pokrivena s 2 senzora. Hodnik je širok oko 120 cm, pa smo podesili Arduino da (pomoću “ping”-a) izračuna najmanju udaljenost nekog predmeta od senzora. Ako je ta udaljenost manja od 100 cm, znači da netko prolazi hodnikom, te se šalje signal releju da uključi žarulju za koju je “zadužen” taj senzor. Nakon što osoba prođe pored senzora, udaljenost ponovno postave veća od 100 cm i žarulja se gasi. Na Arduino pločicu je spojen i senzor osvjetljenja (Photo Resistor Sensor Module) koji čitav sustav isključuje kada je osvjetljenje u hodniku dovoljno.
U projektu se za napajanje žarulja koristi visoki napon (220V) koji može biti opasan, te je čitav projekt rađen uz veliki oprez te posebnu pažnju mentora.
Sustav je još uvijek daleko od idealnog. Bilo bi potrebno još dosta dotjerivanja (i tehničkog i programskog) kako bi zaista bio funkcionalan. Ipak, nama kao početnicima u radu s Arduinom, bio je jako zanimljiv i poučan, te vjerujemo da smo ipak učinili jedan korak naprijed, kako u našem znanju, tako i u modernizaciji našeg prostora i nastojanjima za uštedom energije.

Video snimka

Izrada projekta

Na ovoj fotografiji gotovog projekta, u šumi kablova, nemoguće je bilo što raspoznati. No, stvar je jednostavna. 10 ultrazvučnih senzora raspoređeno je na udaljenost po cca. 50 cm. Svi su spojeni na izvode 5V i GND. Svaki od signalnih izvoda je spojen na pinove u “donjem redu” (1-5;17-21) Svih 5 releja je spojeno na VCC i GND. Svaki signalni izvod je spojen na pinove u “gornjem redu” (7-11) Senzor osvjetljenja je spojen na 5V, GND i pin 12.

Na ovom (pojednostavljenom) primjeru na Arduino pločicu spojeni su samo jedan ultrazvučni senzor i jedan relej. Narančasto – 5V Žuto – GND Bijelo, sivo – VCC (3.3V) Zeleno – signal ultrazvučnog senzora (na pin 5) Plavo – signal releja (na pin 6).

Mobilna aplikacija

Ovaj projekt zamislili smo tako da radi bez mobilne aplikacije, te ona nije implementirana u ovoj inačici. Ideja za moguću nadogradnju bila bi mogućnost da se cijeli sustav uključuje i isključuje putem aplikacije. Također za neku buduću nadogradnju ostaje mogućnost daljinskog podešavanja parametara (minimalna razina osvjetljenja koja isključuje sustav, udaljenost za svaki pojedini senzor (npr. ako na sredinu hodnika postavimo biljku, tada na je na tom senzoru potrebno smanjiti udaljenost).. itd).

Shema projekta

Shema je pojednostavljena (2 senzora i 2 releja) Crveno – 5V Crno – GND Narančasto – VCC (3.3V) Plavo, Ljubičasto – signal ultrazvučnog senzora (pin 5, 4…) Zeleno, Žuto – signal releja (pin 6, 7…).

Arduino program

#define BLYNK_PRINT /*


#define ON LOW  //relej se aktivira na LOW signal
#define OFF HIGH  // na signal HIGH relej se isključuje
#define Pauza 1000 // vrijeme koje će žarulja ostati uključena nakon što senzor isključi relej

int svjetlo1 = 7; // pinovi za spajanje releja (žarulja) - "gornji red"
int svjetlo2 = 8;
int svjetlo3 = 9;
int svjetlo4 = 10;
int svjetlo5 = 11;

int senzor_svjetla = 12; // senzor osvjetljenja

int senzor1 = 5; // pinovi za spajanje ultrazvučnih senzora - "donji red"
int senzor2 = 4;
int senzor3 = 3;
int senzor4 = 2;
int senzor5 = 1;
int senzor6 = 21;
int senzor7 = 20;
int senzor8 = 19;
int senzor9 = 18;
int senzor10 = 17;

long duration1, distance1;  // duration - vremenski period "ping"-a potreban za računanje udaljenosti
long duration2, distance2;  // distance - udaljenost najbliže prepreke u cm
long duration3, distance3;  // varijable su definirane za svaki senzor posebno
long duration4, distance4;
long duration5, distance5; 
long duration6, distance6; 
long duration7, distance7;
long duration8, distance8; 
long duration9, distance9;
long duration10, distance10;

unsigned long time1, time2, time3, time4, time5; //vrijeme proteklo od paljenja svakog releja (Žarulje)

void setup() {
     
  pinMode(svjetlo1, OUTPUT); // sve pinove za svjetlo postavi u izlazni mod
  pinMode(svjetlo2, OUTPUT);
  pinMode(svjetlo3, OUTPUT);
  pinMode(svjetlo4, OUTPUT);
  pinMode(svjetlo5, OUTPUT);

  pinMode(senzor_svjetla, OUTPUT); // pin za senzor svjetla postavi u izlazni mod
  9
  digitalWrite(svjetlo1, OFF); // isključi sva svjetla (postavi pinove u stanje OFF (HIGH))
  digitalWrite(svjetlo2, OFF);
  digitalWrite(svjetlo3, OFF);
  digitalWrite(svjetlo4, OFF);
  digitalWrite(svjetlo5, OFF);

      
}

void loop() {
  int osvjetljenje = analogRead(senzor_svjetla); //analogno očitaj stanje senzora osvjetljena 
  if (osvjetljenje > 200) { //veći broj označava manju svjetlost. Ocijenili smo da je iznos manji od 200 dovoljna osvjetljenot
                            // ako je iznos osvjetljenja veći od 200 izvrši sljedeći blok naredbi (koji čini cijeli program)
    
    ping(senzor1); // pozovi funkciju "ping" na senzoru 1
    duration1 = pulseIn(senzor1, HIGH); //očitaj vrijeme potrebno da se signal vrati do senzora
    distance1 = microsecondsToCentimeters(duration1); // pomoću funkcije "microsecondsToCentimeters" izračunaj udaljenost

    ping(senzor2);
    duration2 = pulseIn(senzor2, HIGH);
    distance2 = microsecondsToCentimeters(duration2);
    
    if (prolaz(distance1) || prolaz(distance2)){  // ako je funkcija "prolaz" na bilo kojem senzoru u prvom paru istinita
      time1 = millis(); // vrijeme kad se pali prva žarulja
      digitalWrite(svjetlo1, ON); // upali prvu žarulju      
    }else{ // ako je funkcija "prolaz" = false
      if (millis()-time1 > Pauza){ // ako je proteklo više vremena od onog definiranog u varijabli Pauza (1 sekunda)
        digitalWrite(svjetlo1, OFF); // isključi žarulju
        time1 = millis(); //resetiraj vrijem paljenja prve žarulje
      }
    }
      //gore upisani komentari vrijede dalje za svako svjetlo i svaki par senzora
    
    ping(senzor3);
    duration3 = pulseIn(senzor3, HIGH);
    distance3 = microsecondsToCentimeters(duration3);
    
    ping(senzor4);
    duration4 = pulseIn(senzor4, HIGH); 
    distance4 = microsecondsToCentimeters(duration4);
      
    if (prolaz(distance3) || prolaz(distance4)){
      time2 = millis();
      digitalWrite(svjetlo2, ON);
    }else{
      if (millis()-time2 > Pauza){
        digitalWrite(svjetlo2, OFF);
        time2 = millis();
      }
    }  

    ping(senzor5);
    duration5 = pulseIn(senzor5, HIGH);
    distance5 = microsecondsToCentimeters(duration5);

    ping(senzor6);
    duration6 = pulseIn(senzor6, HIGH);
    distance6 = microsecondsToCentimeters(duration6);

    
    if (prolaz(distance5) || prolaz(distance6)){
      time3 = millis();      
      digitalWrite(svjetlo3, ON);
    }else{
      if (millis()-time3 > Pauza){
        digitalWrite(svjetlo3, OFF);
        time3 = millis();
      };
    }

    ping(senzor7);
    duration7 = pulseIn(senzor7, HIGH);
    distance7 = microsecondsToCentimeters(duration7);

    ping(senzor8);
    duration8 = pulseIn(senzor8, HIGH);
    distance8 = microsecondsToCentimeters(duration8);

    
    if (prolaz(distance7) || prolaz(distance8)){
      time4 = millis();      
      digitalWrite(svjetlo4, ON);
    }else{
      if (millis()-time4 > Pauza){
        digitalWrite(svjetlo4, OFF);
        time4 = millis();
      }
    }

    ping(senzor9);
    duration9 = pulseIn(senzor9, HIGH);
    distance9 = microsecondsToCentimeters(duration9);

    ping(senzor10);
    duration10 = pulseIn(senzor10, HIGH);
    distance10 = microsecondsToCentimeters(duration10);
    
    if (prolaz(distance9) || prolaz(distance10)){
      time5 = millis();      
      digitalWrite(svjetlo5, ON);
    }else{
      if (millis()-time5 > Pauza){
        digitalWrite(svjetlo5, OFF);
        time5 = millis();
      }
    }
  } 
}

boolean prolaz (int distance){  //funkcija prolaz prima kao parametar udaljenost od ultrazvučnog senzora
  int D = 100; // udaljenost za aktivaciju  svjetla je 100 cm
  if (distance < D && distance != 0){ // ako je udaljenost manja od 100 cm 
                                      // i različita od 0 (ovaj uvjet je dodan jer smo u praksi uočili da senzor ponekad (iz nepoznatog razloga) bilježi udaljenost 0
      return true; //vrati vrijednost "true" - upalit će povezano svjetlo
    }else{
      return false; //vrati vrijednost "false" - ugasit će povezano svjetlo 
    }
  }

void ping(int pin)  { //standarsno arduino primjer "ping" pretvoren u funkciju kojoj kao parameta pridružujemo naziv (pin) senzora
    pinMode(pin, OUTPUT);
    
    digitalWrite(pin, LOW);
    delayMicroseconds(2);
    
    digitalWrite(pin, HIGH);
    delayMicroseconds(10);    
    digitalWrite(pin, LOW);
    
    pinMode(pin, INPUT);   
  }

long microsecondsToCentimeters(long microseconds) {// funkcija koja preračunava trajanje "ping"-a u centimetre
  return microseconds / 29 / 2;
}


Arduino program ovoga projekta možete preuzeti ovdje.

Autori

Projekt su izradili Dominik Lovrić i Mihael Lovrić uz mentorstvo Hrvoja Ćosića iz Connect IT Slavonski Brod.

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