Automatyczny dyspenser karmy

Automatyczny dyspenser karmy

Wakacje to okres, gdy często wyjeżdżamy z domu na dłuższy czas. Jeśli nie mamy nikogo, kto może zająć się naszymi zwierzętami domowymi w pełnym zakresie godzin, to automatyczny karmnik może być idealnym rozwiązaniem, aby nasz pupil bezpiecznie czekał do naszego powrotu.

Automatyczne dyspensery do karmy dla zwierząt, które wydają im w określonych momentach pewną ilość karmy to nic nowego. Tego rodzaju urządzenia dostępne są komercyjnie na rynku już od dłuższego czasu. To świetne rozwiązanie dla zapracowanych właścicieli zwierząt domowych. W poniższym projekcie prezentujemy modyfikację klasycznego dozownika karmy. Ten zaprezentowany w tym artykule sterowany jest przez Twittera – karmnik automatycznie dozuje jedzenie w odpowiedzi na aktywność na skojarzonym koncie na Twitterze. Projekt jest kontrolowany przez Arduino i wykorzystuje moduł (shield) Arduino Ethernet do odbierania danych z Twittera.

Potrzebne elementy

W pierwszej kolejności potrzebny będzie elektroniczny karmnik. Wystarczy każdy, który pozwala na elektryczne sterowanie dozownikiem karmy. Autor zastosował prosty dozownik, który sterowany jest z pomocą przycisków. Jedynym problemem, jaki pozostał do rozwiązania, było naciskanie przycisków. Zostało to zrealizowane za pomocą fotorezystorów.

Do zestawienia prostego układu, sterującego dwoma przyciskami dyspensera potrzebne będą:

  • cztery fotooporniki CdS lub podobne, o rezystancji odwrotnie proporcjonalnej do natężenia oświetlenia,
  • dwa oporniki 10 kΩ oraz dwa oporniki 4,7 kΩ,
  • dwie superjasne białe diody elektroluminescencyjne,
  • oporniki do ograniczenia prądu diod LED,
  • dwa microswitche.

Aby obliczyć wartość rezystancji opornika, ograniczającego prąd diod LED musimy znać dwa parametry diod LED – prąd pracy oraz spadek napięcia. Dla użytych przez autora białych diod parametry te wynoszą odpowiednio, 30 mA oraz 3,6 V. Aby obliczyć wartość rezystora korzystamy ze wzoru:

Gdzie VCC to napięcie zasilania (w naszym przypadku 5 V), VLED to spadek napięcia na diodzie (3,6 V), a ILED to prąd diody, jaki chcemy ustawić w naszym systemie (30 mA). Zatem (5 V–3,6 V)/(0,03)≈47 Ω. Zaokrąglając wartość opornika do najbliższej z szeregu (na ogół E24 – ±5%), warto zaokrąglać w górę, aby nie przekroczyć zadanego prądu, co mogłoby doprowadzić do uszkodzenia diody LED.

Oprócz powyższych elementów potrzebne będą jeszcze:

  • moduł Arduino UNO lub inny, kompatybilny moduł z mikrokontrolerem,
  • płytka Arduino Shield,
  • płytka uniwersalna,
  • goldpiny,
  • baterie lub zasilacz 5 V do zasilania Arduino, diod LED itd.

Jeśli chodzi o narzędzia, potrzebne będą lutownica do wykonania połączeń poszczególnych elementów oraz wiertarka do wykonania przeróbek w obudowie i elektronice dyspensera do karmy.

Adaptacja komercyjnego dozownika karmy

Autor konstrukcji do swojego projektu wybrał niedrogi dyspenser, który zakupił przez internet, pokazany na fotografii tytułowej. Najpierw należy dostać się do jego wnętrza. Model ten otwiera się po odkręceniu ośmiu śrub z podstawy karmnika i ostrożnym uniesieniu dolnego panelu dyspensera. Podczas zdejmowania dolnego panelu trzeba uważać – w systemie znajduje się kilka przewodów, które na stałe łączą dolny panel z korpusem. Uważajcie, aby ich nie nadwerężać czy uszkodzić.

Fotografia 1. Elektronika w dyspenserze karmy

