Автор Тема: Помощь с Ардуино для крафта  (Прочитано 6027 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн sadky

  • Эксперт
  • *****
  • Сообщений: 2001
  • Репутация: +273/-0
Re: Помощь с Ардуино для крафта
« Ответ #30 : Февраля 26, 2019, 15:22:10 »
Проще добавить внешний EEPROM
Неа, проще забить и читать на языке зарубежных партнёров и не выёживаться, тем более в моей ситуации ;D

Оффлайн Tander

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
Re: Помощь с Ардуино для крафта
« Ответ #31 : Февраля 26, 2019, 15:24:40 »
тройная запись чтобы отсеять ошибку и сохранение только при выключении и только если цифра поменялась в процессе работы. надо только надежность схемы аварийного питания протестировать

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

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

Можно использовать e-ink дисплей небольшой - на котором в случае пропадания питания - останется последняя показанная информация. Есть недорогие на 1,54 дюйма, в районе 15 баксов.

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

Оффлайн akl

  • Живу на форуме
  • *******
  • Сообщений: 8114
  • Репутация: +2265/-69
  • не шарю ваще
Re: Помощь с Ардуино для крафта
« Ответ #32 : Февраля 26, 2019, 15:44:20 »
только тогда по хорошему - весь предел адресов, куда записываем значения - нужно вычистить перед записью - иначе будут проблема - как понять, что в этом адресе значение с последнего выключения питания, а не с предыдущего например... 
это ты об чем? о циркуляции ячеек чтоб каждый раз в другую записывалось? ниче вычищать не надо - просто в каждом блоке данных (из нескольких ячеек) одна из них (определенная) должна быть сигнальной, после успешного считывания (сначала сканируются все сигнальные ячейки и определяется актуальная) (можно еще сделать проверку дублированием) ее значение будет меняться, а переменная адреса меняться на следующий блок для записи.
Но если делать запись только при выключении - надобность такой фигни отпадает, т.к. 100000 циклов уже на всю жизнь хватит даже если каждый раз при выключении будет сохраняться. а если еще записывать данные не один раз, а раза 3 и при чтении сравнивать чтоб ошибку отсеять - то вообще.

... и добавил:

Неа, проще забить и читать на языке зарубежных партнёров и не выёживаться, тем более в моей ситуации ;D
это мы уже не про язык, а про аварийное (и неаварийное) отключение. чтоб не пришлось перематывать тыщи витков если случайно провод выдернул или свет моргнул.
« Последнее редактирование: Февраля 26, 2019, 15:49:17 от akl »

Оффлайн Tander

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
Re: Помощь с Ардуино для крафта
« Ответ #33 : Февраля 26, 2019, 16:18:01 »
Я за то, чтобы использовать аварийное питание ардуины, при пропадании основного. Например - основное питание у нас 12в. Берем 9в батарею или аккум напряжение меньшее, чем напряжение основного питания, но при этом - достаточное для работы ардуины, подпираем аккум диодом шоттке - при пропадании основного питания - диод открывается - и сама ардуина уже пошла работать от питания батареечного. Так же - можно взять свободный аналоговый вход запитать через делитель напряжения и посадить на него прерывание - как только напряжение падает ниже обозначенного предела - например при делителе 1:3 - 12в - это будет 4в, а 9в - это будет уже 3в. Так вот - если напряжение падает ниже указанного порога, что говорит о включении аварийного источника питания - запускается функция сохраненния данных в еепром. И все в общем-то. ) делов и по коду и по организации питания - на полчаса где-то ))

... и добавил:

на ардуине еще компаратор есть - можно его задействовать тоже, т.к. у него свое прерывание.
« Последнее редактирование: Февраля 26, 2019, 16:21:13 от Tander »

Оффлайн akl

  • Живу на форуме
  • *******
  • Сообщений: 8114
  • Репутация: +2265/-69
  • не шарю ваще
Re: Помощь с Ардуино для крафта
« Ответ #34 : Февраля 26, 2019, 17:48:54 »
для долгого батареечного или аккумулятроного аварийного питания например нужен отдельный механизм нормального выключения, иначе оно будет работать вечно пока батарейку не посадит.
для начала попробую какую-нибудь простейшую схему из диода и большого конденсатора. там кстати уже есть диод на входе 9-вольтового питания. и тупо прерывание по спадающему фронту.

Только при питании от юсб уже не будет работать эта хрень. Но можно сделать и произвольное кнопочное сохранение чтоб можно было сознательно сохранить если нет уверенности в срабатывании автоматического




... и добавил:

а еще большому конденсатору наверно нужно ток зарядный ограничить
« Последнее редактирование: Февраля 26, 2019, 17:51:26 от akl »

Оффлайн Tander

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
Re: Помощь с Ардуино для крафта
« Ответ #35 : Февраля 26, 2019, 18:02:00 »
Вообще - атмега в ардуине имеет 6 режимов энергосбережения:

Idle Mode (режим ожидания). В нем процессор приостанавливается, но остальная периферия - SPI, USART, аналоговый компаратор, шина TWI (I2C), таймеры/счетчики, сторожевой таймер и система прерываний - продолжают работать. Поэтому выход из режима Idle возможен как по внешнему, так и по внутреннему прерыванию.

ADC Noise Reduction Mode (режим снижения шумов АЦП). Данный режим присутствует только в моделях МК, содержащих в своем составе АЦП и предназначен для уменьшения всевозможных наводок во время его работы. В этом режиме прекращает работу процессор и отключается синхронизация ввода-вывода, остальные устройства продолжают работу.

Power-Down mode (режим микропотребления) - самый экономный режим, присутствует во всех AVR. В этом режиме отключаются все внутренние тактовые сигналы, соответственно, прекращается функционирование всех узлов МК, работающих в синхронном режиме. Единственными узлами, продолжающими работать в этом режиме, являются асинхронные модули МК: сторожевой таймер (если он включен), подсистема обработки внешних прерываний и блок сравнения адреса модуля TWI. Пробуждение из режима Power-Down возможно при возникновении сброса (аппаратного, от сторожевого таймера, от схемы BOD) или в результате генерации некоторых прерываний (в том числе INT0 и INT1)

Power Save Mode (экономичный режим). Идентичен режиму Power Down с одним отличием: в режиме Power Save таймер/счетчик 2 может продолжать работу, причем как в синхронном, так и асинхронном режиме. Вывести МК из этого режима могут те же события, что и в случае использования режима Power Down, а так же прерывания от таймера/счетчика 2.

Standby Mode (режим ожидания). Этот режим рекомендуется задействовать только при использовании внешнего резонатора. Он идентичен режиму Power Down, за исключением того, что тактовый генератор продолжает функционировать. Благодаря этому пробуждение МК и переход в рабочий режим требует всего 6 тактов.

Extended Standby Mode (расширенный режим ожидания). Как и режим Standby этот режим рекомендуется использовать совместно с внешним резонатором. Он идентичен режиму Power Save, за исключением того, что тактовый генератор продолжает функционировать. Благодаря этому пробуждение МК и переход в рабочий режим требует всего 6 тактов.


Для того чтобы перевести Ардуино в один из перечисленных режимов достаточно выполнить 2 функции: set_sleep_mode(<mode>) для задания конкретного режима и sleep_mode(). Они объявлены в файле sleep.h, поэтому он должен быть добавлен в секцию include вашего скетча.
#include <avr/sleep.h>

...
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_mode();

Для указания режима используются константы:

SLEEP_MODE_IDLE
SLEEP_MODE_ADC
SLEEP_MODE_PWR_DOWN
SLEEP_MODE_PWR_SAVE
SLEEP_MODE_STANDBY
SLEEP_MODE_EXT_STANDBY


Более подробное описание можно найти в документации к атмеге 328p в разделе Power Management and Sleep Modes

... и добавил:

Еще есть библиотека Low Power https://github.com/rocketscream/Low-Power 

Она предназначена для управления режимами энергосбережения Ардуино в более гибкий способ, чем стандартными средствами. Там есть примеры - после них все понятно что и как там работает. Позволяет одной строчкой обработать запрос и перевести в нужный режим прибор.
« Последнее редактирование: Февраля 26, 2019, 18:09:43 от Tander »

Оффлайн akl

  • Живу на форуме
  • *******
  • Сообщений: 8114
  • Репутация: +2265/-69
  • не шарю ваще
Re: Помощь с Ардуино для крафта
« Ответ #36 : Февраля 26, 2019, 18:34:00 »
 почти все основное уже работает как надо.

... и добавил:

sadky, тебе нужно будет еще один оптический концевик или что это такое. и какой-то экран на оси круглый, который будет иметь прореху достаточную чтоб одновременно оба датчика были засвечены и в то же время одновременно оба могли быть в тени.
« Последнее редактирование: Февраля 26, 2019, 18:42:45 от akl »

Оффлайн sadky

  • Эксперт
  • *****
  • Сообщений: 2001
  • Репутация: +273/-0
Re: Помощь с Ардуино для крафта
« Ответ #37 : Февраля 26, 2019, 18:44:59 »
akl,  Спасибо, это понятно, просто оббегала всё в Митино - не нашёл, кончились , последний забрал. Найду со временем. Про диск тоже понятно, сделаю.

Оффлайн akl

  • Живу на форуме
  • *******
  • Сообщений: 8114
  • Репутация: +2265/-69
  • не шарю ваще
Re: Помощь с Ардуино для крафта
« Ответ #38 : Февраля 26, 2019, 18:45:16 »
Tander, кстати пробуждение по прерыванию из самого глубокого сна - та еще хрень, там надо в прерывании сразу это прерывание отключать, иначе оно будет срабатывать бесконечно, т.к. оно кривое (именно то, от которого оно может просыпаться). или как-то так. но короче я это делал и все нормально работало.

Оффлайн Tander

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
Re: Помощь с Ардуино для крафта
« Ответ #39 : Февраля 26, 2019, 23:05:48 »
sadky, А какой у тебя опто-датчик?

Оффлайн sadky

  • Эксперт
  • *****
  • Сообщений: 2001
  • Репутация: +273/-0
Re: Помощь с Ардуино для крафта
« Ответ #40 : Февраля 26, 2019, 23:37:41 »
Вот такой:


Оффлайн Tander

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
Re: Помощь с Ардуино для крафта
« Ответ #41 : Февраля 27, 2019, 00:04:36 »
3 ноги у него? есть ли какой-то контроллер или только пассивные элементы? если у него один из выходов сигнальный (S, DATA, OUT - по разному могут назвать) - попробуй его подключить к ардуинке - питание +5в, минус общий, а сигнальный выход повесить на цифровую ногу ардуины - и посмотреть - что там происходит при перекрывании щели.

типа:

int sensorPin = 5;     // the number of the sensor pin
int ledPin =  13;  // default UNO led-pin
int sensorState = 0; //Variable for sensor state

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the sensorPin as an input:
  pinMode(sensorPin, INPUT);
}

void loop() {
  // read the state of the pushbutton value:
  sensorState = digitalRead(sensorPin);

  // check if the sensor doesn't has a is open. If it is, the sensorState is HIGH:
  if (sensorState == HIGH) {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
  } else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
  }
}

И попробуй перекрывать щель датчика. По идее - при открытой щели - у тебя будет постоянно гореть светодиод на плате ардуины (LED), а при перекрывании щели - должен гаснуть. При условии конечно что у тебя на датчике есть подтягивающий резистор. Если же нет, либо если будет постоянно моргать хаотично светодиод на плате - то нужно прокинуть от указанной ноги ардуино (5) - подтягивающий резистор в 10к (на минус).

Оффлайн akl

  • Живу на форуме
  • *******
  • Сообщений: 8114
  • Репутация: +2265/-69
  • не шарю ваще
Re: Помощь с Ардуино для крафта
« Ответ #42 : Февраля 27, 2019, 07:56:03 »
т.к. это модуль, там должны быть все нужные подтяжки

Оффлайн sadky

  • Эксперт
  • *****
  • Сообщений: 2001
  • Репутация: +273/-0
Re: Помощь с Ардуино для крафта
« Ответ #43 : Февраля 27, 2019, 08:26:46 »
Три вывода: +, S, G.
Активировать нет, но подтяжки есть. :)

Оффлайн akl

  • Живу на форуме
  • *******
  • Сообщений: 8114
  • Репутация: +2265/-69
  • не шарю ваще
Re: Помощь с Ардуино для крафта
« Ответ #44 : Февраля 27, 2019, 09:21:50 »
подключи вот так


« Последнее редактирование: Февраля 27, 2019, 18:30:07 от akl »