И в чём вопрос? Открываем систему ГОСТ'ов СРПП и смотрим ... после прототипа будет экспериментальный образец, потом опытный образец ... в общем, там всё написано.
Вопрос больше философский - успеет ли дело дойти до экспериментального образца или прототип пойдет в продакшн, а потом за разработчиком будет главный энергетик с рессорой гоняться.
...но мне нужно показать рабочий прототип и тогда у меня будет время на изучение stm32 и разводку собственной платы.
Возьми raspberry pi или orange pi поставь на нее Апачь, и напиши простейший сайт. Останется написать элементарный "ногодрыг". Получиться дешевле чем будет стоить то время которое ты потратишь разбираясь в тонкостях ардуино. Единственное но, если захочешь использовать такое в продакшене, позаботься о том что-бы операционная система "жила" на виртуальном диске. (При включении в ОЗУ выделить местечко и скопировать туда. Иначе затрахаешся со сбоями флеш-карты.
Если ТС интересно мое мнение, то (не зря же я вопрос задал!) нужны скрипты для web. Или на PHP или других языках программирования с выхлопом в web интерфейс. По сути сервер с главной формой по тому же http обращается к устройствам, они генерируют код либо выполняют действия в зависимости от запросов (генерируя ответ).
Судя по тому, что html/css код ТС знакомая подготовила, он не знает что такое GET/POST запросы и другие элементы web’а. Без этих знаний можно долго и упорно на разных форумах клянчить код, но без понимания общего даже куски кода склеить не получится. Тут два варианта - быстро и просто это купить код в платном разделе (не дёшево думаю), второй - учиться, взять в рабство знакомую и через 3-5 лет все получится. :) Может и раньше, если её хорошо кормить и одевать. )))
...но мне нужно показать рабочий прототип и тогда у меня будет время на изучение stm32 и разводку собственной платы.
Возьми raspberry pi или orange pi поставь на нее Апачь, и напиши простейший сайт. Останется написать элементарный "ногодрыг". Получиться дешевле чем будет стоить то время которое ты потратишь разбираясь в тонкостях ардуино. Единственное но, если захочешь использовать такое в продакшене, позаботься о том что-бы операционная система "жила" на виртуальном диске. (При включении в ОЗУ выделить местечко и скопировать туда. Иначе затрахаешся со сбоями флеш-карты.
ну не знаю насчёт флэшки, на TP-LINK живет более 5 лет, проблем не было, там правда OpenWRT
...ну не знаю насчёт флэшки, на TP-LINK живет более 5 лет, проблем не было, там правда OpenWRT
Да! и никаких апачей - lighthttpd
Там дело не в исчерпании ресурса флешки, проблема в сбоях по сети, если сбой происходит в момент чтения/записи, то на флешке с большой вероятностью портятся данные.
Апачь не стоит выбрасывать по тому, что он существенно упростит создание сервера. Можно конечно пройти квест с настройкой nginx или вообще накорячить свои сокеты но какой в этом смысл (кроме увеличения трудоемкости)?
Хотя, конечно, если выбрать язык go то в нем сервер пишется в несколько строк, и работает все очень шустро, но там довольно специфичная логика создания приложений. В С++ будет сложено быстро разобраться в библиотеках, джава тормозная и дырявая, остается разве что экзотика в вилде питона...
А к апачу в принципе можно прикрутить почти любую консольную программу написанную на чем угодно.
ты сейчас повторил урок Димы Осиповы, так можно делать, но не нужно...
Хотя у такого решения много достоинств.
1. Простота
2. Можно выводить ряд параметров, вскрытие дизельной, температура, температура масла, давление, уровень топлива, напряжение генератора и т.д
3. Простая масштабируемость
Вопрос? У тебя дизеля оборудованы щитами автоматики и ты хочешь задублировать кнопки пуск и стоп на этих щитах дистанционно?
Имелось в виду не внешний вид, а наличие обратной связи. В простейшем случае страница делает регулярные запросы к устройству (серверу) в которых тот отчитывается о своем состоянии. (У тебя может быть сбой в сети, и команда просто не дойдет или у тебя может быть не штатный перезапуск устройства. Оператор должен всегда знать реальное состояние устройства.) Кстати, ошибки запросов к устройству тоже должны отображаться.
Отображение проще всего организовать меняя класс для элемента интерфейса, тогда в соответствующем css файле ты легко сможешь задать внешний вид элемента во включенном/выключенном/ошибочном состоянии.
Имелось в виду не внешний вид, а наличие обратной связи. В простейшем случае страница делает регулярные запросы к устройству (серверу) в которых тот отчитывается о своем состоянии. (У тебя может быть сбой в сети, и команда просто не дойдет или у тебя может быть не штатный перезапуск устройства. Оператор должен всегда знать реальное состояние устройства.) Кстати, ошибки запросов к устройству тоже должны отображаться.
Отображение проще всего организовать меняя класс для элемента интерфейса, тогда в соответствующем css файле ты легко сможешь задать внешний вид элемента во включенном/выключенном/ошибочном состоянии.
Все ошибки, которые можно было сделать - сделаны. Тут тебе и дюпонт и контактор рядом с МК и питание реле от USB. Плюсом код... осутствие фидбека от исполнительного устройства...
Так я всё исправлю. Короткими проводами распаяю. На сколько удалять МК от пускателя, может его обличить в алюминиевый экран? Питание от usb только мк. А что с кодом? Питание будет индивидуальное. Реле на данный момент питаются от одного лабораторника, промежуточное реле от другого.
При подаче 12в на VIN плата не работает, работает только от USB. Питание всех модулей сделаю отдельное скоро. Подвисание решилось установкой конденсатора 0.1мкф и резистора 1к параллельно выводам реле и катушки пускателя, подсказал дедушка один.
открываешь любой шкаф управления, где реле управляют в цепях переменного тока, а там этих снабберов (RC цепочек) на каждом задействованном контакте и, советы дедушки не нужны )))
Эта цепь называется снаббер. Приветствуется для установки во многие места, где возможны высоковольтные выбросы при разрывании тока. Тиристоры без них могут вообще открываться, если параллельно щелкнуть выключателем.
Все работает как надо, ничего не глючит и не виснет. Но есть один знакомый который может только обгадить, но совета сам дать не хочет. Он сказал, что использовать delay нельзя. 2 дня читаю про прерывание и скажу, что это слишком сложная для меня материя.
Долго мучился с первичным состоянием реле, как оказалось нужно было добавить в void setup() строку digitalWrite(8,HIGH);
Немного разобрался с синтаксисом и функциями, интересная штука в общем.
Прерывания тут не к месту. Необходимо изучить статью "blink без delay" и добавить к уворованному там приему одну переменную-флаг "мигать можно", которую и перекидывать в true/false по событию.
Я сам уже ничего не знаю. Руководствовался разными учебными материалами, где что брал уже не помню. В чистом виде код из статьи подставить не получается. Все больше не буду вас тревожить. Все равно ничего не получается.
Я сам уже ничего не знаю. Руководствовался разными учебными материалами, где что брал уже не помню. В чистом виде код из статьи подставить не получается. Все больше не буду вас тревожить. Все равно ничего не получается.
вот зашёл ты к примеру в первый вайл и висишь там пока он не выполнится и, чем это отличается от delay();
А может кто-то дописать это вместо меня за деньги к примеру? У меня уйдет немало времени, чтобы немного изучить язык кода. У меня нету года на изучение. Я сам инициировал эту модернизацию, не оценив свои возможности. Кроме таймера еще нужен вывод информации на вебстраницу о состоянии контакта D2 к примеру LOW или HIGH.
Надеюсь я правильно изменил в 4 строке с 13 на 8, в 44 строке ledPin на 8? Исходя из того, что у меня в void setup - pinMode(8, OUTPUT);. Но не хочет теперь собираться.
ledPin
#include <SPI.h>
#include <Ethernet.h>
boolean newInfo = 0;
const int ledPin = 8; // номер выхода, подключенного к светодиоду
// Variables will change:
int ledState = LOW; // этой переменной устанавливаем состояние светодиода
long previousMillis = 0; // храним время последнего переключения светодиода
long interval = 1000; // интервал между включение/выключением светодиода (1 секунда)
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };
IPAddress ip(192,168,4,70);
byte gateway[] = { 192, 168, 4, 1 };
byte subnet[] = { 255, 255, 255, 0 };
EthernetServer server(80);
void setup()
{
pinMode(8, OUTPUT);
digitalWrite(8,HIGH);
Ethernet.begin(mac, ip);
server.begin();
Serial.begin(9600);
}
void loop()
{
// здесь будет код, который будет работать постоянно
// и который не должен останавливаться на время между переключениями свето
unsigned long currentMillis = millis();
//проверяем не прошел ли нужный интервал, если прошел то
if(currentMillis - previousMillis > interval) {
// сохраняем время последнего переключения
previousMillis = currentMillis;
// если светодиод не горит, то зажигаем, и наоборот
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
// устанавливаем состояния выхода, чтобы включить или выключить светодиод
digitalWrite(8, ledState);
EthernetClient client = server.available();
if(client){
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if(newInfo && c == ' '){
newInfo = 0;
}
if(c == '$'){
newInfo = 1;
}
if(newInfo == 1){
Serial.println(c);
if(c == '1'){
Serial.println("ON");
digitalWrite(8, LOW);
}
if(c == '2'){
Serial.println("OFF");
digitalWrite(8, HIGH);
}
}
if (c == '\n') {
currentLineIsBlank = true;
}
else if (c != '\r') {
currentLineIsBlank = false;
}
if (c == '\n' && currentLineIsBlank) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("Refresh: 30");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.print("<title>Alarm</title>");
client.print("<H1>Block 1</H1>");
client.println("<br />");
client.println("</html>");
break;
}
}
}
delay(1);
client.stop();
}
}
Так понял, нужно было добавить еще одну скобку в конце, так как добавились новые строки. Залилось и постоянно клацает реле с небольшим интервалом. Теперь мне нужно привязать это действие к кнопке "ON" и свои тайминги.
Судя по тому, что ему тут насоветовали ...
неправильно помогаем? :) Научи как надо
И в чём вопрос? Открываем систему ГОСТ'ов СРПП и смотрим ... после прототипа будет экспериментальный образец, потом опытный образец ... в общем, там всё написано.
Судя по тому, что ему тут насоветовали ...
неправильно помогаем? :) Научи как надо
Летят гуси, готовь мешки, хозяин...
а классика жанра = клиент - расберрипи
И в чём вопрос?
Вопрос больше философский - успеет ли дело дойти до экспериментального образца или прототип пойдет в продакшн, а потом за разработчиком будет главный энергетик с рессорой гоняться.
чето вы тут жути нагоняете. 0 и 1 по езернету погонять немного. Че уж тут такого космического. Думаю подъемная задача для новичка.
Если ТС интересно мое мнение, то (не зря же я вопрос задал!) нужны скрипты для web. Или на PHP или других языках программирования с выхлопом в web интерфейс. По сути сервер с главной формой по тому же http обращается к устройствам, они генерируют код либо выполняют действия в зависимости от запросов (генерируя ответ).
Судя по тому, что html/css код ТС знакомая подготовила, он не знает что такое GET/POST запросы и другие элементы web’а. Без этих знаний можно долго и упорно на разных форумах клянчить код, но без понимания общего даже куски кода склеить не получится. Тут два варианта - быстро и просто это купить код в платном разделе (не дёшево думаю), второй - учиться, взять в рабство знакомую и через 3-5 лет все получится. :) Может и раньше, если её хорошо кормить и одевать. )))
ну не знаю насчёт флэшки, на TP-LINK живет более 5 лет, проблем не было, там правда OpenWRT
Да! и никаких апачей - lighthttpd
Да! и никаких апачей - lighthttpd
Апачь не стоит выбрасывать по тому, что он существенно упростит создание сервера. Можно конечно пройти квест с настройкой nginx или вообще накорячить свои сокеты но какой в этом смысл (кроме увеличения трудоемкости)?
Хотя, конечно, если выбрать язык go то в нем сервер пишется в несколько строк, и работает все очень шустро, но там довольно специфичная логика создания приложений. В С++ будет сложено быстро разобраться в библиотеках, джава тормозная и дырявая, остается разве что экзотика в вилде питона...
А к апачу в принципе можно прикрутить почти любую консольную программу написанную на чем угодно.
совсем правильней видимо своего демона написать, а там где мало ресурсов лайтхттп + пхп, по крайней мере во всех мелких железках вэбморда на нём
Автор то по сути в пяти минутах от решения задачи и его способ тоже рабочий. С mqtt ковыряться первый раз можно и подольше, чем с http.
https://youtu.be/RtRZJ2DByxE
теперь можно спать
https://youtu.be/RtRZJ2DByxE
теперь можно спать
кнопку на вэбке надо подсветить, когда реле срабатывает ...
Надо но на цветной странице.
ты сейчас повторил урок Димы Осиповы, так можно делать, но не нужно...
Хотя у такого решения много достоинств.
1. Простота
2. Можно выводить ряд параметров, вскрытие дизельной, температура, температура масла, давление, уровень топлива, напряжение генератора и т.д
3. Простая масштабируемость
Вопрос? У тебя дизеля оборудованы щитами автоматики и ты хочешь задублировать кнопки пуск и стоп на этих щитах дистанционно?
Отображение проще всего организовать меняя класс для элемента интерфейса, тогда в соответствующем css файле ты легко сможешь задать внешний вид элемента во включенном/выключенном/ошибочном состоянии.
У него сейчас сервер прямо на ардуине реализован
То, что он подал HIGH на пин и отрисовал лампочку - не говорит о том, что релюшка щёлкнула.
Тем более, что питание могло моргнуть, и даже щелкнувшая релюшка могла отключиться.
Работает. Взято отсюда. https://ru.stackoverflow.com/questions/35915/%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0-get-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0-%D0%BF%D0%BE-%D0%BA%D0%BB%D0%B8%D0%BA%D1%83-%D0%BD%D0%B0-%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D1%83
Сейчас отдам знакомой, пусть думает как прикрутить к моим кнопкам.
Отображение проще всего организовать меняя класс для элемента интерфейса, тогда в соответствующем css файле ты легко сможешь задать внешний вид элемента во включенном/выключенном/ошибочном состоянии.
Я с вами полностью согласен.
Работает!
https://www.youtube.com/watch?v=akJVaASGtQo&feature=youtu.be
https://www.youtube.com/watch?v=wp4CuHGlh0c&feature=youtu.be
Каким-то образом 220 вешает всю систему. Понять бы что вешается, ардуина и сетевой контроллер.
Все ошибки, которые можно было сделать - сделаны. Тут тебе и дюпонт и контактор рядом с МК и питание реле от USB. Плюсом код... осутствие фидбека от исполнительного устройства...
Так я всё исправлю. Короткими проводами распаяю. На сколько удалять МК от пускателя, может его обличить в алюминиевый экран? Питание от usb только мк. А что с кодом? Питание будет индивидуальное. Реле на данный момент питаются от одного лабораторника, промежуточное реле от другого.
Вот как всё исправите, так и вопросов может не останется.
"...но бросить пить?...не может быть!..."
Я его домучаю, рано или поздно но домучаю.
При подаче 12в на VIN плата не работает, работает только от USB. Питание всех модулей сделаю отдельное скоро. Подвисание решилось установкой конденсатора 0.1мкф и резистора 1к параллельно выводам реле и катушки пускателя, подсказал дедушка один.
открываешь любой шкаф управления, где реле управляют в цепях переменного тока, а там этих снабберов (RC цепочек) на каждом задействованном контакте и, советы дедушки не нужны )))
Эта цепь называется снаббер. Приветствуется для установки во многие места, где возможны высоковольтные выбросы при разрывании тока. Тиристоры без них могут вообще открываться, если параллельно щелкнуть выключателем.
Так уже лучше ?
Текстолит хороший, дипольчик с симметрирующим трансформатором можно организовать
Все кренки убрал, так по лучше будет.
Все работает как надо, ничего не глючит и не виснет. Но есть один знакомый который может только обгадить, но совета сам дать не хочет. Он сказал, что использовать delay нельзя. 2 дня читаю про прерывание и скажу, что это слишком сложная для меня материя.
Долго мучился с первичным состоянием реле, как оказалось нужно было добавить в void setup() строку digitalWrite(8,HIGH);
Немного разобрался с синтаксисом и функциями, интересная штука в общем.
Зачем Вам прерывания для отказа от делей? http://arduino.ru/tutorials/BlinkWithoutDelay
Прерывания тут не к месту. Необходимо изучить статью "blink без delay" и добавить к уворованному там приему одну переменную-флаг "мигать можно", которую и перекидывать в true/false по событию.
если устраивает ситуация, когда устройство на 3-5 минут будет зависать, то можно и с делеями, но не нужно
Не получается. Вместо задержек включается кнопкой "off" и выключить вообще нельзя. Вебстраница всегда активна.
Откуда этот странный прием?
Ниоткуда. Это в предыдущий добавил задержки из статьи посоветованой вами.
Зачем придумываете? В статье такого приема нет. Там и while() отсутствует в принципе.
Я сам уже ничего не знаю. Руководствовался разными учебными материалами, где что брал уже не помню. В чистом виде код из статьи подставить не получается. Все больше не буду вас тревожить. Все равно ничего не получается.
для начала привести типы переменных (5 строка тоже uint32_t interval) к примеру
Я сам уже ничего не знаю. Руководствовался разными учебными материалами, где что брал уже не помню. В чистом виде код из статьи подставить не получается. Все больше не буду вас тревожить. Все равно ничего не получается.
вот зашёл ты к примеру в первый вайл и висишь там пока он не выполнится и, чем это отличается от delay();
А может кто-то дописать это вместо меня за деньги к примеру? У меня уйдет немало времени, чтобы немного изучить язык кода. У меня нету года на изучение. Я сам инициировал эту модернизацию, не оценив свои возможности. Кроме таймера еще нужен вывод информации на вебстраницу о состоянии контакта D2 к примеру LOW или HIGH.
Просто уберите свои вайлы, которые вместо дилеев и содержимое лупа из примера "blink без delay" поместите перед строкой 25. Мигает лампочка?
Надеюсь я правильно изменил в 4 строке с 13 на 8, в 44 строке ledPin на 8? Исходя из того, что у меня в void setup - pinMode(8, OUTPUT);. Но не хочет теперь собираться.
ledPin
Потеряна фигурная скобка if()а в районе строк 44-45
Так понял, нужно было добавить еще одну скобку в конце, так как добавились новые строки. Залилось и постоянно клацает реле с небольшим интервалом. Теперь мне нужно привязать это действие к кнопке "ON" и свои тайминги.
Вот это, украденное, надо засунуть в ещё один if(blinkAllowed) {...}
Когда нужно помигать - blinkAllowed = true, когда не надо мигать - blinkAllowed = false.
Где активировать мигание - определяйтесь сами.