Помогите с модулем реального времени и сервоприводом

Antony
Offline
Зарегистрирован: 29.06.2021

Здравствуйте. Идея следующая: необходимо чтобы сервопривод поворачивался в определенно заданное время на 90 градусов на 1,5 сек и возвращался обратно  два раза в день. Использую ардуино UNO , сервопривод, модуль реального времени DS 1302. Все отдельно работает, а как прописать чтобы это происходило в определенное время не выходит. И я решил без лишних заморочек(кнопок настройки, дисплеев вывода), а просто сразу вшить интервал и время работы.

nik182
Offline
Зарегистрирован: 04.05.2015

А что, будильников на 1302 нет? Вместо сигнала подключить сервопривод. 

Antony
Offline
Зарегистрирован: 29.06.2021

А можете подсказать как это сделать?

nik182
Offline
Зарегистрирован: 04.05.2015

Простите, но как подсказать? Написать за тебя программу? Я уже всё что мог подсказал. У будильника есть установка времени срабатывания. По срабатыванию вызывается процедура сигнала. Заменить процедуру сигнала на процедуру сервопривода слабо? Тогда в платный раздел. Там сделают за пиво - задача ну очень простая.

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

Среднестатистической серве нужно PWM давать, напрямую вкл/выкл работать не будет, без МК не обойтись.

Pyotr
Offline
Зарегистрирован: 12.03.2014

Если движение сервы по времени с точностью до минут, то: 1) каждую минуту сравнивать текущее время в минутах с начала суток с заданным (тоже в минутах), 2)если совпало, двигать серву на 90*, 3)делай(1500), 4)двигать в исходное положение, 5)ждем пока сменятся минуты на часах, идем снова 1).

Если сравнивать время, выраженное в секундах сначала суток, то шаг 5 ненужен.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

и где код?

Pyotr
Offline
Зарегистрирован: 12.03.2014

ua6em пишет:

и где код?

Щас ТС напишет и покажет. Что, тоже захотелось такую штуковину сделать?)))

Antony
Offline
Зарегистрирован: 29.06.2021
[code]
 
#include <Servo.h>
#include <iarduino_RTC.h>                               // подключение библиотеки
iarduino_RTC time(RTC_DS1302,8,6,7);         // Задаем правильно название нашего модуля, а также указываем к каким цифровым пинам его подключаем(в нашем случае – 8,6,7)
#include <Wire.h>                             // библиотека для устройств I2C 
#include <LiquidCrystal_I2C.h>       // подключаем библиотеку для дисплея
 
LiquidCrystal_I2C LCD(0x27,16,2);
Servo servo1;
void setup() {
    servo1.attach(5);
    delay(300);                                            // задержка в 300мс перед началом инициализации
    Serial.begin(9600);                              // устанавливаем скорость передачи данных с модулей в 9600 бод
    LCD.init();            // инициализация LCD дисплея
    LCD.backlight();  // включение подсветки дисплея
    time.begin();                                       // функция служит для инициализации работы модуля
// Ниже у нас прописываются временные значения в виде секунд, минут, часов, даты, включая месяц и год, и также можете указать день недели
    //time.settime(25,20,19,13,6,21,6);  // 10  сек, 10 мин, 10 час, 4 , октября, 2017 года, среда 
}   
void loop(){
    
     
       if(millis()%1000==0) {           //  задержка в одну секунду перед выводом времени в последовательный порт
      Serial.println(time.gettime("d-m-Y, H:i:s, D"));   // выводим время
      LCD.setCursor(0,0);
      LCD.print(time.gettime("d M Y, D"));
      LCD.setCursor(4,1);
      LCD.print(time.gettime("H:i:s"));
      delay(1);  // делаем небольшую задержку, чтобы не выводить время слишком часто 
     
void loop() {
  int Hour = RTC.get(DS1307_HR,true);
  int Minute = RTS.get(DS1307_MIN,true);
  int Second = RTS.get (DS1307_SEC? true);
  if (Hour = 7 && Minute = 0 && Second = 0) { 
  servo1.write(0);
  delay(1500);
  servo1.write(90);
  delay(1500);
}
      }
}
[/code]