Smart City of Vukovar - Our View of Smart Living

Smart City of Vukovar - Our View of Smart Living © GPL3+

This magnificent model offers a solution in a greater electricity saving, better use of a solar sun power, and reducing the traffic jams.

  • 328 views
  • 0 comments
  • 2 respects

Components and supplies

Necessary tools and machines

09507 01
Soldering iron (generic)

Apps and online services

About this project

Code

Smart parkingC/C++
#include <Servo.h>            // Dodaje biblioteku u program
#include <LiquidCrystal.h>

Servo rampa;                 // Stvara servo objekt koji upravlja servom

int izlaz = 0;               // Pin spojen na senzor na izlazu
int ulaz = 1;               // Pin spojen na senzor na ulazu

int spusteno = 177;          // Sputen poloaj rampe
int dignuto = 90;            // Dignut poloaj rampe

int kapacitet = 6;           // Kapacitet parkiralita
int  slobodnaMjesta = 6;     // Broj slobodnih mjesta(parkiralite je u poetku prazno)

const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 3, d7 = 2;       // Inicijalizira biblioteku dodavajui potrebne pinove za LCD
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);                        // s pinom na koji je arduino spojen

byte znak[8] = {          // Stvara podatke za znak koji se ispisuje na
  B11011,                 // LCD-u a nije standardan alfanumeriki ()
  B01110,                 // Potrebno za ispisivanje poruke "Naalost, nema slobodnih mjesta"
  B00000,
  B11111,
  B00110,
  B01100,
  B11111,
};

void setup() {
  rampa.attach(9);                  // Spaja servo

  pinMode(izlaz, INPUT);            // Postavlja pinove senzora za ulaz i izlaz kao ulazne
  pinMode(ulaz, INPUT);
  rampa.write(spusteno);            // Postavlja rampu u sputen poloaj


  lcd.begin(16, 2);                 // Postavlja broj znakova i redova na LCD-u
  lcd.setCursor(2, 0);
  lcd.print("Super Mega");          // Ispisuje poruku na LCD
  lcd.setCursor(4, 1);
  lcd.print("PARKING");
  delay(2000);
  lcd.clear();

  lcd.createChar(0, znak);
  lcd.begin(16, 2);

}

void loop() {

  if (digitalRead(ulaz) == 0)
  {
    if (slobodnaMjesta != 0) {
      delay(500);
      slobodnaMjesta--;
      rampa.write(dignuto);
      lcd.print("Slobodna mjesta:");
      lcd.setCursor(5, 1);
      lcd.print(slobodnaMjesta);
      delay(3000);
      rampa.write(spusteno);
    } else {
      delay(500);
      lcd.print("Na");
      lcd.write(byte(0));
      lcd.print("alost, nema");
      lcd.setCursor(0, 1);
      lcd.print("slobodnih mjesta");
      delay(2000);
    }
  }
  if (digitalRead(izlaz) == 0)
  {
    if (slobodnaMjesta != kapacitet) {
      delay(500);
      slobodnaMjesta++;
      rampa.write(dignuto);
      lcd.print("Slobodna mjesta:");
      lcd.setCursor(5, 1);
      lcd.print(slobodnaMjesta);
      delay(3000);
      rampa.write(spusteno);
    }
  }
  lcd.clear();
}
Smart traffic lightsC/C++
int crvenoGlavna = 2;
int zutoGlavna = 1;
int zelenoGlavna = 0;

int crvenoSporedna = 5;
int zutoSporedna = 4;
int zelenoSporedna = 3;

int senzor1 = 6;
int senzor2 = 7;

void setup() {
  pinMode(crvenoGlavna, OUTPUT);
  pinMode(zutoGlavna, OUTPUT);
  pinMode(zelenoGlavna, OUTPUT);

  pinMode(crvenoSporedna, OUTPUT);
  pinMode(zutoSporedna, OUTPUT);
  pinMode(zelenoSporedna, OUTPUT);

  pinMode(senzor1, INPUT);
  pinMode(senzor2, INPUT);

  digitalWrite(zelenoGlavna, HIGH);    // Sva stanja moraju biti ukljuena jer su ledice spojene sa
  digitalWrite(crvenoGlavna, HIGH);    // zajednikom anodom te su tada LEDice iskljuene
  digitalWrite(zutoGlavna, HIGH);      // Stanje u programu je obrnuto od stanja LEDice

  digitalWrite(zelenoSporedna, HIGH);
  digitalWrite(crvenoSporedna, HIGH);
  digitalWrite(zutoSporedna, HIGH);

}

