Главная › Форумы › Конструкторское бюро › Автоматизация › D18B20, Arduino, MODBUS, Master SCADA
-
АвторСообщения
-
11.01.2018 в 13:57 #15583
Апдейт прошивки по сети – это как раз плевое дело и он работает без проблем. Сейчас разбираюсь с несколькими датчиками ds18b20, хочу их опрос напрямую делать без библиотеки Dallas’a. А то опрос 750 ms гробит задержкой весь веб-интерфейс. Вроде понял как, надо внедрить код и отладить.
Виртуино – костыль если сам написать не можешь, и куча айфоноводов мимо. Самому под себя можно все написать на вебе, и приложение на андроиде не нужно.
Графики можно тоже выводить при помощи граф. библиотек. Дойдут руки – разберусь. Проект не сильно сложный, но требует кучу времени разобраться во всем, написать и отладить. А его как раз мало.
Хорошо живет на свете Винни-Пух...
11.01.2018 в 14:25 #15588А то опрос 750 ms гробит
У них процесс конвертации температуры в число занимает 750 мс. От этого никуда не уйти. Эдуард Калинин делал программу, где операции с датчиком (правда, одним) совершались в прерываниях. Причём в каждом прерывании обрабатывался (посылался или считывался) только один байт. Может, в эту сторону покопать?
11.01.2018 в 14:57 #15590Нет, там все проще. Сначала запрос на измерение, потом опрашиваем о результатах. Между операциями 750 мс. В далласовской библиотеке это одна операция, вешающая всю ардуинку на 750 мс. С прерываниями таже фигня. Но можно работать через onewire библиотеку напрямую. Сначала делаем всем датчикам запрос на измерение, затем через 750 мс забираем информацию. А в перерывах чип решает свои задачи. Хоть через millis() можно все это реализовать. Никаких проблем, и производительность не падает.
Хорошо живет на свете Винни-Пух...
11.01.2018 в 17:01 #15594Уже давно сделал, сегодня выложу на 5 датчиков.
11.01.2018 в 17:21 #15597здрасте, очень интересно, я конечно ещё не собрал колонну, но на будующее сделал закладку.1-й вопрос программа устанавливается для всех виндовсов у меня 10х64
11.01.2018 в 18:08 #15599здрасте, очень интересно, я конечно ещё не собрал колонну, но на будующее сделал закладку.1-й вопрос программа устанавливается для всех виндовсов у меня 10х64
Это для Ардуино, но на Виндоусе все будет видно и управляемо.
Хорошо живет на свете Винни-Пух...
11.01.2018 в 18:10 #15600Уже давно сделал, сегодня выложу на 5 датчиков.
Отлично, я как раз сегодня планировал на millis () код переделывать)) А тут с неба подарок))
Хорошо живет на свете Винни-Пух...
11.01.2018 в 19:03 #1560411.01.2018 в 19:07 #15605Я бы вообще порекомендовал закинуть уже ардуину как не актуальную, а использовать хотябы nodemcu ESP8266
Шустрее, больше памяти и встроенный wi-fi модуль. Что позволит используя что-то вроде TheAppBuilder или iBuildApp создать приложение для смарта. Возможно правда придется запустить какой-либо клиент-сервер на компе, но зато не придется сидеть у компа ограничившись длинной юсб кабеля.
Это просто совет на заметку. Многие товарищи мейкеры разработчики проектов для пивоварения уже перескочили на нее, даже пожалуй самый пользуемый бирдуино.
11.01.2018 в 19:13 #15606Тут выложил скетч по датчикам.
Спасибо! Ближе к ночи изучу.
использовать хотябы nodemcu ESP8266
На ней и делаю. Среда Ардуино.
Хорошо живет на свете Винни-Пух...
11.01.2018 в 19:18 #15607Уже давно сделал, сегодня выложу на 5 датчиков.
Очень хочется посмотреть.
Отлично, я как раз сегодня планировал на millis () код переделывать
В нашем случае хорошо подойдет а-ля async, что-то вроде такого (не нашел класс для 18В20, под руку подвернулся для BMP085, но идея там та же) :
// общий предок
class Worker {
protected:
unsigned long lastUpdate;
int interval;
public:
void setup(int pInterval) {
interval = pInterval;
}
void tick() {
if ( (millis() – lastUpdate) > interval ) {
lastUpdate = millis();
execute();
}
}
virtual void execute() {
Serial.println(“worker tick ” + (String)lastUpdate);
}
};class BMP085 : public Worker {
private:
Adafruit_BMP085_Unified bmp;
float temperature;
float pressure;
public:
void setup() {
Worker::setup(250);
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085);
if( ! bmp.begin()) {
Serial.print(“No BMP085 detected, wires or I2C addr problems. Halt.”);
while(1);
}
// take the three consecutive measurements for averaging:
execute();
execute();
execute();
}
virtual void execute() {
sensors_event_t event;
bmp.getEvent(&event);
if (event.pressure) {
bmp.getTemperature(&temperature);
// hPa and C:
pressure = event.pressure;
}
}
virtual String toString() {
return “Temperature/Pressure: ” + (String)temperature + ” / ” + (String)pressure;
}
float getTemperature() {
return temperature;
}
float getPressure() {
return pressure;
}
};BMP085 bmp085;
void setup() {
Serial.begin(115200);
bmp085.setup();
…
}void loop() {
bmp085.tick();
…
}11.01.2018 в 20:30 #15617Рисует графики, сохраняет в формате exel.
Графики в реальном времени не нужны, достаточно все данные складывать на SD карту и потом в экселе нарисовать все графики для анализа работы автоматики.
Для себя автоматику делаю на сенсорном экране, блютуз как опция тоже будет, что бы лишний раз не бегать к экрану.
Управление пока делаю только с экрана.
11.01.2018 в 21:08 #15628Тут выложил скетч по датчикам.
Спасибо! Да, именно так и планировал. Только датчики на разных пинах, чтобы с адресами не заморачиваться.
Вот так видел себе. Это не финальный код, а так – основа, ее еще допиливать надо немного.
//***Функция считывания температуры c Далласов***** void dallRead(unsigned long interval){ static unsigned long prevTime = 0; if (millis() - prevTime > interval) { //Проверка заданного интервала static boolean flagDall = 0; //Признак операции prevTime = millis(); flagDall =! flagDall; //Инверсия признака if (flagDall) { ds.reset(); ds.write(0xCC); //Обращение ко всем датчикам ds.write(0x44); //Команда на конвертацию flagDallRead = 1; //Время возврата в секундах } else { byte i; int temp; for (i = 0; i < 3; i++){ //Перебор количества датчиков ds.reset(); ds.select(addr); ds.write(0xBE); //Считывание значения с датчика temp = (ds.read() | ds.read()<<8); //Принимаем два байта температуры Temp = (float)temp / 16.0; flagDallRead = 2; //Время возврата в секундах } } } }
Хорошо живет на свете Винни-Пух...
11.01.2018 в 21:20 #15630Что бы не заморачиваться с адресом, датчики нужно сажать каждый на свой пин. При запуске ардуинки определять один раз все адреса (скетч тоже есть такой, смогу выложить только через месяц, на работе оставил). А далее, читаем температуру как у меня в скетче. Если потом заменять датчики, то все будет работать без проблем.
11.01.2018 в 21:22 #15631Сделал так, как хотел Счастливчик. Датчики подключаются к отдельным пинам, для сетапа пришлось-таки подключить библиотеку DallasTemperature. В цикле работает только библиотека OneWire. Общение с датчиками идёт в прерываниях. Проверил работу только с одним подключенным датчиком, перетыкал его по очереди ко всем четырём входам. Работает адекватно. С MODBUS’ом тоже всё в норме.
Забыл написать, библиотеку для таймера взял другую, вложил тут, чтобы не искать, где скачать её.
Вложения:
Вы должны войти для просмотра вложений. -
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.