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 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).

Slika prikazuje pripreme za gradnju kućice.

Slika prikazuje gradnju kućice.

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

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.

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.

Drugi projekti