D18B20, Arduino, MODBUS, Master SCADA

  • В этой теме 259 ответов, 23 участника, последнее обновление 5 лет сделано Роман.
Просмотр 15 сообщений - с 16 по 30 (из 260 всего)
  • Автор
    Сообщения
  • #15583
    Счастливчик
    Хранитель
    • Ответов: 2655
    @wpadm

    Апдейт прошивки по сети – это как раз плевое дело и он работает без проблем. Сейчас разбираюсь с несколькими датчиками ds18b20, хочу их опрос напрямую делать без библиотеки Dallas’a. А то опрос 750 ms гробит задержкой весь веб-интерфейс. Вроде понял как, надо внедрить код и отладить.

    Виртуино – костыль если сам написать не можешь, и куча айфоноводов мимо. Самому под себя можно все написать на вебе, и приложение на андроиде не нужно.

    Графики можно тоже выводить при помощи граф. библиотек. Дойдут руки – разберусь. Проект не сильно сложный, но требует кучу времени разобраться во всем, написать и отладить. А его как раз мало.

    Хорошо живет на свете Винни-Пух...

    #15588
    Роман
    Участник
    • Ответов: 291
    @papazol

    А то опрос 750 ms гробит

    У них процесс конвертации температуры в число занимает 750 мс. От этого никуда не уйти. Эдуард Калинин делал программу, где операции с датчиком (правда, одним) совершались в прерываниях. Причём в каждом прерывании обрабатывался (посылался или считывался) только один байт. Может, в эту сторону покопать?

    #15590
    Счастливчик
    Хранитель
    • Ответов: 2655
    @wpadm

    Нет, там все проще. Сначала запрос на измерение, потом опрашиваем о результатах. Между операциями 750 мс. В далласовской библиотеке это одна операция, вешающая всю ардуинку на 750 мс. С прерываниями таже фигня. Но можно работать через onewire библиотеку напрямую. Сначала делаем всем датчикам запрос на измерение, затем через 750 мс забираем информацию. А в перерывах чип решает свои задачи. Хоть через millis() можно все это реализовать. Никаких проблем, и производительность не падает.

    Хорошо живет на свете Винни-Пух...

    #15594
    skalinas
    Участник
    • Ответов: 441
    @skalinas

    Уже давно сделал, сегодня выложу на 5 датчиков.

    #15597
    OLEG
    Участник
    • Ответов: 69
    @akvarius

    здрасте, очень интересно, я конечно ещё не собрал колонну, но на будующее сделал закладку.1-й вопрос программа устанавливается для всех виндовсов у меня 10х64

    #15599
    Счастливчик
    Хранитель
    • Ответов: 2655
    @wpadm

    здрасте, очень интересно, я конечно ещё не собрал колонну, но на будующее сделал закладку.1-й вопрос программа устанавливается для всех виндовсов у меня 10х64

    Это для Ардуино, но на Виндоусе все будет видно и управляемо.

    Хорошо живет на свете Винни-Пух...

    #15600
    Счастливчик
    Хранитель
    • Ответов: 2655
    @wpadm

    Уже давно сделал, сегодня выложу на 5 датчиков.

    Отлично, я как раз сегодня планировал на millis () код переделывать)) А тут с неба подарок))

     

    Хорошо живет на свете Винни-Пух...

    #15604
    skalinas
    Участник
    • Ответов: 441
    @skalinas

    Тут  выложил скетч по датчикам.

    #15605
    Артём
    Участник
    • Ответов: 130
    @customcat

    Я бы вообще порекомендовал закинуть уже ардуину как не актуальную, а использовать хотябы nodemcu ESP8266

    с расширялкой

    esp

    без

    esp

    Шустрее, больше памяти и встроенный wi-fi модуль. Что позволит  используя что-то вроде TheAppBuilder или iBuildApp создать приложение для смарта. Возможно правда придется запустить какой-либо клиент-сервер на компе, но зато не придется сидеть у компа ограничившись длинной юсб кабеля.

    Это просто совет на заметку. Многие товарищи мейкеры разработчики проектов для пивоварения уже перескочили на нее, даже пожалуй самый пользуемый бирдуино.

    #15606
    Счастливчик
    Хранитель
    • Ответов: 2655
    @wpadm

    Тут выложил скетч по датчикам.

    Спасибо! Ближе к ночи изучу.

    использовать хотябы nodemcu ESP8266

    На ней и делаю. Среда Ардуино.

    Хорошо живет на свете Винни-Пух...

    #15607
    Nick
    Участник
    • Ответов: 25
    @nmakarov

    Уже давно сделал, сегодня выложу на 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();

    }

    #15617
    skalinas
    Участник
    • Ответов: 441
    @skalinas

    Рисует графики, сохраняет в формате exel.

    Графики в реальном времени не нужны, достаточно все данные складывать на SD карту и потом в экселе нарисовать все графики для анализа работы автоматики.

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

    Управление пока делаю только с экрана.

    #15628
    Счастливчик
    Хранитель
    • Ответов: 2655
    @wpadm

    Тут выложил скетч по датчикам.

    Спасибо! Да, именно так и планировал. Только датчики на разных пинах, чтобы с адресами не заморачиваться.

    Вот так видел себе. Это не финальный код, а так – основа, ее еще допиливать надо немного.

    //***Функция считывания температуры 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; //Время возврата в секундах
         }
       }
      }
    }
    
    

     

    Хорошо живет на свете Винни-Пух...

    #15630
    skalinas
    Участник
    • Ответов: 441
    @skalinas

    Что бы не заморачиваться с адресом, датчики нужно сажать каждый на свой пин. При запуске ардуинки определять один раз все адреса (скетч тоже есть такой, смогу выложить только через месяц, на работе оставил). А далее, читаем температуру как у меня в скетче. Если потом заменять датчики, то все будет работать без проблем.

    #15631
    Роман
    Участник
    • Ответов: 291
    @papazol

    Сделал так, как хотел Счастливчик. Датчики подключаются к отдельным пинам, для сетапа пришлось-таки подключить библиотеку DallasTemperature. В цикле работает только библиотека OneWire. Общение с датчиками идёт в прерываниях. Проверил работу только с одним подключенным датчиком, перетыкал его по очереди ко всем четырём входам. Работает адекватно. С MODBUS’ом тоже всё в норме.

    Забыл написать, библиотеку для таймера взял другую, вложил тут, чтобы не искать, где скачать её.

    Вложения:
    Вы должны войти для просмотра вложений.
Просмотр 15 сообщений - с 16 по 30 (из 260 всего)
  • Для ответа в этой теме необходимо авторизоваться.