Skocz do zawartości

Pomocna odpowiedź

Napisano (edytowany)

Witam!

Chciałbym dzisiaj przedstawić swoją konstrukcję, którą nazwałem "automatyczne poidło". Zacznę od początku o Arduino usłyszałem już ok. 4 lata temu jednak postanowiłem, że naukę rozpocznę od elektroniki a później programowania, nadszedł ten czas. Swoją wiedzę opieram na razie tylko na paru lekcjach z forbot.pl (wszystko bardzo fajnie i przystępnie napisane), ale postanowiłem, że z tą skromną wiedzą mógłbym spróbować coś zaprogramować. Głównym celem oprócz oczywistego, tj. wymiany wody w poidłach dla zwierząt, był cel dydaktyczny, czyli na podstawie paru przykładów z miganiem diody, wykorzystać to jakoś praktyczniej. Dlaczego postanowiłem dodać projekt? Odpowiem szczerze, jako młody człowiek mój budżet nie jest ogromny dlatego każda złotówka się liczy.

Części potrzebne do budowy:

-Arduino nano

-Zegar

-Przekaźniki

-Czujnik poziomu cieczy

-Przetwornica step-down

-Diody 3mm

-Wtyk DC

-Gniazdo DC

-Męski goldpin

-Źeński goldpin

-Wtyk RJ11

Części, których nie udało mi się znaleźć z stronie Botlandu:

-Gniazdo RJ11

-Płytka uniwersalna 70x90

-Przyciski

-Obudowa Z77

-Zasilacz 12V

-Kabelki (na pewno są)

-Pompki (nie są drogie na auto złomie zapłaciłem 10zł za 3szt)

-Wężyki

-I oczywiście dobre chęci (nie na sprzedaż)

 

Tutaj zamieszczę kilka zdjęć:

P1221412.thumb.JPG.a22c3a6d82ce6234ce1a67ba6b059468.JPGP1221413.thumb.JPG.a01776497b89c7fdf8b73600f42d81cc.JPGP1221417.thumb.JPG.7da31c74da8b18c4fc516d6f1bc50757.JPGP1221415.thumb.JPG.5daa4be8e163481341f433ec3732efe0.JPGP1221419.thumb.JPG.2759e3c5c1856b83722764fcb06b3e5e.JPGP1221416.thumb.JPG.a40124caf332c4e9e556b9d8cd5dcd94.JPG

 

Teraz przejdę do opisu działania dioda czerwona pierwsza z lewej odpowiedzialna jest za sygnalizowanie działania urządzenia (Jest po prostu podpięta do zasilania Arduino), dioda żółta służy do sygnalizowania trybu wypompowywanie, a dioda zielona trybu wpompowywanie. Przyciski służą do "awaryjnego"/manualnego włączania programów. Przycisk jeden służy do włączenia trybu wypompowywanie, przycisk dwa tryb wpompowywanie, przycisk trzy jest połączeniem obydwu tych przycisków. Normalnie konstrukcja o wskazanych w kodzie godzinach uruchamia się. Wypompowywanie jest ustawione na czas tj. obliczony czas na wypompowanie z chwilą zapasu. Wpompowywanie pompuje aż czujnik poziomu cieczy dostanie sygnał. Z powodu trochę mojej nie wiedzy i mojej ostrożność czujnik ten jest włączany tranzystorem tylko przed programem. Ma to zminimalizować ryzyko pokopania zwierzęcia (pomijam, że i tak bez wyłączania jest bardzo małe). Całość zasilana je  na 12V (napięcie potrzebne dla pompek), a przetwornica step-down służy obniżeniu napięcia na 5V Na wejście Vin

 

Tutaj zamieszczam schemat połączeń:

 

772693744_Screenshotfrom2019-01-2221-33-30.thumb.png.12bf7d617358048ed35df4608cef4681.png

 

Tutaj kod:

#include "Wire.h"       //Biblioteki
#include "TimeLib.h"
#include "DS1307RTC.h"


#define przekaznik_1 2  //przekaźnik 1
#define przekaznik_2 3  //przekaźnik 2
#define przycisk_1 5    //przycisk 1
#define przycisk_2 6    //przycisk 2
#define przycisk_3 7    //przycisk 3
#define led_1 8         //dioda led 1
#define led_2 9         //dioda led 2
#define czujnik 4       //tranzystor włączający czujnik


