Помогите с кормушкой гайвера

Ответить
Pasha7
Рядовой
Сообщения: 23
Зарегистрирован: 15.11.2017{, 14:16}
Репутация: 0

Помогите с кормушкой гайвера

#1

Сообщение Pasha7 » 09.02.2021{, 12:32}

СпойлерПоказать
Всем привет, решил повторить проект гайвера кормушка 2 версии. Шнек смоделировал свой. Его шнек не очень понравился как сделан и отверстия на вал без допуска на усадку или у него вал тоньше. Если кому надо пишите скину проект в солиде.

Так вот нужна помощь по прошивке. Хочу ещё прикрутить датчик корма чтоб сигнализировал когда заканчивается, звук и может ещё что в голову придёт. В коде естественно не понимаю, а флпрог смогу всё это прикрутить.
Как можно реализовать на флпрог чтоб двигатель как у гайвера 3 вперед 2 назад чтоб не закусывало корм? И имено на драйвере MX1508 как у него, потому что другого нет. Может кусок его кода в блок засунуть ? Или на стандартных блоках можно сделать так ? Помогите пожалуйста.
Проект собрал на столе проверил с гайверовской прошивкой при его настройках 10 шагов назад 18 вперед всё отлично работает не закусывает, но как-то кнопка не всегда срабатывает у меня.
Если у кого есть опыт по изготовлению другой автоматической кормушки поделитесь пожалуйста.
СпойлерПоказать
1612862195115 (1).jpg
{EC8C51E8-7DDD-4995-92EE-5E7B84D79811}.png

Аватара пользователя
SergeyShikal
Лейтенант
Сообщения: 579
Зарегистрирован: 30.08.2018{, 17:15}
Репутация: 47
Откуда: Иркутская область
Имя: Сергей

Помогите с кормушкой гайвера

#2

Сообщение SergeyShikal » 09.02.2021{, 14:33}


Аватара пользователя
leons
Сержант
Сообщения: 141
Зарегистрирован: 18.06.2017{, 17:07}
Репутация: 3

Помогите с кормушкой гайвера

#3

Сообщение leons » 09.02.2021{, 15:07}

У меня есть проект который можно подогнать ,но я им заниматса не буду ,если интересно найду выложу

Pasha7
Рядовой
Сообщения: 23
Зарегистрирован: 15.11.2017{, 14:16}
Репутация: 0

Помогите с кормушкой гайвера

#4

Сообщение Pasha7 » 09.02.2021{, 23:27}

Извините забыл его код выложить, вот он. Наверное самое простое кусок его кода засунуть в пользовательский блок. Помогите кто умеет делать пользовательские блоки
СпойлерПоказать
/*
Скетч к проекту "Автокормушка 2"
- Страница проекта (схемы, описания): https://alexgyver.ru/gyverfeed2/
- Исходники на GitHub: https://github.com/AlexGyver/GyverFeed2/
Проблемы с загрузкой? Читай гайд для новичков: https://alexgyver.ru/arduino-first/
AlexGyver, AlexGyver Technologies, 2020
*/

// Клик - внеочередная кормёжка
// Удержание - задаём размер порции
const byte feedTime[][2] = {
{7, 0}, // часы, минуты. НЕ НАЧИНАТЬ ЧИСЛО С НУЛЯ
{12, 0},
{17, 0},
{21, 0},
};

#define EE_RESET 12 // любое число 0-255. Измени, чтобы сбросить настройки и обновить время
#define FEED_SPEED 3000 // задержка между шагами мотора (мкс)
#define BTN_PIN 2 // кнопка
#define STEPS_FRW 18 // шаги вперёд
#define STEPS_BKW 10 // шаги назад
const byte drvPins[] = {3, 4, 5, 6}; // драйвер (фазаА1, фазаА2, фазаВ1, фазаВ2)

// =========================================================
#include "EncButton.h"
#include <EEPROM.h>
#include <RTClib.h>
RTC_DS3231 rtc;
EncButton<BTN_PIN> btn;
int feedAmount = 100;

void setup() {
rtc.begin();
if (EEPROM.read(0) != EE_RESET) { // первый запуск
EEPROM.write(0, EE_RESET);
EEPROM.put(1, feedAmount);
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
EEPROM.get(1, feedAmount);
for (byte i = 0; i < 4; i++) pinMode(drvPins, OUTPUT); // пины выходы
}

void loop() {
static uint32_t tmr = 0;
if (millis() - tmr > 500) { // два раза в секунду
static byte prevMin = 0;
tmr = millis();
DateTime now = rtc.now();
if (prevMin != now.minute()) {
prevMin = now.minute();
for (byte i = 0; i < sizeof(feedTime) / 2; i++) // для всего расписания
if (feedTime[0] == now.hour() && feedTime[1] == now.minute()) // пора кормить
feed();
}
}

btn.tick();
if (btn.isClick()) {
feed();
}
if (btn.isHold()) {
int newAmount = 0;
while (btn.isHold()) {
btn.tick();
oneRev();
newAmount++;
}
feedAmount = newAmount;
EEPROM.put(1, feedAmount);
}
}

void feed() {
for (int i = 0; i < feedAmount; i++) oneRev(); // крутим на количество feedAmount
for (byte i = 0; i < 4; i++) digitalWrite(drvPins, 0); // выключаем ток на мотор
}

void oneRev() {
static uint16_t val = 0;
for (byte i = 0; i < STEPS_FRW; i++) runMotor(val++);
for (byte i = 0; i < STEPS_BKW; i++) runMotor(val--);
}

void runMotor(int thisStep) {
/*static const byte steps[] = {0b1000, 0b1010, 0b0010, 0b0110, 0b0100, 0b0101, 0b0001, 0b1001};
for (byte i = 0; i < 4; i++)
digitalWrite(drvPins, bitRead(steps[thisStep & 0b111], i));
*/
static const byte steps[] = {0b1010, 0b0110, 0b0101, 0b1001};
for (byte i = 0; i < 4; i++)
digitalWrite(drvPins, bitRead(steps[thisStep & 0b11], i));
delayMicroseconds(FEED_SPEED);
}

И вот схема подключения
СпойлерПоказать
scheme.jpg
SergeyShikal
Спасибо но там реализовано только меню и время кормления. У меня проблема сделать чтоб шаговый двигатель крутился и назад и вперёд , как-бы вибрируя как у гайвера.

leons
Гляну конечно если не сложно найти, как у вас механика реализована . на каком моторе ? Как от заклинивания избавились ?

Pasha7
Рядовой
Сообщения: 23
Зарегистрирован: 15.11.2017{, 14:16}
Репутация: 0

Помогите с кормушкой гайвера

#5

Сообщение Pasha7 » 10.02.2021{, 12:39}

Пока ждал помощи, немного получилось сделать самому. Нашел блок пользователя RedSky для простого драйвера и с помощью проб и ошибок что-то получилось.
Снимок.JPG
Настройками в свиче и времени в генерации можно добиться практический любых колебаний и скорости насыпания. Но теперь количество корма приходится настраивать не количеством шагов, а временем. Но я думаю это не принципиально. Настраивать можно достаточно точно, у меня при времени 2900 милисекунд насыпается примерно 25 грамм, три кормления в день получается 75 грамм примерная норма небольшой кошки. При тестировании заклинивания пока не было.

Теперь думаю как реализовать индикацию заканчивания корма, пока думаю сделать светодиод и фотодиод. Но с удовольствием выслушаю ваши идеи и улучшения.
Вот видео как вибрирует шнек.

Ответить

Вернуться в «Помогите, а то я "нимагу"»