Automatic cat drinking water dispenser

Introducere

Proiectul meu este un sistem de umplere automata a unui bol cu apa pentru animale de companie. Acesta re-umple bolul odata la o perioada setata, si pana la un anumit nivel al apei. De asemenea, cand sistemul intra in functiune trimite o notificare pe telefonul utilizatorului.

Ideea a pornit de la nevoia mea de a automatiza acest lucru, avand 2 pisici acasa. Consider ca sistemul ar fi de ajutor oricarui proprietar de pisici sau caini.

Descriere generală

Proiectul foloseste o placa Arduino UNO pentru a comanda o pompa de apa odata la o perioada setata (pentru showcase probabil 30s-1min, in realitate ar fi la nivelul 1h-4h).

Legatura dintre pompa de apa si placa ar fi facuta printr-un relay module de 5v cu un channel. Pentru alimentarea pompei voi folosi 4 baterii tip AA (1.5v).

Pompa va umple un container de apa pana la un anumit nivel, informatie obtinuta cu ajutorul unui senzor de nivel al apei. De asemenea, cand este activata pompa, va fi trimisa o notificare la utilizator prin intermediul modulului de Wi-Fi.

Hardware Design

Hardware Diagram

Hardware Schematic

Components

  1. Arduino UNO board
  2. Breadboard & wires
  3. HC-06 Bluetooth Module
  4. Single-channel 5v Relay Module
  5. 3v-6v Water Pump
  6. 3x 1.5v AA Batteries + Holder
  7. Water Level Sensor
  8. 1k and 2k resistors

Physical hardware

Software Design

#define PUMP_COMMAND 5
#define WLS_VCC 13
#define WLS_IN A0

int count = 0;

ISR(TIMER1_COMPA_vect) {
  count = count + 1;
  if (count == 10) {
    int level = 0;
    Serial.println("Refilling bowl");
    digitalWrite(WLS_VCC, HIGH);

    level = analogRead(WLS_IN);
    Serial.print("Starting level: ");
    Serial.println(level);
    while (level < 400) {
      digitalWrite(PUMP_COMMAND, HIGH);
      delay(10);
      level = analogRead(WLS_IN);
    }
    digitalWrite(PUMP_COMMAND, LOW);
    Serial.print("End level: ");
    Serial.println(level);
    
    digitalWrite(WLS_VCC, LOW);
    Serial.println("Done refilling");
    count = 0;
  }
}

// Gonna have to count 10 times for ~ 45 seconds timer
void configure_timer1() {
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
  OCR1A = 65535;            // compare match register
  TCCR1B |= (1 << WGM12);   // CTC mode
  TCCR1B |= (1 << CS12) | (1 << CS10);    // 1024 prescaler 
}
 
void init_timer1() {
  TIMSK1 |= (1 << OCIE1A);  // enable timer compare interrupt
}

void setup() {
  pinMode(PUMP_COMMAND, OUTPUT);
  pinMode(WLS_VCC, OUTPUT);
  pinMode(WLS_IN, INPUT);
  Serial.begin(9600);
  Serial.println("Hello");

  cli();
  configure_timer1();
  init_timer1();
  sei();
}

void loop() {
  
}

Rezultate Obţinute

Concluzii

Download

Jurnal

Bibliografie/Resurse

pm/prj2023/alexau/cat_water_dispenser.txt · Last modified: 2023/05/30 08:24 by florin.berchez
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0