int godzina1 = 6;     //Pora pierwszego wymienienia wody
int minuta1 = 00;

int godzina2 = 8;     //Pora drugiego wymienienia wody
int minuta2 = 0;

int godzina3 = 10;     //Pora trzeciego wymienienia wody
int minuta3 = 0;

int godzina4 = 12;     //Pora czwartego wymienienia wody
int minuta4 = 0;

int godzina5 = 14;     //Pora piątego wymienienia wody
int minuta5 = 0;

int godzina6 = 16;     //Pora szustego wymienienia wody
int minuta6 = 0;

int godzina7 = 18;     //Pora siódmego wymienienia wody
int minuta7 = 0;

int godzina8 = 20;     //Pora ósmego wymienienia wody
int minuta8 = 0;


void funkcja() {
    digitalWrite(czujnik, HIGH);        //Włącz czujnik
    digitalWrite(led_1, HIGH);          //Włącz diodę 1 (dioda sygnalizująca wypompowywanie)
    digitalWrite(led_2, HIGH);          //Włącz diodę 2 (dioda sygnalizująca wpompowywanie)
    delay(500);                         //Czekaj 0,5s
    digitalWrite(led_2, LOW);           //Wyłącz diodę 2
    delay(500);                         //Czekaj 0,5s
    digitalWrite(przekaznik_1, LOW);    //Włącz przekaźnik 1 (wypompuj wodę)
    delay(3000);                        //Czekaj 3s (czas na wypompowanie, dobierany indywidualnei według potrzeb, ja ustawiłem 3sec, żeby 											 krócej czekać podczas testowania)
    digitalWrite(przekaznik_2, LOW);    //Włącz przekaźnik 2 (po wypompowaniu, chwila na przepłukanie miski, przekaźnik odpowiedzialny za 											wpompowywanie)
    digitalWrite(led_2, HIGH);          //Włącz diodę 2 (dioda sygnalizująca wpompowywanie)
    delay(1000);                        //Czekaj 1s (czas płukania naczynia)
    digitalWrite(led_1, LOW);           //Wyłącz diodę 1
    digitalWrite(przekaznik_1, HIGH);   //Wyłącz przekaźnik 1
    while (analogRead(A0) < 450) {      //Jeżeli mały poziom wody (dopóki na czujniku nie będzie wody, wartość ustawiamy również 												  indywidualnie np. za pomocą przykładu AnalogReadSerial)
      delay(500);                       //Czekaj (czas na wpompowanie)
    }
    digitalWrite(przekaznik_2, HIGH);   //Wyłącz przekaźnik 2 (woda wpompowana przekaźnik wyłączony)
    digitalWrite(led_2, LOW);           //Wyłącz diodę 2
    digitalWrite(czujnik, LOW);         //Wyłącz czujnik
    delay(500);                         //Czekaj 0,5s
}




void setup() {
  pinMode(przekaznik_1, OUTPUT);        //Definiowanie pinów
  pinMode(przekaznik_2, OUTPUT);
  pinMode(przycisk_1, INPUT_PULLUP);
  pinMode(przycisk_2, INPUT_PULLUP);
  pinMode(przycisk_3, INPUT_PULLUP);
  pinMode(led_1, OUTPUT);
  pinMode(led_2, OUTPUT);
  pinMode(czujnik, OUTPUT);

  digitalWrite(czujnik, LOW);           //Wyłączenie diód, przekaźników i czujnika
  digitalWrite(led_1, LOW);             
  digitalWrite(led_2, LOW);
  digitalWrite(przekaznik_1, HIGH);
  digitalWrite(przekaznik_2, HIGH);
}




