Smart Dog House
Međimurski informatički klub ČakovecSvako 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 ako njegov kućni ljubimac boravi u kućici i ako je 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.
Video snimka
Izrada projekta
Glavni dio projekta uz „mozak“ koji predstavlja Arduino MKR 1000 su ultrazvučni senzor, senzor za toplinu i vlagu, te takozvani step motor.
Najteži dio projekta bilo je programiranje Step motora zato što se isti programira drugačije od ostalih motora (DC motor i servo motor).
Mobilna aplikacija
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 projekta
Arduino program
#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.
Autori
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.