forked from bgp/feeder
add basic IR sensor support (counter)
This commit is contained in:
parent
452aab8c45
commit
71f791dcf5
100
feeder.ino
100
feeder.ino
|
@ -1,10 +1,10 @@
|
|||
/*
|
||||
Скетч к проекту "Спутниковая Роботорговля"
|
||||
bgp, 2023
|
||||
bgp, xenia, osmolov 2023-2025
|
||||
*/
|
||||
|
||||
#define EE_RESET 26 // любое число 0-255. Измени, чтобы сбросить настройки и обновить время
|
||||
#define FEED_SPEED 1500 // задержка между шагами мотора (мкс)
|
||||
#define FEED_SPEED 500 // задержка между шагами мотора (мкс)
|
||||
#define DIRPIN 2 // d2 направление
|
||||
#define STEPPIN 3 // d3 движение
|
||||
#define BTN_PIN 4 // кнопка выдачи
|
||||
|
@ -15,16 +15,25 @@ bgp, 2023
|
|||
#define SLEEP 9 // d9 пока не работаем - двигатель спит
|
||||
#define RELAY 10 // d10 ключ для отключения терминала и двигателя в ночное время
|
||||
#define BTN_PIN2 11 // кнопка настройки
|
||||
#define LEDpin 12 // питание светодиода
|
||||
#define IRpin 17 // питание фототранзистора
|
||||
#define IRsens 15
|
||||
|
||||
#define STEPPER_SPEED 250
|
||||
|
||||
#define STEPPER_REV 800
|
||||
#define STEPPER_DELAY 1000
|
||||
#define STEPPER_DELAY 500
|
||||
#define GROOVE_COUNT 3
|
||||
#define GEAR 4*3.857 // 3.857 - это соотношение зубцов внцтреннее шестеренки и белого круга с орехами
|
||||
#define GEAR 4*3.857 // 3.857 - это соотношение зубцов внутреннее шестеренки и белого круга с орехами
|
||||
|
||||
// =========================================================
|
||||
#include <EEPROM.h>
|
||||
#include <Thread.h>
|
||||
#include <ThreadController.h>
|
||||
Thread IRLedThread = Thread();
|
||||
Thread MotorThread = Thread();
|
||||
ThreadController threadController = ThreadController();
|
||||
|
||||
#include "microDS3231.h"
|
||||
MicroDS3231 rtc;
|
||||
|
||||
|
@ -40,6 +49,11 @@ Stepper myStepper(STEPPER_REV, STEPPIN, DIRPIN);
|
|||
|
||||
int feedAmount = 1;
|
||||
|
||||
byte empty_signal; // храним уровень пустого сигнала
|
||||
int sens_signal, last_sens_signal;
|
||||
boolean groove_flag = false;
|
||||
int grooveCounted = 0;
|
||||
|
||||
// https://robotchip.ru/podklyuchenie-kupyuropriemnika-cashcode-sm-k-arduino/
|
||||
|
||||
int valuePulse = 10; // Стоимость одного импульса
|
||||
|
@ -75,6 +89,12 @@ int monitor_speed = 9600;
|
|||
|
||||
void setup()
|
||||
{
|
||||
IRLedThread.onRun(IRLedCount);
|
||||
IRLedThread.setInterval(1);
|
||||
|
||||
MotorThread.onRun(FeederMotor);
|
||||
MotorThread.setInterval(1);
|
||||
|
||||
rtc.begin();
|
||||
if (EEPROM.read(0) != EE_RESET)
|
||||
{ // первый запуск
|
||||
|
@ -82,7 +102,7 @@ void setup()
|
|||
EEPROM.put(1, feedAmount);
|
||||
rtc.setTime(BUILD_SEC, BUILD_MIN, BUILD_HOUR, BUILD_DAY, BUILD_MONTH, BUILD_YEAR);
|
||||
}
|
||||
EEPROM.get(1, feedAmount);
|
||||
feedAmount = EEPROM.read(1);
|
||||
pinMode(STEPPIN, OUTPUT); // пин движения
|
||||
pinMode(DIRPIN, OUTPUT); // пин направления
|
||||
pinMode(HANDPIN, INPUT); // пин ИК датчик руки
|
||||
|
@ -91,6 +111,10 @@ void setup()
|
|||
pinMode(SLEEP, OUTPUT); // пин для отключения двигателя
|
||||
pinMode(TERM_COIN, INPUT); // прием сигнала от терминала
|
||||
pinMode(RELAY, OUTPUT);
|
||||
pinMode(LEDpin, OUTPUT);
|
||||
pinMode(IRpin, OUTPUT);
|
||||
digitalWrite(LEDpin, 1);
|
||||
digitalWrite(IRpin, 1);
|
||||
|
||||
sleepTime = 60 *60 * 1000;
|
||||
|
||||
|
@ -120,14 +144,16 @@ void loop()
|
|||
String str_time = String(rtc.getHours()) + ":" + String(rtc.getMinutes()) + ":" + String(rtc.getSeconds());
|
||||
String date_time = String(rtc.getDate()) + "-" + String(rtc.getMonth()) + "-" + String(rtc.getYear());
|
||||
Serial.println(str_time + " " + date_time);
|
||||
Serial.println("Feeds: " + String(feedAmount));
|
||||
Serial.println("IR level: " + String(analogRead(IRsens)));
|
||||
}
|
||||
if (voltage < VOLT)
|
||||
{
|
||||
digitalWrite(RELAY, LOW);
|
||||
delay(sleepTime);
|
||||
}
|
||||
if ((now.hour >= onTime && now.hour < offTime && voltage > VOLT))
|
||||
{ //&& voltage > 10.2
|
||||
if ((now.hour >= onTime && now.hour < offTime && voltage > VOLT && analogRead(IRsens) > 100 && analogRead(IRsens) < 1000 ))
|
||||
{ //&& voltage > 10.5 && IR sensor is good
|
||||
digitalWrite(RELAY, HIGH); // работаем если время рабочее И напряжение выше минимума
|
||||
}
|
||||
else
|
||||
|
@ -211,15 +237,67 @@ void loop()
|
|||
// выдача корма
|
||||
void feed()
|
||||
{
|
||||
Serial.println("Feeding...");
|
||||
int counted = 0;
|
||||
static uint32_t tmr = 0;
|
||||
EEPROM.put(3, counted); // Начинаем отсчет орехов на выдачу
|
||||
|
||||
feedAmount = EEPROM.read(1);
|
||||
//Serial.println("IR sens: " + String(analogRead(IRsens)));
|
||||
//Serial.println("Groove amount: " + String(feedAmount));
|
||||
|
||||
for (int i = 0; i < feedAmount; i++){
|
||||
tmr = millis();
|
||||
while (1) {
|
||||
if (millis() - tmr > 10000)
|
||||
{
|
||||
motorRev();
|
||||
tmr = millis();
|
||||
}
|
||||
digitalWrite(SLEEP, HIGH);
|
||||
MotorThread.run();
|
||||
IRLedThread.run();
|
||||
grooveCounted = EEPROM.read(3);
|
||||
if (grooveCounted > counted) {
|
||||
counted = grooveCounted;
|
||||
//Serial.println("Now " + String(counted) + " grooves");
|
||||
delayMicroseconds(STEPPER_DELAY);
|
||||
for (int i = 0; i < feedAmount; i++)
|
||||
myStepper.step((STEPPER_REV * GEAR) / GROOVE_COUNT);
|
||||
delayMicroseconds(STEPPER_DELAY);
|
||||
// oneRev();
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (grooveCounted >= feedAmount)
|
||||
break;
|
||||
}
|
||||
|
||||
disableMotor();
|
||||
}
|
||||
|
||||
void FeederMotor()
|
||||
{
|
||||
//myStepper.step((STEPPER_REV * GEAR) / GROOVE_COUNT);
|
||||
myStepper.step(150);
|
||||
}
|
||||
|
||||
void motorRev()
|
||||
{
|
||||
myStepper.step(-((STEPPER_REV * GEAR) / GROOVE_COUNT));
|
||||
}
|
||||
|
||||
void IRLedCount()
|
||||
{
|
||||
grooveCounted = EEPROM.read(3);
|
||||
|
||||
for (int i=0; i<50; i++)
|
||||
{
|
||||
//Serial.println(String(analogRead(IRsens)));
|
||||
if (analogRead(IRsens) > 980) {
|
||||
//Serial.println(grooveCounted++);
|
||||
EEPROM.put(3, grooveCounted++);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// кормежка по кнопке
|
||||
void feedByButton()
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue