Друзья, кто возьмется написать скетч для Ардуино Мега 2560?

Форум самогонщиков, пивоваров, виноделов Оборудование Вопросы по электр(он)ике
1 2 3 1
Sonologist Доцент Москва 1576 514
07 Июня 18, 08:04
После долгих размышлений и внимательного (как мне показалось) чтения данной рубрики (автоматика) пришел, наконец, к концепции системы, которая меня бы полностью устроила. Она не содержит некоторые элементы, которые многие считают обязательными, но мне они не нужны (как показала практика). Понимаю, что можно наковырять из массы уже выложенных мэтрами скетчей фрагменты и сложить их в собственную программу. Но и это для меня сложно. Поэтому хотел бы обратиться к грамотным программистам. Задача - сделать на Ардуино только исполняющее устройство, которым командовать буду Бэйсиком через порт. То есть, необходимо получать с Ардуино некие параметры, пересчитывать их на ПК по нужным мне алгоритмам (которые смогу менять по своему усмотрению, поскольку Бэйсиком более или менее владею) и пересылать в Ардуино некую инструкцию по выполнению. То есть, аналитико-вычислительная часть будет возложена на Бэйсик, а исполнительная - на Ардуино. Понимаю, что это в определенной степени "чесание правого уха левой рукой", но мне так удобнее будет и управлять процессом и вносить изменения в алгоритмы по мере надобности. Частности уже прикинул и даже сформулировал в виде ТЗ (если его можно так назвать). Имеется перечисление задач и собственно описание работы устройства, принципиальная элетрическая схема. Возможно, там есть ошибки (я не электронщик и не программист, "только учусь"Подмигивающий), но это обсудим уже в процессе работы. Если кто согласится помочь со скетчем - дайте знать + координаты для личной связи, чтоб не разводить частно-индивидуальный флуд на просторах Форума. Разумеется, работа будет оплачена. IDE у меня стоит, закачивать скетчи в Ардуино умею Улыбающийся
Заранее спасибо и прошу прощения за "многобукф" Улыбающийся
Уважаемые Модераторы! Если сочтете, что пост помещен не в то место, куда нужно, пожалуйста, не баньте, а перенесите туда, где такие просьбы должны быть.
makh Доцент Caught Somewhere In Time 1560 751
Отв.1  10 Июня 18, 09:59
исполняющее устройство, которым командовать буду Бэйсиком через портSonologist, 07 Июня 18, 08:04

А firmata не закроет вопрос?
Sonologist Доцент Москва 1576 514
Отв.2  11 Июня 18, 06:48
Это всего лишь один из путей общения Ардуино и ПК. Но у меня проблемы в другом: в работе Ардуины. Я не умею ее программировать.
-NMi- Студент Саранск 33 3
Отв.3  12 Июня 18, 15:14
В таком случае придётся "придумать" команды для управления этой ардуиной. Например: settemperatire=90 или около этого и прямо с терминала или из внешнего софта управлять чем угодно.
Если будет человек 100 желающих сделать это - я возьмусь.
Sonologist Доцент Москва 1576 514
Отв.4  13 Июня 18, 06:37
Это всего лишь один из путейSonologist, 11 Июня 18, 06:48
Я полагаю, что Бэсик с задачей "прочитать-посчитать-передать" вполне справится. Кроме того, у меня нет задачи плотно и много работать с контроллерами, в противном случае я бы уже давно учился соответствующим языкам. А от Ардуины мне необходимы всего лишь конкретные функции.
-NMi- Студент Саранск 33 3
Отв.5  13 Июня 18, 07:07, через 31 мин
Нет абсолютно НИКАКОЙ разницы, на чём "гамить" - хоть на бейсике, хоть на ардуино да и вообще на любом языке. Основные принципы языков АБСОЛЮТНО одинаковы. Разница всего лишь в методах языка, но это уже на долго объяснять.
Суть вашего подхода мне ясна - сделать некий интерпретатор команд из ардуино (или ещё что-то подобное) и управлять им.
О самой концепции я писал уже постом выше - сначала нужно самому ПРИДУМАТЬ систему команд (пример: st=98 Set Temperature 98 degree) и так далее и управлять ей. Можно "брать" параметры (пример: gtc Get Temperature Cube) и тд и тп.
Вообще есть уже язык "требований", который можно "прикрутить" к ардуино. Он как раз позволяет в наглядной интерактивной форме вести диалог с пользователем.
Вообще есть оОООочень много способов визуализации происходящего, нужно всего-лишь ОПРЕДЕЛИТЬСЯ, что и как нужно сделать...
Sonologist Доцент Москва 1576 514
Отв.6  13 Июня 18, 10:21
Суть вашего подхода мне ясна - сделать некий интерпретатор команд из ардуино (или ещё что-то подобное) и управлять им.-NMi-, 13 Июня 18, 07:07
Ну, в общем - правильно. С другой стороны, уверен, что сотню программистски неграмотных последователей я не найду Улыбающийся
ПивоСэм Кандидат наук Казань 359 121
Отв.7  13 Июня 18, 10:28, через 7 мин
Если будет человек 100 желающих сделать это - я возьмусь.-NMi-, 12 Июня 18, 15:14
Сделать что? Придумывать команды? Или писать скетчи? Для программиста средней руки написать данный скетч как два пальца об асфальт. Топикстартер Sonologist, не просит рассказать ему как это надо делать. Он просит написать для него.
makh Доцент Caught Somewhere In Time 1560 751
Отв.8  13 Июня 18, 10:33, через 6 мин
от Ардуины мне необходимы всего лишь конкретные функцииSonologist, 13 Июня 18, 06:37
Огласите весь список, пожалста .)