void loop() {

  if (digitalRead(senzor1) == LOW) {

    delay(500);
    semaforGlavna();         // Pokree petlju semafora.

  } else if (digitalRead(senzor2) == LOW) {

    delay(500);
    semaforGlavna();         // Pokree petlju semafora.

  } else if ((digitalRead(senzor1) && digitalRead(senzor2)) == HIGH) {

    digitalWrite(zelenoGlavna, LOW);          // Dok nema prometa na sporednoj cesti, semafor
    digitalWrite(crvenoSporedna, LOW);        // je stalno upaljen u korist glavne ceste
    digitalWrite(crvenoGlavna, HIGH);
    digitalWrite(zelenoGlavna, HIGH);
    digitalWrite(zutoGlavna, HIGH);
    digitalWrite(zutoSporedna, HIGH);

  }
}

void semaforGlavna() {         // Petlja semafora

  digitalWrite(crvenoGlavna, HIGH);
  digitalWrite(zutoGlavna, HIGH);
  digitalWrite(zelenoGlavna, HIGH);
  delay(1000);
  digitalWrite(zelenoGlavna, LOW);
  delay(1000);
  digitalWrite(zelenoGlavna, HIGH);
  delay(1000);
  digitalWrite(zelenoGlavna, LOW);
  delay(1000);
  digitalWrite(zelenoGlavna, HIGH);
  digitalWrite(zutoGlavna, LOW);
  delay(2000);
  digitalWrite(zutoGlavna, HIGH);
  digitalWrite(crvenoGlavna, LOW);
  delay(1000);
  digitalWrite(zutoSporedna, LOW);
  delay(3000);
  digitalWrite(zutoSporedna, HIGH);
  digitalWrite(zelenoSporedna, LOW);
  digitalWrite(crvenoSporedna, HIGH);
  delay(5000);
  digitalWrite(zelenoSporedna, HIGH);
  delay(1000);
  digitalWrite(zelenoSporedna, LOW);
  delay(1000);
  digitalWrite(zelenoSporedna, HIGH);
  digitalWrite(zutoSporedna, LOW);
  delay(3000);
  digitalWrite(zutoSporedna, HIGH);
  digitalWrite(crvenoSporedna, LOW);
  delay(1000);
  digitalWrite(zutoGlavna, LOW);
  delay(3000);
  digitalWrite(zutoGlavna, HIGH);

}
Smart city lightsC/C++
#include <FadeLed.h> //dodaje biblioteku za upravljanje LEDicama

FadeLed leds[5] = {3, 5, 6, 9, 10}; //dodaje pinove LEDica objektu "leds"

unsigned long millisLast; //varijabla millisLast

int resPin = A1; //definira pin fotootpornika
int resValue = 0; //varijabla za pohranjivanje vrijednosti fotootpornika
int sensPin1 = 2; //definiranje pinova infracrvenih senzora
int sensPin2 = 4;
int sensPin3 = 7;
int sensPin4 = 8;
int sensPin5 = 12;

void setup() { //inicijalne postavke za petlju

  pinMode(sensPin1, INPUT); //definira pinove infracrvenih senzora kao ulazne
  pinMode(sensPin2, INPUT);
  pinMode(sensPin3, INPUT);
  pinMode(sensPin4, INPUT);
  pinMode(sensPin5, INPUT);

  leds[0].setTime(2000); //postavlja vrijeme mijenjanja intenziteta svjetla
  leds[1].setTime(2000); //od 0% do 100% na 2 sekunde (relativno brzo!)
  leds[2].setTime(2000);
  leds[3].setTime(2000);
  leds[4].setTime(2000);

}

void prog1() { //prva petlja programa
  
  if (digitalRead(sensPin1) == LOW) { //provjerava ako je senzor elektromagnetski stimuliran

    leds[0].set(100); //postepeno postavlja jainu LEDice na 100%

  } else { //funkcija "inae"

    leds[0].set(10); //postepeno postavlja jainu LEDice na 10%

  }
}

