17 March 2015

Создаем полностью автоматическую ферму

Хакспейс клуб «minirobot» corporate blogWebsite development
Продолжаем обзор деятельность нашего Хакспейс-клуба.

Родилась идея сделать очень практичную вещь, автоматическую ферму. Дело в том, что мы живем в Сибири и часто ездим отдыхать в Крым. На берегу моря у нас есть мини-гостиница и вот, что бы она не простаивала большую часть года, решили сделать около нее ферму, свежую курятинку отдыхающим гостям к столу совсем не лишнее будет. А так как мы живем за 4500 километров от Крыма, то нужно сделать ферму полностью автоматизированной с удаленным управление и видео-наблюдением.



Для начала, думаю, заведем курочек, по крайней мере у меня родители держали кур, я знаю как за ними ухаживать.
Мозги решили сделать на Raspberry Pi, некогда уже было заморачиваться с контроллером, (через неделю отпуск, еду в Крым) нужно прикручивать к нему интернет для управления. А на Raspberry Pi на борту уже все есть.
Сразу же настроили сторожевой таймер, так называемый WatchDog (сторожевой пес), что бы при зависании системы, Raspberry Pi перегружался автоматически. Процесс настройки не буду описывать подробно об этом можно почитать, например, вот здесь.

В качестве драйвера двигателей и клапанов подачи воды использовали сборку на микросхеме l298n. Двигатели постоянного тока с редуктором. Клапан для подачи воды используем от стиральной машинки на 220 вольт. Сейчас заказали на 12 вольт, все-таки безопасней, мало ли курам что взбредет.

Получилось как на фото:



Тут нет ни каких премудростей, Каждый драйвер принимает 4 сигнала с CPIO Raspberry Pi и выдает усиленное логическое 0 или 1 для двигателя или клапана.

Использовали три сборки драйвера двигателей, получилось 12 выходов для подключения двигателей и клапанов воды. Обратной связи на начальном этапе конструирование фермы не предполагается. Контроль будем осуществлять по видеокамере. В дальнейшем необходимо будет сделать контроль тока двигателей, что бы можно было автоматически включить реверс, либо остановить двигатель в случае застревания и контроль уровня воды в поилке.

Программу написали на С, используя библиотеку WiringPi, в интернете ее легко найти. Программа в бесконечном цикле считывает системное время и если наступило время 6 часов утра, 12 дня или 19 вечера, то она включает последовательно клапан подачи воды – наполняет поилки с водопроводной трубы, двигатель одного корма, двигатель второго корма и третьего, что бы разнообразить рацион питания питомцев.

Листинг программы.

полный код можно посмотреть здесь.
/*  cc -o kura kura.c -L/usr/local/lib -lwiringPi
 * kura.c:
 *     
 */

#include <wiringPi.h>
#include <wiringSerial.h>
#include <stdio.h>
#include <time.h>


int main (void)
{
for(;;)
{

     time_t rawtime;
     struct tm * timeinfo;
     time ( &rawtime );
     timeinfo = localtime ( &rawtime );
     printf ( "datetime %s\n", asctime (timeinfo) );
    int tt_hour = timeinfo->tm_hour;
    int tt_min = timeinfo->tm_min;
    int tt_sec = timeinfo->tm_sec;
     printf ( "hour - %d\n", tt_hour);
     printf ( "min - %d\n", tt_min);

     if ((tt_hour == 06 & tt_min == 01 & tt_sec == 01) || (tt_hour == 12 & tt_min == 01 & tt_sec == 01) || (tt_hour == 19 & tt_min == 01 & tt_sec == 01))
    {
     korm(25);
     printf ( "datetime %d\n", tt_hour);
    }
}
  return 0;
}

