Arduino Pro Mini + токовый датчик GY-712 ведут контроль перегорания ламп

    Всем привет. Хочу поделится одним из проектом созданным на базе Arduino.
    Для меня работа с токовыми датчиками GY-712 была впервые. Перед созданием этого проекта создавался тестовый блок.

    image

    Если вам уже интересно, тогда продолжим.

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

    Было тех задание:
    1) Лампы(фонари) 50-65ВТ 220В переменка или 24В постоянка;
    2) Индикация работы лампы (светодиод на панели);
    3) Звуковая индикация перегоревшей лампы.

    Решение было принято такое:
    Используем токовый датчик GY-712 5А

    image

    По причинам:
    1) Меряет переменный и постоянный ток;
    2) Легко подключается к контроллеру;
    3) Компактный;
    4) Недорогой при заказе с Китая.

    Давайте посмотрим на схему:

    image

    Как работает программа.

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

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

    Вот простая схема без контроля тумблера, просто световая индикация. Это на тот случай кому просто нужен будет световой индикатор нагрузки – но тогда можно просто намотать на ферритовое кольцо провода(сделать трансформатор тока) и подключить светодиодик.

    image

    Фото тестов:

    image

    image

    image

    Видео теста:



    Пример программы для одного модуля. IDE 1.5.2
    float srab = 0.650;

    const int currentPin1 = 0; // Аналоговый вход с датчика тока

    const unsigned long sampleTime = 100000UL; // sample over 100ms, it is an exact number of cycles for both 50Hz and 60Hz mains
    const unsigned long numSamples = 250UL; // choose the number of samples to divide sampleTime exactly, but low enough for the ADC to keep up
    const unsigned long sampleInterval = sampleTime/numSamples; // the sampling interval, must be longer than then ADC conversion time
    //const int adc_zero = 512; // relative digital zero of the arudino input from ACS712 (could make this a variable and auto-adjust it)
    int adc_zero1; //Переменная автоматической калибровки

    float first;

    void setup()
    {
    pinMode(13, OUTPUT);// Пин индикатора
    pinMode(12, OUTPUT); // пин звука
    pinMode(2, INPUT); // пин входа реле (тумблер)


    digitalWrite(13, LOW);
    digitalWrite(12, LOW);

    while(digitalRead(2)==0 ) { // Если включен тумблер то выдать звуковой и световой сиглак пока не отключат для возможности калибровки
    tone(12,2000,500);
    digitalWrite(13, HIGH);
    delay(500);
    digitalWrite(13, LOW);
    delay(500);
    }


    tone(12,1500,100); // Звук старта калибровки
    delay(180);
    tone(12,1500,100);
    delay(180);
    tone(12,1500,100);


    //Serial.begin(9600);
    adc_zero1 = determineVQ(currentPin1); //Quiscent output voltage — the average voltage ACS712 shows with no load (0 A)
    digitalWrite(13, HIGH);
    tone(12,1000,100);

    delay(150);
    digitalWrite(13, LOW);


    }

    void loop(){
    // Serial.print(«ACS712@A2_1:»);Serial.print(readCurrent(currentPin1,adc_zero1),3);Serial.println(" mA");
    delay(300);

    if(digitalRead(2)==0){ // Если включен тумблер то:
    if (readCurrent(currentPin1,adc_zero1)> srab) // Если ток больше указанного порга сработки то:
    {
    digitalWrite(13, HIGH); // Включить индикатор

    }
    else // Иначе
    {
    if(digitalRead(2)==0){ //Если тумблер все еще включен то:
    digitalWrite(13, LOW); // Погасить индикатор
    tone(12,2000,500); } // и выдать звуковой сигнал
    }

    }
    else { // Иначе
    digitalWrite(13, LOW); // // Погасить индикатор
    }
    //-------------------------------------------------------------------------------------------------------------------------------------------------

    delay(250);

    }

    int determineVQ(int PIN) {
    //Serial.print(«estimating avg. quiscent voltage:»);
    long VQ = 0;
    //read 5000 samples to stabilise value
    for (int i=0; i<5000; i++) {
    VQ += analogRead(PIN);
    delay(1);//depends on sampling (on filter capacitor), can be 1/80000 (80kHz) max.
    }
    VQ /= 5000;
    //Serial.print(map(VQ, 0, 1023, 0, 5000));Serial.println(" mV");
    return int(VQ);
    }

    float readCurrent(int PIN, int adc_zero0)
    {
    unsigned long currentAcc = 0;
    unsigned int count = 0;
    unsigned long prevMicros = micros() — sampleInterval;
    while (count < numSamples)
    {
    if (micros() — prevMicros >= sampleInterval)
    {
    int adc_raw = analogRead(PIN) — adc_zero0;
    currentAcc += (unsigned long)(adc_raw * adc_raw);
    ++count;
    prevMicros += sampleInterval;
    }
    }
    float rms = sqrt((float)currentAcc/(float)numSamples) * (75.7576 / 1024.0);
    return rms;
    //Serial.println(rms);

    }

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 58

      +5
      Даташит на датчик
      Типовая схема включения


      Кратко — датчик тока работает на эффекте Холла. Связь измерительной части с сетью высокого напряжения отсутствует (заявлено, что напряжение пробоя изоляции — более двух киловольт).
        0
        Правильно :)
          +1
          А есть такие же, но с перламутровыми пуговицами ампер эдак на 200?
            +2
            Есть, например ACS758.
              0
              Как альтернатива есть такие штуки, которые называются Split Core Transformer или Current Transformer. Они устроены ещё проще — трансформатор, которые крепится на силовой провод. И как раз бывают на достаточно большие токи, есть на 200 ампер и даже выше.
                0
                Собственно, это обыкновенный трансформатор тока, который давным давно применяется для всевозможных измерений (в том числе и в обыкновенных счетчиках).

                Но моточные изделия могут проигрывать по цене полупроводниковым микросхемам.
                  +1
                  Cуть проблемы в том, что мне надо измерять постоянный ток в достаточно толстом кабеле, и желательно без разрывов, поэтому отсекаются всякие трансформаторы токов и шунты, с которых можно снимать падение напряжения. Остаются датчики Холла, что-нибудть такое:
                  image
                  Так устроены, в частности, токовые клещи для измерения постоянного тока.
                  Вот и интересует такой датчик, легко доставаемый и не по цене токовых клещей :)
                    0
                    Формально, датчики тока от Allegro, приведенные здесь, так и устроены.
                    Датчик Холла можно раздобыть отдельно, остается только нацепить магнитопровод.
                      0
                      Читал о таком варианте но реализовать быстро и компактно не получилось бы… но идея мне эта очень нравится, а датчик можно по пробивать взять такой
                      Они есть компактные и чувствительность можно регулировать, да бы не мерить поле земли :)))
                        0
                        Проблема таких датчиков на постоянном токе это эффект намагничивания. Когда после длительного воздействия постоянного тока его снять датчик всё ещё будет показывать наличие некоторого тока… его надо размагничивать.
                        Разве что использовать датчик без применения магнитопровода.
                        Впрочем, если вам не нужно измерять столь большие токи а только выявлять их наличие, можно обойтись обычным герконом.
                          0
                          да но в геркона тоже есть вариант торможения из-за плавного розмагничивания сердечника, или без него?
                            0
                            на токах в 200А геркон срабатывает и без магнитопровода, нечему намагничиваться. Даже надо будет загрублять чувствительность — 4-5витков провода вокруг геркона и он уже срабатывает при токе 200мА.
                              0
                              гм… надо попробывать… у меня есть советские реле герконовые… но там катушки приличные… но что бы несколько витков током… попробую…
                          +1
                          Трансформаторы тока как раз можно нацепить на провод не разрывая его.
                          Например, вот этот на 1500 Ампер с внутренним диаметром 10 см.

                            0
                            ну да… а постоянный ток?
                              +1
                              Тоже есть в виде Split Core. Вроде полное название Split Core DC Current Transducer. Там есть комбинированные решения с датчиком Холла и т.п. Выглядят и цепляются так же — на провод без разрыва.
                                0
                                Это актуально для реально больших токов, или там где инфраструктура уже существует и провод курочить не хочется или нет возможности.
                                В остальном же, разницы нет принципиальной. Темболее что одновременно с контролем осуществляется коммутация — провод всеравно разорван. Если не брать в расчет именно готовые платки с датчиком тока, а взять микросхему на которой он устроен то это решение будет компактней трансформатора тока, которому кстати надо будет еще и нагрузочный резистор.
                                  0
                                  Это верно. Но речь было именно о том, что бы провод не рвать. Для меня это тоже актуально, так как я устанавливал это на существующие силовые линии (от простого контроля включения стиральной машины до учёта потребления электричества небольшого жилого дома). Обычно устанавливается в силовом шкафу, где места достаточно.
                                  Во многих трансформаторах баластный резистор уже есть внутри (обычно на маленьких очень часто), поэтому это не самая большая проблема, на мой взгляд.
                    0
                    Интересно, какова практическая задача? Ну, т.е., где это используется?
                      +2
                      На судах для сигнальных огней.
                        0
                        Я, может, неправильно выразился. Имелась в виду именно эта реализация.
                          +1
                          1-я пробная версия для судна, последующие будут более проф. собраны и обновленным прог обеспечением :)
                            0
                            Агаа. Спасибо.
                          0
                          да правильно.
                        +2
                        Показалось что первую фразу в видео сказал kreosan 0_о
                          0
                          :)) не я лично записывал есть запись с видео в оригинале :)))))))
                            0
                            Просто интонация схожая, да и голос в какой-то мене…
                          +1
                          Контроль это хорошо, но уж если целью ставится повышение надёжности работы, а не контроль ради контроля, то я бы порекомендовал организовать вместо данного устройства или вместе с ним плавное включение ламп, либо где это возможно заменить их на качественные светодиодные у которых ресурс несравнимо больше ресурса ламп накаливания.
                            0
                            Согласен с Вами. Но текущей задачи не стояло, так как это судно и работает генератор, Обычно электричество там в избытке и работает только одна(или несколько ламп) с 7-ми.
                            • UFO just landed and posted this here
                                0
                                Все реально, 7-ми канальный димер не проблема сделать, к примеру как и к паяльнику:



                                Или как мой первый сложный проект:



                                Было бы техзадание… было бы решение.
                                0
                                Дело не в том что светодиодные мало кушают, важно что они на порядок надёжнее если конечно куплены лампы хорошего качества. Что касается ламп накаливания то они любят перегорать в момент включения, когда у них холодная нить имеющая пониженное сопротивление. Если ставить банальный ограничитель тока то срок жизни и их надёжность можно повысить в разы.
                                  0
                                  с этим я вполне согласен
                              +1
                              Мне кажется, или корректнее называть датчик тока — ACS712?
                                0
                                Я называл по надписи на плате :) Так обычно все гуглят, и более понятно что ищешь… :)
                                0
                                Как вариант, например, для люстры, иметь один датчик тока и отлавливать изменения тока при включенном питании. Тогда одна из нескольких ламп перегоревших уменьшит общий ток и это можно отловить…
                                  0
                                  В случае с внедрением экономок и светодиодок, датчик тока надо делать на 1А что бы нормально вылавливать нагрузку, да и затраты на 1 люстру будут не маленькие… лампочка дешевле… разве что как Тестовый вариант для будущих разработок :))
                                  +1
                                  Расскажите подробней, как вы измеряете переменный ток? Ведь на выходе датчика переменное напряжение.
                                    0
                                    использую уже созданный пример, который вычисляет среднее значение из наколенных за некий период. К примеру есть состояние «0». = 512 -значение аналогового входа. все что выше то ток в одну сторону, все что ниже то в другую. если суммировать отдельно в одну сторону то можно вычислить средний результат — так как в переменном токе он идет чаще как синус(увеличивается и уменьшается). Для точности подсчетов и спецциффике нагрузки нужно вычислять в оба направления иначе лампочка 220В подключена через диод(как пример) может не показать на датчике ничего… Ну как то так… надеюсь доступно :)))
                                      0
                                      наоборот, если суммировать переменный ток в результате получишь ноль, а лампочка через диод даст ненулевую сумму. Для этого надо суммировать модуль отклонения от нуля или определять амплитуду тока.
                                        0
                                        Я же писал, если суммировать отдельную сторону, к примеру только вверх(+ полуволну = значения выше 512 и до 1023), а нижняя полуволна(-) = ниже 512 до 0) :-))
                                          +1
                                          Там так и сделано, только довольно странно — Сначала делается 5000 измерений на частоте не менее кГц (что очень странно, это получается, в течении пяти секунд значения усредняются), после чего они все суммируются и результат делится на 5000.

                                          А потом из этого усредненного результата вычисляется RMS.

                                          Правильно и логично было бы задействовать механизм прерываний — настроить частоту выборки (не менее 100Гц) и написать обработчик по сигналу «АЦП измерение закончил», а в этом обработчике уже считать честный RMS.
                                            0
                                            Вполне возможно… скажем для более точного прибора как Ватметр или Вольтметр, но для данного случая, этого примера достаточно было. Стабильность в показаниях была.
                                              +1
                                              Только вот показания были скажем так… далеки от реальности. Получился просто индикатор «ненулевой ток есть». Ни о каком числовом значении тока здесь и речи быть не может.

                                                0
                                                не понял, в данном проекте?
                                                  +1
                                                  В исходнике, который размещен в конце статьи под спойлером «Пример программы для одного модуля. IDE 1.5.2».
                                                    0
                                                    если сливать в порт то можно увидеть показания в мили амперах. только я не калибровал, а просто анализировал их
                                                      0
                                                      Если судить по тому, как производятся измерения, эти показания не соответствуют реальности. Есть четкое определение того, что является действующим значением силы переменного тока — это RMS.

                                                      Чтобы это RMS получить, нужно в течении времени, кратного длительности периода колебаний, получать отсчеты с частотой, превышающей удвоенную максимальную частоту, {избитая аудиофилами теорема Котельникова}, затем отсчеты возводить в квадрат, суммировать, делить на N и так далее.

                                                      В представленной же программе зачем-то делается усреднение по мгновенным значениям, причем в течении аж пяти секунд, с непонятно какой частотой (из-за delay и прочего там не ровно килогерц, а непонятно сколько) Математически это не эквивалентно представленному определению, отсюда вывод — программа работает неверно.
                                                        0
                                                        так глубоко я не вникал… :)) Но за информацию спасибо.
                                                          0
                                                          За 5 секунд ошибка даже в один период это менее 1% погрешности.
                                                          Не эквивалентно но очень близко при определенных условиях(ЛН например, обогреватель). И проще в реализации.
                                                            0
                                                            Не убужден, что лапша из таймеров проще уже готового в контроллере механизма с прерываниями.
                                                              +1
                                                              мы ушли не туда…
                                                              5 сек это при старте проги… проверяется по стабильности питания и плавающие(скажем так) токи, но потом основная прога работает быстро… там в начале задан параметр и подпрограмма сканирует период времени и считает…
                                                              Посмотрите еще раз видео… тот момент когда нажимаем на кнопку разрыва цепи… там буквально секунда до сработки.
                                                                0
                                                                Да, этот момент я уже выяснил. Тяжело раскапывать исходник, когда подсветка не соответствует синтаксису (допишите <source lang="cpp">) и отсутствует форматирование.

                                                                Итого: значение получается верным, за исключением джиттера, который имеет место и связан с отказом от прерываний и эмуляцией их работы «на коленке».
                                          0
                                          На выходе датчика напряжение униполярное, нулю соответствует напряжение половины напряжения питания.
                                            0
                                            Верно… поэтому надо обрабатывать в оба направления или в одно, в зависимости от поставленной задачи
                                          0
                                          Кстати вопрос на смекалку, Все видели видео? а картинку на заставке? (и первая в статье) видите разницу монтажа? Есть мысли по этому поводу? :)
                                            0
                                            Может кому поможет:
                                              +1
                                              про переменный ток бы еще

                                            Only users with full accounts can post comments. Log in, please.