Następnie z systemu możemy odkręcić płytkę drukowaną z elektroniką, kontrolującą urządzenie. Należy wykręcić sześć małych śrubek z płytki sterującej. Jedna ze śrub jest ukryta pod małą płytką drukowaną na górze głównej płytki drukowanej. Elektronikę od strony tej małej płytki pokazano na fotografii 1. Po wykręceniu wszystkich śrub płytki, powinno być możliwe łatwe zdjęcie plastikowej obudowy. Można teraz przystąpić do modyfikacji elektroniki.

Rysunek 1. Schemat elektryczny układu sterującego

Na rysunku 1 został pokazany schemat elektryczny układu. Podajnik zastosowany w projekcie jest przeznaczony do ręcznego dozowania żywności, gdy przyciski „ustaw” i „objętość” są wciśnięte w tym samym czasie. Podłączając światłoczułe rezystory do tych przycisków, możliwe jest symulowanie zadziałania przycisku w bardzo prosty sposób. Gdy fotorezystory nie są wystawione na działanie światła, ich opór jest bardzo wysoki – tak właśnie jest w stanie domyślnym, ponieważ w obudowie urządzenia jest ciemno. Procesor w podajniku będzie uznawał, że przyciski nie są naciśnięte. Gdy poprzez Arduino zostanie zaświecona dioda LED w pobliżu fotorezystora, opór tego elementu zmniejszy się na tyle nisko, aby procesor podajnika odczytał to, jako naciśnięcie przycisku. Do diod LED dołączone są również dwa dodatkowe microswitche. Pozwalają one ręcznie włączać diody LED w celu testowania i debugowania systemu. Te przyciski nie są niezbędne w projekcie, ale są przydatne podczas pierwszego uruchamiania urządzenia.

Całość zasilana jest z baterii dozownika. Wykorzystuje on cztery baterie rozmiaru D (LR20) połączone szeregowo, co daje około 6 V, z których można zasilać Arduino i jego peryferia. Jeśli nie chcemy stosować dodatkowego zasilacza, może to być dostateczne źródło prądu.

Modyfikacja przycisków

Aby podłączyć się do przycisków sterujących dyspenserem, należy zlokalizować je na płytce drukowanej. Najprościej zrobić to porównując rozkład przycisków na PCB z podpisami na obudowie. Na przyciskach znajdują się drobne, metalowe blaszki, które pełnią rolę przycisku, zwierającego ze sobą dwa pola pod naciskiem. Aby zmodyfikować urządzenie należy w pierwszej kolejności usunąć te blaszki.

Fotografia 2. Oryginalna płytka drukowana dyspensera karmy (a) i wykonane przeróbki (b)

Na fotografii 2a pokazano płytkę drukowaną urządzenia. W górnej części PCB widać pola lutownicze ze zdjętymi blaszkami. Każdy zewnętrzny pierścień pod przyciskiem ma wywiercone dwa otwory, w których osadzone są blaszki. W płytce drukowanej należy wywiercić dwa dodatkowe otwory – po jednym w każdym z wewnętrznych okrągłych pól przycisku, tak jak pokazano na fotografii 2b. Następnie do płytki należy przylutować cztery przewody tak, aby każdy z czterech odsłoniętych padów przycisków miał jeden przewód podłączony do niego. Teraz można płytkę zainstalować z powrotem na jej oryginalnym miejscu i podłączyć do Arduino.

Emulowane przyciski

W następnej kolejności należy budować emulator przycisków, wykorzystujący fotooporniki. W tym celu zastosowana zostanie płytka uniwersalna z wlutowanymi goldpinami, taka jak pokazano na fotografii 3a.

Fotografia 3. Płytka uniwersalna emulatora przycisków (a), zamontowana do modułu z Ethernetem (b)

Następnie zostaje ona umieszczona na module z Ethernetem (fotografia 3b). Płytka prototypowa zawiera obwody, które umożliwiają modułowi Arduino sterowanie przyciskami. Goldpiny połączone są do pinów 0...7 linii zasilania, analogowych i cyfrowych. Większość z nich nie jest wykorzystywana przez system i jest wlutowana tam tylko po to, aby ustabilizować płytkę uniwersalną na module sieciowym.

