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.