Ибо разного уровня абстракции возможны в этом контексте. Например, можно реализовать в ардуине "автомат управления отбором по градуснику", а можно просто "силовой ключ" и "читалку градусников", а автоматы разруливать уже как удобнее, на нормальном компе и высокоуровневом языке.

Вот, например, мое решение аналогичной задачи в этом вот контексте.. Не оно?
-NMi- Студент Саранск 33 3
Отв.9  13 Июня 18, 10:43, через 10 мин
Скетчей для него да и для других уже написано немало. Есть и для андроидов и с Web-интерфейсом. Даже здесь есть ветка про автоматику, чем она не подходит для ваших нужд - я не понимаю.
Писать для кого-то просто так я не буду по одной простой причине - нет железа. А если его нет, тогда и нечего испытывать. Например, простецкий ПИД-регулятор для термопауз невозможно настроить без железа.
Да и не пишу я на ардуино по причине "жухлости" используемого кода, библиотеки есть, но большинство из них либо корявые, либо одна другой мешает или все вместе не работают.
baton Доктор наук Санкт-Петербург 532 188
Отв.10  13 Июня 18, 11:02, через 20 мин
Sonologist, посмотри это [Modbus, Ethernet, SCADA и прочие излишества]
Может быть тебе подойдёт.
-NMi- Студент Саранск 33 3
Отв.11  13 Июня 18, 11:22, через 21 мин
[Создадим свой открытый протокол обмена данными между контроллером и модулями]Tomat7, 31 Янв. 18, 16:18
Вот с чего прежде всего нужно начинать! Написать ответчика или исполнителя уже будет можно не только на ардуино, а на абсолютно любом контроллере )))
ПивоСэм Кандидат наук Казань 359 121
Отв.12  13 Июня 18, 11:30, через 9 мин
Вот с чего прежде всего нужно начинать!-NMi-, 13 Июня 18, 11:22
И вот этим закончить?
Как итог все разговоры про "счётчик транзакций", "ненадёжность модбаса", "создание собственного протокола" - обычная болтовня очередного "непризнанного гения"Electric, 09 Июля 17, 01:16

Добавлено через 10мин.:

