Ви не увійшли.
ще додати pid регулятор ![]()
Ще додати відтворення звукового фрагмента: "Обережно, двері зачиняються. Наступна станція ..." (жартую
)
Ну, десь так
Повільно, 10 см за хвилину, але свою задачу виконує ![]()
https://vimeo.com/1083471847/06e0a57a9c - походу на цьому форумі плеєр зламаний ![]()
Встигає за 1 мс
ESP32 капєц швидка штука
Та справа ж не у швидкодії процесора. Записати кілька байтів у регістри - це і на atmega займає мікросекунди. А фактичний запис байта в EEPROM - 3.4 мс (1.8 мс, якщо без стирання).
Тут же важливий проміжок часу між виникненням зовнішньої події (падіння напруги нижче заданного рівня) і завершенням запису на фізичному рівні. А він залежить від купи різних факторів.
Якщо для моніторингу використовується компаратор, який генерує переривання - це одне (я не в курсі, чи є такий в ESP32). Якщо періодично читається АЦП - це інше. Впливатиме, з якою частотою йде опитування, чи задіяно паралельно інші канали, чи виконуються інші задачі, які пріорітети у задач (якщо це RTOS).
ESP32 пише на зовнішню флешку, підʼєднану по SPI. Впливатиме, чи будуть в черзі інші SPI транзакції, чи встигла флешка закінчити попередню операцію. У типової XM25QH32C запис сторінки - 0.5 мс, але якщо для запису потрібно стерти сектор - це вже 50 мс.
має вистачити десь на 300 мс. Теоретично можна встигнути. Але це дуже оптимістична оцінка
unsigned long start = millis();
prefs.begin("actuator", false);
prefs.putInt("position", position);
prefs.end();
ets_printf("actuator save time: %drn", millis() - start);
position_changed = false;Встигає за 1 мс
ESP32 капєц швидка штука
Нраіцца.
А зберігати в MQTT дійсно можна. Це працює, але без гарантій. Якщо wifi відвалиться - упсь.
>> датчик на рухомій частині, а магніти в крайніх стаціонарних положеннях
прикольна ідея
але трохи не зрозуміло як це зробити в цій конструкції.
>>моніторити струм двигуна.
Робив таке з двигуном від приводу Старлінка, нормально вийшло. Але тут 2 черв'ячні редуктори. Дуже мале передаточне число і дуже велике зусилля.
>> фрікцион
я зварювальник ненастоящий ![]()
Кінцевик один (не хочеться жмута проводів)
А, тепер зрозумів.
Як варіант - сам датчик на рухомій частині, а магніти в крайніх стаціонарних положеннях.
Ще варіант без кінцевика - моніторити струм двигуна. Але може знадобитись фрікцион. Бо якщо момент у двигуна великий, та ще й червʼячна передача, то поки система зреагує на зростання струму, може встигнути щось поламати.
Та сама, але з телефону ![]()
Чому бажано знати положення приводу? Кінцевик один (не хочеться жмута проводів), і якщо не знаєш, в якому положенні воно ввімкнулось, є шанс відкрити більше ніж потрібно. В принципі, світло зникає не так часто, можна дійсно починати з закривання і не паритись
Зберігати кожний оберт якось параноїдально, і флешку не хочеться деградувати
А RTC то явно лишнє ![]()
Зберігати положення приводу непогано було б.
Це, мабуть, потрібно краще розуміти логіку роботи системи. Бо як розумію на даний момент, є два положення: вікно відчинене, вікно зачинене. Відчиняється або зачиняється в залежності від поточної температури? Яке тут положення приводу?
Якщо на старті алгоритм потребує, щоб система була в детермінованому стані, то можна привести її в початковий стан безумовно, наприклад, вікно закрите. А далі нехай працює алгоритм.
Є ще дивна ідея зберігання в retain message в mqtt
Ще ідеї, щоб зберігати при кожній зміні, а не тільки при зникненні живлення: якщо раптом надумаєте ставити RTC з батарейкою, то зазвичай там є кілька десятків байтів CMOS-памʼяті. Або зберігати в зовнішню FRAM ![]()
PS: соррі, не розумію, jokeR та jokeer (Гість) - це одна і та ж особа, чи ні.
Зберігати положення приводу непогано було б. Є ще дивна ідея зберігання в retain message в mqtt ![]()
Тому придумав такий лайфхак - комутацію релюшками робити з відключеною напругою, а напругу подавати окремим ключем з невеликою затримкою.
Це стандартна практика при механічній комутації силових ліній. Ніяких розмикань під струмом, ніяких замикань під напругою. Розмикання під струмом тільки в разі аварійного відключення.
В критичних застосуваннях ще й тест на залипання контактів. Але для вашого проекту це, мабуть, зайве ![]()
Була ідея ловити пропадання напруги живлення, і, поки є енергія в конденсаторах, зберігати налаштування програми на флешку.. Але завади від мотора досить інтенсивні, багато false positive.. Поки не придумав рішення.
Дуже приблизна оцінка порядку величин: ESP32 в активному режимі споживає біля 20 мА (а вона скоріш за все буде в активному, бо потрібно читати ADC і писати на флешку). Ємності 3000 мкФ після діода при падінні напруги з 5 В (не з 12, бо LM7805 зʼїдає 7 вольт) до 3 В (берем як мінімум для ESP32) має вистачити десь на 300 мс. Теоретично можна встигнути. Але це дуже оптимістична оцінка. Якщо працює вайфай, споживання ESP32 може бути в 3-4 рази більше. Якщо замкенене реле, це ще +30 мА.
12 вольт іде з мережевого БЖ? Я б запропонував детектити наявність напруги AC мережі. Баластний конденсатор + 814 оптопара (або 817 паралельно з діодом). Тоді в запасі вся ємність БЖ, в тому числі й високовольтна.
А взагалі, моя особиста думка, автоматичне збереження налаштувань - це зайве. Кнопка чи пункт меню "зберегти" - простіше, надійніше та зрозуміліше. Звісно, в деяких випадках аварійне збереження поточного стану системи необхідне, але не для користувацьких налаштувань.
Продовження ![]()
Для управління моторчиком планував використати модуль MC33886, але, на жаль, трапився бракований. Тому довелось придумувати свою реалізацію Н-мосту з того, що знайшлось у коробці. У коробці знайшлись малопотужні релюшки HK4100F. Китайці обіцяють струм 3А, але, мені здається, що з індуктивним навантаженням вони довго не протягнуть. Тому придумав такий лайфхак - комутацію релюшками робити з відключеною напругою, а напругу подавати окремим ключем з невеликою затримкою. Тим же ключем можна робити плавний старт. Так, можна накрафтити і H-міст повністю на mosfet'ах.. Але це буде трохи складніше, а для моєї саморобки не має особливого смислу.
Замість контроллера взяв ESP32-C3. Цікава штука, хто не пробував - рекомендую. Після цього Arduino Nano - якийсь артефакт із минулого
. Дофіга пам"яті, дофіга флешки, WiFi, можна обновляти прошивку без проводів, дебаг прямо з IDE.. Але є і деякі неочевидні речі. По перше, антена. Вона припаяна з порушенням всіх норм міжнародного права і здорового глузду
Щоб радіо працювало більш стабільно, треба припаяти до антени кусок проводу довжиною 31 мм (гуглиться). Інші методи у мене не спрацювали. Окремого конвертора USB-UART, як на Arduino, тут немає. Якщо хочеться бачити логи - підключаємо свій. Наче є спосіб задіяти вбудований в чіп USB-CDC, але можливо це зламає on chip debug.. не пробував.
Була ідея ловити пропадання напруги живлення, і, поки є енергія в конденсаторах, зберігати налаштування програми на флешку.. Але завади від мотора досить інтенсивні, багато false positive.. Поки не придумав рішення.

