Жалюзи на шаговом моторе

Evvgeen

✩✩✩✩✩✩✩
18 Янв 2020
0
1
Жалюзи на шаговом моторе и астрономическими часами, суть чтоб жалюзи открывались с восходом плюс минус 30 минут и также закрывались позле или перед закатом
 
  • Лойс +1
Реакции: Evgenij Goga

_BadWolf_

★✩✩✩✩✩✩
2 Янв 2020
49
16
Что тут сложного ? Модуль часов + драйвер шаговиков и любой больее ли мнение пригодный для этого МК.
Либо вместо часов можно использовать датчик освещенности, приклеить его к окну и настроить.
 
Изменено:

Evvgeen

✩✩✩✩✩✩✩
18 Янв 2020
0
1
Для меня очень сложно, я собрал на датчике освещение, но мотор постоянно дёргается, если есть возможность соберите скетч на ардуино и схему, буду премного благодарен
 

Vit_But

✩✩✩✩✩✩✩
26 Янв 2019
28
8
А просто по таймеру включать-выключать не подходит?
 

_BadWolf_

★✩✩✩✩✩✩
2 Янв 2020
49
16
@Evvgeen,
C++:
int data = (считать данные с датчика света)
if (data > 500){ // светло, открывает жалюзи (значения подобрать експериментально )
    motor.step(100); // даем команду мотору (нужно заменить на свое)
} else if (data < 200){ // темно, закрываем (значения подобрать експериментально )
    motor.step(-100) // даем команду мотору (нужно заменить на свое)
}
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Надо хранит последнее считанное значение. И проверять на то, было ли изменение или нет, тогда к мотору не будет лишних обращений.
примерно так
C++:
nt data = (считать данные с датчика света)
if ((data > 500)&&(last_data<200)){ // светло, открывает жалюзи (значения подобрать експериментально )
    motor.step(100); // даем команду мотору (нужно заменить на свое)
} else if ((data < 200)&&(last_data>500)){ // темно, закрываем (значения подобрать експериментально )
    motor.step(-100) // даем команду мотору (нужно заменить на свое)
}
static last_data=data;
 

Evvgeen

✩✩✩✩✩✩✩
18 Янв 2020
0
1
Надо хранит последнее считанное значение. И проверять на то, было ли изменение или нет, тогда к мотору не будет лишних обращений.
примерно так
C++:
nt data = (считать данные с датчика света)
if ((data > 500)&&(last_data<200)){ // светло, открывает жалюзи (значения подобрать експериментально )
    motor.step(100); // даем команду мотору (нужно заменить на свое)
} else if ((data < 200)&&(last_data>500)){ // темно, закрываем (значения подобрать експериментально )
    motor.step(-100) // даем команду мотору (нужно заменить на свое)
}
static last_data=data;
Надо хранит последнее считанное значение. И проверять на то, было ли изменение или нет, тогда к мотору не будет лишних обращений.
примерно так
C++:
nt data = (считать данные с датчика света)
if ((data > 500)&&(last_data<200)){ // светло, открывает жалюзи (значения подобрать експериментально )
    motor.step(100); // даем команду мотору (нужно заменить на свое)
} else if ((data < 200)&&(last_data>500)){ // темно, закрываем (значения подобрать експериментально )
    motor.step(-100) // даем команду мотору (нужно заменить на свое)
}
static last_data=data;
Парни спасибо что многие откликнулись, я понимаю что нужно время всем чтоб этим замарачиваться, и если у кого кого-нибудь оно найдётся и сможете написать скетч который я бы залил в ардуино и схему подключения, был бы очень благодарен, надо чтоб работал именно на астрономических часах, чтоб не лазить постоянно и вносить поправки в скетч, в идеале, астрономические часы и кнопка открытия закрытия или вообще в идеале с пульта ик открывание закрывание
 

Vit_But

✩✩✩✩✩✩✩
26 Янв 2019
28
8
По мне астрономические часы это типа определение время по солнцу. И к примеру в Питере это не всегд возможно. + часы должны быть максимально точные, значит время должно быть с инета и данные о восходе-закате на данный день.
Или мы про разные задачи говорим ?
 

_BadWolf_

★✩✩✩✩✩✩
2 Янв 2020
49
16

Evvgeen

✩✩✩✩✩✩✩
18 Янв 2020
0
1
По мне астрономические часы это типа определение время по солнцу. И к примеру в Питере это не всегд возможно. + часы должны быть максимально точные, значит время должно быть с инета и данные о восходе-закате на данный день.
Или мы про разные задачи говорим ?
Да астрономические часы, по координатам ширины долготы определяют восходы и закаты, если не ошибаюсь есть и библиотека, я как то собирал релюшку для включения света, скетч брал с интернета, правил долготу широту и включение света за 30 минут до захода солнца и выключение 30 минут после восхода
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Если тебе по координатам надо, то вместо модуля часов бери модуль GPS, он будет получать информацию со спутника (там атомные часы супер=пупер), по данным же можно вычислить и точное время (могу подсказать направление куда думать но это уже высшая геодезия) Не уверен, что тебе нужна такая точность. Проще обращаться через вифи к какому нить сайту, которые кажет нужную инфу и парсить данные.
 

Evvgeen