можно не только на ардуино, а на абсолютно любом контроллере )))-NMi-, 13 Июня 18, 11:22
Кто об этом просит? Есть конкретная задача. Очень несложная на мой взгляд. Зачем все усложнять?
Sonologist, Выложил бы свое "типа ТЗ". Глядишь и разговор пошел бы в более конструктивном русле.
-NMi- Студент Саранск 33 3
Отв.13  13 Июня 18, 11:51, через 21 мин
Я не знаю как ответить на этот вопрос...
Но тогда задам свои вопросы:
Почему расстояние между рельсами по всей России одинаковое? Почему в каждом городе не придумали "своё" Непонимающий
Почему все чертежи в миллиметрах а не в аршинах Непонимающий
---
А теперь о конкретном... Modbus, Can или ещё чего - это именно СТАНДАРТЫ!!! Поэтому многие производители могут и делают оборудование под эти СТАНДАРТЫ и не изобретают своего. Так почему же не взять какой-нибудь стандарт и не прикрутить к нему наши нужды? Выгода очевидна - будет совершенно много оборудования разных производителей и разных ценовых категорий. Но нет же, все и вся ударились в скетчи и пишут кто на что горазд и обсуждают свои изобретения. Конечно, я не против этого, более того, сам под себя я написал себе и пользуюсь, и по мере нУжности прямо на ходу могу "дописать" прямо в процессе. Но! есть одно но... вылез (допустим) я из ардуины и хочу что-нибудь современное... у меня не остаётся другого выбора, кроме как полностью переписать код... а это, изЪвините, не так уж и просто. Вот о чём речь!!!
ПивоСэм Кандидат наук Казань 359 121
Отв.14  13 Июня 18, 12:01, через 10 мин
Так почему же не взять какой-нибудь стандарт и не прикрутить к нему наши нужды?-NMi-, 13 Июня 18, 11:51
Так ведь ты же только что отсылал к созданию СОБСТВЕННОГО протокола. Модбас? Отлично! Промышленный протокол.
вылез (допустим) я из ардуины и хочу что-нибудь современное...-NMi-, 13 Июня 18, 11:51
Хоти на здоровье. Зачем всех то агитировать за советскую власть?

Добавлено через 1мин.:

Модбас на Ардуине отлично работает. Не знаю как там с Бейсиком.

Добавлено через 5мин.:

Вообще то для данной задачи существуют стандартные обкатанные решения. ОРС сервер читает тэги с сом порта. И любая СКАДА их использует. Вот обработка данных и отсылка команд контроллеру для меня оказалась сложной. Но особо не упирался.
Sonologist Доцент Москва 1576 514
Отв.15  13 Июня 18, 12:13, через 13 мин
Друзья, я сейчас на работе, поэтому кину ТЗ вечером. Может, кто возьмется помочь. Предчувствую, что задача не очень сложная, но все равно ее надо же поставить Улыбающийся. Так что, вечером.
-NMi- Студент Саранск 33 3
Отв.16  13 Июня 18, 12:34, через 22 мин
Так ведь ты же только что отсылал к созданию СОБСТВЕННОГО протокола. Модбас? Отлично!ПивоСэм, 13 Июня 18, 12:01
Ещё раз причитай мой пост. Если не поможет - распечатай на СТАНДАРТНОМ листе бумаги А4 и нjси с собой, иногда почитывая.

Стандарт, например Can, Usart, Rs485 или что-то ещё это всего лишь ФИЗИЧЕСКИЙ уровень (hardware layer) и он описывает только физические уровни и параметры линий связи. А вот ПРОТОКОЛ - это уже "надстройка" , ну типа второго этажа, и вот именно тут абсолютно любой производитель может писать всё что угодно. Если я что-то не правильно объясняю, приведу пример: голосовой аппарат у китайца и негра абсолютно одинаков, а языки у них разные и только по этому они не понимают друг друга!

По итогу, управлять самоплясным аппаратом можно хоть с ИК пульта от телевизора, лишь бы только команды ПРОТОКОЛА совпадали.
ПивоСэм Кандидат наук Казань 359 121
Отв.17  13 Июня 18, 13:04, через 31 мин
Если я что-то не правильно объясняю, приведу пример:-NMi-, 13 Июня 18, 12:34
Ну хорошо. Может я не правильно понимаю.
Давай от рассуждений перейдем к сути вопроса. Вот дождемся ТЗ и посмотрим. Ты с Бэйсиком знаком? Данные какого типа он может обрабатывать? Если надо, к примеру, отправлять данные с нескольких датчиком температуры. Как это должно выглядеть? На мой малограмотный взгляд Т01ХХХ, Т02ХХХ... Причем если показания 22,4С то отправлять без всяких запятых и точек. ТХХ224. Как тебе такой подход?
-NMi- Студент Саранск 33 3
Отв.18  13 Июня 18, 13:14, через 10 мин
Txx22,4 + Crc - яб так сделал, но, вообще нужно сначала придумать не протокол, а фрейм или кадр. Иными словами минимальную длину пакета. Можно взять любой пример, например с Can и по образу и подобию сделать фреймы.

