Помогите спасти кота от голода)

Тема в разделе "Arduino & Shields", создана пользователем AlexHan, 11 окт 2019.

  1. AlexHan

    AlexHan Нуб

    Ребят я лютый новичок в теме Arduino ,так вот в чем суть проблемы,уезжаем на неделю и не кому кормить кота в наше отсуствие .Решил сделать автокормушку вдохновившись видео роликами .С собиранием всей конструкции все прошло хорошо ,по инструкции.А вот с програмной частью застопорился
    К слову плата китайская uno,драйвера стали хорошо.
    Не могу понять как сделать правильную структуру кода.
    сам механизм прост.Один сервопривод sg90 и в помощь ему модуль времени rtc1307/
    Библиотеки скачаны и установлены.
    Код (C++):

                                                           
    //  Раскомментируйте для программной реализации шины I2C:   //
      #define pin_SW_SDA 5                                    // Назначение любого вывода Arduino для работы в качестве линии SDA программной шины I2C.
      #define pin_SW_SCL 4                                    // Назначение любого вывода Arduino для работы в качестве линии SCL программной шины I2C.
    //  Раскомментируйте для совместимости с большинством плат: //
                                         
    #include <Servo.h>
    #include <Wire.h>  
    #include <DS1307.h>                                 // Подключаем библиотеку ds307 для работы с модулями реального времени.
    Servo servo;                                               // обьявляем объект серво для управления серво-мотором
                                                             
    void setup(){                                               //
        delay(300);                                             // Ждем готовности модуля отвечать на запросы
        Serial.begin(9600);                                     // Инициируем передачу данных в монитор последовательного порта на скорости 9600 бод.
           
        time.begin();                                           // Инициируем работу с модулем.
        //time.settime(0,43,19,13,2,19,3);                        // Записываем время в модуль: 0 сек, 51 мин, 21 час, 27, октября, 2015 года, вторник.

        servo.attach(7);                                       // Определяем пин для управдения серво-мотором
       
        servo.write(0);                                         // Определяем начальное состояние рычага мотора

        delay(5000);                                            // Пауза для установки мотора в начальное положение
         
    }                                                          
    void loop(){                                              
        if(millis()%1000==0){
         
           delay(1);
         
           Serial.println(time.gettime("d-m-Y, H:i:s, D"));       // Для проверки часов, если все ок, то в монитор порта выдается текущее время.

         
          // Если прошла 1 секунда проверяем наши установки по времени для подачи корма
         
          if((time.Hours==7 && time.minutes==30 && time.seconds==0 )||
          (time.Hours==11 && time.minutes==00 && time.seconds==0 )||
          (time.Hours==18 && time.minutes==00 && time.seconds==0 )||
          (time.Hours==19 && time.minutes==58 && time.seconds==0 ))
         
            {
           
             delay(1000);
             servo.write(90);                                 // открываем подачу корма
             delay(1000);                                     // 1 секунда подача корма открыта
             servo.write(0);                                  // закрывает подачу корма
             delay(1000);
            }
        }
    }                                                          
                                                               
     
     
  2. DetSimen

    DetSimen Спамовредитель Модератор

    Жалка. Сдохнет кот. :( Пичальбида
     
    Daniil, Andrey12, Asper Daffy и ещё 1-му нравится это.
  3. Airbus

    Airbus Радиохулиган Модератор

    Так а в чем вопрос?Что не так?
     
    Andrey12 нравится это.
  4. Asper Daffy

    Asper Daffy Гуру

    Пипец коту!

    Отдай лучше в кошачью гостиницу.
     
    Daniil, DetSimen и Andrey12 нравится это.
  5. Andrey12

    Andrey12 Гик

    Вот к этому условию
    Код (C++):
     if((time.Hours==7 && time.minutes==30 && time.seconds==0 )||
          (time.Hours==11 && time.minutes==00 && time.seconds==0 )||
          (time.Hours==18 && time.minutes==00 && time.seconds==0 )||
          (time.Hours==19 && time.minutes==58 && time.seconds==0 ))

    при каком условии
    Код (C++):
    if(millis()%1000==0){

           delay(1);
    Вы просто рискуете не попасть.


    Внизу конечно жуть жуткая, так не делают, но до обеда 20 минут, а котика вашего жалко, может и не скомпилиться, но направление думаю верное. Пробуйте, не опускайте руки!

    Код (C++):

                                                       
    //  Раскомментируйте для программной реализации шины I2C:   //
      #define pin_SW_SDA 5                                    // Назначение любого вывода Arduino для работы в качестве линии SDA программной шины I2C.
      #define pin_SW_SCL 4                                    // Назначение любого вывода Arduino для работы в качестве линии SCL программной шины I2C.
    //  Раскомментируйте для совместимости с большинством плат: //
                                     
    #include <Servo.h>
    #include <Wire.h>
    #include <DS1307.h>                                 // Подключаем библиотеку ds307 для работы с модулями реального времени.
    Servo servo;                                               // обьявляем объект серво для управления серво-мотором
                                                         
    void setup(){                                               //
        delay(300);                                             // Ждем готовности модуля отвечать на запросы
        Serial.begin(9600);                                     // Инициируем передачу данных в монитор последовательного порта на скорости 9600 бод.
       
        time.begin();                                           // Инициируем работу с модулем.
        //time.settime(0,43,19,13,2,19,3);                        // Записываем время в модуль: 0 сек, 51 мин, 21 час, 27, октября, 2015 года, вторник.

        servo.attach(7);                                       // Определяем пин для управдения серво-мотором

        servo.write(0);                                         // Определяем начальное состояние рычага мотора

        delay(5000);                                            // Пауза для установки мотора в начальное положение
     
    }                                                      
    void loop(){
       static uint8_t lPrewSec = 0;
       static uint8_t lPrewMin= 0;
       static bool   lKotEl = false;
                                               
        if((time.seconds != lPrewSec) &&  !(lKotEl)){
          lPrewSec = time.seconds;
          if((time.Hours==7 && time.minutes==30)||
          (time.Hours==11 && time.minutes==00)||
          (time.Hours==18 && time.minutes==00)||
          (time.Hours==19 && time.minutes==58))
             {
               delay(1000);
               servo.write(90);                                 // открываем подачу корма
               delay(1000);                                     // 1 секунда подача корма открыта
               servo.write(0);                                  // закрывает подачу корма
               delay(1000);
               lKotEl = true;
               lPrewMin = time.minutes;
            }
        }

    if((time.minutes != lPrewMin ) &&  lKotEl){
       lKotEl = false;
    }
    lPrewSec = time.seconds;

    }    
     
    Последнее редактирование: 11 окт 2019
  6. b707

    b707 Гуру

    и условие можно записать несколько короче :). например так
    Код (C++):
     if( (time.seconds==0 ) &&
          ((time.Hours==7 && time.minutes==30)||
          (time.Hours==11 && time.minutes==0)||
          (time.Hours==18 && time.minutes==0)||
          (time.Hours==19 && time.minutes==58)) )
     
    DetSimen и Andrey12 нравится это.
  7. issaom

    issaom Гик

    А скиньте инструкцию если не сложно? А вообще на неделю я бы не рисковал.... Могут свет выключить или серву может заклинить.... Интересно посмотреть конструкцию дозатора на сколько он безотказен....
     
    b707 нравится это.
  8. b707

    b707 Гуру

    вот и мне
    ИМХО, механическая часть дозатора в этом проекте - самое интересное. а код к нему написать любой школьник может...
     
  9. AlexHan

    AlexHan Нуб

    инструкция по которой собрал
     
  10. AlexHan

    AlexHan Нуб

    Сестра будет приходить, но часто не может, далеко живёт. 1 раз в три дня проведать может. Но кот весь корм сколько бы не дожили съедает за раз) поэтому нужна дозировка
     
  11. Igor68

    Igor68 Гуру

    Странный кот однако. Моему такая конструкция по барабану. Всё сломает, достанет и сьест. Закрывать надо. А холодильник открывать пока не могёт. Лапой умудряется двери открывать, потому все они с замками(захлопываются). А если их (котов) банда, как у меня, то вообще глаз да глаз. Тапки и ботинки таскают по всей хате если не закрыть. А утром в 4 часа грохот стоит - резвятся.
    Если сделали кормушку, то несколько строк кода Вам не составит труда.
     
  12. issaom

    issaom Гик

    Я вот такой вариант делал - с самообслуживанием :)
    Серву отключал ключом на транзюке от питания на случай застревания корма в дозаторе шоб не гудела, а еще был резюк для регулировки объема порции (регулировал угол открытия дозатора) рекомендую поставить так как корм бывает разный )))
    http://forum.amperka.ru/threads/Кормушка-для-кошки-на-arduino.9748/
     
  13. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Оставьте таз воды и мешок сухого корма. Только мешок не пленочный, а то задохнуться могет, а таз широкий и низкий, чтоб не утонул и не перевернул. Неделя не месяц - переживет запросто. А че родственница не возьмет кота на время ? Кот не собака, хлопот не много, а развлечение классное. А ему бедолаге как одному скучно будет ? Он вашу ардуину как игрушку будет гонять.
    ПС. Оставьте миску сгущенки дешовой на случай запора у кота. Это советы если с ардуиной не успеете.
     
    Последнее редактирование: 11 окт 2019
    Igor68 нравится это.
  14. Tomasina

    Tomasina Сушитель лампочек Модератор

    Отдайте ключи соседям, не губите животное.
     
    Airbus, Daniil и Asper Daffy нравится это.
  15. DetSimen

    DetSimen Спамовредитель Модератор

    Мой кот спрашивает, как ты, мешок кожаный, с такими познаниями в прграммировании, можешь доверить такое отвецтвенное дело, как кормление своего властелина, какой-то бездушной железяке?
     
    SergeiL, BAR__MEN, Ariadna-on-Line и 2 другим нравится это.
  16. Asper Daffy

    Asper Daffy Гуру

    Блин, а чё не с официанткой? С обычной - аналоговой? Разве не круче?
     
  17. parovoZZ

    parovoZZ Гуру

    А говно кто будет убирать? Они же чистоплотные - если туалет полный, найдут другой угол.
     
    beton66, SergeiL, BAR__MEN и ещё 1-му нравится это.
  18. issaom

    issaom Гик

    В городе эта штука была больше игрушкой для кота, а вот на даче это была защита от поедания корма соседскими котами и кошками ;-)
     
    SergeiL и DetSimen нравится это.
  19. Arkad

    Arkad Нерд

    Автоматика не для этого, хотя можно автоматизирвать и туалет для кота и видео контроль сделать. Цена вопроса
     
  20. Airbus

    Airbus Радиохулиган Модератор

    Гостинница для кошек и собак.Дешевле и проще.
     
    Arkad нравится это.