11 svi 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.
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.
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.
#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.
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.





