ИК паяльная станция на Arduino Mega 2560. Доработка скетча "ARS_v2_Lilium_JSN"

Тема в разделе "Arduino & Shields", создана пользователем vector99, 7 дек 2016.

  1. Yojiq

    Yojiq Нерд

    Мое мнение такое : режим нагревателей контролируется отдельно каждый , а температура платы как итоговое значение и по нему ориентироваться и вести лог и хеппиенд.
     
  2. SOLOway

    SOLOway Гик

    У ТермоПро ИК650-Про сделано так
     
  3. Yojiq

    Yojiq Нерд

    Друзья!, в программировании я пока слаб и прошу помощи, во первых дребезг кнопок надо увеличить время срабатывания и выложите настройки ПИД свои - желательно с пояснениями этих цифр.
    Спасибо.
     
  4. Yojiq

    Yojiq Нерд

    что ?, ни кто не использует данную прошивку ?
     
  5. xake

    xake Нерд

    В этом выражении задержка от дребезга 100мс - ( millis() - ms_button)>100)
    для кнопки ВВЕРХ, например:
    if (upSwitchState == HIGH && ( millis() - ms_button)>100);

    Создайте константу в начале скетча
    int t_button = 100;
    и поменяйте везде на всех кнопках где указано >100
    if (upSwitchState == HIGH && ( millis() - ms_button) > t_button);


    Изменяя t_button выберите подходящую задержку

    Настройки ПИД смотрите в прошивке Yurik-o на 8 стр.
    double kp1 = 3;
    double ki1 = 0;
    double kd1 = 20;
    double kp2 = 3;
    double ki2 = 0;
    double kd2 = 20;
     
    Последнее редактирование: 19 ноя 2017
    Yurik-o нравится это.
  6. Yurik-o

    Yurik-o Нерд

    Кстати настройки ПИД очень индивидуальны и зависят от многих параметров так что будьте внимательны
    я в данное время работаю над прошивкой в которой оперативно можно будет подстраивать ПИД параметры

    методики подбора параметров есть в интернете

    Может кто знает и подскажет: у меня через некоторое время дисплей перестает показывать, только экран светится белым и все остальное работает
     
    Последнее редактирование: 20 ноя 2017
  7. xake

    xake Нерд

    залейте скетч часиков, например, и посмотрите, может чип экрана перегревается
    http://www.belajarduino.com/2016/06/membuat-jam-analog-dengan-arduino-uno.html
     
    SOLOway нравится это.
  8. Yurik-o

    Yurik-o Нерд

    Странное дело
    блок питания ровно 5В
    у дисплея моего питание 5В и на подсветку 3,3В (в принципе даже 5В) и на борту стоит стаб 5В->3,3В
    такой, https://w ww.ebay.com/itm/401087406846, не реклама, но без тача
    поставил диод на питание и пропало пропадание (масло масляное) изображения, по крайней мере
    несколько дней по несколько часов (4-5) работает нормально
     
  9. xake

    xake Нерд

    может стаб 5В->3,3В и отключался по перегреву
     
  10. Yurik-o

    Yurik-o Нерд

    кз-хз
     
  11. dr-baks

    dr-baks Нерд

    Извините пожалуйста,но я не могу понять как кнопки по такой схеме будут работать.Будет работать только одна right и если подать напряжение на ad0 будет всегда 1.И ещё подскажите пожалуйста как лучше прикрепить термопары.Мне пришли нагреватели без встроенных термопар хотя заказывал со встроенными.
     
  12. vector99

    vector99 Гик

    По сути это схема делителя напряжения.
    Vcc +5в
    Gnd земля
    Ad0 при НЕнажатой кнопке = +5в,
    При нажатой Right = 0, (я бы сюда добавил резистор, по данной схеме)
    При нажатии других кнопок, напряжение на Ad0 будет от 0 до 5вольт.
    Контакт Ad0 подключается к аналоговому пину ардуины. Далее АЦП ардуины преобразует входящее напряжение с контакта Ad0 в цифровое значение(от 0 до 1023).
    Считывая (val = analogRead(analogPin); ) значение с пина мы можем различить какая кнопка нажата!
     
  13. dr-baks

    dr-baks Нерд

    Понятно. Но в скейче написано так
    byte pinA = A0;
    byte pinB = A1;
    byte pinBTN = A2;
    #else
    byte UpSwitchPin = A0;
    byte DownSwitchPin = A1;
    byte OkSwitchPin = A2;
    #endif
    byte CancelSwitchPin = A3;
    Куда подключать остальные контакты.
     
  14. vector99

    vector99 Гик

    Я сделал так:
    Код (C++):
    //--------настройка кнопок управления------------------------------------

    //#define A_PINS_BASE 100 // номер с которого начинается нумерация наших "псевдо-кнопок".

    #define PIN_RIGHT 100
    #define PIN_UP 101
    #define PIN_DOWN 102
    #define PIN_LEFT 103
    #define PIN_SELECT 104
    struct A_PIN_DESC{ // определяем  структуру которой будем описывать какое значение мы ожидаем для каждого псевдо-пина
       byte pinNo; // номер пина
       int expectedValue;// ожидаемое значение
    };
    A_PIN_DESC expected_values[]={ // ожидаемые значения для псевдо-кнопок
       { PIN_RIGHT,202},
       { PIN_UP,429},
       { PIN_DOWN,298},
       { PIN_LEFT,563},
       { PIN_SELECT,758}
    };
    #define A_PINS_COUNT sizeof(expected_values)/sizeof(A_PIN_DESC) // вычисляем сколько у нас всего "псевдо-кнопок" заданно.
    #define A_POSSIBLE_ABERRATION 50 // допустимое отклонение analogRead от ожидаемого значения, при котором псевдо кнопка считается нажатой
    bool digitalReadA(byte pinNo){

      for(byte i=0;i<A_PINS_COUNT;i++){ // ищем описание нашего всевдо-пина
         A_PIN_DESC pinDesc=expected_values[i];// берем очередное описание
         if(pinDesc.pinNo==pinNo){ // нашли описание пина?
            int value=analogRead(A0); // производим чтетине аналогово входа
         
            return (abs(value-pinDesc.expectedValue)<A_POSSIBLE_ABERRATION); // возвращаем HIGH если отклонение от ожидаемого не больше чем на A_POSSIBLE_ABERRATION
         }
      }

      return LOW; // если не нашли описания - считаем что пин у нас LOW

    }

    //Назначаем пины кнопок управления
    int upSwitchPin = PIN_UP;
    int downSwitchPin = PIN_DOWN;
    int cancelSwitchPin = PIN_LEFT;
    int okSwitchPin = PIN_SELECT;

    //состояние кнопок по умолчанию
    int upSwitchState = 0;
    int downSwitchState = 0;
    int cancelSwitchState = 0;
    int okSwitchState = 0;
    Полную реализацию с аналоговыми кнопками можно посмотреть в прикрепленном скетче.
    Изменений минимум.
     

    Вложения:

    Последнее редактирование: 3 дек 2017
  15. Yojiq

    Yojiq Нерд

    dr-baks
    кнопки также работают если их отдельно каждую подключить
     

    Вложения:

  16. dr-baks

    dr-baks Нерд

    подскажите пожалуйста как лучше прикрепить термопары.
     
  17. SOLOway

    SOLOway Гик

    Крепить, в смысле на платы как ставить? Пример
     
    xake нравится это.
  18. dr-baks

    dr-baks Нерд

    Как прикрепить их к нагревателям верхнему и нижнему.
     
  19. SOLOway

    SOLOway Гик

    dr-baks, а зачем к нагревателям? У вас задача нагреть плату и нагреть чип, а температуру самих нагревателей контролить конечно можно, чтоб не выходили за критические температуры, но иного смысла в таком контроле не вижу. Хотя LDZ именно на НИ термодатчик закрепил (у него кварцевые трубки на НИ) и объявил, что не будет помогать тем, у кого датчик не там, а на или под платой (народ не испугался тогда, и ставит и на и под плату, и всё нормально настраивают). Или я снова не понял суть вашего вопроса и вы имели ввиду конструкцию прижимов для датчиков...
     
  20. dr-baks

    dr-baks Нерд

    Уважаемый SOLOway!Большое спасибо за ваши ответы!Я имел ввиду конструкцию прижимов для датчиков что бы их поставить и больше не тягать что-бы на них не ломать провода.Можно ещё спросить у Вас один вопрос.Купил себе вот такой дисплей https://ru.aliexpress.com/item/Free...32573316100.html?spm=a2g0s.9042311.0.0.Q5rvuR залил Ваш скейч ARS_UNO_v1m3_dimming.ino подключил дисплей через резисторы 10кОм. Только не понял куда подключать Mosi, miso,sck, reset.Дисплей не заработал. Может я что то не правильно сделал.Пришлось искать в инете подключение дисплея.Подключил через резисторы 10кОм все выводы опять дисплей не заработал.Когда я прописал в скейче такие строки
    // For the Adafruit shield, these are the default.
    // Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
    // If using the breakout, change pins as desired
    #define TFT_MISO 12 // Пин подключения вывода дисплея SDO(MISO)
    #define TFT_MOSI 11 // Пин подключения вывода дисплея SDI(MOSI)
    #define TFT_CLK 13 // Пин подключения вывода дисплея SCK
    #define TFT_DC 9
    #define TFT_CS 10
    #define TFT_RST 8
    Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
    //Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
    #define Bkgrnd_color ILI9341_LIGHTGREY
    Тогда дисплей заработал показывает профиль 1,но как перейти на график в меню настроек и как настроить профиля под себя я так и не понял.Подскажите пожалуйста что как и где настраивать.Уважаемый SOLOway Вы бы не могли если Вас не затруднит сделать какой не будь документ по настройке.За ранее большое спасибо за ответы!!!