Введение
В нашу жизнь все чаще и чаще входит технология "Умный дом". С помощью этой технологии можно управлять различной бытовой техникой от освещения до чайника, от замка до сплит-системы или телевизора. Удобство, возможность множества настроек, планирования и управление со смартфона и так далее-вот преимущество "Умного дома". Так же с помощью этой технологии можно, например, запланировать по расписанию кормление рыб в аквариуме, собак или кота.
Режим питания – важнейшая составляющая здоровья любого живого существа. Дело в том, что прием пищи – в целом процедура куда более сложная и глубокая, чем нам кажется на первый взгляд, не только для человека, но и для братьев наших меньших. Так, например, любители кошек понимают, что им нужно обеспечить особый режим кормления питомцам. Но редко кто может позволить себе сидеть около кошки 24 часа в сутки и подавать ей пищу в нужное время в нужном количестве.
Необходимо, чтобы кормушка вмещала в себя тарелку с кормом, была удобной для кота, чтобы тарелку было легко ставить и извлекать из кормушки, чтобы кормушку легко было мыть и она не занимала много места по площади, чтобы была безопасной для животного. Также необходимо, чтобы время открытия кормушки можно было поставить, дисплей для отображения времени и чтобы все это работало от батареек.
В данной курсовой работе я рассмотрю сборку «умной» автоматической системы для кормления домашнего питомца, в моем случае – кота.
Итак, начнем с концепции и целей:
1. Сделать систему, которая освободит меня от обязанности кормить кота сухим кормом (шаг 1)
2. Оснастить систему датчиком реального времени, чтобы в определенный момент времени сухой корм автоматически насыпался в кормушку (шаг 2)
1. Обзор существующих решений
1.1. Автоматическая кормушка PetWant PF-102
Рис 1. Автоматическая кормушка PetWant PF-102
Автоматическая кормушка Petwant для домашних животных с сенсорным управлением. На ЖК дисплее позволяет легко установить программу кормления. Работает автокормушка от батареек или сетевого адаптера. Подходит для собак и кошек. Автоматическая кормушка PF-102 идеальна для заботы о Вашем питомце даже в случае вашего отсутствия дома.
Особенности:
· Элегантный, современный дизайн, сенсорное управление.
· Большой ЖК-дисплей с подсветкой и индикатором заряда батареи.
· Емкость бункера 4,3 л для сухого корма с гранулами размером от 0,3 до 1,5 см.
Точный график кормлений с промежутком не менее одного часа, с регулировкой количества порции 10 гр/порция и не более 120 г за одно кормление.
Дополнительная функция: автоматическая система останавливает подачу корма, превышающую 13 порций.
Максимально возможное количество программируемых кормлений в сутки 4.
Возможность записать голосовое сообщение, длительностью 20 сек, для привлечения внимания вашего питомца перед началом каждого кормления.
Работает автокормушка PF-102 от сетевого адаптера или от 3 батареек размера D или аккумулятора(в комплект не входят).
Опция сохранения памяти о режиме кормления в случае отключения электроэнергии.
Преимущества моей кормушки в отличии от PetWant PF-102
Недостатков в принципе нет. Работа происходит одинаково, насыпание корма происходит по таймеру.
Преимущество моей кормушки в том, что ее можно собрать самому, и это будет стоить в разы дешевле PetWant PF-102.
Стоимость PetWant PF-102 – 7450руб.
1.3. Автоматическая кормушка MODERNA
Рис 2. Автоматическая кормушка MODERNA
Автокормушка СМАРТ — настоящий помощник для занятых владельцев домашних животных.
· Автокормушка позволяет оставлять животным корм на несколько дней. По мере съедания животным корма, из бункера в кормушку высыпаются новые порции корма в нужном количестве.
· Плотно закрывающаяся верхняя крышка препятствует выветриванию запаха, высыханию корма, а также попаданию в корм пыли и инородных предметов.
· Ножки автокормушки имеют резиновые накладки для предотвращения скольжения по полу.
· Качественный пластик не гнется, не ломается, не впитывает запахи, кормушка легко разбирается и моется, имеет длительных срок эксплуатации.
Специально разработанная конструкция для удобства вашего питомца!
Преимущества моей кормушки в отличии от MODERNA
Преимущество моей кормушки в том, что насыпание корма происходит по таймеру.
1.3. Автоматическая кормушка Аnmer Аlien
Рис 3. Автоматическая кормушка Аnmer Аlien
Автоматическая кормушка Anmer Alien - это удобное устройство, которое позволяет вовремя покормить вашего домашнего любимца. Перестаньте беспокоиться о том, сыт ли ваш питомец, автокормушка накормит его вовремя. Эта легко программируемая кормушка автоматически подаст животному корм заданной порции в установленное время. Автоматическая кормушка Anmer Alien работает с большинством сухих кормов. Автокормушка позволяет настроить режим питания вашего любимца различными порциями до 6 приёмов в день. Управление порциями и настраиваемый режим кормления позволят легко контролировать вес вашего питомца или нормализовать его избыточный вес.
Программирование
Время кормления и количество пищи может быть легко и точно установлено в соответствии с вашими пожеланиями. Ветеринары советуют кормить небольших домашних животных чаще небольшими порциями. Автокормушка для собак и кошек позволят настроить до 6 приёмов пищи за день. Контейнер хранения вмещает 1,5 кг сухого корма, что соответствует норме нескольких суток.
Инфракрасный детектор
Для предотвращения чрезмерной подачи корма, приводящей к переполнению корма в миске, автоматическая кормушка Anmer Alien оснащена инфракрасным детектором. Во время работы автокормушки, детектор не подаёт очередную порцию до тех пор, пока миска не будет пустой.
Голосовое напоминание
Напомните вашему любимцу, что пора есть! Корм будет подан сразу после воспроизведения вашего записанного голоса. Автоматическая кормушка позволяет сделать запись длительностью 12 секунд и установить её перед каждым приёмом пищи. Ваш любимец будет счастлив, что вы не забываете о нём, даже когда вас нет рядом.
Электропитание
Автоматическая кормушка для собаки или кошки Anmer Alien может бесперебойно работать в течение длительного времени: устройство использует 3 батарейки «D» (не входят в комплект), что обеспечивает функционирование в течение 6 месяцев.
Преимущества моей кормушки в отличии от Anmer Alien
Недостатков в принципе нет. Работа происходит одинаково, насыпание корма происходит по таймеру.
Преимущество моей кормушки в том, что ее можно собрать самому, и это будет стоить в разы дешевле Anmer Alien.
Стоимость Anmer Alien – 6700руб.
2
. Разработка структурной схемы
Автоматическая кормушка разделена на функциональные блоки. Каждый из блоков выполняет свою функцию. В состав автоматической кормушки входит:
- блок управления;
- блок индикации;
- блок датчиков;
- блок питания;
- блок клапанов;
- блок клавиатур;
Рис 4. Блок схема устройства автоматизированного газового котла
2.1. Блок управления устройства автоматизированного газового котла
Блок управления предназначен для управления исполнительными блоками, обработки данных с блока датчиков, для связи с персональным компьютером, и передачу сигнала на блок индикации .
Блок управления получает сигнал с датчиков и обрабатывает этот сигнал. Если подошло определенное время, то блок управления посылает сигнал на блок клапанов для открытия клапана корма. Также сигнал с блока управления поступает на блок индикации. Блок индикации подает сигнал о том, что время насыпания корма подошло. Блок управления являться главным элементом устройство. Блок управления основан на микроконтроллере Atmega 328.
2.2. Блок индикации устройства автоматизированного газового котла.
Блок индикации предназначен для вывода информации о времени. Данный блок имеет световую сигнализацию.
С блока управления сигнал приходит на блок индикации.
Для световой индикации используется экран.
Блок индикации имеет минимальное количество элементов, что увеличивает надежность и компактность данного блока.
2.3. Блок датчиков устройства автоматизированного газового котла.
Блок датчиков необходим для определения времени.
В данном блоке используются часы реального времени с последовательным интерфейсом DS1307 – это малопотребляющие полные двоично-десятичные часы-календарь, включающие 56 байтов энергонезависимой статической ОЗУ. Адреса и данные передаются последовательно по двухпроводной двунаправленной шине. Часыкалендарь отсчитывают секунды, минуты, часы, день, дату, месяц и год. Последняя дата месяца автоматически корректируется для месяцев с количеством дней меньше 31, включая коррекцию високосного года. Часы работают как в 24-часовом, так и в 12-часовом режимах с индикатором AM/PM. DS1307 имеет встроенную схему наблюдения за питанием, которая обнаруживает перебои питания и автоматически переключается на питание от батареи.
2.4. Блок питания устройства автоматизированного газового котла.
Блок питания предназначен для снабжения узлов автоматической кормушки электрической энергией постоянного тока, путём преобразования сетевого напряжения до требуемых значений.
2.5. Блок клапанов устройства автоматизированного газового котла.
Блок клапанов предназначен для открытия и закрытия клапанов подачи сухого корма, когда это необходимо. Данный блок получает сигнал с блока управления об открытии, либо закрытии определенного клапана.
2.6. Блок клавиатуры устройства автоматизированного газового котла.
Блок клавиатуры предназначен для настройки и редактирования времени. Данный блок передает сигнал блоку управления для увеличения, либо уменьшения заданной температуры.
3. Разработка схемы электрической принципиальной
Для разработки принципиальной схемы я воспользовалась программой Proteus 8, чтобы убедиться в том, что устройство работает правильно.
Мне понадобилось:
1) Дисплей LCD1602;
2) Датчик реального времени DS1307
3) Три резистора с сопротивлением 220Ом;
4) Сервопривод;
5) Кнопки;
6) Соединительные провода;
7) USB для прошивки платы .
Рис 5. Принципиальная схема устройства
3.1. Выбор микроконтроллера
Выберем в качестве микроконтроллера плату Arduino Uno. Данный контроллер построен на ATmega328. Платформа имеет 14 цифровых вход/выходов (6 из которых могут использоваться как выходы ШИМ), 6 аналоговых входов, кварцевый генератор 16 МГц, разъем USB, силовой разъем, разъем ICSP и кнопку перезагрузки. Для работы необходимо подключить платформу к компьютеру посредством кабеля USB, либо подать питание при помощи адаптера AC/DC или батареи.
В отличие от всех предыдущих плат, использовавших FTDI USB микроконтроллер для связи по USB, новый Arduino Uno использует микроконтроллер ATmega8U2
Arduino Uno может получать питание через подключение USB или от внешнего источника питания. Источник питания выбирается автоматически.
Внешнее питание (не USB) может подаваться через преобразователь напряжения AC/DC (блок питания) или аккумуляторной батареей. Преобразователь напряжения подключается посредством разъема 2.1 мм с центральным положительным полюсом. Провода от батареи подключаются к выводам GND и VIN разъема питания.
Платформа может работать при внешнем питании от 6 В до 20 В. При напряжении питания ниже 7 В, вывод 5V может выдавать менее 5 В, при этом платформа может работать нестабильно. При использовании напряжения выше 12 В регулятор напряжения может перегреться и повредить плату. Рекомендуемый диапазон от 7 В до 12 В.
Микроконтроллер ATmega328 поставляется с записанным загрузчиком, облегчающим запись новых программ без использования внешних программаторов. Связь осуществляется оригинальным протоколом STK500.
Технические характеристики.
Тип микроконтроллера - ATmega328P
Напряжение питания микроконтроллера-5 В
Рекомендуемое напряжение питания платы-7 – 12 В
Предельно допустимое напряжение питания платы-6 – 20 В
Цифровые входы-выходы-14 (из них 6 поддерживают ШИМ)
Выходы ШИМ модуляции-6
Аналоговые входы-6
Допустимый ток цифровых выходов-20 мА
Допустимый ток выхода 3,3 В-50 мА
Объем флэш памяти (FLASH)-32 кБ (из которых 0,5 кБ используется загрузчиком)
Объем оперативной памяти (SRAM)-2 кБ
Объем энергонезависимой памяти (EEPROM)-1 кБ
Частота тактирования-16 мГц
Длина платы-68,6 мм
Ширина платы-53,4 мм
Вес-25 г
Рис.6. Arduino Uno
3.2. Выбор дисплея[2]
Жидкокристаллический дисплей (Liquid Crystal Display) сокращенно LCD построен на технологии жидких кристаллов. При проектировании электронных устройства, нам нужно недорогое устройство для отображения информации и второй не менее важный фактор, наличии готовых библиотек для Arduino.
Из всех доступных LCD дисплеев на рынке, наиболее часто используемой является LCD 1602, который может отображать ASCII символа в 2 строки (16 знаков в 1 строке) каждый символ в виде матрицы 5х7 пикселей. Существует огромное количество разновидностей данного ЖК модуля, он может быть 1,2,4–ех строчный с различным числом символов на строке.
LCD 1602 представляет собой электронный модуль основанный на драйвере HD44780 от Hitachi. LCD1602 имеет 16 контактов и может работать в 4-битном режиме (с использованием только 4 линии данных) или 8-битном режиме (с использованием всех 8 строк данных), так же можно использовать интерфейс I2C. Что не маловажно, так как нам нужно экономить ножки.
Основные характеристики LCD дисплея LCD1602
· Тип отображения символьный с возможностью загрузки символов;
· Формат отображения 16×2 символов;
· ТехнологияSTN, Transflective, Positive;
· Контроллер HD44780;
· Интерфейс 8-bit Parallel Interface;
· Подсветка светодиодная;
· Угол обзора 180;
· Напряжение питания 5 В;
· VLCD подстройка контраста 5.0 V (Vop.);
· Рабочая температура от -20 °С до +70 °С;
Температура хранения от -30 °С до +80 °С.
Рис.7. Дисплей LCD1602
3.3. Выбор датчика реального времени[3]
Часы реального времени с последовательным интерфейсом DS1307 – это малопотребляющие полные двоично-десятичные часы-календарь, включающие 56 байтов энергонезависимой статической ОЗУ. Адреса и данные передаются последовательно по двухпроводной двунаправленной шине. Часы календарь отсчитывают секунды, минуты, часы, день, дату, месяц и год. Последняя дата месяца автоматически корректируется для месяцев с количеством дней меньше 31, включая коррекцию високосного года. Часы работают как в 24-часовом, так и в 12-часовом режимах с индикатором AM/PM. DS1307 имеет встроенную схему наблюдения за питанием, которая обнаруживает перебои питания и автоматически переключается на питание от батареи.
Характеристики
- часы реального времени (RTC) отсчитывают секунды, минуты, часы, дату месяца, месяц, день недели и год с компенсацией високосного года, действительной до 2100 года;
- 56-байтовое энергонезависимое ОЗУ с питанием от батареи для хранения пользовательских данных; - двухпроводной последовательный интерфейс;
- программируемый выходной сигнал с прямоугольными импульсами (для тактирования внешних устройств); - автоматическое обнаружение падения напряжение и схема переключения на батарею;
- потребление менее 500 нА в режиме батарейной поддержки при работающем тактовом генераторе;
- промышленный диапазон температур: от – 40 °C до + 85 °C; - микросхема производится в 8-выводных корпусах DIP и SOIC.
Рис.8. Часы реального времени с последовательным интерфейсом DS1307
4. Программная часть
4.1. Разработка алгоритма работы устройства
Рис.9. Алгоритм работы устройства
4.2. Разработка программы устройства
Код программы
#include <LiquidCrystal.h>>// Подключаем библиотеку LiquidCrystal
#include <Wire.h>// Подключаем библиотеку Wire
#include <Servo.h>// Подключаем библиотеку Servo
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);// Настройка пинов дисплея
Servo myservo;// объявляем переменную servo типа "myservo"
const int servoPin = 13;// пин 13, подключение servoPin
const int buttonPin = 10;// пин 10, подключение buttonPin
void setup() { // процедура setup
myservo.attach(servoPin);// привязываем сервопривод к servoPin
pinMode(buttonPin, INPUT);// Назначаем переменную buttonPin входом
digitalWrite(buttonPin, HIGH);// зажигаем buttonPin
myservo.write(180);// ставим угол поворота под 180
delay(1000);// ждем 1 секунду
myservo.detach();//Отсоединяем переменную Servo от указанного выхода
pinMode(8, INPUT_PULLUP); // кнопка 1 подключена к контакту 8
pinMode(9, INPUT_PULLUP); // кнопка 2 подключена к контакту 9
// set up the LCD's number of columns and rows
lcd.begin(16, 2);// устанавливаем размер (количество столбцов и строк) экрана
Wire.begin(); // Присоединяемся к шине i2c
}
char Time[] = "TIME: : : ";
char Calendar[] = "DATE: / /20 ";
byte i, second, minute, hour, date, month, year;
void DS1307_display(){
second = (second >> 4) * 10 + (second & 0x0F); // Преобразовать BCD в decimal
minute = (minute >> 4) * 10 + (minute & 0x0F);
hour = (hour >> 4) * 10 + (hour & 0x0F);
date = (date >> 4) * 10 + (date & 0x0F);
month = (month >> 4) * 10 + (month & 0x0F);
year = (year >> 4) * 10 + (year & 0x0F); //Завершаем конвертацию
Time[12] = second % 10 + 48;
Time[11] = second / 10 + 48;
Time[9] = minute % 10 + 48;
Time[8] = minute / 10 + 48;
Time[6] = hour % 10 + 48;
Time[5] = hour / 10 + 48;
Calendar[14] = year % 10 + 48;
Calendar[13] = year / 10 + 48;
Calendar[9] = month % 10 + 48;
Calendar[8] = month / 10 + 48;
Calendar[6] = date % 10 + 48;
Calendar[5] = date / 10 + 48;
lcd.setCursor(0, 0);//устанавливаем курсор в колонку 0, строку 0
lcd.print(Time); // печатаем первую строку. значение берем из переменной Time
lcd.setCursor(0, 1);// устанавливаем курсор в колонку 0, строку 1.
lcd.print(Calendar);// печатаем первую строку. значение берем из переменной Calendar
}
void blink_parameter(){//ручная настройка часов и календаря
byte j = 0;
while(j < 10 && digitalRead(8) && digitalRead(9)){
j++;
delay(25);
}
}
byte edit(byte x, byte y, byte parameter){
char text[3];
while(!digitalRead(8)); // Подождать, пока кнопка (pin #8) не будет отпущена
while(true){
while(!digitalRead(9)){ // Если кнопка (pin #9) нажата
parameter++;
if(i == 0 && parameter > 23) // Если часы > 23 ==> часов = 0
parameter = 0;
if(i == 1 && parameter > 59) // Если минуты > 59 ==> минуты = 0
parameter = 0;
if(i == 2 && parameter > 31) // Если дата > 31 ==> Дата = 1
parameter = 1;
if(i == 3 && parameter > 12) // Если месяц > 12 ==> месяц = 1
parameter = 1;
if(i == 4 && parameter > 99) // Если год > 99 ==> год = 0
parameter = 0;
sprintf(text,"%02u", parameter);
lcd.setCursor(x, y);
lcd.print(text);
delay(200); // ждем 200 миллисекунд
}
lcd.setCursor(x, y);
lcd.print(" "); // Показать два пробела
blink_parameter();
sprintf(text,"%02u", parameter);
lcd.setCursor(x, y);
lcd.print(text);
blink_parameter();
if(!digitalRead(8)){ // Если кнопка (pin #8) нажата
i++; // Инкремент 'i' для следующего параметра
return parameter; // Возвращаемое значение параметра и выход
}
}
}
void loop() {
if(!digitalRead(8)){ // Если кнопка (pin #8) нажата
i = 0;
hour = edit(5, 0, hour);
minute = edit(8, 0, minute);
date = edit(5, 1, date);
month = edit(8, 1, month);
year = edit(13, 1, year);
minute = ((minute / 10) << 4) + (minute % 10); // Преобразовать BCD в decimal
hour = ((hour / 10) << 4) + (hour % 10);
date = ((date / 10) << 4) + (date % 10);
month = ((month / 10) << 4) + (month % 10);
year = ((year / 10) << 4) + (year % 10); //Завершаем конвертацию
Wire.beginTransmission(0x68); // Запустить протокол I2C с адресом DS1307
Wire.write(0); // Отправить адрес регистра
Wire.write(0); // Сброс секунд и запуск генератора
Wire.write(minute); // запись минут
Wire.write(hour); // запись часов
Wire.write(1); // запись дня (не используется)
Wire.write(date); // запись даты
Wire.write(month); // запись месяца
Wire.write(year); // запись года
Wire.endTransmission(); // Остановить передачу и отпустить шину I2C
delay(200); // ждем 200 миллисекунд
}
Wire.beginTransmission(0x68); // Запустить протокол I2C с адресом DS1307
Wire.write(0); // Отправить адрес регистра
Wire.endTransmission(false); // перезагрузка I2C
Wire.requestFrom(0x68, 7); // Запрос 7 байт от DS1307
second = Wire.read(); // Читать секунд из регистра 0
minute = Wire.read(); // Читать минуты из регистра 1
hour = Wire.read(); // Читать часы из регистра 2
Wire.read(); // Читать дни из регистра 3
date = Wire.read(); // Читать дату из регистра 4
month = Wire.read(); // Читать месяц из регистра 5
year = Wire.read(); // Читать год из регистра 6
DS1307_display(); // Отображение времени и календаря
delay(50); // ждем 200 миллисекунд
int buttonVal = digitalRead(buttonPin); // читаем переменную с buttonPin и записываем в переменную buttonVal
if(buttonVal == LOW) { // если buttonVal не нажата
myservo.attach(servoPin); // привязываем сервопривод к servoPin
myservo.write(30); // поворот сервопривода на 30 градусов
delay(1500); // ждем 1,5 секунды
myservo.write(180); // поворот сервопривода на 180 градусов
delay(1500); // ждем 1,5 секунды
myservo.detach();} //Отсоединяем переменную Servo от указанного выхода
if (second==00){ // время на часах 0 секунд
myservo.attach(servoPin); // привязываем сервопривод к servoPin
myservo.write(30); // поворот сервопривода на 30 градусов
delay(1500); // ждем 1,5 секунды
myservo.write(180); // поворот сервопривода на 180 градусов
delay(1500); // ждем 1,5 секунды
myservo.detach();} //Отсоединяем переменную Servo от указанного выхода
}
4.2. Выбор языка программирования
Программирование микроконтроллеров Arduino осуществляется на языке программирования C++. Этот язык является низкоуровневым, поэтому считается сложным и имеет высокий порог вхождения. Но для программирования Arduino используется упрощенная версия этого языка программирования. Так же для упрощения разработки прошивок существует множество функций, классов, методов и библиотек. Благодаря этому работать с этими микроконтроллерами очень удобно и легко. Описание большинства необходимых функций и операторов вы найдете на этой странице. Этого хватит для написания прошивок под самые разнообразные устройства на базе ардуино. Для всех функций есть небольшие примеры, показывающие как вы можете их использовать.
5. Моделирование
Устройство я смоделировал в программе Proteus, чтобы проверить работу.
Proteus Professional — пакет программ для автоматизированного проектирования электронных схем.
Пакет представляет собой систему схемотехнического моделирования, базирующуюся на основе моделей электронных компонентов принятых в PSpice. Отличительной чертой пакета Proteus Professional является возможность моделирования работы программируемых устройств: микроконтроллеров, микропроцессоров, DSP и прочее. Дополнительно в пакет Proteus Professional входит система проектирования печатных плат. Proteus Professional может симулировать работу следующих микроконтроллеров: 8051, ARM7, ARM Cortex-M3, AVR, Texas Instruments, Motorola, PIC, Basic Stamp. Библиотека компонентов содержит справочные данные.
Рис. 10. Работа устройства в Proteus
Заключение
В ходе работы было разработано устройство автоматической кормушки для кота, которое полностью удовлетворяет техническому заданию: имеет малую цену по сравнению с существующими аналогами на рынке, т.к. комплектующие стоят недорого и доступны.
Устройство собрано в среде Proteus. Программа для устройства написана на языке СИ++.
MaxBet Casino Online
jocuri & pacanele online, blackjack, sloturi online
https://www.maxbet.ro
https://www.facebook.com/MaxBetCasino
https://www.instagram.com/maxbet.ro
https://www.youtube.com/maxbetro