Привет. ну у меня вообще засада вышла. Я уже все заказал, 99% комплектухи лежит уже в тумбочке но тут выстрелили несколько купонов на НГ на алиэкспресс и я взял паялку JBC 8858 за 12уе и 3Д принтер за 50уе потому мне пока не до сборки паялки так как плотно вошел в 3д печать по выгодной цене)) а для мелочи 8858 за 12уе точно хватает с головой. Для авторской паялки я только платы не успел изготовить, а ща так впадло уже но я до нее точно доберусь!! И согласен, ооочень бы таки хотелось олед дисплей(у меня уже и 0,96 и 1,3 лежат тоже с алиэкспресса по 1уе покупал, точнее 0,96 в подарок прислали, а 1,3 за 1 уе взял)))) и я просто несказанно счастлив бы был если б кто-то рукастый смог переделать на олед(. И я в первых рядах СЛЕЗНО ПРОШУ АВТОРА ПЕРЕДЕЛАТЬ ПРОШУ НА ОЛЕД ибо хотелось бы таки компактней это все получить при сборке.
https://yadi.sk/d/171pi5j-YEi2nw?w=1 Вот ссыль на мой архив в СМД и под ОЛЕД. Размер экрана не имеет значения 1,3 или 0,96. Плата проверена, с экраном 1602 и прошивкой автора работает.
Сделал платы с вашей печатки. Подскажите по программированию. Заливаю скетч напрямую с среды Arduino IDE через порт ICSP. Загружается загрузчик и сама прошивка. Но плата не стартует. На экране в 1 строке заполнены все знакоместа и на этом все. Уже перелистал кучу сайтов не могу понять, что я делаю не так.
Мои действия: 1. Открываю скетч. 2. Подключаю USBasp к разъему ICSP (разъем проверил, контакты есть). 3. Выставляю настройки как на картинке. 4 Записываю загрузчик. 5. Потом выбираю Загрузить прошивку через программатор. Все, ошибок нет и не ругается.
Где не так делаю? Ошибка наверно на виду у всех, ткните где она :)
Сначала думал проблема в микроконтроллере, заменил, но ситуация не поменялась.
Вот какие параметры выставлены в Arduino IDE. Прошивка - оригинальная автора, версия 1.3
Дошли руки, наконец-то. В общем, скетч ведёт себя странно. С экраном 0,96-128*64 работает нормально.С экраном 0,91-128*32 даже работает нормально. С экраном 1,3 показывает мусор, и только сверху экрана видно какое-то движение. Хрень какая-то...
https://yadi.sk/d/171pi5j-YEi2nw?w=1 Вот ссыль на мой архив в СМД и под ОЛЕД. Размер экрана не имеет значения 1,3 или 0,96. Плата проверена, с экраном 1602 и прошивкой автора работает.
Трабла в том, что библа OLED-I2C толи работает, толи не работает с контроллером SH1106. У меня макет с прошлого раза остался на ардуине. Включаю его, работает. Выдираю экран, ставлю на плату, не работает. Пихаю назад в макет, не работает. Да ебать. Беру новый дисплей, пихаю в макет, работает. Выдираю, опять ставлю, хер, не работает. Заливаю другой скетч с библой U8Glib, работает. Толи у меня библиотека какая модифицированная, была, толи хер знает... В общем два варианта. Либо переписывать скетч на библу U8Glib, это опять надо кого-то упрашивать. Либо покупать дисплеи исключительно с SSD1306, которых на Али хрен найдёшь. Нашел на SSD1315, человек в отзывах написал, что совместим с 1306 и работает со всеми библиотеками. Заказал, приедут, посмотрим. Ещё под занавес вычитал, что на сайте Гайвера есть библа OLED-I2C адаптированная под SH1106. В понедельник попробую с ней помечать экранчики. Вот как-то так.
Пока выглядит так. Экранчик хоть и меньше размером, но видимая область у него такая же. На китайских поделках просто стекло и плата больше. Энкодеры из новой партии тоже говняные оказались. Работают в принципе, но нечётко как-то отрабатывают. Завтра соберу до конца. Надеюсь.
Сегодня продолжил сборку. И спалил нахрен мегу, операционник и экранчик. Всему виной левый линейный стаб на 5В. Пробило его нафиг и 24В прогулялось по плате. Не покупайте комплектуху на Али.
Сегодня продолжил сборку. И спалил нахрен мегу, операционник и экранчик. Всему виной левый линейный стаб на 5В. Пробило его нафиг и 24В прогулялось по плате. Не покупайте комплектуху на Али.
[/quot
Так вся электроника китай снабжает! Если ты спалил то не надо тут всех и вся виновными делать. Я уже как 7 лет покупаю с китая! Покупал и в Москве и в питере , одно и тоже только в разы дороже! Вся эта некондиция продаётся штучно. Есть брак, и куда тут денешься. В СССР вообще море бракованных продавали запчастей от заводов списанные партии. Ссылку продавца в студию!
Ты опять появился. Ухожу в отпуск. Для особо одарённых я написал "на Али"!!! Вообще то если хороший стаб пробивает, то он обычно уходит в обрыв, он так спроектирован. А китайские поделки ведут себя как хотят.
Ты опять появился. Ухожу в отпуск. Для особо одарённых я написал "на Али"!!! Вообще то если хороший стаб пробивает, то он обычно уходит в обрыв, он так спроектирован. А китайские поделки ведут себя как хотят.
Ты читать умеешь?
Наивность твоя меня поражает! Внимательно читай выше мой коммент! Все электронные компоненты изготовляются в Китае! Что ту не понятно то? Хватит думать жопой! Включай голову! И продают некондицию также и в других магазинах и зарубежом и в России . Только вот на али дешевле.
Кстати продавца мне так и не предоставил! Когда предоставишь продавца с али??
Никогда, я их не сохраняю. Да и какой смысл. Он завтра по другому переобзовётся. А жопой ты думаешь, я не сказал что всё китайское говно, я сказал не покупайте на Али. И в Российских магазах нехуй выбирать самое дешёвое.
Никогда, я их не сохраняю. Да и какой смысл. Он завтра по другому переобзовётся. А жопой ты думаешь, я не сказал что всё китайское говно, я сказал не покупайте на Али. И в Российских магазах нехуй выбирать самое дешёвое.
Ты почему огрызаешься? Тебе указал на твое мнение, что ты не прав! И продают тоже самое из самой али в России дорогие компоненты в разы дороже+пересылка! И тоже брак есть! А матерятся это УО(умственно отсталые)! Аргументов ноль, а вони как в общественном туалете.
Никогда, я их не сохраняю. Да и какой смысл. Он завтра по другому переобзовётся. А жопой ты думаешь, я не сказал что всё китайское говно, я сказал не покупайте на Али. И в Российских магазах нехуй выбирать самое дешёвое.
Ты почему огрызаешься? Тебе указал на твое мнение, что ты не прав! И продают тоже самое из самой али в России дорогие компоненты в разы дороже+пересылка! И тоже брак есть! А матерятся это УО(умственно отсталые)! Аргументов ноль, а вони как в общественном туалете.
Пока выглядит так. Экранчик хоть и меньше размером, но видимая область у него такая же. На китайских поделках просто стекло и плата больше. Энкодеры из новой партии тоже говняные оказались. Работают в принципе, но нечётко как-то отрабатывают. Завтра соберу до конца. Надеюсь.
Поделитесь файлом платы, какая есть. А то скоро фен понадобится
Пока выглядит так. Экранчик хоть и меньше размером, но видимая область у него такая же. На китайских поделках просто стекло и плата больше. Энкодеры из новой партии тоже говняные оказались. Работают в принципе, но нечётко как-то отрабатывают. Завтра соберу до конца. Надеюсь.
Поделитесь файлом платы, какая есть. А то скоро фен понадобится
Пока ты его делать будешь он не нужен будет. Проще заказать на алике готовый и меньше геморроя.
Для интереса: можно сделать и более компактно, без отдельного блока, но конечно только частично из готовых модулей.
Самое сложное запихнуть в корпус от зарядника 2 готовых 12В БП и симисторный модуль. На фото это я не запихивал таким образом, просто корпус склеивал.
LM358 и подобные советую даже не рассматривать, RAIL to RAIL очень желательно. Линейный стабилизатор 12-5В лучше сразу брать крупнее, мелкие сильно греются, я поставил в итоге 78M05. В меге8 места мне лично на ПИД не хватило.
И кстати никакой плавно регулировки, энкодеров и т. д. По факту мне в режиме ручной регулировки с шагом 50 градусов более чем достаточно. Сделал такие режимы:
//Заданные режимы температуры
unsigned int temp_menu[] = {0, 300, 600};
byte temp_menu_size = sizeof(temp_menu) / sizeof(int *) - 1; // расчет количества режимов в массиве
byte temp_menu_state = 0;
//Заданные режимы температуры в ручном режиме
unsigned int temp_manual_menu[] = {0, 200, 250, 300, 350, 400, 450, 500, 550, 600};
byte temp_manual_menu_size = sizeof(temp_manual_menu) / sizeof(int *) - 1; // расчет количества режимов в массиве
byte temp_manual_menu_state = 0;
//Заданные режимы вентилятора
unsigned int fan_menu[] = {0, 150, 200, 220, 240, 255};
byte fan_menu_size = sizeof(fan_menu) / sizeof(int *) - 1; // расчет количества режимов в массиве
byte fan_menu_state = 0;
Похоже мышка заглючила, и я лишний раз пометил как спам сообщение. Извините, не специально.
Если про программу то вообще ничего особенного, меню тут много раз обсуждали и примеров хватает. По поводу железа тоже, я описал недостатки собранной платы. А вот по поводу конструктивных решений я как раз для этого фото и прикладывал, и указал что проект сырой, хоть и рабочий (мне честно его лень допиливать, работает хорошо, места занимает мало, я лично доволен). Микроконтроллер можно применить при необходимости /возможности/желании другой, как и кнопки (интересный вариант), забыл похоже только показать как спиливать корпус чтобы не нарушить крепление:
А можно глупый вопрос? А что все схемы такие сложные? ОУ и прочеее... А нельзя разве MAX6675 (типа ввод) и мосфет (типа ответ) подходящий, а всё остальное - на МК? А то вижу в тырнете "мне жалко тратить Ардуину и я разработал схему всего из 49 деталей".
Модуль с MAX6675 стоит как минимум раза в два дороже, чем прецизионный операционный усилитель типа AD8551/8552 (по ценам магазинов на AliExpress, а не местных барыг типа ЧипДип). Обвязкой ОУ можно регулировать усиление, смещение нуля так, как нужно разработчику. И места займёт меньше. Плюсом чипа MAX6675 является учёт компенсации температуры "холодного спая" (cold-junction compensation), который нужно учитывать самостоятельно при использовании ОУ. Плюсом ОУ является гораздо большая частота опроса температуры термопары для расчёта параметров ПИД-регулятора мощности. В случае с MAX6675 надо последовательно сосчитать 16 битов, из которых выделить 12 бит, представляющие температуру в диапазоне 0..+1023,75°C. С учётом максимальной частоты 4,3 МГц шины SPI чипа в идеальном случае можно было бы передать примерно 4300/16=268 тыс. отсчётов/с. Но время преобразования отсчёта (Conversion Time) для MAX6675 типичное 0,17 с, максимальное 0,22 с. То есть в лучшем случае около 6 отсчётов за секунду (точнее 5,88).
Для термопары К-типа 1°C генерирует напряжение 40,7 мкВ. То есть 1024°C дадут (40,7*1024)=41676 мкВ. Тогда для выходного сигнала 5В, представляющим 1024°C, ОУ должен иметь коэффициент усиления 5000000/41676=120 раз. Для ОУ AD8551/8552 с граничной частотой единичного усиления 1,5 МГц (Gain Bandwidth Product) частота снизится во столько же раз, до частоты 1500 / 120 = 12,5 кГц. Для МК ATmega328p рекомендуемая производителем частота аналогового преобразования от 50 до 200 кГц, что удовлетворяет условиям.
Как видите, за одну секунду с ОУ типа AD8551/8552 можно подсчитать двенадцать с половиной тысяч отсчётов, а с MAX6675 всего шесть. Почувствовали разницу?
Понятно, спасибо за развёрнутый ответ! Я просто хотел сказать, что можно практически обойтись всем готовым - модуль с MAX6675 + мосфет на вентилятор + диммер, управляемый Ардуино типа https://aliexpress.ru/item/32802025086.html на нагревательный элемент, ДЛЯ ТЕХ, КТО НЕ ХОЧЕТ ПАЯТЬ ЦЕЛУЮ ПЛАТУ и тут до меня дошло... :)
С другой стороны, мне казалось, что при тепловой инерции термофена достаточно 2 отсчётов в секунду... ;)
Поскольку я не умею травить платы, соберу пока на "рассыпухе" модулей. БП 2A 24В, модуль MAX6675 (думал попробовать MAX31855, но он вроде не особо быстрее, да и говорят, на Али много бракованных их), тиристорный модуль на BTA16, оптроне, zero-cross, вроде всё ОК; для управления вентилятором - так и быть, спаяю сложнейший модуль из резистора и IRF3205 (ну уж какие дома есть) :)
А уж с прецизионным ОУ буду заморачиваться, если результат меня не устроит.
Пока тишина.
Может всей толпой автора попросим?
Привет. ну у меня вообще засада вышла. Я уже все заказал, 99% комплектухи лежит уже в тумбочке но тут выстрелили несколько купонов на НГ на алиэкспресс и я взял паялку JBC 8858 за 12уе и 3Д принтер за 50уе потому мне пока не до сборки паялки так как плотно вошел в 3д печать по выгодной цене)) а для мелочи 8858 за 12уе точно хватает с головой. Для авторской паялки я только платы не успел изготовить, а ща так впадло уже но я до нее точно доберусь!! И согласен, ооочень бы таки хотелось олед дисплей(у меня уже и 0,96 и 1,3 лежат тоже с алиэкспресса по 1уе покупал, точнее 0,96 в подарок прислали, а 1,3 за 1 уе взял)))) и я просто несказанно счастлив бы был если б кто-то рукастый смог переделать на олед(. И я в первых рядах СЛЕЗНО ПРОШУ АВТОРА ПЕРЕДЕЛАТЬ ПРОШУ НА ОЛЕД ибо хотелось бы таки компактней это все получить при сборке.
Прошивка под олед дисплей. https://yadi.sk/d/QqOlQK7Fzu_9lA Может кто потестит. у самого нет возможности жду фен с китая.
Ох жеж елки палки. Завтра затестю... А сложно переделать с библиотеки MyOLED на библиотеку U8GLIB?
Просто MyOLED работает не со всеми дисплеями.
Не смог я их подружить.
Ну ладно, надо просто дисплеи на SH1106 покупать, они с обеими библиотеками работают.
Сделал платы с вашей печатки. Подскажите по программированию. Заливаю скетч напрямую с среды Arduino IDE через порт ICSP. Загружается загрузчик и сама прошивка. Но плата не стартует. На экране в 1 строке заполнены все знакоместа и на этом все. Уже перелистал кучу сайтов не могу понять, что я делаю не так.
Мои действия: 1. Открываю скетч. 2. Подключаю USBasp к разъему ICSP (разъем проверил, контакты есть). 3. Выставляю настройки как на картинке. 4 Записываю загрузчик. 5. Потом выбираю Загрузить прошивку через программатор. Все, ошибок нет и не ругается.
Где не так делаю? Ошибка наверно на виду у всех, ткните где она :)
Сначала думал проблема в микроконтроллере, заменил, но ситуация не поменялась.
Вот какие параметры выставлены в Arduino IDE. Прошивка - оригинальная автора, версия 1.3
регулятор контрастности на 1602 покрути
регулятор контрастности на 1602 покрути
Крутил, 1-ая строка либо полностью исчезает либо полностью заполнена
А ты ее от начала до конца покрути
А ты ее от начала до конца покрути
Крутил от начала до конца, все также
Добавил в архив папку с загрузчиком. Внутри есть картинка с фьюзами. Проверьте, может контроллер тупо не стартует.
Дошли руки, наконец-то. В общем, скетч ведёт себя странно. С экраном 0,96-128*64 работает нормально.С экраном 0,91-128*32 даже работает нормально. С экраном 1,3 показывает мусор, и только сверху экрана видно какое-то движение. Хрень какая-то...
Разобрался. Китайцы зажали пару резисторов подтяжки на экранах 1,3. В общем скетч на ОЛЕД вроде работает.
обновите пожалуйста архив
Приехали новые платки, с чуть изменённой схемой. На следующей неделе проверю и выложу.
Как успехи?
Успехи заебись. Ток ниуя не работает пока. Сам в болничке лежу. Помирать вроде пока не собираюсь...
Эт правильно! Думай о хорошем и поправляйся!
Я манал эту срань. В прошлый раз дисплей работал нормально. Сейчас опять мусор показывает. Да что за нахрен такой.
Трабла в том, что библа OLED-I2C толи работает, толи не работает с контроллером SH1106. У меня макет с прошлого раза остался на ардуине. Включаю его, работает. Выдираю экран, ставлю на плату, не работает. Пихаю назад в макет, не работает. Да ебать. Беру новый дисплей, пихаю в макет, работает. Выдираю, опять ставлю, хер, не работает. Заливаю другой скетч с библой U8Glib, работает. Толи у меня библиотека какая модифицированная, была, толи хер знает... В общем два варианта. Либо переписывать скетч на библу U8Glib, это опять надо кого-то упрашивать. Либо покупать дисплеи исключительно с SSD1306, которых на Али хрен найдёшь. Нашел на SSD1315, человек в отзывах написал, что совместим с 1306 и работает со всеми библиотеками. Заказал, приедут, посмотрим. Ещё под занавес вычитал, что на сайте Гайвера есть библа OLED-I2C адаптированная под SH1106. В понедельник попробую с ней помечать экранчики. Вот как-то так.
Пока выглядит так. Экранчик хоть и меньше размером, но видимая область у него такая же. На китайских поделках просто стекло и плата больше. Энкодеры из новой партии тоже говняные оказались. Работают в принципе, но нечётко как-то отрабатывают. Завтра соберу до конца. Надеюсь.
Сегодня продолжил сборку. И спалил нахрен мегу, операционник и экранчик. Всему виной левый линейный стаб на 5В. Пробило его нафиг и 24В прогулялось по плате. Не покупайте комплектуху на Али.
[quote=alex1978]
Сегодня продолжил сборку. И спалил нахрен мегу, операционник и экранчик. Всему виной левый линейный стаб на 5В. Пробило его нафиг и 24В прогулялось по плате. Не покупайте комплектуху на Али.
[/quot
Так вся электроника китай снабжает! Если ты спалил то не надо тут всех и вся виновными делать. Я уже как 7 лет покупаю с китая! Покупал и в Москве и в питере , одно и тоже только в разы дороже! Вся эта некондиция продаётся штучно. Есть брак, и куда тут денешься. В СССР вообще море бракованных продавали запчастей от заводов списанные партии. Ссылку продавца в студию!
Ты опять появился. Ухожу в отпуск. Для особо одарённых я написал "на Али"!!! Вообще то если хороший стаб пробивает, то он обычно уходит в обрыв, он так спроектирован. А китайские поделки ведут себя как хотят.
Ты опять появился. Ухожу в отпуск. Для особо одарённых я написал "на Али"!!! Вообще то если хороший стаб пробивает, то он обычно уходит в обрыв, он так спроектирован. А китайские поделки ведут себя как хотят.
Ты читать умеешь?
Наивность твоя меня поражает! Внимательно читай выше мой коммент! Все электронные компоненты изготовляются в Китае! Что ту не понятно то? Хватит думать жопой! Включай голову! И продают некондицию также и в других магазинах и зарубежом и в России . Только вот на али дешевле.
Кстати продавца мне так и не предоставил! Когда предоставишь продавца с али??
Никогда, я их не сохраняю. Да и какой смысл. Он завтра по другому переобзовётся. А жопой ты думаешь, я не сказал что всё китайское говно, я сказал не покупайте на Али. И в Российских магазах нехуй выбирать самое дешёвое.
Никогда, я их не сохраняю. Да и какой смысл. Он завтра по другому переобзовётся. А жопой ты думаешь, я не сказал что всё китайское говно, я сказал не покупайте на Али. И в Российских магазах нехуй выбирать самое дешёвое.
Ты почему огрызаешься? Тебе указал на твое мнение, что ты не прав! И продают тоже самое из самой али в России дорогие компоненты в разы дороже+пересылка! И тоже брак есть! А матерятся это УО(умственно отсталые)! Аргументов ноль, а вони как в общественном туалете.
Никогда, я их не сохраняю. Да и какой смысл. Он завтра по другому переобзовётся. А жопой ты думаешь, я не сказал что всё китайское говно, я сказал не покупайте на Али. И в Российских магазах нехуй выбирать самое дешёвое.
Ты почему огрызаешься? Тебе указал на твое мнение, что ты не прав! И продают тоже самое из самой али в России дорогие компоненты в разы дороже+пересылка! И тоже брак есть! А матерятся это УО(умственно отсталые)! Аргументов ноль, а вони как в общественном туалете.
До 3.14 зделся, самосвал, тема закрыта...
Пиздят только слабоумные! Я писал конкретно! Если предъявляешь, то валяй!А то фыркнул как дворовая собачонка.
Поделитесь файлом платы, какая есть. А то скоро фен понадобится
alex1978
ссылка не работает.
обновите или выложете на другой ресурс.
Заранее благодарен.
Поделитесь файлом платы, какая есть. А то скоро фен понадобится
Пока ты его делать будешь он не нужен будет. Проще заказать на алике готовый и меньше геморроя.
Для интереса: можно сделать и более компактно, без отдельного блока, но конечно только частично из готовых модулей.
Самое сложное запихнуть в корпус от зарядника 2 готовых 12В БП и симисторный модуль. На фото это я не запихивал таким образом, просто корпус склеивал.
LM358 и подобные советую даже не рассматривать, RAIL to RAIL очень желательно. Линейный стабилизатор 12-5В лучше сразу брать крупнее, мелкие сильно греются, я поставил в итоге 78M05. В меге8 места мне лично на ПИД не хватило.
И кстати никакой плавно регулировки, энкодеров и т. д. По факту мне в режиме ручной регулировки с шагом 50 градусов более чем достаточно. Сделал такие режимы:
//Заданные режимы температуры unsigned int temp_menu[] = {0, 300, 600}; byte temp_menu_size = sizeof(temp_menu) / sizeof(int *) - 1; // расчет количества режимов в массиве byte temp_menu_state = 0; //Заданные режимы температуры в ручном режиме unsigned int temp_manual_menu[] = {0, 200, 250, 300, 350, 400, 450, 500, 550, 600}; byte temp_manual_menu_size = sizeof(temp_manual_menu) / sizeof(int *) - 1; // расчет количества режимов в массиве byte temp_manual_menu_state = 0; //Заданные режимы вентилятора unsigned int fan_menu[] = {0, 150, 200, 220, 240, 255}; byte fan_menu_size = sizeof(fan_menu) / sizeof(int *) - 1; // расчет количества режимов в массиве byte fan_menu_state = 0;Похоже мышка заглючила, и я лишний раз пометил как спам сообщение. Извините, не специально.
Если про программу то вообще ничего особенного, меню тут много раз обсуждали и примеров хватает. По поводу железа тоже, я описал недостатки собранной платы. А вот по поводу конструктивных решений я как раз для этого фото и прикладывал, и указал что проект сырой, хоть и рабочий (мне честно его лень допиливать, работает хорошо, места занимает мало, я лично доволен). Микроконтроллер можно применить при необходимости /возможности/желании другой, как и кнопки (интересный вариант), забыл похоже только показать как спиливать корпус чтобы не нарушить крепление:
Можешь выложить прошивку и схему под 8 мегу?
Да пожалуйста, схемы как таковой нет, но в папке исходники можно увидеть от нее части.
Ссылка на папку с проектом. Исходник v1.1 я не помню что правил и рабочая ли она
#define USE_MICRO_WIRE //Лёгкая библиотека I2C #include <GyverOLED.h> #include <EncButton.h> GyverOLED<SSD1306_128x32, OLED_BUFFER> oled; //oled.setContrast(10); // яркость 0..15 //oled.setPower(true); // true/false - включить/выключить дисплей //==== MILLISTIMER MACRO ==== (макрос таймера для запуска через равные промежутки времени) #define EVERY_MS(x) \ static uint32_t tmr;\ bool flag = millis() - tmr >= (x);\ if (flag) tmr += (x);\ if (flag) struct { static const byte termistor = A3; // пин термистора static const byte heat = 12; // пин нагревателя static const byte fan = 9; // пин вентилятора static int mode_heat[5] = {0, 300, 450, 600, 700}; // быстрые режимы нагревателя boolean oled_on = 1; // 1 дисплей включен unsigned long time; unsigned long srednee; } air; EncButton<EB_TICK, 7> Button_UP; // Кнопки EncButton<EB_TICK, 5 > Button_DOWN; EncButton<EB_TICK, 6 > Button_OK; //Заданные режимы температуры int temp_menu[] = {0, 300, 600}; //Текущее состояние, максимальный элемент в массиве исходя из размера массива int temp_menu_size = sizeof(temp_menu) / sizeof(int *) - 1; // расчет количества режимов в массиве int temp_menu_state = 0; int temp_menu_state_old = 0; //Заданные режимы температуры в ручном режиме int temp_manual_menu[] = {0, 200, 250, 300, 350, 400, 450, 500, 550, 600}; //Текущее состояние, максимальный элемент в массиве исходя из размера массива int temp_manual_menu_size = sizeof(temp_manual_menu) / sizeof(int *) - 1; // расчет количества режимов в массиве int temp_manual_menu_state = 0; int temp_manual_menu_state_old = 0; //Заданные режимы вентилятора int fan_menu[] = {0, 150, 200, 220, 240, 255}; int fan_menu_size = sizeof(fan_menu) / sizeof(int *) - 1; // расчет количества режимов в массиве int fan_menu_state = 0; int fan_menu_state_old = 0; boolean auto_temp = 0; // 0 автоматический режим void setup() { oled.init(); // инициализация air.time = millis(); pinMode(air.heat, OUTPUT); pinMode(air.fan, OUTPUT); oled.setContrast(120); // яркость 0..15 //oled.setPower(false); } void loop() { printScale(); //вывод на дисплей button_action(); //обработка кнопок heat_loop(); if (millis() - air.time > 10000) oled.setContrast(0); if (millis() - air.time > 30000) air.oled_on = 0; (air.oled_on == 1) ? oled.setPower(true) : oled.setPower(false); } //=========================Обработка кнопок===================================== void button_action() { if (Button_UP.tick()) { // если было изменение состояния кнопки if (Button_UP.click()) { air.time = millis(); oled.setContrast(120); if (air.oled_on == 0) air.oled_on = 1; else { if (auto_temp == 0) { if (temp_menu_state == 0) fan_menu_state = 1; temp_menu_state++; if (temp_menu_state > temp_menu_size) temp_menu_state = temp_menu_size; } else { if (temp_manual_menu_state == 0) fan_menu_state = 1; temp_manual_menu_state++; if (temp_manual_menu_state > temp_manual_menu_size) temp_manual_menu_state = temp_manual_menu_size; } } } Button_UP.resetState(); } if (Button_DOWN.tick()) { // если было изменение состояния кнопки if (Button_DOWN.click()) { air.time = millis(); oled.setContrast(120); if (air.oled_on == 0) air.oled_on = 1; else { if (auto_temp == 0) { temp_menu_state--; if (temp_menu_state < 0) temp_menu_state = 0; } else { temp_manual_menu_state--; if (temp_manual_menu_state < 0) temp_manual_menu_state = 0; } } } Button_DOWN.resetState(); } if (Button_OK.tick()) { // если было изменение состояния кнопки if (Button_OK.click()) { air.time = millis(); oled.setContrast(120); if (air.oled_on == 0) air.oled_on = 1; else { if (temp_menu_state != 0 || temp_manual_menu_state != 0) { fan_menu_state++; if (fan_menu_state > fan_menu_size) fan_menu_state = 1; } } } if (Button_OK.held() && air.oled_on == 1) { auto_temp = !auto_temp; temp_menu_state = 0; temp_manual_menu_state = 0; } Button_OK.resetState(); } } void printScale() { oled.clear(); oled.setScale(2); if (auto_temp == 0) { if (temp_menu[temp_menu_state] == 0) oled.setCursor(57, 0); else oled.setCursor(45, 0); oled.print(temp_menu[temp_menu_state]); oled.setScale(1); oled.print("O"); oled.setCursor(110, 0); oled.print(air.srednee); oled.setCursor(51, 2); oled.print("AUTO"); } else { if (temp_manual_menu[temp_manual_menu_state] == 0) oled.setCursor(57, 0); else oled.setCursor(45, 0); oled.print(temp_manual_menu[temp_manual_menu_state]); oled.setScale(1); oled.print("O"); oled.setCursor(110, 0); oled.print(air.srednee); oled.setCursor(46, 2); oled.print("MANUAL"); } fan_bar(fan_menu_state); oled.update(); } void fan_bar(byte n) { if (n > 0) { for (byte i = 0; i <= n - 1; i++) { oled.rect(26 * i, 28, 21 + 26 * i, 30, OLED_FILL); } } } void heat_loop() { //вычисление среднее с АЦП air.srednee = 0; for (byte i = 0; i < 16; i++) { air.srednee = air.srednee + analogRead(air.termistor); } air.srednee = air.srednee / 16; air.srednee = (air.srednee + 25) * 1.11; //коэффициент 1.11 нужен так как характеристика термопары нелинейная // измерил при 25 градусах окружающей температуры, для этого и добавлял 25 if (auto_temp == 0) { (air.srednee < temp_menu[temp_menu_state]) ? digitalWrite(air.heat, HIGH) : digitalWrite(air.heat, LOW); if (temp_menu_state > 0) analogWrite(air.fan, fan_menu[fan_menu_state]); else { if (air.srednee > 70) { fan_menu_state = fan_menu_size; analogWrite(air.fan, fan_menu[fan_menu_state]); } else { fan_menu_state = 0; analogWrite(air.fan, fan_menu[fan_menu_state]); } } } else { (air.srednee < temp_manual_menu[temp_manual_menu_state]) ? digitalWrite(air.heat, HIGH) : digitalWrite(air.heat, LOW); if (temp_manual_menu_state > 0) analogWrite(air.fan, fan_menu[fan_menu_state]); else { if (air.srednee > 70) { fan_menu_state = fan_menu_size; analogWrite(air.fan, fan_menu[fan_menu_state]); } else { fan_menu_state = 0; analogWrite(air.fan, fan_menu[fan_menu_state]); } } } }Спасибо всё понятно, единственный момент кварц стандартный - 16МГц?
Да
А можно глупый вопрос? А что все схемы такие сложные? ОУ и прочеее... А нельзя разве MAX6675 (типа ввод) и мосфет (типа ответ) подходящий, а всё остальное - на МК? А то вижу в тырнете "мне жалко тратить Ардуину и я разработал схему всего из 49 деталей".
Объясните чайнику.
И знает ли кто, в "народном" https://aliexpress.ru/item/32696054243.html какого типа термопара?
Модуль с MAX6675 стоит как минимум раза в два дороже, чем прецизионный операционный усилитель типа AD8551/8552 (по ценам магазинов на AliExpress, а не местных барыг типа ЧипДип). Обвязкой ОУ можно регулировать усиление, смещение нуля так, как нужно разработчику. И места займёт меньше. Плюсом чипа MAX6675 является учёт компенсации температуры "холодного спая" (cold-junction compensation), который нужно учитывать самостоятельно при использовании ОУ. Плюсом ОУ является гораздо большая частота опроса температуры термопары для расчёта параметров ПИД-регулятора мощности. В случае с MAX6675 надо последовательно сосчитать 16 битов, из которых выделить 12 бит, представляющие температуру в диапазоне 0..+1023,75°C. С учётом максимальной частоты 4,3 МГц шины SPI чипа в идеальном случае можно было бы передать примерно 4300/16=268 тыс. отсчётов/с. Но время преобразования отсчёта (Conversion Time) для MAX6675 типичное 0,17 с, максимальное 0,22 с. То есть в лучшем случае около 6 отсчётов за секунду (точнее 5,88).
Для термопары К-типа 1°C генерирует напряжение 40,7 мкВ. То есть 1024°C дадут (40,7*1024)=41676 мкВ. Тогда для выходного сигнала 5В, представляющим 1024°C, ОУ должен иметь коэффициент усиления 5000000/41676=120 раз. Для ОУ AD8551/8552 с граничной частотой единичного усиления 1,5 МГц (Gain Bandwidth Product) частота снизится во столько же раз, до частоты 1500 / 120 = 12,5 кГц. Для МК ATmega328p рекомендуемая производителем частота аналогового преобразования от 50 до 200 кГц, что удовлетворяет условиям.
Как видите, за одну секунду с ОУ типа AD8551/8552 можно подсчитать двенадцать с половиной тысяч отсчётов, а с MAX6675 всего шесть. Почувствовали разницу?
Термопара в таком фене обычно К-типа.
Понятно, спасибо за развёрнутый ответ! Я просто хотел сказать, что можно практически обойтись всем готовым - модуль с MAX6675 + мосфет на вентилятор + диммер, управляемый Ардуино типа https://aliexpress.ru/item/32802025086.html на нагревательный элемент, ДЛЯ ТЕХ, КТО НЕ ХОЧЕТ ПАЯТЬ ЦЕЛУЮ ПЛАТУ и тут до меня дошло... :)
С другой стороны, мне казалось, что при тепловой инерции термофена достаточно 2 отсчётов в секунду... ;)
Даже 25 отчётов/с будет мало. В этом проекте https://www.hackster.io/sfrwmaker/soldering-iron-controller-for-hakko-t12-tips-on-arduino-f7a888 ( авторская тема на http://arduino.ru/forum/proekty/kontroller-payalnika-dl-zhal-hakko-t12 ) автор увеличил частоту опроса температуры до 50 Гц для ПИД-регулятора из-за влияния тонких жал на точность результатов. В них находится такая же термопара К-типа. Можете посмотреть код проекта на https://github.com/sfrwmaker/hakko_t12
Поскольку я не умею травить платы, соберу пока на "рассыпухе" модулей. БП 2A 24В, модуль MAX6675 (думал попробовать MAX31855, но он вроде не особо быстрее, да и говорят, на Али много бракованных их), тиристорный модуль на BTA16, оптроне, zero-cross, вроде всё ОК; для управления вентилятором - так и быть, спаяю сложнейший модуль из резистора и IRF3205 (ну уж какие дома есть) :)
А уж с прецизионным ОУ буду заморачиваться, если результат меня не устроит.