Ардуино нано в аквариум

artem pakhomov
Offline
Зарегистрирован: 12.12.2020

Подскажите пожалуйста, моих мозгов недостаточно. Нужно уехать на несколько дней в Москву. Было решение сделать автокормушку для рыб. С ней все получилось, работает на сервоприводе, также хотелось бы реле подключить к ней, не могу написать прошивку. Буду очень благодарен за помощь. Вот скетч для кормушки

#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 
    } 

 

artem pakhomov
Offline
Зарегистрирован: 12.12.2020

Модуль реле 220В с управлением от 5В

https://kazanexpress.ru/product/Modul-rele-220V-s-upravleniem-ot-54808?proxy=true

sadman41
Offline
Зарегистрирован: 19.10.2016

Другу ключ от дома дай, пусть подсыпает корм.

-NMi-
Offline
Зарегистрирован: 20.08.2018

Купи готовый дозатор и езжай хоть в Гватемалу.

artem pakhomov
Offline
Зарегистрирован: 12.12.2020

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А я прошу Вас прежде, чем писать на форум, прочитайте его правила в прикрепленной в данном разделе теме.

artem pakhomov
Offline
Зарегистрирован: 12.12.2020

5. Здесь помогают тем, кто пытается что-то сделать сам, имеет самописный скетч и задает вопросы по нему. Самописный скетч от скопипащенного отличается тем, что вы можете объяснить, что и где в нем происходит.

ага

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

И это все, что Вы почерпнули из 75 постов?

Я бы обратил внимание еще на http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/pesochnitsa-dlya-vsekh-novichkov#comment-406523

А также на то, что желательно более конкретно формулировать свои мысли. Например, что Вы подразумеваете под "подключением реле"? Куда его подключать? С какой целью?

Да "самописность кода" вызывает некоторые сомнения. С какой, например, целью Вы написали комментарий в 9-й строке? Какое он имеет отношение к Вашей кормушке?

artem pakhomov
Offline
Зарегистрирован: 12.12.2020

код копипаста с ветки про автокормушку, ссылку на реле я выдавал выше. Хочу чтоб она срабатывала также как и сервопривод, просто повесить на какой нибудь пин ардуинки, что она замыкалась в определенное время и включала свет в аквариуме. Обычная копипаста из гугла выдает ошибку в скетче, что-то там про воид, как я понял идет конфликт, какой именно я осознать не могу. Этот скетч автокормушки мне нравится тем, что он при включении сам начинает отсчитывание времени от прописанного в нем. Знаю что проще было бы купить автокормушку, но магазинная мне не подходит, тк в будущем хочу эту кормушку использовать в нерестовике. Там очень точно можно  настроить дозу и время кормления, что не сделаешь с магазинными

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Так скетч самописный или "копипаста"?

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

Реле и сервопривод - разные устройства, соответственно "срабатывать так же" оно не может в принципе. Далее: "какой-нибудь пин" и "в определенное время" - слишком абстрактные понятия, чтобы по ним можно было сделать конкретный скетч и схему. Попытайтесь точно описать, чего же Вы хотите - с учетом того, что у большинства здесь присутствующих нет хрустальных шаров и угадывать Ваши мысли они не в состоянии.

 

Ну и еще по поводу специфики данного форума. Здесь принято бесплатно помогать тем, кто хочет научиться, и отправлять в платный раздел "Ищу исполнителя" тех, кто хочет сделать конкретный проект, но не знает, как. Т.е. Вам надо определиться, готовы ли Вы отложить свой проект на полгода-год, заняться пока более простыми вещами, чтобы через некоторое время, когда подрастут навыки, вернуться к этому проекту, или Вам нужен именно этот проект здесь и сейчас.

kost82
Offline
Зарегистрирован: 30.11.2015

Зачем вам это реле? Купите готовый программируемый таймер, который втыкается в розетку и включает/выключает потребителей в любое нужное время, хоть по дням недели. Модуль реле для ардуины стоит рублей 150 в наших магазинах. А такой таймер в Леруа Мерлен, например, стоит 500 рублей. Если поискать - может и дешевле найдете. Он будет гораздо безопасней и надежней чем ардуина + реле. И времени кучу сэкономите.