Команд управления по сути нам нужно не очень много, ну думаю 32 шт. хватит.
И контролируемых данных то-же 32 хватит, так что в 2-3 литеры укладываемся.

А бейсик это или С++ это не суть, разницы нет никакой.
Sonologist Доцент Москва 1576 514
Отв.19  13 Июня 18, 20:25
Sonologist, Выложил бы свое "типа ТЗ". Глядишь и разговор пошел бы в более конструктивном русле.ПивоСэм, 13 Июня 18, 11:30
Ну вот, добрался домой, наконец. Вот такое "типа ТЗ" - чего хочется от Ардуины (извините за многобукф):

Работа с цифровыми датчиками температуры (ds18b20) требует неприлично большого времени, поэтому я предположил, что стоит использовать аналоговые датчики LM35DZ. Во всяком случае, в доступной мне информации нет ничего, что препятствовало бы их использованию. Штука распространенная, недорогая и в том же корпусе, что и  ds18b20, то есть щуп будет привычной конструкции. Что важно: свердить новые посадочные места для новых щупов в уже готовой колонне желания нет. Микросхема на каждый градус плюсует по 10mV в информационный вывод. Если установить опорное напряжение через внутренний источник Ардуино 1.1V, то можно определять температуру до 110ºС с достаточной стабильностью. Чего вполне для моих задач хватает. Напряжение на аналоговых входах Ардуино определяет мгновенно, а для работы с  тремя ds18b20 для полного цикла измерений потребовалось бы аж 3 секунды.
   Относительно алгоритма цикла на Ардуино в этом случае мне представляется так:
1. Читаем из порта строку (посланную Бэйсиком) в формате «Х-ММММ-A-B-C», где:
   • Х = 0, 1 или 2, что определяет работу нагрева (соответственно, ВЫКЛЮЧЕНО, РАЗГОН и СТАБИЛИЗАЦИЯ).
   • В режиме стабилизации (Х=2) ММММ — количество микросекунд. Это время от прихода импульса детектора перехода через ноль до
     выдачи короткого (50 мксек) импульса на управляющий вывод блока нагрева.
   • A, B и C — логическая 1 (или логический 0), которые надо подать на управляющий выводы остальных трех блоков.
2. Если: (тут, видимо в программе обычные циклы If...End if, или как там в языке Ардуино аналогичный...)
   • Х=0, то на вывод управления блоком нагрева поддается постоянный логический 0 (нагрев выключен).
   • Х=1, то на вывод управления блоком нагрева поддается постоянная логическая 1 (полная мощность - разгон).
   • Х=2, то после прочтения строки ждем первый же импульс от детектора перехода через ноль, отсчитываем указанное количество
     микросекунд (ММММ) и формируем короткий импульс. Так продолжается, пока во входящей строке не изменилось значение (ММММ)
     или (Х).
3. Последовательно формируем напряжение (1 или 0) на выводах остальных трех блоков. управления. Если при очередном прочтении в строке нет изменений А, И и С, то и формируемое напряжение не меняется.
4. Измеряем напряжение (на переменном резисторе), пересчитываем его на напряжение сети, формируем значение «VVV» (напряжение в вольтах).
5. Последовательно измеряем напряжение на выводах микросхем LM35DZ, пересчитываем их в температуру, формируем значения «ААА», «ВВВ» и «ССС». Это температура датчиков  LM35DZ с точностью до одного знака после запятой, но запятую передавать не надо, просто три цифры (потом в Бэйсике легче считать, чтоб не переводить каждый раз запятую в точку).
6. Формируем в порт строку в формате «VVV-AAA-BBB-CCC». Бэйсик ее читает, производит нужные расчеты, и бросает информацию для Ардуино обратно в порт в формате п.1.
7. Цикл повторяется.

Возможно, я что-то упустил по причине полного отсутствия квалификации, но приведенный  алгоритм — некая «рыба». Поправьте меня, если что-то не так.
Схема - во вложении.
Scheme LM35.png
1024x903 61Кб