11 svi Smart Dog House
Međimurski informatički klub Čakovec
Svako od nas voli svojeg kućnog ljubimca. Prema istraživanju Gfk 41% građana Republike Hrvatske ima psa kao kućnog ljubimca. Pametna pseća kućica je osmišljena da vlasnici kućnog ljubimca imaju stalni nadzor nad uvjetima koje njihov kućni ljubimac ima u psećoj kućici. Model pseće kućice koju smo izradili koristi ultrazvučni senzor koji šalje podatak na mobilnu aplikaciju o prisutnosti kućnog ljubimca u kućici. Tako da u slučaju potrebe, vlasnik može znati boravi li njegov pas u kućici i je li zaštićen od nepovoljnih vremenskih uvjeta.
Briga za svog kućnog ljubimca nije samo u tome je li on u svojoj kućici već jesu li uvjeti koji tamo vladaju prikladni za njega. Stoga smo instalirali senzor za temperaturu i vlagu dht11 za određivanje temperature i vlage u kućici, te se taj podatak šalje na mobilnu aplikaciju.
Ako smo odsutni od kuće, više nije potrebno moliti nekog da nam nahrani našeg kućnog ljubimca. U pseću kućicu instalirali smo automatsku hranilicu, koja prema pritisku gumba na mobilnoj aplikaciji pokreće motor koji otvara vrata hranilice i ispušta hranu. Isti je postupak za zatvaranje hranilice. Za to je korišten Step-motor.
Blynk aplikacija sastoji se od četiri widgeta.
Prvi widget detektira prisutnost našeg kućnog ljubimca u psećoj kućici, te ispisuje rečenicu „Pas je u kućici“, odnosno ako je kućni ljubimac izvan svoje kućice ispisuje rečenicu „Pas nije u kućici“;
Drugi widget na sebi ima gumb za otvaranje i zatvaranje hranilice. Treći widget je „gauge“ na kojemu je grafički prikazana temperatura. Četvrti widget korišten je za prikazivanje vlage.
Shema prikazuje na koji smo način spojili ključne dijelove projekta – Arduino MKR 1000, ultrazvučni senzor, senzor za toplinu i vlagu i step motor.
#define BLYNK_PRINT /*
#include
#include
#include
#include “DHT.h”
#include
#define BLYNK_PRINT SerialUSB
# define DHT11_PIN 7 dht
# define DHTPIN 6
# define DHTTYPE DHT11
# define IN1 9
# define IN2 10
# define IN3 11
# define IN4 12
# define echoPin 7
# define trigPin 8
const int trigPin = 2;
const int echoPin = 1;
char auth[] = “auth token”;
char ssid[] = “ssid”;
char pass[] = “pass”;
long trajanje, udaljenost;
int koraci = 0;
boolean smjer = true;
unsigned long zadnji_put;
unsigned long trenutno;
int preostala_pomicanja = 4095;
long vrijeme;
DHT dht(DHTPIN, DHTTYPE);
BLYNK_WRITE(V3) {
while (preostala_pomicanja > 0) {
if (micros() – zadnji_put >= 1000) {
stepper(1);
vrijeme = vrijeme + micros() – zadnji_put;
zadnji_put = micros();
preostala_pomicanja–;
}
}
delay(500);
smjer = !smjer;
preostala_pomicanja = 1500;
while (preostala_pomicanja > 1000) {
trenutno = micros();
if (trenutno – zadnji_put >= 1000) {
stepper(1);
vrijeme = vrijeme + micros() – zadnji_put;
zadnji_put = micros();
preostala_pomicanja–;
}
}
}
void setup() {
SerialUSB.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Blynk.begin(auth, ssid, pass);
Serial.begin(9600);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void stepper(int xw) {
for (int x = 0; x < xw; x++) { switch (koraci) { case 0: digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); break; case 1: digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, HIGH); break; case 2: digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); break; case 3: digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); break; case 4: digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); break; case 5: digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); break; case 6: digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); break; case 7: digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); break; default: digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); break; } smjerFunkcija(); } } void smjerFunkcija() { if (smjer == 1) { koraci++; } if (smjer == 0) { koraci–; } if (koraci > 7) {
koraci = 0;
}
if (koraci < 0) { koraci = 7; } } void loop() { Blynk.run(); digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); trajanje = pulseIn(echoPin, HIGH); float temperatura = dht.readTemperature(); float vlaga = dht.readHumidity(); Blynk.virtualWrite(V6, int(temperatura)); Blynk.virtualWrite(V8, int(vlaga)); udaljenost = trajanje / 58.2; Serial.println(udaljenost); if (udaljenost > 20) {
Blynk.virtualWrite(V7, “Pas je u kućici”);
} else {
Blynk.virtualWrite(V7, “Pas nije u kućici”);
}
}
Arduino program ovoga projekta možete preuzeti ovdje.
Projekt su izradili Leo Stričak i Andrija Palašek uz mentorstvo Viktora Lazara iz Međimurskog informatičkog kluba Čakovec.
Projekt je prijavljen na temu: Internet of Things: Kućni ljubimci i domaće životinje.