Następnie należy wlutować dwa oporniki ograniczające prąd diod LED – w naszym przypadku 47 Ω. Z jednej strony rezystory te łączymy z cyfrowymi wyjściami Arduino – 2 oraz 3. Następnie zaginamy diody LED i lutujemy je na płytce, łącząc ich anody z wcześniej wlutowanymi opornikami 47 Ω. Katody diod łączymy z masą obwodu.

Fotografia 4. Płytka emulatora przycisków z wlutowanymi diodami LED i fotorezystorami

Diody LED muszą być zamontowane tak, jak pokazano na fotografii 4. Następnie należy zainstalować fotooporniki – po dwa, połączone szeregowo, na każdą diodę LED. Należy zainstalować je na płytce uniwersalnej naprzeciwko diod LED. Dodatkowo, do fotooporników dołączane są szeregowo rezystory 4,7 kΩ oraz 10 kΩ.

Teraz do płytki można dołączyć zasilanie z baterii w urządzeniu i finalnie przylutować przewody z przycisków na oryginalnej płytce dyspensera. Na tym etapie można zmontować całość oraz wykonać otwory w obudowie do podłączenia kabla Ethernetowego oraz USB do Arduino.

Firmware

Oprogramowanie będzie odczytywać dane przychodzące z Twittera, więc jeśli na wskazanym koncie (nomnomnomfeeder) pojawi się tweet „feed me!” Arduino zapali dwie diody LED podłączone do pinów 2 i 3 na 1 sekundę, powodując rozpoczęcie sekwencji dostarczania żywności. Kod programu pokazano na listingu 1.

Listing 1. Oprogramowanie dyspensera sterowanego z Twittera #include <SPI.h> #include <Ethernet.h> boolean justFed = 1;   //zmienna zapobiegająca przekarmieniu byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01 };  // Adres MAC IPAddress ip(190,298,34,132);               // Adres IP EthernetClient client;  // inicjalizacja biblioteki const int requestInterval = 60000;    // opóźnienie pomiędzy zapytaniami char serverName[] = "api.twitter.com";  // URL Twittera boolean requested;                    // flaga zapytania long lastAttemptTime = 0;             // licznik czasu od ostatniego zapytania String currentLine = "";              // bufor dla linijki pobranej z serwera String tweet = "";                    // bufor całego tweeta boolean readingTweet = false;         // flaga czytania tweeta void setup() {  pinMode(2, OUTPUT);  pinMode(3, OUTPUT);  // rezerwacja pamięci dla buforów  currentLine.reserve(256);  tweet.reserve(150);  Serial.begin(9600);     // inicjalizacja portu szeregowego  if (!Ethernet.begin(mac)) { // próba inicjalizacji DHCP    Ethernet.begin(mac, ip);  // stałe IP w prypadku niepowodzenia  }  connectToServer();      // połączenie z serwerem Twittera  testing();          // autotest sprzętu } void loop() {  if (justFed){    if (client.connected()) {      if (client.available()) {        char inChar = client.read();      // odczytaj nadchodzące bity        currentLine += inChar;          // dodaj odczytane bity do linii        if (inChar == ‘\n’) {         // nowa linia          currentLine = "";        }    // jeśli linia kończy się tagiem <text>, dalej znajduje sę tweet        if ( currentLine.endsWith("<text>")) {          readingTweet = true;          // początek tweeta          tweet = "";        }        // jeśli czytane są bity tweeta, dodawane są do bufora tweeta        if (readingTweet) {          if (inChar != ‘<’) {            tweet += inChar;          }          else {            // znak "<" oznacza koniec tweeta            readingTweet = false;            Serial.println(tweet);            if(tweet == ">feed me!"){             digitalWrite(2, HIGH);             digitalWrite(3, HIGH);             Serial.println("LED ON!");             delay(1000);             // włącz na 1 sekundę             digitalWrite(2, LOW);             digitalWrite(3, LOW);             justFed = 0;            }            if(tweet != ">feed me!"){             digitalWrite(2, LOW);             digitalWrite(3, LOW);             Serial.println("LED OFF!");            }            client.stop();            // zatrzymaj połączenie z serwerem          }        }      }       }    else if (millis() - lastAttemptTime > requestInterval) { // cykliczne powtarzanie zapytania      connectToServer();    }  }  else if (millis() - lastAttemptTime > 14400000){ // jeżeli minęły 4h od ostatniego karmienia    justFed = 1;  } } void testing(){  digitalWrite(2, HIGH);  digitalWrite(3, HIGH);  delay(1000);  digitalWrite(2, LOW);  digitalWrite(3, LOW); }   void connectToServer() {  Serial.println("connecting to server...");  // spróbuj się połączyć i poczekaj 1 ms  if (client.connect(serverName, 80)) {    Serial.println("making HTTP request...");  // zapytanie HTTP GET do serwera Twittera    client.println("GET /1/statuses/user_timeline.xml?screen_name=nomnomnomfeeder&count=1 HTTP/1.1");    client.println("HOST: api.twitter.com");    client.println();  }  lastAttemptTime = millis();         // zapisz czas wysłania zapytania }   