void prog2() { //druga petlja programa, sve petlje su jednake, ali definiraju druge senzore i LEDice
  
  if (digitalRead(sensPin2) == LOW) {

    leds[1].set(100);

  } else {

    leds[1].set(10);

  }
}

void prog3() { //trea petlja
  
  if (digitalRead(sensPin3) == LOW) {

    leds[2].set(100);

  } else {

    leds[2].set(10);

  }
}

void prog4() { //etvrta petlja
  
  if (digitalRead(sensPin4) == LOW) {

    leds[3].set(100);

  } else {

    leds[3].set(10);

  }
}

void prog5() { //peta petlja
  
  if (digitalRead(sensPin5) == LOW) {

    leds[4].set(100);

  } else {

    leds[4].set(10);
  }
}

void loop() { //glavna petlja (najbolja petlja hehe)

  FadeLed::update(); //osvjeava stanje LEDica

  resValue = analogRead(resPin); //definira varijablu kao vrijednost fotootpornika

  if (resValue < 50) { //provjerava je li dan ili no

    prog1(); //ako je no poziva ostale petlje
    prog2();
    prog3();
    prog4();
    prog5();

  } else { //funkcija "inae"

    leds[0].set(0); //ako je dan LEDice su ugaene
    leds[1].set(0);
    leds[2].set(0);
    leds[3].set(0);
    leds[4].set(0);

  }
} //to je to (hehe)
Smart solar Sun trackerC/C++
#include <Servo.h> 
 
Servo tragac;  // Stvara servo objekt koji uravlja servom

int istokPin = 1;  // Dodaje analogne pinove koji su spojeni na senzor svijetla
int zapadPin = 2;

int istokVal = 0;   // Stvara varijable koje spremaju vrijednosti senzora
int zapadVal = 0;

int greska = 0;
int kalibracija = 204;  // Kalibracijski pomak koji postavlja greku na nula kada oba senzora primaju jednaku koliinu svijetla
int tragacPoz = 90;    // Stvara varijablu koja sprema poziciju serva
 
void setup() 
{ 
  tragac.attach(11);  // Dodaje servu objekt koji je spojen na pin 11
} 
 
 
void loop() 
{ 
  istokVal = kalibracija + analogRead(istokPin);    // ita vrijednosti istonog i zapadnog senzora
  zapadVal = analogRead(zapadPin);
  if(istokVal<350 && zapadVal<350)  // Provjerava ako oba senzora primaju malo svijetla, mrak je
  {
    while(tragacPoz<=160)  // Pomie traga u krajnju istonu poziciju da doeka zoru
    {
      tragacPoz++;
      tragac.write(tragacPoz);
      delay(100);
    }
  }
  greska = istokVal - zapadVal;          // Odreuje razliku izmeu dva senzora
  if(greska>15)        // Ako je greka pozitivna i vea od 15 pomie traga istono
  {
    if(tragacPoz<=160)  // Potvruje da traga nije u krajnjoj istonoj poziciji
    {
      tragacPoz++;
      tragac.write(tragacPoz);  // Pomie traga istono
    }
  }
  else if(greska<-15)  // Ako je greka negativna i manja od -15 pomie traga zapadno
  {
    if(tragacPoz>20)  // Potvruje da traga nije u krajnjoj zapadnoj poziciji
    {
      tragacPoz--;
      tragac.write(tragacPoz);  // Pomie traga zapadno
    }
  }
  delay(100);
} 

Schematics

Assembling
Sastavljanje makete 2 zqcdpaqfty

Comments

Similar projects you might like

RF BASED SMART HOME AUTOMATION SYSTEM

by Dennis Mwanza

  • 30,150 views
  • 4 comments
  • 47 respects

Smart Garden

Project showcase by patel Dipen

  • 26,798 views
  • 16 comments
  • 71 respects

Smart City Project

Project in progress by Team BYU Smart City Project

  • 3,314 views
  • 0 comments
  • 3 respects

Laser, Robe, Star Wars?! - Versalume + Adafruit Gemma

Project tutorial by Kitty Yeung

  • 2,059 views
  • 2 comments
  • 6 respects

Arduino Mystery Box - Beginners

Project tutorial by Dragos

  • 1,245 views
  • 1 comment
  • 6 respects

Smart Thermostat

Project tutorial by Arduino_Genuino

  • 71,175 views
  • 12 comments
  • 81 respects
Add projectSign up / Login