Зависимое включение нагрузки

Тема в разделе "Arduino & Shields", создана пользователем absolut, 26 мар 2016.

  1. absolut

    absolut Нерд

    Попросил меня друг сделать ему такое устройство что бы при включении электролобзика автоматически включался пылесос, а при выключении лобзика пылесос выключался с задержкой в 5 секунд. Я полез в интеренет, нашел кучу схем. Но они мне показались не интересными и я решил делать на микроконтроллере и датчике тока. И вот что получилось.
     

    Вложения:

  2. absolut

    absolut Нерд

    Код (C++):
    float current=0;
    const int currentPin = A0;
    int k=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 = 510;  // relative digital zero of the arudino input from ACS712 (could make this a variable and auto-adjust it)
    #define LEDPIN 13        // Вывод светодиода

    void setup()
    {
    Serial.begin(9600);
    pinMode(LEDPIN, OUTPUT);                      // Вывод светодиода в режим вывода
    }

    void loop()
    {
      CurrentSense();
      if(current!=0) {    
        digitalWrite(LEDPIN, HIGH);       // ... иначе включить светодиод,
        delay(5000);
      }
      else {
        digitalWrite(LEDPIN, LOW);        // Выключить светодиод, если current равен 0...
      }
    }


    void CurrentSense()
    {
    unsigned long currentAcc = 0;
    unsigned int count = 0;
    unsigned long prevMicros = micros() - sampleInterval ;
    while (count < numSamples)
    {
       if (micros() - prevMicros >= sampleInterval)
       {
         int adc_raw = analogRead(currentPin) - adc_zero;
         currentAcc += (unsigned long)(adc_raw * adc_raw);
         ++count;
         prevMicros += sampleInterval;
       }
    }
    float rms = sqrt((float)currentAcc/(float)numSamples) * (50 / 1024.0);
    rms=rms-0.10;
    if (rms<0.20)
    {
    rms=0;
    }

    current=rms;
    }
     

    Вложения:

    Последнее редактирование: 26 фев 2018
    9xA59kK и Megakoteyka нравится это.
  3. absolut

    absolut Нерд

    Получилось вот такое устройство
     

    Вложения:

  4. Megakoteyka

    Megakoteyka Оракул Модератор

    В следующий раз попробуйте сделать заливку пустых областей на плате. Чем меньше фольги травится, тем дольше будет работать раствор. Посмотрите, как сделаны фабричные платы. Можно заливку сделать земляным полигоном.
     
  5. 9xA59kK

    9xA59kK Гик

    Этот раствор одноразовый. А чтобы быстрее, надо подогревать и пузырьковую ванночку в придачу.
     
    Последнее редактирование: 26 мар 2016
  6. absolut

    absolut Нерд

    Я хотел сделать заливку, но побоялся ведь на плате дорожки с высоким и низким напряжением. По этому решил не экономить на персульфате аммония. Раствор не одноразовый на нем развел около 6 плат. Просто первые травились минут 15, а эта около двух часов. Блок питания использовал от старой нокиевской зарядки.
     
  7. Hmuriy

    Hmuriy Нуб

    Хотел повторить ваше устройство но при компиляции скетча вылезает ошибка:

    sketch_feb22a:22: error: continue statement not within a loop
    continue;
    ^
    exit status 1
    continue statement not within a loop

    Увы, в прошивках я не разбираюсь.
     
  8. DetSimen

    DetSimen Guest

    absolut, это твой скетч некорректен. В С нет такой конструкции
    Код (C++):
      if(current!=0) {    
        digitalWrite(LEDPIN, HIGH);       // ... иначе включить светодиод,
        delay(5000);
        continue;        //  -->  ЭТО ТОЛЬКО В ЦИКЛАХ ДОПУСТИМО
      }
      else {
        digitalWrite(LEDPIN, LOW);        // Выключить светодиод, если current равен 0...
      }
     
    цикла нет. Ну или я не вижу
     
  9. absolut

    absolut Нерд

    Я не спорю. Я не програмист. Я взял пример работы с датчиком. Добавил условие в код. И у меня заработало. И заработало корректно. Именно так как мне надо. Если вы шарите в С, то помогите.
     
  10. mcureenab

    mcureenab Гуру

    Вы опубликовали код который даже не компилируется.
    Просто опубликуйте скетч, который у вас работает.
     
  11. Airbus

    Airbus Радиохулиган Модератор

    Так он говорит что работает?Или врет?
    Зачем там вообще какая либо библиотека?
     
  12. absolut

    absolut Нерд

    Скетч
     

    Вложения:

    • misha.ino
      Размер файла:
      1,5 КБ
      Просмотров:
      439
  13. b707

    b707 Гуру

    И нафига выкладывать что-то в сеть, если вы не программист и даже не разбираетесь, как этот код работает?
     
  14. Hmuriy

    Hmuriy Нуб

    absolut большое спасибо за помощь и свое устройство! Удалил функцию continue и все заработало, боялся что будут ложные срабатывания у инструмента с подсветкой, но все работает отлично. Единственное, при первой подаче питания на плату происходит кратковременное срабатывание реле, переназначил пин, вроде все как надо.