Оце надумався зробити в теплиці автоматику, щоб вікно само відкривалось і закривалось. Готовий потужний привід коштує як пів теплиці, тому вирішив спробувати запиляти замостійно.
Ні токарного верстата ні 3Д прінтера немає, є шуруповерт, болгарка, зварювальний апарат і Епіцентр з безкоштовною доставкою ![]()

В Епіку замовив трубу 25х1.5 мм - в неї ідеально стає підшипник, 20х1.5 мм, підшипник 608 ZZ, шпильку М8 (здогадуюсь, що різьба трохи не така, але що маємо те маємо), вварні гайки. Стопорні кільця для підшипника вирізав з тієї ж труби 25 мм - відрізав сегмент 10 мм і вирівняв. Одне кільце вварив, інше - фіксується гвинтами М3. Квадратну втулку зварив з квадратної труби 16 мм, магніт зафіксував термоусадкою. Щоб шпилька не прокручувалась у втулці - зробив лиску. Гайки на шпильці зафіксував фіксатором різьби.
Мотор-редуктор склопідіймача ВАЗ - з ОЛХ.
Неодимовий магніт, мікрик, датчик Холла (аналоговий) - arduino.ua.
Чутливості датчика досить, незважаючи на метал кругом - напруга міняється від 1.5 до 2.5 В.
Можна писати код. Too bee contiiinue.. ![]()