Program działa w dużej pętli, kontrolowanej flagą, która sygnalizuje czy dyspenser wydał posiłek czy nie.

Flaga jest zerowana co cztery godziny. Jeśli flaga pozwala na kolejne karmienie, system łączy się z Twitterem, pobiera nowego tweeta i parsuje go. Jeśli nie ma tweeta lub ma on inną treść, niż ustalona, nie dzieje się nic, a system oczekuje przez ustalony czas (domyślnie 1 minuta), przed wysłaniem kolejnego zapytania.

Autor do kompilacji swojego firmware wykorzystał Arduino 1.0, ale nowsze wersje powinny równie dobrze działać. Firmware korzysta z dwóch bibliotek, które w wersji 1.0 są domyślnie zainstalowane:

  • Ethernet (dla nakładki Ethernet),
  • EthernetDHCP (do samodzielnej konfiguracji adresu IP, jeśli sieć korzysta z DHCP).

W kodzie trzeba dokonać dwóch edycji, zanim oprogramowanie będzie gotowe do użycia. Po pierwsze – należy wprowadzić adres IP urządzenia, który musi pasować do sieci, w jakiej pracować ma system, np.:

IPAddress ip(190,298,34,132);

Jeśli nie znamy adresu IP, jaki poprawnie pracować będzie w naszej sieci, to można skorzystać z funkcji DHCP. Wtedy router automatycznie nada numer IP modułowi po podłączeniu go do sieci.

Po drugie – należy również wprowadzić nazwę użytkownika swojego konta na Twitterze w następującym wierszu, zastępując NAZWA:

client.println("GET /1/statuses/user_timeline.xml?screen_name=NAZWA&count=1 HTTP/1.1");

Jedyne, co pozostało, to zaprogramować płytkę Arduino, podłączyć kabel sieciowy i napisać na Tweeterze ustalony wpis. Dyspenser powinien zareagować w czasie minuty lub mniej. Podajnik nie będzie odbierać kolejnych tweetów przez cztery godziny (aby zapobiec nadmiernemu karmieniu), w tym czasie wystarczy dodać kolejną wiadomość, aby zastąpić „feed me!” jako ostatnią wiadomość na koncie.

Podsumowanie

Urządzenie jest proste w montażu i obsłudze. Wystarczy podłączyć podajnik do internetu, założyć konto na Twitterze i tweetować hasło ustawione w oprogramowaniu. W ciągu minuty karmnik wyda karmę a my możemy być spokojni o naszego pupila (fotografia 5).

Fotografia 5. Końcowy test urządzenia zakończony pełnym sukcesem

Bazując na oprogramowaniu pokazanym w tym projekcie można sterować także wieloma innymi urządzeniami. Jest to doskonały przykład tego, jak w prosty sposób można automatyzować dowolne urządzenia elektroniczne, korzystając z darmowego portalu społecznościowego.

Nikodem Czechowski, EP

Źródło:
https://bit.ly/3zJ6BE6
https://bit.ly/3BLNvPS
https://bit.ly/3zAIWFY

Artykuł ukazał się w
Elektronika Praktyczna
sierpień 2021
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik marzec 2025

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio marzec - kwiecień 2025

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje marzec 2025

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna marzec 2025

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich kwiecień 2025

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik marzec 2025

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio marzec - kwiecień 2025

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje marzec 2025

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna marzec 2025

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich kwiecień 2025

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik marzec 2025

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio marzec - kwiecień 2025

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje marzec 2025

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna marzec 2025

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich kwiecień 2025

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów