1. Уважаемый Гость! При написании вопросов в раздел форума [ArduCopter] Вопросы, проблемы и решения обязательно придерживаться шаблона сообщения, оговоренного в правилах раздела! Если сообщение не будет оформлено должным образом, то и ответ на вопрос будет с наименьшим приоритетом. Старайтесь дать максимально полную информацию по вашей проблеме, чтобы можно было более детально рассматривать вопрос!
    Скрыть объявление
  2. Уважаемый Гость! Хотите получать кэшбэк с покупок в online-магазинах? Сервис "Zozi.ru" дает такую возможность!
    Скрыть объявление
  3. Друзья! Для нашего ресурса необходим дополнительный объем пространства в облаке Dropbox. Подробнее.
    Скрыть объявление

Arduino и AVR (Atmel) микроконтроллеры

Тема в разделе "Наши другие увлечения", создана пользователем raefa, 9 мар 2016.

Реклама. Купить это место.
  1. raefa

    raefa Главнокомандующий Команда форума

    Регистрация:
    3 янв 2015
    Сообщения:
    4.324
    Город:
    Zhigulevsk
    Имя:
    Александр
    Последнее редактирование: 19 окт 2017
  2. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    я преписал, он все равно не срабатывает. Я даже датчик перепроверил, он при срабатывании с ноля до 5 вольт выдает сигнал, а вот числа на экране стоят на ноле и не дергаются.
    до переписывания иногда насчитывали 58-47 значения при прикосновении к пину рукой, а терь ваще не шевелятся.
     
  3. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    Ну повесьте туда какую-нибудь кнопку, чтобы хотя бы 5-6 уверенных срабатываний было.
    --- Сообщения объединены, 15 ноя 2017 ---
    Можно еще для контроля куда-нибудь на индикатор выдавать rpm_cntr1 - при каждом прерывании он должен увеличиваться на 1.
     
  4. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    вывел на вторую строчку rpm_cntr1 и он срабатывает до 4 потом обнуляется и апять с 1 до 4 и так по кругу когда перед датчиком рукой мельтешиш.
     
  5. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    Всё правильно, так и должно быть.
    Вот в момент обнуления realRPM1 и должен что-то показывать.
     
  6. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    Нолик мигает еле заметно, частоту вращения надо поднимать. Сижу вот думаю как это сделать.
    --- Сообщения объединены, 15 ноя 2017 ---
    Вот показания появляются, но они так быстро меняются что экранчик не успевает их отобразить. какую то задержку надо сделать для отображения показаний. А то они еле заметные.
     
  7. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    Ну, сделайте пока так, чтобы RPM ниже определённого порога просто не отображался.
    if (realRPM1 > 5)
    {
    dtostrf(realRPM1, 3, 0, line2 + 3); //собираю строчку 4 здесь будет скорост вращ верхнего мотора
    line2[6] = ' ';
    }
    if(realRPM2 > 5)
    {
    dtostrf(realRPM2, 3, 0, line2 + 8); //а тут нижнего мотора.
    line2[11] = ' ';
    }
     
  8. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    В общем если ставить этот код
    Код:
    if (rpm_cntr1 > 0)
    {
    realRPM1 = float(rpm_cntr1 - 1) * 60000000.0 / float(stop_t1 - start_t1);
    rpm_cntr1 = 0;
    }
    то цыфры еле видны, очень быстро мерцаю. и чем больше параметр rpm_cntr1 > 0 тем бледнее получаются цыфры.
    поставил ноль и цыфры стали яркими, единственное последнее значение скачет очень быстро, видно только ноль. Тут можно применить такое же усреднение как ток усредняли из последних 10 измерений???
    И есче, подсчет оборотов ведется из расчета один импульс на один оборот, получается чтоб замерить скорость куллера , нужно полученный результат разделить на количество лопастей?
     
  9. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    Ну, можно и кувалдой по плате постучать - тоже что-нибудь показывать начнёт. Я же детально расписал - почему счётчик ДОЛЖЕН быть 2 и больше. И расписал - почему всё мерцает и как с этим бороться...
     
  10. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    Я все по чесному применяю ваши советы, но с последним кодом вот этим
    вообще ничего не показывало там где должны быть обороты, а там где на экрне выводился realRPM1

    вот в момент обнуления realRPM1 показывать начал трех значные числа. По этому я вернулся к начальному коду и изменив if (rpm_cntr1 > 0) частота кулера примерно правильно показываться начала 1459 обоотов в мин (я правда разделил на 7 лопастей начальное значение и получил 1459 об). Я так думаю что программа успевает подсчитать обороты и доп задержки не нужны. А когда в основной скеч вставлю как раз и увеличится задержка на выполнение основной программы.
     
  11. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    Это бессмысленное действо, так как при этом мы меряем совершенно не тот интервал, который нужен.
    Попробуйте тупо в loop добавить delay(500) и посмотрите на результаты.
    Полный код выкладывайте и показывайте.
    Да, еще, serial monitor в arduino пользоваться умеете? Очень удобно для отладки все данные скидывать в терминал и смотреть исходные значения.
     
  12. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    Как выводить в сериал монитор вроде знаю. но какие данные в него кидать для анализа? С работы приеду перевыложу код на гитхаб.
     
  13. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    Ну так исходные и кидайте.

    float realRPM1 = 0.0;
    if (rpm_cntr1 > 4)
    {
    realRPM1 = float(rpm_cntr1 - 1) * 60000000.0 / float(stop_t1 - start_t1);
    rpm_cntr1 = 0;
    serial.print("cntr=");
    serial.println(rpm_cntr1);
    serial.print("start=");
    serial.println(start_t1);
    serial.print("stop=");
    serial.println(stop_t1);
    }
    Выложите исходники на github и что показывает в serial monitor сюда.
    --- Сообщения объединены, 16 ноя 2017 ---
    А, да, ещё. Чтобы полностью следовать стандартам сделайте строку расчёта вот так:
    realRPM1 = (float) (rpm_cntr1 - 1) * 60000000.0f / (float)(stop_t1 - start_t1);
     
  14. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    Не понимаю почему при компиляции ошибка на serial.print("cntr="); вылазит.
     
  15. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    а сразу приводить текст ошибки?
     
  16. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    код я выложил на гитхаб
     
  17. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    Ясно, я ж на память пишу и это ж си. Serial должно быть с большой буквы и в setup вставьте:
    Serial.begin(9600);
    Ну или любую корректную скорость (хоть 115200).
     
  18. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    Это капец какой то... а я сижу рассматриваю примеры разные , вроде все нормально написано но не работает. Вот и пойми что тут регистр важен.:)

    Serial.begin(115200); я добавил сразу.
    --- Сообщения объединены, 16 ноя 2017 ---
    Вот что в порт приходит.
    сериал бегин.png
    сделал кстати чтоб сигнал шел с одного оборота 1 импульс. частота вращения совпала с тем когда замерял по лопостям.

    Проблемма с отображением значений числа оборотов остается. Экран очень быстро пишет значения и их еле видно.
     
  19. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    Ага. Вроде всё корректно, кроме того, что я зачем-то сперва обнуляю RPMcntr1, а потом отправляю его в порт :)
    так, меняем код вот так и смотрим результат:

    float realRPM1 = 0.0;
    if (rpm_cntr1 > 4)
    {
    realRPM1 = (float) (rpm_cnrtr1 - 1) * 60000000.0 / (float) (stop_t1 - start_t1);
    serial.print("cntr=");
    serial.println(rpm_cntr1);
    serial.print("start=");
    serial.println(start_t1);
    serial.print("stop=");
    serial.println(stop_t1);
    serial.print("RPM=");
    serial.println(realRMP1);
    rpm_cntr1 = 0;
    }

    А я пока код гляну.
    --- Сообщения объединены, 16 ноя 2017 ---
    Ээээ. А зачем
    if (realRPM1 > 5)
    закомментили? Я же сказал, что без этого без задержек так и будет выглядеть - так как куча циклов пройдёт с нулевым RPM.
     
  20. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    С этим абра кадабра идет.
    realRPM1 вообще ничего не показывает
    rpm_cntr1 показывает милиарды а то и больше.
     
  21. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    Может буфер переполняется. После каждого Serial.println добавьте еще Serial.flush
    --- Сообщения объединены, 16 ноя 2017 ---
    И сюда выкладывать результат serial monitor обязательно :) А не пересказывать на словах.
     
Реклама. Купить это место.