Ардуино нано в аквариум
- Войдите на сайт для отправки комментариев
Сб, 12/12/2020 - 17:06
Подскажите пожалуйста, моих мозгов недостаточно. Нужно уехать на несколько дней в Москву. Было решение сделать автокормушку для рыб. С ней все получилось, работает на сервоприводе, также хотелось бы реле подключить к ней, не могу написать прошивку. Буду очень благодарен за помощь. Вот скетч для кормушки
#include <Servo.h>
#include <string.h>
#include<Wire.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
int hours,minutes,seconds ;
// You can set times when you want to feed your fish
char feeding_times[] = "08:00:05, 14:00:00";
int count_of_terms = 10;
int count_of_doses = 1; // how many doses shoul fish get per feeding
char *ptr[100];
// If you want that feeding is coresponding with real time you have to set the real time
String current_time = "08:00:00";
unsigned long previousMillis = 0;
unsigned long currentMillis;
int ser_pos_feeder = 42; //
int ser_pos_fishtank = 0; //
const int servoPWcontrol = 5; // the number of serwo porwe control
const int buttonPin1 = 6; // the number of the pushbutton pin
const int buttonPin2 = 7; // the number of the pushbutton pin
// variables will change:
int buttonState = 0;
void setup()
{
Serial.begin(9600);
DoBreakup(feeding_times,",");
Set_current_Time();
myservo.attach(9);
pinMode(servoPWcontrol, OUTPUT);
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
digitalWrite(servoPWcontrol, LOW); // Turn powersource od servo OFF
myservo.write(ser_pos_feeder);
}
void loop()
{
Timer();
if(millis() - previousMillis > 10000){
}
delay(30);
buttonState = digitalRead(buttonPin1);
// set
if (buttonState == HIGH) {
hours = hours +1;
delay(500);
}
buttonState = digitalRead(buttonPin2);;
if (buttonState == HIGH) {
minutes = minutes +1;
delay(500);
}
}
void Timer(){
String timestring = "" ;
currentMillis = millis();
if(currentMillis - previousMillis > 1000){
// Adding hours minutes, seconds
seconds = seconds +((currentMillis - previousMillis )/1000); // If there is delay longer than 1 sec it counts exact delay and add corect num of seconds.
if (seconds >= 60){
seconds = 0;
minutes = minutes +1;}
if (minutes >= 60){
minutes = 0;
hours = hours +1; }
if (hours >= 24){
hours = 0;
}
//Serial Print
if (hours < 10){ timestring = timestring + "0" ; Serial.print("0"); }
Serial.print (hours, DEC);
timestring = timestring + hours;
Serial.print (":");
timestring = timestring + ":";
if (minutes < 10){ timestring = timestring + "0" ; Serial.print("0"); }
Serial.print (minutes,DEC);
timestring = timestring + minutes;
Serial.print (":");
timestring = timestring + ":";
if (seconds < 10){ timestring = timestring + "0" ; Serial.print("0"); }
Serial.println(seconds,DEC);
timestring = timestring + seconds ;
Should_I_feed_them(timestring);
previousMillis =currentMillis ;
}
}
void DoBreakup(char s[], char delimit[]){
char *p;
// int i = 0;
p = strtok(s, delimit);
while (p){
ptr[count_of_terms++] = p;
Serial.println(p);
p = strtok(NULL, delimit);
}
}
void Set_current_Time(){
hours= current_time.substring(0, 2).toInt();
minutes= current_time.substring(3, 5).toInt();
seconds= current_time.substring(6, 8).toInt();
}
void Should_I_feed_them(String timestring){
for (int i = 0; i < count_of_terms; i++){
// Serial.println(ptr[i]);
if(timestring == ptr[i]){
Serial.println("------ ---------- ------");
Serial.println(ptr[i]);
Serial.println("------ Feeding Starts ------");
run_feeder();
}
}
}
void run_feeder(){
int counter = 0;
digitalWrite(servoPWcontrol, HIGH); // Turn powersource od servo ON
for (counter ; counter < count_of_doses ; counter++ ) {
for (pos = ser_pos_feeder; pos >= ser_pos_fishtank ; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
//delay(5); // waits 15ms for the servo to reach the position
}
delay(500);
for (pos = ser_pos_fishtank; pos <= ser_pos_feeder; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
// delay(15); // waits 15ms for the servo to reach the position
}
delay(500);
Serial.print(counter);
Serial.println("------ Feeding dose ------");
}
digitalWrite(servoPWcontrol, LOW); // Turn powersource od servo OFF
}
Модуль реле 220В с управлением от 5В
https://kazanexpress.ru/product/Modul-rele-220V-s-upravleniem-ot-54808?proxy=true
Другу ключ от дома дай, пусть подсыпает корм.
Купи готовый дозатор и езжай хоть в Гватемалу.
я сам знаю что мне нужно купить, автокормушка нужна с заделом на будущее. Если по теме вопроса нечего написать, прошу воздержаться
А я прошу Вас прежде, чем писать на форум, прочитайте его правила в прикрепленной в данном разделе теме.
5. Здесь помогают тем, кто пытается что-то сделать сам, имеет самописный скетч и задает вопросы по нему. Самописный скетч от скопипащенного отличается тем, что вы можете объяснить, что и где в нем происходит.
ага
И это все, что Вы почерпнули из 75 постов?
Я бы обратил внимание еще на http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/pesochnitsa-dlya-vsekh-novichkov#comment-406523
А также на то, что желательно более конкретно формулировать свои мысли. Например, что Вы подразумеваете под "подключением реле"? Куда его подключать? С какой целью?
Да "самописность кода" вызывает некоторые сомнения. С какой, например, целью Вы написали комментарий в 9-й строке? Какое он имеет отношение к Вашей кормушке?
код копипаста с ветки про автокормушку, ссылку на реле я выдавал выше. Хочу чтоб она срабатывала также как и сервопривод, просто повесить на какой нибудь пин ардуинки, что она замыкалась в определенное время и включала свет в аквариуме. Обычная копипаста из гугла выдает ошибку в скетче, что-то там про воид, как я понял идет конфликт, какой именно я осознать не могу. Этот скетч автокормушки мне нравится тем, что он при включении сам начинает отсчитывание времени от прописанного в нем. Знаю что проще было бы купить автокормушку, но магазинная мне не подходит, тк в будущем хочу эту кормушку использовать в нерестовике. Там очень точно можно настроить дозу и время кормления, что не сделаешь с магазинными
Так скетч самописный или "копипаста"?
Для того, чтобы сделать какой-либо проект, необходимо хотя бы четко сформулировать, чего же ты хочешь. Даже вне зависимости от того, кто это будет делать, Вы или нанятый Вами исполнитель.
Реле и сервопривод - разные устройства, соответственно "срабатывать так же" оно не может в принципе. Далее: "какой-нибудь пин" и "в определенное время" - слишком абстрактные понятия, чтобы по ним можно было сделать конкретный скетч и схему. Попытайтесь точно описать, чего же Вы хотите - с учетом того, что у большинства здесь присутствующих нет хрустальных шаров и угадывать Ваши мысли они не в состоянии.
Ну и еще по поводу специфики данного форума. Здесь принято бесплатно помогать тем, кто хочет научиться, и отправлять в платный раздел "Ищу исполнителя" тех, кто хочет сделать конкретный проект, но не знает, как. Т.е. Вам надо определиться, готовы ли Вы отложить свой проект на полгода-год, заняться пока более простыми вещами, чтобы через некоторое время, когда подрастут навыки, вернуться к этому проекту, или Вам нужен именно этот проект здесь и сейчас.
Зачем вам это реле? Купите готовый программируемый таймер, который втыкается в розетку и включает/выключает потребителей в любое нужное время, хоть по дням недели. Модуль реле для ардуины стоит рублей 150 в наших магазинах. А такой таймер в Леруа Мерлен, например, стоит 500 рублей. Если поискать - может и дешевле найдете. Он будет гораздо безопасней и надежней чем ардуина + реле. И времени кучу сэкономите.