Smart street

Međimurski informatički Klub Čakovec

Smart street je IOT projekt za natječaj “Pametni grad”. Ovaj je sustav namijenjen građanima nekog grada kako bi što bolje bili informirani o uvjetima i događanjima u gradu. Naša zamišljena ulica se nalazi pored rijeke i pored glavnog gradskog mosta. U puno slučajeva postoji potreba da građani brzo i pravodobno budu informirani o svemu što se u njihovom gradu događa (nestanak struje, prijeteće vremenske neprilike…). Za ovo posebno postoji potreba ukoliko postoji neki izvanredni događaj o čemu moraju svi stanovnici biti brzo informirani. Napravili smo sustav u kojem iz jednog mobilnog uređaja preko Blynk aplikacije administrator grada (osoba koja je zadužena u gradskoj upravi za informiranje stanovnika) može uređivati Display te upisati neku poruku ili obavijest građanima.

U našoj „pametnoj ulici“ na monitoru se prikazuju podaci o temperaturi, vlazi zraka i točnom vremenu (sat, minute i sekunde).

Vlagu i temperaturu očitavamo s DHT22 senzora. RGB dioda svijetli oviseći o temperaturi (npr. kad je vani temperatura ispod 10 stupnjeva celzijusa ledica svijetli plavom bojom). Naša zamišljena ulica nalazi se pored pokretnog mosta, te je koncept
„pametnog grada“ primijenjen i u prometnoj regulaciji. Napravili smo pokretni most koji se diže i spušta ovisno o prometu po rijeci. Kad se brod približi dovoljno blizu mostu, on se počinje podizati. Kad je brod udaljen od mosta on se krene spuštati i dalje propuštati cestovni promet. Udaljenost broda od mosta postigli smo s ultrazvučnim senzorom, a pokretljivost mosta pomoću servo motora.

Video snimka
Izrada projekta

Glavni dio projekta uz mikrokontroler Arduino MKR1000 su ultrazvučni senzor, senzor za vlagu i temperaturu, RGB led modul, LCD display i servo motor. Najteži dio projekta bilo je ispisivanje obavijesti koju šaje korisnik preko Blynk aplikacije na LCD display. Maketa je napravljena pomoću 3D pisača.

Temperatura je 22 stupnja celzijusa pa RGB dioda svijetli zeleno.

3D ispis makete.

Programiranje LCD displaya.

Testiranje ispisa poruke pomoću Blynk aplikacije.

Mobilna aplikacija

Mobilnu aplikaciju radili smo u Blynku. Aplikacija se sastoji od šest widgeta. Dva widgeta su „gauge“ na kojima je grafički prikazana temperatura i vlaga zraka. Jedan widget služi za upisivanje teksta (obavijesti). Dva widgeta služe za odabir između ispisivanja vremena, temperature i vlage ili teksta (obavijesti) te jedan widget koji prikazuje ako se most diže, spušta ili je zatvoren.

Shema projekta
Arduino program
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#include <RTCZero.h>
#include <SPI.h>
#include <WiFi101.h>
#include <BlynkSimpleWiFiShield101.h>
#include <Servo.h>
#define BLYNK_PRINT SerialUSB
#define DHTPIN 0
#define DHTTYPE DHT22

LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht(DHTPIN, DHTTYPE);RTCZero rtc;
Servo Servo1;

int servoPin = 5;
const int trigPin = 10;
const int echoPin = 6;
const int trigPin2 = 2;
const int echoPin2 = 1;
long trajanje;
int udaljenost;
long trajanje2;
int udaljenost2;
const byte sekunde = 0;
const byte minutes = 20;
const byte hours = 16;
String tekst;
int crveno = 7;
int plavo = 8;
int zeleno = 9;
char auth[] = "a99c94fafa3c420887af78d60330d971";
char ssid[] = "stricak5";
char pass[] = "SuperLozinka3";
int x = 0;

void setup() {
  Serial.begin(9600);
  dht.begin();
  rtc.begin();
  lcd.init();
  lcd.backlight();
  lcd.clear();
  rtc.setHours(hours);
  rtc.setMinutes(minutes);
  rtc.setSeconds(sekunde);
  SerialUSB.begin(9600);
  Blynk.begin(auth, ssid, pass);
  pinMode (crveno, OUTPUT);
  pinMode (plavo, OUTPUT);
  pinMode (zeleno, OUTPUT);
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(trigPin2, OUTPUT);
  pinMode(echoPin2, INPUT);
  Servo1.attach(servoPin);
  Servo1.write(0);
  delay(1000);
}

void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  Blynk.virtualWrite(V1, int(t));
  Blynk.virtualWrite(V2, int(h));
  if (t > 30) {
    analogWrite(9, 250);
  } else if (t < 10) {
    analogWrite(10, 250);
  } else if (t > 10 and t < 20) {
    analogWrite(11, 250);
    analogWrite(9, 150);
  } else if (t > 20 and t < 30) {
    analogWrite(11, 100);
    analogWrite(9, 250);
  }
  Blynk.run();
  if (x == 1) {
    lcd.init();
    lcd.backlight();
    lcd.setCursor(0, 1);
    lcd.print(t);
    lcd.print(" C");
    lcd.setCursor(9, 1);
    lcd.print(h);
    lcd.print(" %");
    lcd.setCursor(0, 0);
    uvijek_dvije_znamenke(rtc.getHours());
    lcd.print(":");
    uvijek_dvije_znamenke(rtc.getMinutes());
    lcd.print(":");
    uvijek_dvije_znamenke(rtc.getSeconds());
  } else if (x == 2) {
    lcd.init();
    lcd.backlight();
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print(tekst);
  }
  most();
}

void uvijek_dvije_znamenke(int number) {
  if (number < 10) {
    lcd.print("0");
  }
  lcd.print(number);
}

BLYNK_WRITE(V0) {
  tekst = param.asStr();
}

BLYNK_WRITE(V3) {
  x = 1;
}

BLYNK_WRITE(V4) {
  x = 2;
}
void most() {
  ultrazvucni();
  if (udaljenost <= 10) {
    Blynk.virtualWrite(V5, "Most se diĹľe!");
    for (int i = 0; i < 91; i++) {
      Servo1.write(i);
      delay(100);
    }
    Blynk.virtualWrite(V5, "Most se spušta!");
    ultrazvucni();
    while ( udaljenost2 <= 10) {ultrazvucni();}
    for (int i = 0; i < 91; i++) {
      Servo1.write(90 - i);
      delay(100);
    }
    Blynk.virtualWrite(V5, "Most je zatvoren!");
  } else {
    Blynk.virtualWrite(V5, "Most je zatvoren!");
  }
}

void ultrazvucni() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  trajanje = pulseIn(echoPin, HIGH);
  udaljenost = trajanje * 0.034 / 2;
  Serial.print("udaljenost: ");
  Serial.println(udaljenost);
  digitalWrite(trigPin2, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin2, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin2, LOW);
  trajanje2 = pulseIn(echoPin2, HIGH);
  udaljenost2 = trajanje2 * 0.034 / 2;
  Serial.print("udaljenost2: ");
  Serial.println(udaljenost2);
}

Arduino program ovoga projekta možete preuzeti ovdje.

Autori

Projekt su izradili Andrija Palašek i Leo Stričak uz mentorstvo Viktora Lazara iz Međimurskog informatičkog Kluba Čakovec .

 

Projekt je prijavljen na temu: Pametan grad.