Ардуино нано в аквариум
- Войдите на сайт для отправки комментариев
Сб, 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 рублей. Если поискать - может и дешевле найдете. Он будет гораздо безопасней и надежней чем ардуина + реле. И времени кучу сэкономите.