Датчики серии MQ-* и библиотека TroykaMQ

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Андрей Новичок, 20 сен 2018.

Метки:
  1. ДОБАВЛЕНО: Сковородки - это аллегория по поводу моего опыта. Опыта нет, в чём честно ранее многокрано признался.
    Персональные данные и вопросы взаимодействие с прекрасным полом разглашать не собираюь.
    Предлагаю сосредоточиться на теме "Весёлый газ".
     
    Последнее редактирование: 6 окт 2018
  2. parovoZZ

    parovoZZ Гуру

    Вся прелесть моста в том, что мы измеряем разбаланс моста. Какое напряжение подаётся на мост вообще фиолетово. Там на первый план выходит такой параметр, как ТКС резистора.
     
  3. Ох, зря я в столь поздний час решил посмотреть форум.
    Вы что, пытаетесь рассказать про мостовую схему и способы работы с ней? Зачем? "На первый план выходит ТКС резистора" - да так и есть. Я что спорю?
    Конечно, в гипотетической мостовой схеме, если бы она была реализована для конкретного датчика, так бы и было. Но там её нет. Врочем, если у Вас есть фантастически глубокие знания архитектуры контроллера, где другие элементы её (мостовую схему) реализуют, то Вам низкий поклон. Я такого не увидел (не Ваши знания, а мост). Не отрицаю своего неведения в некоторых вопросах. Но нет там мостовой схемы! Если захотите продолжить, сначала имеет смысл договороться об области обсуждения и терминах.

    И вообще, не Вам лично, но и другим комментаторам: да, косяки есть, в чём честно признаюсь. И врать смысла не вижу, т.к. это потом окупиться сторицей. Вообще, слишком много комментариев не по теме вовсе. Сковородки, макароны и градусники я готов обсудить в личке. Правда, макароны моя тема). Уверен, мои рецепты всем понравятся.
    Снова предлагаю сосредоточиться на теме. Будет время - будут посты. Вообще, постов много не по существу. Такое ощущение складывается, что тему пытаются замусорть. Я писал ранее, что если тема не угодна, то не вопрос - её не будет.
     
  4. MQ-датчики не мостовые. И мостовые цепи используются для компенсации проблем обычных делителей - большой нелинейности и смещения.
     
    Последнее редактирование: 6 окт 2018
  5. parovoZZ

    parovoZZ Гуру

    Посмотрел MQ2 - да, действительно. Тогда в помойку.
     
  6. ИгорьК

    ИгорьК Гуру

    Не ломай тему! Еще теплится надежда узнать про сковородки.
     
  7. Действительно, не ломайте. Погода хорошая, вот и задержка в мыслительном процессе.
     
  8. Не оценил шутку сразу, видимо, устал уже в тот момент времени. Но поскольку погода была прекрасной, то в выходные пришлось пойти на реализацию нездорового образа жизни на фоне уходящего в закат солнца. Пропахнув дымом, мне открылось, что раз уж и есть газ новичок, и даже коктель "Novichok", то что же нам мешает сделать устройство Novichok Inside You Yet с голосовым сопровождением, запатентовать и продавать его в места, где люди ведут нездоровый образ жизни. Риторический вопрос: кто со мной готов вложиться в проект?
    Как и все, не читал правила форума, но для загоревшихся идеей сообщаю - это стёб.

    По факту ситуация такая: процесс идёт. Подождите, пожалуйста, результатов. Про сковородки тоже будет, правда, в рамках NDA.
     
  9. ЛИРИЧЕСКОЕ ОТСТУПЛЕНИЕ. ПРОДОЛЖЕНИЕ.
    Надеюсь, правильно вставил ссылку, на форумах я не частый гость.
    http://forum.amperka.ru/threads/Датчики-серии-mq-и-библиотека-troykamq.16377/page-2#post-184239
    Напомню, что "ЛИРИЧЕСКОЕ ОТСТУПЛЕНИЕ" было к теме "МАТМОДЕЛЬ ppm.".
    "Возникновение ощущения, становление ощущения, далее постановка вопроса, и наконец, постановка задачи" - вплоть до непосредственно постановки задачи очень иррациональный процесс.
    Мы попробовали в уме всё взорвать на тестовом стенде, взятым в аренду за непомерные для задачи деньги. Потом попробывали понюхать газ (природный газ не пахнет, пахнут добавки). Потом возвать к иноземным недополукандидатам (или как там у них ПиЭшДи), занимающимися чёрт знает чем. У меня в загашнике ещё много чего есть (собрал в свободном доступе 13 более-менее вменяемых описаний). И всё бестолку.
    И что же нам делать?
    Руководствоваться советами об относительности измерений всего на свете? Прямым измерением линейкой "мереют другое место". Боюсь, так мы ни до чего не добъёмся.
    По сути дела, даже с ртутным градусником -100...+100 мы ничего не добъёмся. Такой градусник не существует в природе, но мы можем его себе представить, в основном, при самом эффективном способе измерения температуры тела человека.
    Ровно также мы вынуждены представить модели в Datasheet, находящиеся в свободном доступе, как Решение.
    А что ещё делать? Datasheet на такие датчики есть. Другого ничего нет. Т.е. компромисное решение нас гонит только к тому, что есть. Хотелось бы иного, но другого нет! Тяжёлый выбор для здравого смысла, с одной стороны, с другой мы помним, что лучшее - враг хорошего.
    Скрипя последними извилинами, зубами и прочими сусалами следует пойти на компромис компромисов.
    Вывод: Datasheet на MQ-4 принять в качестве Решения для модели.
    КОНЕЦ ЛИРИЧЕСКОГО ОТСТУПЛЕНИЯ.
     
  10. Ошибся с темой про "МАТМОДЕЛЬ ppm.", скорее, нужно было бы в другой последовательности, но раз уж так получилось, то уж бог с ним.

    МАТМОДЕЛЬ ppm. Она пока подождёт. Определяем Ro.
    Природа подгоняет и отопительный сезон уже начался. Пока нет возможности углубиться в матмодель так, чтобы показать товар лицом. Но измерить напряжение на аналоговом входе можно уже сейчас. А потом, на основании любой из моделей определения ppm, это самое ppm определить как результат математической функции.
    Поэтому, получив китайские поделки, решил сделать стенд для определения Ro из типовых описанных моделей для датчика MQ-4.
    Цель - зафиксировать и в дальнейшем установить приемлемое для расчётов значение Ro.
    Состав стенда (Чюдо-юдо):
    - ARDUINO UNO;
    - NoName считыватель SD-карт;
    - аналоговый датчик KY-013;
    - NoName цифровой датчик влажности и температуры на основе DHT-11;
    - датчик природного газа MQ-4 от производителя;
    - пищалка для красоты.
    Чудо-юдо.png
    1. SD-карта. Нашёл типовое решение. Смотрел библиотеку - уж очень много для меня. Париться не стал, использовал что есть. Поразило использование памяти контроллера. Думаю, если использовать карту для реальных проектов, то придётся всё переработать. Но пока типовое решение это плюс, в основном в связи с тем, что Чюдо-юдо планируется отправить в свободное плавание без компьютера на даче. А в случае отключения электричества, остаётся надежда на то, что библиотека и сама файловая система FAT32 справятся с погрешностями реальной жизни.
    2. Датчик KY-013. Выглядит жутковато, но обалдеть как понравился скоростью реакции. Пробовал калибровать и изменять напряжение питания. При +5в всё ок: ноль, 16, 24 и 32 градуса цельсия совпадают со значениями комнатного термометра в пределах +/- 0.5 град. цельсия. Это в пределах погрешности, что вполне устраивает. Ноль градусов делал изо льда - работает, зараза, даже обёрнутый в пищевую плёнку.
    Для программы на ARDUINO использовал типовое решение, которое можно найти где угодно. Функции Thermister придал тип int, думаю потом пригодится.
    3. Датчик DHT-11. По началу хотел и пробовал реализовать в чистом виде код для 1-Wire, дабы сократить получение данных и самому разобраться. В итоге не получилось: данные получались только один раз после сброса контроллера, а потом датчик уходил в аут. Думаю, что-то напутал с таймингами, хотя, вроде, по Datasheet для NoName-датчика всё должно было бы быть Ок. В итоге остановился на библиотеке для DHT-11 и ARDUINO UNO от источника arduino.cc.
    4. Для датчика MQ-4 остановился пока исключительно на первичных данных АЦП.
    Код (C++):

    #include <SPI.h>
    #include <SD.h>
    #include <DHT.h>
    #define SD_PIN 4 // VCC - +5v, MISO - D12, MOSI - D11, SCK - D13,  собственно CS - 4
    char CurrentFileName[8] = {'A','A','A','.','c','v','s'};

    #define ANALOG_TEMP_PIN 0 // A0 - установлен как вход для аналогового датчика KY-013: S=GND, середина - +5в, "-" - это сигнал на А0; такой вот бестолковый
    DHT dht; //Объект DHT
    #define DHT_PIN 2 //2-1 пин для цифрового датчика

    #define PIN_MQ4  A1 // A1 - устанавливаем для датчика MQ-4, его подключаем по схеме с общим питанием

    #define CHECK_TIMES 10000 //Время проверки датчиков по-умолчению в мс
    unsigned long Check_Sensor_Time = CHECK_TIMES; // устанавливаем значение для временного диапазона по-умолчанию
    boolean Needs_Check_Sensoros = false; // Статус необходимости снятия показаний с датчиков


    void setup() {
      pinMode(9, OUTPUT); //9-ый цифровой порт задействован под пищалку
      beep(50);  beep(50);  beep(50); // Сигнал включения
      //Работа с файлами.
      pinMode(10, OUTPUT); // Этот пин обязательно должен быть определен как OUTPUT - из Итернетов.
      if (!SD.begin(SD_PIN)){ return; } // Вызовом включаем SD - модуль. Нет карты, писать нечего. В бесконечный аут, пока датчик бесконечно нагревается.
      NewFileName();  // Новое имя файла с данными, если ранее питание было когда-то отключено, а оно было когда-то отключено :).
      //Конец работы с файлами.
      dht.setup(DHT_PIN); // DHT-11 подключен к порту 2
    }

    void loop() {
      float CurrentTemperature;
      unsigned int Uadc;
      String DataMessage; // Наверное, можно было избежать, но лень.
      CheckTimeSensors();
      if (Needs_Check_Sensoros==true){
        //выполняем что задумано в цикле
        CurrentTemperature = Thermister(ANALOG_TEMP_PIN)/10.0; //температура в Цельсиях
        Uadc = GetUadc(PIN_MQ4);

        //DHT датчик в процессе формирования данных
        delay(dht.getMinimumSamplingPeriod());
        float humidity = dht.getHumidity();
        float temperature = dht.getTemperature();
        String DHT_Status = dht.getStatusString();

       
        //создание строки файла с данными
        DataMessage+=String(CurrentTemperature);
        DataMessage+=", ";
        DataMessage+=String(Uadc);
        DataMessage+=", ";
        DataMessage+=DHT_Status;
        DataMessage+=", ";
        DataMessage+=String(humidity);
        DataMessage+=", ";
        DataMessage+=String(temperature);
        DataMessage+=", ";

        //запись данных в текущий файл с данными
        File CurrentFile = SD.open(CurrentFileName, FILE_WRITE); //Создаём новый файл для записи и пишем туда.
        CurrentFile.print(DataMessage); CurrentFile.println(millis()); CurrentFile.close();
       
        Needs_Check_Sensoros = false; //устанавливаем пропуски по достижении следующего периода сбора данных
      }
     
    //-----------------------------------------------------------------------------------------------------------
    }

    void CheckTimeSensors(){
      // Здесь проверяется начало следующего периода измерений, если он наступил, то устанавливается глобальная переменная Needs_Check_Sensoros = true
      unsigned long MyMS = millis();
      if (MyMS >= Check_Sensor_Time){
          Needs_Check_Sensoros = true;
          // логичнее было бы Check_Sensor_Time += CHECK_TIMES, но так нивелируется маловероятный переход через 0 типа unsigned long по истечении ~50 дней
          Check_Sensor_Time = MyMS+CHECK_TIMES;
        }
    }
    void beep(unsigned int delayms)
    {//пищалка - стырено с интернетов
      analogWrite(9, 20);
      delay(delayms);
      analogWrite(9, 0);
      delay(delayms);        
    }
    int Thermister(int MyPin)
    {
      //получение температуры в Цельсиях - стырено с интернета
      float Temp; // Переменная для расчетов
      int TempInt; // Тип int
      float AnalogPinValue=map(analogRead(MyPin), 0, 1023, 1023, 0); //Это термистор, у которого сопротивление возрастает с ростом температуры, инвертируем. Можно использовать unsigned int.
      Temp = log(((10240000/AnalogPinValue) - 10000));
      Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );
      Temp = 10*(Temp - 273.15);// Convert Kelvin to Celcius
      TempInt=int(Temp);
      return TempInt;
    }
    void NewFileName(){
      //создаём новое имя файла с данными после кадого отключения электричества
        boolean NewFileNameGenereted = false;
        // 15625 вариантов странной последовательности нам хватит.
        CurrentFileName [0] = random(65,90); CurrentFileName [1] = random(65,90); CurrentFileName [2] = random(65,90);
        do{
            if (SD.exists(CurrentFileName)){
              CurrentFileName [0] = random(65,90); CurrentFileName [1] = random(65,90); CurrentFileName [2] = random(65,90);
            }
            else
            {
              NewFileNameGenereted = true;
              //Пишем лог в list.txt
              File ListFiles = SD.open("List.txt", FILE_WRITE);
              ListFiles.println(CurrentFileName);
              ListFiles.close();
            }
         }  while (!NewFileNameGenereted);
    }
    unsigned int GetUadc(int MyPin){
      return analogRead(MyPin);
    }
    В целом по Чуду-юду: практика показала большую инертность датчика DHT-11, которая доходит до 5 минут, после выноса Чуда-юда из холодильного отделения. В этот момент образуется конденсат, не дающий адекватных измерений влажности. У других датчиков тоже есть инертность, в том числе и у KY-013. Правда, связываю это с местоположением датчика и влиянием окружающего, по-своему инертного пространства из картона. Да и у MQ-4 тоже есть инертность, в основном, при падении концентрации измеряемых значений. Если помните, уважаемые господа-товарищи, я ранее писал о том, что не уделятся должное внимание физике процесса измерений показаний дачиков (тех или иных), а очень зря.

    Пока варганил Чудо-юдо из рук, можно сказать, утекли данные приработки MQ-4, поэтому не могу подтвердить цифрами. Посему предлагаю поверить в следующее:
    - данные АЦП из 500-х значений в той же среде упали до 300-х значений;
    - данные "попугаев" ppm в матмодели от производителя из значений 200-100-х ppm упали до 30-50 ppm в той же среде.
    Хотите верьте, хотите нет, но мой предыдущий тезис
    скорее подтверждён, чем нет.

    В связи с инертностью, требуется разумное время на задержку для получения данных. По факту думаю поставить 10 или 30 минут. "Размерности" ресурсов файловой системы должно хватить. По результату когда-нибудь отпишусь.
     
  11. parovoZZ

    parovoZZ Гуру

    Для датчиков серии mq необходимо 48 часов прокалки.
     
  12. Да, забыл, смысла нет, но это так, для критиков. Поменял.
    ДОБАВЛЕНО: не тот код вставил, поторопился, но суть без изменений.
     
  13. DetSimen

    DetSimen Guest

    Ты такой адикалон не пей больше.
     
  14. Чтение.jpg
    Доношу мысль по поводу действий в тех обстоятельствах, которые есть. Противоречий логических не вижу. Другим может быть полезно.
    Никаких комментариев по сути дела, кроме ошибок с градусником и определением float для компилятора, нет.
     
    parovoZZ нравится это.
  15. Здравствуйте товарищи!
    Чудо-юдо из картона отработало неделю. Включено было в 16:00, выключено в 13:00 через неделю.
    За это время было 3 отключения электричества, поэтому, с учётом дискретности измерений заданных раз в полчаса, по истечении каждого этого получаса, получили окончание работы в 6 утра. Ну, в принципе, нормально. В наличии максимумы с утра и вечером, другие данные тоже есть.
    Отдаю, можно сказать, свои персональные данные даром.
    Uadc.png
    T_and_H.png
    http://forum.amperka.ru/attachments/Измерения-zip.14257/?temp_hash=56c6a94f36e114809ec35e79dfd6cdd0
    Что из всего этого следует? Мы ведь еще не вышли из незавершённой темы "МАТМОДЕЛЬ ppm". Верю в силу разума и модели, создаваемые в уме, но лучше еще иметь факты. В связи с чем сообщаю сам себе и вам, уважаемые друзья, пока только одну радостную новость про мат.модель в комнатных условиях: (см. картинку).
    Можно забить.png

    ДОБАВЛЕНО 03.03.2019: Правильную модель смотреть здесь: http://forum.amperka.ru/threads/Датчики-серии-mq-и-библиотека-troykamq.16377/page-5#post-209152
     

    Вложения:

    Последнее редактирование: 3 мар 2019
  16. parovoZZ

    parovoZZ Гуру

    Так а в осязаемых числах будет итог? Напряжение с АЦП мне ни о чем не говорит. Также нет показаний с поверенного измерителя - где гарантия того, что эти показания достоверны? Может просто шум?
     
  17. Разумеется, по мере возможности, будет итог - к этому стремлюсь. Надо ждать и мне и Вам, когда будет такая возможность.
    Ценники по поверенным приборам я оставлял выше:
    Их нет. Работаем с тем, что есть. Вот, скажем, я был в одном городе (в московском регионе это деревня, в Сибири это город), так вот там мостовые из дерева. Прям как на картине про боярыню Морозову. На мой вопрос почему, мне ответили, что что так эффективнее (грузы доставляют по Енисею). Лес фактически даром, мостовые обновляют. Ещё, как пример, один выходец из Донбасса говорил, что у немцев крутые технологии и они используют газ, а мы, типа, убогий уголь. Я поправил его, объяснив, что Инженер должен думать разумно: зачем газ, когда в 20 км находится шахта?

    Гарантия только одна - моё честное слово и прикреплённые к посту файлы. Шум имеет другие характеристики.
     
  18. parovoZZ

    parovoZZ Гуру

    Россия покупает газ в Казахстане для близлежащих районов, ибо свой газ доставлять дороже. Вот так вот.

    Тогда ценность таких измерений равна нулю. Как вариант - вынести на улицу и подержать там с месяцок. Если такой же график будет - можно смело нести в помойку.
    Я хочу прикупить инфракрасный датчик CO2 для механической вентиляции - пока изучаю отзывы, потому как он реально дорогой. Но есть у него плюс - он не имеет срока хранения.
     
  19. Значит там тоже работают Инженеры. Читал в СМИ, что там отказались от трубопровода и возят сжиженный газ автомобилями с газгольдерами.
    Время тоже ресурс. Ну не ждать же 1,5-2 года с объёмом одинаковых стендов количеством штук 100 до публикации следующего поста? Кроме того, мы для датчика MQ-4, как Вы справделиво заметили, имеем только показания АЦП, а не результат расчетов мат. модели. Там логарифмическая зависимость и на графике показания в ppm будут более сглажеными.
    На улицу выносить не надо!!! Иначе единственный вывод от работы стенда будет бесполезен.
    Потом, хочу обратить внимание на фактическое раскрытие персональных данных: локальные максимумы отражают деятельность человека в помещении: например, в среду было открыто окно, завтрак и ужин по расписанию. Всё фиксировалось и на бумажке тоже. Кто как дышит и, уж, простите, пукает, видно. Датчик MQ-4 от Амперки реально работает! Безопасность публикации персональных данных должна быть такой, чтобы риски от воровства, например, были так велики, что нивелировали бы возможный доход от противоправных действий. Например, в нашей стране, после объявления сверху всеобщей автоматизации легко можно найти данные о показаниях счётчиков во многоквартирных домах. Простой парсер, который я могу написать и передать вообще за задаром, может сообщить злоумышленникам о поведении жителей, преимущественно в летний период. В зимний тоже. Но это, так, к слову, о персональных данных. Будучи уверенным в том, что риски выше, чем потенциальных доход, смело публикую данные в ранее прикреплённых файлах. Они соответствуют действительности, им можно верить.
     
  20. parovoZZ

    parovoZZ Гуру

    Так датчик голый или на модуле? На правильном модуле в ООС операционника должен стоять NTC термистор для компенсации температурных флуктуаций.