✩✩✩✩✩✩✩
18 Янв 2020
0
1
надо часы реального времени ардуино и шаговый двигатель. вот пример скетча о чём я ранее говорил
// Астротаймер лайт — для управления освещением по времени заката и восхода солнца
// До использования настроить в модуле RTC текущее время: Примеры->DS1307RTC->SetTime
// При использовании настроить в TimeLord текущую дату, часовой пояс и географические координаты
// Прописать выход управления нагрузкой в #define REL
// Создано в Arduino 1.6.10 by chaloc 2016

#include <Time.h> // время и текущая дата
#include <TimeLord.h> // вычисление времени заката и рассвета
#include <DS1307RTC.h> // библиотека RTC возвращает time как time_t, работает как с DS1307 так и с DS3231

#define REL 7 // выход управления реле
#define DEBUG 1 // 1 включает сообщения отладки в монитор серийного порта. Скорость 115200

const int TIMEZONE = +5; // установка часового пояса
const float LATITUDE = 55.23, LONGITUDE = 61.30; // установка координат: широта, долгота

TimeLord myLord; // переменные TimeLord
byte sunTime[] = {0,0,12,30,07,16}; // вместо 30 07 16 поставить свою дату число/месяц/год
int minNow, minLast = -1, hourNow, hourLast = -1, minOfDay; // -1 отрабатывает при первом запуске
int mSunrise, mSunset; //время рассвета и заката в минутах от начала дня (0-1439)

// настройка
void setup()
{
Serial.begin(115200); // старт соединенияи и установка скорости
pinMode(REL, OUTPUT); // инициализируем порт для канала реле как выход
digitalWrite(REL ,HIGH); // устанавливаем на входе релейного модуля высокий уровень — реле выключено
myLord.TimeZone(TIMEZONE * 60);
myLord.Position(LATITUDE, LONGITUDE);
setSyncProvider(RTC.get); // синхронизация времени с RTC
if (timeStatus() != timeSet)
Serial.println(«Unable to sync, load time to RTC»);
else
Serial.println(«RTC has set the system time»);
}

// основной цикл
void loop()
{
if (timeStatus()!= timeNotSet)
{
minNow = minute();
if (minNow != minLast)
{
minLast = minNow;
hourNow = hour();
minOfDay = hourNow * 60 + minNow; //текущая минута дня 0-1439
#if DEBUG == 1
Serial.print(«TimeNow: „);
Serial.print(hourNow);
Serial.print(“-»);
Serial.print(minNow);
Serial.print(" minOfDay:");
Serial.print(minOfDay);
Serial.print(" minLast:");
Serial.print(minLast);
Serial.print(" hourLast:");
Serial.print(hourLast);
Serial.println();
#endif
if (hourNow != hourLast) // расчет времени рассвета и заката при изменении часа (раз в час)
{
//Время рассвета и заката в минутах от начала дня
sunTime[3] = day(); // текущая дата от библиотеки Time
sunTime[4] = month();
sunTime[5] = year()-2000;
myLord.SunRise(sunTime); // расчетные данные рассвета из TimeLord
mSunrise = sunTime[2] * 60 + sunTime[1] + 20; // где "+20" задержка выключения реле утром в минутах
myLord.SunSet(sunTime); // расчетные данные заката из TimeLord
mSunset = sunTime[2] * 60 + sunTime[1] + 15; // +15 задержка вкл реле вечером
#if DEBUG == 1
Serial.print(«DATE: „);
Serial.print( sunTime[3]);
Serial.print(“/»);
Serial.print( sunTime[4]);
Serial.print("/");
Serial.print( sunTime[5]);
Serial.print(" SUNRISE OFF:");
Serial.print(mSunrise);
Serial.print(" SUNSET ON:");
Serial.print(mSunset);
Serial.println();
#endif
hourLast = hourNow;
}
//управляем реле
if (minOfDay < mSunrise || minOfDay >= mSunset) // если минут с начала суток меньше, чем время рассвета, но больше, чем время заката
digitalWrite(REL,LOW); // то устанавливаем на входе релейного модуля низкий уровень уровень — реле срабатывает
else // во всех остальных случаях
digitalWrite(REL,HIGH); // устанавливаем на входе релейного модуля высокий уровень — реле выключается
#if DEBUG == 1
Serial.print(«RELE:»);
Serial.print(minOfDay < mSunrise || minOfDay >= mSunset);
Serial.println();
#endif
} // End: if (minNow != minLast)
} // End: if (timeStatus()!= timeNotSet)
} // End loop()

byte decToBcd(byte val){
return ( (val/10*16) + (val%10) );}

Изменяем в скетче:
Строчку #define REL 7 // ставим свой выход для управления реле
const int TIMEZONE = +5; // установка часового пояса
const float LATITUDE = 55.23, LONGITUDE = 61.30; // установка координат: широта, долгота. Можно узнать в Гуглокартах или Яндекс картах.
byte sunTime[] = {0,0,12,30,07,16}; // вместо 30 07 16 поставить свою дату число/месяц/год
Загрузка-Сохраняем папку скетча-Ресет-Готово. Запускаем Монитор порта, выставляем скорость 115200, жмем Reset на плате. Должны увидеть такую картину, раз в минуту появляется новая строчка:
 

malu

✩✩✩✩✩✩✩
3 Фев 2022
0
0
Везде астротаймер этот-соорудил работает, но не пойму. Подскажет кто-то зачем minlast и hourlast, и зачем условие проверки с now?