РЕКЛАМА НА ФОРУМХАУС Так как в моей прошлой теме было много вопросов у новичков, то в этой теме я решил так сказать совместно с Вами всеми интересующимися, начать делать с нуля. Если мы определились с размерами за раннее, нет смысла дожидаться приезда посылки с экраном, проект можно начать уже создавать. Начнем с экрана Nextion, хочу обязательно всех ПРЕДУПРЕДИТЬ есть две версии, китайская и европейская, и прошивки в них разные, и скетч для одной не подойдет для другой, и заливать в экран скетч надо разными программами, для китайской версии надо будет изучить китайский . В общем короче, при заказе продавцу обязательно указываем что версия для Европы ! И еще есть версии сенсорные и нет, при заказе внимательно смотрим. Нам понадобится экран Nextion сенсорный для Европы. Размер кто какой захочет, от 2,4 до 7 дюймов. Вот ссылочка http://wiki.iteadstudio.com/Nextion_HMI_Solution, есть вся нужная информация. В общем начнем: Для программирования экрана нам понадобится программа Nextion Edition, на момент написания версия 0.32. Установили, создаем в ней новый проект, при создании появится окно согласно таблице (ссылку давал чуток выше) выбираем разрешение вашего экрана, далее во второй закладке Character Encoding выбираем кодировку iso-8859-5, именно она содержит кириллицу. Вот примерно так мы увидим . Сами для себя надо продумать примерно алгоритм проекта. Мы должны определится с основным изображением листа, что на нем будет показываться. Я для себя решил сделать проект комбинированный, позже вы поймете о чем я говорю. У меня основных будет два листа.
Один основной лист будет отображаться в мое отсутствие в доме, на нем будет одна большая кнопка. Это кнопка включения основного питания дома. У меня электрика разделена на несколько направлений, а точнее на 3. Электро-котел через автомат защиты подключен сразу к 3 фазам. Далее установлен автоматический переключатель фаз на 40А. Это такой автомат который из 3 приходящих фаз переключает на одну из лучших. Конечно это образно, в нем есть свои проблемки, и на большую нагрузку его ставить нельзя, будет прыгать по фазам. Но вот дежурную электронику отлично тянет. К нему на выход подключены теплые кабеля обогрева разных труб и участков, далее через линейный ИБП на 3 Кват подключена охранная система, видеонаблюдение, и циркуляционные насосы всей системы отопления, назовем это дежурное питание. Далее основное питание дома, оно подключается с одной их фаз, и далее через магнитный пускатель на 40 А подает питание на стабилизатор, и вот с стабилизатора у меня уже идет розеточная группа и освещение. Вот как раз этим магнитным пускателем будет управлять виртуальная кнопка нашего из основных экранов. Очень удобно (у меня сейчас стоит простой выключатель), не надо бегать с щитовой, приехал домой при входе, по выше (чтоб дети не щелкали лишний раз) стоит выключатель, включил и у тебя дома все заработало. Так как я планирую в итоге к нашему проекту еще подключить GSM или Ethernet шилд, то управлять и контролировать питания я смогу удаленно .
Давайте мы этот основной лист создадим. В начале нам нужна картинка с изображением кнопки, разрешение этой картинки должно совпадать с разрешением экрана. У меня экран 4.3 дюйма, значить разрешение 480*272. Ищу картинку, редактирую ее и подгоняю в размер. Далее в программе Nextion Editor (в дальнейшем буду звать ее NE) в левом окошке где картинки нажимаем кнопку Add, и добавляем свою картинку. Далее при нажатии по середине на свой проект, с правой стороны где параметры объекта, надо изменить параметр sta, выбираем image, ниже где строчка pic, двойное нажатие и далее выбираем добавленную картинку. . Далее создаем сенсорную область при нажатии на которую экран будет реагировать и выполнять функцию кода.
Далее добавляем компонент, в шапке выбираем Add Comonent. Со временем в новых версияч эдитора добавляются компоненты. Сенсорная область это Hotspot. зону сенсора мышкой передвигаем на нужный участок и раздвигаем по размера. . Далее я добавляю в проект переменную и еще основной лис, на который по нажатию экран переключится, и отправит состояние переменной. Переменная добавляется там где и все компоненты (мы там сенсорную зону добавляли), переменная Variable, в параметрах переменной в пункте vscope выбираем global, делаем переменную глобальной для всего проекта, а не только для этого листа. Конечно можно было просто обойтись отправив команду на эрдуино, но я создаю проект, который будет при перезагрузки подтягивать из епрома значение переменных. Теперь самое интересное ... У вас должна быть создана переменная, новый лис. Далее выделяем сенсорную область (ее рамочка стала красной) мы ведь для нее должны написать команды. С права в низу есть закладки, нас интересует закладка Touch Press Event, выполнение команды при нажатии. Тут мы пишем команды. va0.val=1 /присваеваем переменной va0 значение 1, по умолчанию если вы ничего не меняли в свойствах объекта, установлено 0 get va0.val /отправляем значение переменной на ардуино page 1 / и переходим на лист 1
Второй вариант это обойтись без переменной в экране, а использовать переменную в ардуино, тогда нам достаточно просто оставить команду page 1 И поставить галочку Send Component ID, при активации области тач, на ардуино отправится просто что произошла активация с ID m0, а уже на самой ардуине получив эту информацию прописать значение переменной в епром память, при перезагрузке достаточно будет подтянуть значение и если оно равно 1, то командой сразу перейти на другую страницу. Тут вроде все проще, но с другой стороны в ближайшее время производитель экранов обещает добавить запись своих переменных в епром самого экрана.
Как видим программировать экран даже проще чем ардуино, и если производитель добавит новые функции, и он будет добавлять, то практически весь скеч можно делать на экране, а ардуино будет выступать только в роли контролера. Давайте сейчас остановимся на варианте без создания переменной на экране. Значить у нас должно быть просто на татчобласти в командах мы ставим галочку отправлять ID, и перейти на page 1 Теперь можно проверить проект. Нажимаем кнопку Compile. И далее запускаем проетк кнопкой Debug. Появится окно эмуляции.
Теперь создадим второй основной рабочий экран, это когда дом активирован мы на нем будем лицезреть параметры температур и влажности системы отопления и улице. Сразу скажу что лучше рисовать картинку уже с текстами и всей инфой, кроме той что будет меняться. Ведь добавляя любой компонент его можно сделать на прозрачном фоне. Далее я покажу как это сделать. Естественно добавляем картинку, у меня лист два вот такой получился. Далее добавляем компоненты для температур и влажности. Ну тут можно двумя пойти вариантами, первый вариант добавить компонент цифры, а второй добавить текс. С цифрами работать проще, но они тут могут быть только положительного значения, если нам нужно на пример отобразить минусовую температуру, то тут только текс. С цифрами проще работать, значения можно присваивать сразу к переменны, а вот текст через команду конвертирования надо переводить. Надо стараться писать код как можно проще, и он тогда будет надежным. Так что там где у нас значения будут только положительными мы вставляем компонент цифры (Number), а там где минус то ставим текст (Text)/ Перед тем как добавлять эти компоненты, нам нужен шрифт. Создадим его, выбираем вверху в шапке Tools, а далее Font Generator. Выбрали размер, вид, написали название, нажали сгенерировать, программа предложе сохранить в дальнейшем его в фаил отдельный, далее в других проектах можно сразу эти файлы подтягивать. Далее закрываем крестиком, и программа предложит добавить его уже в саму программу. Шрифт появится в шрифтах под номер 0. Далее добавляем компонент Number, так как шрифт у нас пока один, в параметрах этого компонента он сразу и установится. Растягивайте и перемещайте этот компонент на нужное место. Нам надо его сделать прозрачным, выбираем в окне параметров строчку sta, там по умолчанию стоит solid color, мы выбираем crop image, и ниже в строчке picc мы должны указать с какой картинки брать кроп, я уазал картинку нашего основного экрана.
Ну что продолжим, перейдем теперь к программированию Ардуино. Как и обещал начнем с маленького скетча, так что новичкам было более понятно от куда что растет . вот сразу попробовал описать основные действия #include <OneWire.h> /декларируем библиотеку OneWire данные цифровых датчиков передаются по этой шине, можно до 250 датчиков на одну шину. #include <DallasTemperature.h> /декларируем библиотеку для татчиков DS18B20, именно эту библиотеку для правильного отображения минусовой температуры #include "DHT.h" / библиотека для работы комбинированых тадчиков DHT #include <avr/wdt.h> / библиотека собаки #define ONE_WIRE_BUS 10 / пин на котором будет работать шина OneWire #define DHTPIN 9 / пин на котором сидит пока один комбинированный датчик DHT OneWire oneWire (ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); #define DHTTYPE DHT11 / указываем тип датчика DHT11 DeviceAddress Thermometer1 = { 0x28, 0xFF, 0x7C, 0xAB, 0x91, 0x15, 0x04, 0xC8 }; / адрес датчика DS18B20 280054B604000092 0x28, 0xFF, 0x7C, 0xAB, 0x91, 0x15, 0x04, 0xC8 DeviceAddress Thermometer2 = { 0x28, 0xFF, 0x0F, 0xD5, 0x90, 0x15, 0x03, 0x7E }; / адрес второго датчика 0x28, 0xFF, 0x0F, 0xD5, 0x90, 0x15, 0x03, 0x7E DHT dht (DHTPIN, DHTTYPE); void setup() { wdt_enable (WDTO_8S); / собака на таймере 8 секунд sensors. begin(); sensors. setResolution (Thermometer1, 10); / разрешение датчика 1 - 9 бит 0.5 градуса, 10 бит 0.25 градуса, 11 бит 0.1 градус sensors. setResolution (Thermometer2, 10); / разрешение датчика 2 - 9 бит 0.5 градуса, 10 бит 0.25 градуса, 11 бит 0.1 градус pinMode (7, OUTPUT); digitalWrite (7, HIGH); /ВЫХОД НА РЕЛЕ 1 пин 7, УПРАВЛЕНИЕ МИНУСОМ указываем положительный сигнал pinMode (6, OUTPUT); digitalWrite (6, HIGH); /ВЫХОД НА РЕЛЕ 2 пин 6, УПРАВЛЕНИЕ МИНУСОМ указываем положительный сигнал Serial. begin (9600); dht. begin(); } void temp1() / цикл 1 термометра { float tempC1 = sensors. getTempC (Thermometer1); /записываем показания температуры с адресом датчика Thermometer1 в переменную tempC1 Serial. println (tempC1); / отправляем для мониторинга в сериал порт значение переменной tempC1 if (tempC1<27) {digitalWrite (7, LOW);} if (tempC1>27) {digitalWrite (7, HIGH);} } void temp2() { float tempC2 = sensors. getTempC (Thermometer2); Serial. println (tempC2); / отправляем для мониторинга в сериал порт значение переменной tempC1 if (tempC2<27) {digitalWrite (6, LOW);} if (tempC2>27) {digitalWrite (6, HIGH);} } void tempU1() { float hU = dht. readHumidity(); / в переменную hU записываем влажность float tU = dht. readTemperature(); / в переменную tU записываем температуру sensors. requestTemperatures(); } void loop() { wdt_reset(); / сбрасываем таймер собаки пока вы вызываете ее, контроллер не сбросится delay (1000); tempU1(); temp1(); temp2(); } ! При в ставке в форум два / - превращает в один !
Здравствуйте, уважаемый Logvin! Благодарю за интересные темы, по которым начинаю осваивать Ардуино. Заказал дисплей с такими параметрами: 3.2" TFT LCD Display is a LCD touch screen module. It is a powerful and multifunctional module for your project. The Screen include a controller SSD1289, it's a support 8/16bit data interface, easy to drive by many MCU like STM32, AVR and 8051. It is designed with a touch controller in it. The touch IC is XPT2046, and touch interface is included in the 40 pins breakout. It is the version of product only with touch screen and touch controller. Вопрос такой: подойдёт ли Ваш скетч для него?
У меня есть такой экран, по него нужен еще специальный шилд, он правда не дорогой. Для проекта можно и экран такой использовать, НО скетч усложнится. Картинки и иконки будут храниться на карте sd, нажатие на татч надо будет прописывать координаты области, и так далее. Посмотрите мою тему про умный дом на модулях ардуино, там примерно такой экран и используется.
Не надо плату травить. Китайцы делают отличные платы за копейки. Нопример, вот эти: https://www.itead.cc/open-pcb/pcb-prototyping.html http://smart-prototyping.com/PCB-Prototyping.html Напомнило бессмертное: - Я духов вызывать могу из бездны. - И я могу, и каждый это может, вопрос лишь, явятся ль они на зов.
Itead как раз и выпускает модули ардуино, и экраны Nextion. Я и планировал после как говорится накаленочного варианта и обкатки в боевых условиях, заказать у них плату уже с атмегой, часами, релюхами и коннекторами. По размерам для корпусов крепления на дин рейку.
Установить дополнительный модуль можно, но это индивидуально. Мне на пример это не нужно, у меня котел и так управляется и контролирует температуры - улицы, помещения, котла, и напряжения по всем 3 фазам. И ставить еще дополнительно не вижу смысла. Опыт показал, оптимальнее всего у меня лично это когда котел греет и поддерживает постоянную температуру теплоносителя - 65 градусов. А далее уже насосы своим включением и отключением забирают нужное количество из распределительного узла, каждый по своим направлениям. И вот как раз каждым направлением и будет у меня управлять новый блок управления котельной. Единственное он не такой стандартный, так как ему надо следить за 5 температурами, и управлять 4 насосами. 3 насоса это 1, 2 этажи и бойлер косвенного нагрева. А 4 насос это солнечный коллектор. При том по солнечному коллектору у меня будет алгоритм такой, максимально нагреваться будет сам коллектор до 90, при этом бойлер ГВС до 60, а далее если пойдут излишки то включатся насосы по этажам для отбора излишек тепла. Но так как у меня будет стоять СК всего на 30 трубок, то я сомневаюсь что будут излишки даже летом.
A. UNO - не лучший выбор. Памяти мало, 3-4 библиотеки - и всё, кончилась. Размер платы большой - уж лучше pro mini или nano, если с TTL не хотите заморачиваться. Но тогда уже на Mega делать - памяти и портов побольше, работает побыстрее. Только всё равно в проводах запутаетесь! На сегодняшний день если начинать - тогда уж на ESP. И работает быстрее, и памяти в 4мб, и размер маленький (в подрозетник влезет), и провода не надо тянуть по всему дому... Себе так и делаю. Начал вот с этого: Установил в щиток, управляет нагрузкой. Пока нагрузкой электрокотла, но в скором времени выйдет контроллер с 2-мя маленькими ТТ реле по 8А и 2-мя мосфитами - поставлю его на котёл, а линейный выключатель пущу на линию розеток, к которым подключены колориферы и ИК-обогреватели.