1 2 3 4 5 6 7 8 9 10 10/10 10,00оценок: 10

Самодельный контроллер пеллетной горелки на Arduino

Тема в разделе "Котлы, горелки, котельное об-е своими руками", создана пользователем бутус1, 19.07.17.

  1. бутус1
    Регистрация:
    17.02.17
    Сообщения:
    52
    Благодарности:
    72

    бутус1

    Участник

    бутус1

    Участник

    Регистрация:
    17.02.17
    Сообщения:
    52
    Благодарности:
    72
    почти правильно, не считая, что функция analogRead () возвращает у ардуино значения от 0 до 1023

    один из правильных вариантов uroven_ognya=analogRead (A3); uroven_ognya=map (uroven_ognya, 0, 1023, 255, 0);
     
  2. V757V
    Регистрация:
    23.11.11
    Сообщения:
    1.689
    Благодарности:
    639

    V757V

    Живу здесь

    V757V

    Живу здесь

    Регистрация:
    23.11.11
    Сообщения:
    1.689
    Благодарности:
    639
    Адрес:
    Москва
    А зачем тогда советуете?
     
  3. V757V
    Регистрация:
    23.11.11
    Сообщения:
    1.689
    Благодарности:
    639

    V757V

    Живу здесь

    V757V

    Живу здесь

    Регистрация:
    23.11.11
    Сообщения:
    1.689
    Благодарности:
    639
    Адрес:
    Москва
    Кстати, этот вариант не соответствует тому что у вас написано в скетче, у вас там байтовой переменной присваивается слово, значит будет происходить неявное преобразование типов, т. е старшие 2 бита от АЦП просто отбросятся.
     
  4. бутус1
    Регистрация:
    17.02.17
    Сообщения:
    52
    Благодарности:
    72

    бутус1

    Участник

    бутус1

    Участник

    Регистрация:
    17.02.17
    Сообщения:
    52
    Благодарности:
    72
    для новичка лучше играться с железом чем с софтом. Станет не новичком - такого вопроса вообще не возникнет.
    бред. отвечать вам больше не буду.
     
  5. V757V
    Регистрация:
    23.11.11
    Сообщения:
    1.689
    Благодарности:
    639

    V757V

    Живу здесь

    V757V

    Живу здесь

    Регистрация:
    23.11.11
    Сообщения:
    1.689
    Благодарности:
    639
    Адрес:
    Москва
    Это у вас в коде
    Код:
    byte uroven_ognya; //Объявим переменную для уровня огня с фотодатчика
    ...
    uroven_ognya=analogRead (A3); // получаем данные с датчика огня
    
    И как же в байтовой переменной поместится значение 1023?

    И правильно.
     
  6. бутус1
    Регистрация:
    17.02.17
    Сообщения:
    52
    Благодарности:
    72

    бутус1

    Участник

    бутус1

    Участник

    Регистрация:
    17.02.17
    Сообщения:
    52
    Благодарности:
    72
    Согласен, это не бред. Это ошибка кода. хотя скетч работает, но нужно "byte" заменить на "int"
    и обязательно маштабировать uroven_ognya=map (uroven_ognya, 0, 1023, 0, 255);
    или ограничить uroven_ognya=constrain (uroven_ognya,0, 255);

    это бред.
     
  7. demonei
    Регистрация:
    12.11.17
    Сообщения:
    60
    Благодарности:
    5

    demonei

    Живу здесь

    demonei

    Живу здесь

    Регистрация:
    12.11.17
    Сообщения:
    60
    Благодарности:
    5
    Всем привет, у меня есть такой датчик заказал по незнание но подстраховался и взял красный, все работает как часы, при срабатывании реле выскакивают квазибобры на экране особо не напрягают Ардуино при этом продолжает адекватно работать
    .Для саморазвития приобрел малину пока не всё так радужно, изучаю. Пытаюсь понять какой к ней обвес нужен.
     
  8. бутус1
    Регистрация:
    17.02.17
    Сообщения:
    52
    Благодарности:
    72

    бутус1

    Участник

    бутус1

    Участник

    Регистрация:
    17.02.17
    Сообщения:
    52
    Благодарности:
    72
    Только это код из старой версии. в посте 38 я выкладывал более оптимизированный (там значения температуры и огня не прыгают, а плавно меняются
    там нужно поменять строку 358:
    int xx=analogRead (A3);xx=constrain (xx,0, 255);
     
  9. бутус1
    Регистрация:
    17.02.17
    Сообщения:
    52
    Благодарности:
    72

    бутус1

    Участник

    бутус1

    Участник

    Регистрация:
    17.02.17
    Сообщения:
    52
    Благодарности:
    72
    квазибобры кстати могут выскакивать из-за таких ошибок кода.
     
  10. ippds
    Регистрация:
    02.08.11
    Сообщения:
    30
    Благодарности:
    5

    ippds

    Участник

    ippds

    Участник

    Регистрация:
    02.08.11
    Сообщения:
    30
    Благодарности:
    5
    Адрес:
    Нижний Новгород
    Ух сколько всего написали. большое спасибо всем
     
  11. V757V
    Регистрация:
    23.11.11
    Сообщения:
    1.689
    Благодарности:
    639

    V757V

    Живу здесь

    V757V

    Живу здесь

    Регистрация:
    23.11.11
    Сообщения:
    1.689
    Благодарности:
    639
    Адрес:
    Москва
    Это то, что у вас написано в скетче, и то, что вы назвали ошибкой кода. А теперь давайте рассмотрим, что при этом происходит. У данного микроконтроллера 10 битный АЦП, но учитывая систему команд результат преобразования помещается в 16 битный регистр (двухбайтное слово), где старшие 6 бит всегда нулевые. В строке кода вы это двухбайтное слово присваиваете однобайтной 8 битной переменной. Т. е. просите 16 бит засунуть в 8. Это невозможно, поэтому произойдет неявное (это сделает компилятор) преобразование типов, старший байт слова будет отброшен, т. н. выравнивание справа, а младший байт слова будет переписан в однобайтовую переменную. Т. о. будет произведено ограничение на уровне 255. И конструкция

    Не имеет никакого смысла, оптимизирующий компилятор, ее просто отбросит.
     
  12. бутус1
    Регистрация:
    17.02.17
    Сообщения:
    52
    Благодарности:
    72

    бутус1

    Участник

    бутус1

    Участник

    Регистрация:
    17.02.17
    Сообщения:
    52
    Благодарности:
    72
    при исправлении byte на int переменная uroven_ognya при выводе на экран может иметь четыре графических символа, а места там только на три. Возможно не корректное изображение. Поэтому смысл очень даже есть, но правильно конечно исправить всю строку на
    int xx=analogRead (A3);xx=map (xx, 0, 1023, 0, 255);
    хотя достаточно в этой строке (358) поменять byte на int
     
  13. V757V
    Регистрация:
    23.11.11
    Сообщения:
    1.689
    Благодарности:
    639

    V757V

    Живу здесь

    V757V

    Живу здесь

    Регистрация:
    23.11.11
    Сообщения:
    1.689
    Благодарности:
    639
    Адрес:
    Москва
    Информация выводимая на экран должна нести определенный смысл. Цифра 1023 или 255 ничего не говорит. В скетче у вас информативной является наличие/отсутствие пламени, именно это отрабатывает алгоритм, испытывая "уровень огня" на порог. Лично я бы и вывел то, что вычислил алгоритм Flame: Yes/No. Ну уж если хочется цифру, то вывел бы % 0...100.
     
  14. бутус1
    Регистрация:
    17.02.17
    Сообщения:
    52
    Благодарности:
    72

    бутус1

    Участник

    бутус1

    Участник

    Регистрация:
    17.02.17
    Сообщения:
    52
    Благодарности:
    72
    В любом случае ваше решение
    потом исправленое на
    как минимум не оптимально, как максимум - не верное.

    кроме того в сообщении:

    вы так же предлагаете не правильное решение. алгоритм Flame: Yes/No - не достаточен т. к. не показывает качество горения, а значит нельзя подстроить горелку под максимальную эффективность.
    Решение % 0...100 также не подходит, потому что: во-первых питание не стабилизированное и у каждого пользователя оно отличается на 0,1-0,5В в зависимости от источника, аналоговые датчики чувствительны к этому и в % 0...100 будут различия только из-за этого. Также в моей схеме можно использовать разные по характеристикам датчики, а % 0...100 можно вывести и подстроить только под один конкретный вид.
     
  15. V757V
    Регистрация:
    23.11.11
    Сообщения:
    1.689
    Благодарности:
    639

    V757V

    Живу здесь

    V757V

    Живу здесь

    Регистрация:
    23.11.11
    Сообщения:
    1.689
    Благодарности:
    639
    Адрес:
    Москва