int korm (int _p)
{
  printf("korm0\n");

// 1 draiver motora
  int pin0 = 0;    //11 noga
  int pin1 = 1;    //12
  int pin3 = 3;    //15
  int pin4 = 4;    //16

// 2 draiver motora
  int pin7 = 7;    //7 noga
  int pin5 = 5;    //18
  int pin6 = 6;    //22
  int pin10 = 10;  //24

// 3 draiver motora
  int pin11 = 11;   //26 noga
  int pin12 = 12;   //19
  int pin13 = 13;   //21
  int pin14 = 14;   //23

  int i;
  if (wiringPiSetup() == -1)
    return (1);
  pinMode(pin0, OUTPUT);
  pinMode(pin1, OUTPUT);
  pinMode(pin3, OUTPUT);
  pinMode(pin4, OUTPUT);

  pinMode(pin7, OUTPUT);
  pinMode(pin5, OUTPUT);
  pinMode(pin6, OUTPUT);
  pinMode(pin10, OUTPUT);

  pinMode(pin11, OUTPUT);
  pinMode(pin12, OUTPUT);
  pinMode(pin13, OUTPUT);
  pinMode(pin14, OUTPUT);

  printf("korm1\n");

for(i = 0; i <= _p; i++)
{
//    digitalWrite(pin1, 0);
//    digitalWrite(pin2, 0);
    digitalWrite(pin0, 0);
    digitalWrite(pin1, 1);
    printf("Motor On\n");
    delay(4500);
//    digitalWrite(pin1, 0);
    digitalWrite(pin0, 0);
    digitalWrite(pin1, 0);
//    digitalWrite(pin14, 0);
    printf("Motor Off\n");
    delay(1500);
}
return (0);
}




В последствии легко поменять программу, просто удаленно зайти на Raspberкy Pi убить процесс и запустить новую программу, которая будет давать, например утром один корм, вечером другой.

Видел в интернете множество конструкций бункерной кормушки без всякой электроники типа такой:



Есть у них один большой недостаток, кур надо кормить разнообразным кормом, а при такой кормушке, они с начало съедят самый вкусный корм, например за месяц, а потом, будут оставшиеся 2 месяца, есть другой корм. Опять-таки слеживание корма, когда он вообще перестанет поступать и наверно еще есть недостатки…

Конструкцию кормушки путем общего обсуждения решили сделать на основе вертикального шнека. Если делать просто открывание заслонки или горизонтальный шнек под бункером, то корм может слеживаться, а при вертикальном шнеке есть шанс, что корм будет размешиваться.



Кроме того, на месте подумаю над тем, что бы поставить двигатель для вибрации бункера.
Включать его буду отдельной программой, удаленно, при необходимости.
Двигатели решили подключить, так, что бы можно было включить реверс. Хоть это и расточительно для Raspbery Pi использовать два выхода CPIO для одного двигателя постоянного тока, зато есть реверс, который позволит при застревании, хоть что-то сделать.
Итого из 12-ти CPIO — 8 на двигатели шнека 2 на основное и резервное водоснабжение и 2 на вибромоторы. Может на месте в процессе монтажа что-то изменим.
В следующий раз мы в Крым поедим в июле, т.е три месяца ферма должна проработать в автоматическом режиме. Рассчитаем необходимый объем корма:
Одной курицы нужно в день в среднем 150 грамм корма, 3 месяца 13,5 кг, 10 кур съест за 3 месяца 135 кг. В итоге достаточно сделать три кормушки по 50 кг. Ну еще одну сделаю для резерва, которую будем включать удаленно при необходимости.
Кур собираюсь взять месячных или двухмесячных, до 5 месяцев они яйца не несут, поэтому робота собирающего яйца пока не надо делать.
Пол курятника сделаю из сетки, под ней под наклоном профлист, по которому все отходы будут стекать в выварку.
Подготовил основательные кронштейны для мотора. Заказал и уже сварили:



Емкости для корма на месте буду искать, может, у жестянщика закажу сделать огромные воронки.

Подготовил несколько муфт и двигателей. Двигатели на 12 вольт, 20-35 RPM, крутящий момент 10 кг/см. и другие на 150 RPM крутящий момент 5 Кг/см.



Причем несовершенство самодельных муфт пойдет на пользу кормушке. Лишнее биение, длинные болты не позволят корму слежаться.

В лабораторных условиях все отлажено, работает. Как на практике это все будет действовать, одни куры знают. Но в любом случае им голодная смерть не угрожает, если увижу по камерам что-то не так, у нас родственники живут в 30-ти километрах от мини-гостиницы. Позвоню, приедут и спасут нашу живность.
Tags:автоматическая фермаавтоматическое управлениеraspberry piавтоматизация рутины
Hubs: Хакспейс клуб «minirobot» corporate blog Website development
+38
49.6k 283
Comments 45
Top of the last 24 hours