void loop() {

tmElements_t tm;

  if(RTC.read(tm)) {
  
   if((tm.Hour == godzina1)&&(tm.Minute == minuta1)) {   //Jeżeli godziny się zgadzają
    funkcja();
   }

   if((tm.Hour == godzina2)&&(tm.Minute == minuta2)) {
    funkcja();
   }

   if((tm.Hour == godzina3)&&(tm.Minute == minuta3)) {
    funkcja();
   }

   if((tm.Hour == godzina4)&&(tm.Minute == minuta4)) {
    funkcja();
   }

   if((tm.Hour == godzina5)&&(tm.Minute == minuta5)) {
    funkcja();
   }

   if((tm.Hour == godzina6)&&(tm.Minute == minuta6)) {
    funkcja();
   }

   if((tm.Hour == godzina7)&&(tm.Minute == minuta7)) {
    funkcja();
   }

   if((tm.Hour == godzina8)&&(tm.Minute == minuta8)) {
    funkcja();
   }
  }



  if (digitalRead(przycisk_1) == LOW) { //Jeżeli przycisk 1 wciśnięty
    digitalWrite(led_1, HIGH);          //Włącz diodę 1
    digitalWrite(przekaznik_1, LOW);    //Włącz przekaźnik 1
    delay(3000);                        //Czekaj 3s
    digitalWrite(led_1, LOW);           //Wyłącz diodę 1
    digitalWrite(przekaznik_1, HIGH);   //Wyłącz przekaźnik 1
  }




  if (digitalRead(przycisk_2) == LOW) { //Jeżeli przycisk 2 wciśnięty
    digitalWrite(czujnik, HIGH);        //Włącz czujnik
    digitalWrite(led_2, HIGH);          //Włącz diodę 2
    digitalWrite(led_1, HIGH);
    digitalWrite(przekaznik_2, LOW);    //Włącz przekaźnik 2
    digitalWrite(przekaznik_1, LOW);    //Włacz przekaźnik 1
    delay(3000);                        //Czekaj 3sec (czas na przepłukanie)
    digitalWrite(przekaznik_1, HIGH);   //Wyłacz przekaźnik 1
    digitalWrite(led_1, LOW);
    
    while (analogRead(A0) < 450) {      //Jeżeli niski poziom wody
      delay(500);                       //Czekaj (czas na wpompowywanie)
    }  
  }
    digitalWrite(led_2, LOW);           //Wyłącz diodę 2
    digitalWrite(przekaznik_2, HIGH);   //Wyłącz przekaźnik 2
    digitalWrite(czujnik, LOW);         //Wyłącz czujnik



    
   if (digitalRead(przycisk_3) == LOW) { //Jeżeli przycisk 3 wciśnięty
    funkcja();
   }
  }

 

Uważam, że dość jasno opisałem program (pomijając to, że jest bardzo prosty). Kończąc nie sądzę, żeby program był bezbłędny, sam fakt jak zrobione jest wypompowywanie nie jest idealne, jednak myślę, że jak na pierwszą moją samodzielną konstrukcję nie jest, aż tak bardzo źle, oczywiście jestem otwarty na krytykę. W przyszłości chciałby rozbudować projekt o podajnik jedzenia i może moduł Ethernet. Proszę o odpowiedź czy moja praca nadaje się do otrzymania kuponu rabatowego (bardzo mi na tym zależy)?

Edytowano przez plm2052

Udostępnij ten post


Link to post
Share on other sites

Dziękuję za pochwalenie się projektem! Aktualnie na Forbocie trwa akcja, dzięki której za opis tego DIY możesz otrzymać kod rabatowy o wartości 50 zł do sklepu Botland. Niestety, ale przygotowany przez Ciebie opis nie spełnia założeń tej promocji. Oczywiście możesz to jeszcze poprawić! W przypadku tego wpisu:

  • Popraw formatowanie (wykorzystaj opcję tworzenia list wypunktowanych dostępną w edytorze zamiast ręcznego robienia list produktów).
  • Rozbuduj opis, aby osoba postronna mogła zrozumieć czym tak naprawdę jest to urządzenie. Opisz praktyczne wykorzystanie np. jak i gdzie ta woda jest wpompowywana. Na ten moment ciężko zrozumieć o co dokładnie chodzi. Może jakieś zdjęcie z zainstalowanym układem w docelowym miejscu?

Jeśli chcesz wziął udział w akcji rabatowej to wprowadź powyższe zmiany w opisie, a następnie zgłoś projekt do akcji publikując odpowiedni link w temacie zgłoszeniowym. Dokładne informacje na temat wyglądu poprawnego opisu znajdziesz w ogłoszeniu zapowiadającym akcję rabatową

Udostępnij ten post


Link to post
Share on other sites

@plm2052, czy masz zamiar aktualizować ten opis, czy mam publikować w obecnej formie?

Udostępnij ten post


Link to post
Share on other sites

Temat publikuję aktualnie bez akceptacji do akcji rabatowej w związku z brakiem reakcji autora na moje prośby i pytania.

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...