This shows you the differences between two versions of the page.
pm:prj2023:alexau:cat_water_dispenser [2023/05/21 15:29] florin.berchez [Hardware Design] |
pm:prj2023:alexau:cat_water_dispenser [2023/05/30 08:24] (current) florin.berchez [Descriere generală] |
||
---|---|---|---|
Line 14: | Line 14: | ||
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). | 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 3 baterii tip AA (1.5v). | + | 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. | 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. | ||
Line 46: | Line 46: | ||
===== Software Design ===== | ===== Software Design ===== | ||
- | ===== Rezultate Obţinute ===== | + | <code> |
+ | #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() { | ||
+ | | ||
+ | } | ||
+ | </code> | ||
+ | ===== Rezultate Obţinute ===== | ||
+ | [[https://youtube.com/shorts/IWTUQnzX_lU?feature=share|Demo proiect]] | ||
===== Concluzii ===== | ===== Concluzii ===== | ||