Контроллер вентилятора для ванной дубль 3.

Тема в разделе "Глядите, что я сделал", создана пользователем fixedip, 6 сен 2016.

  1. alexon1978

    alexon1978 Нуб

    Прошу помощи. Собрал устройство управления http://ardumini.ru/proekty/primenenie-arduino-v-vannoy.html
    Скетч прилагается. Загружаю его в Arduino leonardo но ничего не работает. В чем проблема? Скетч компилируется и прошивается. Все датчики и плата проверены отдельно. Все исправны.
     

    Вложения:

  2. Airbus

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

    Рассказать как правильно вставить Код?
     
  3. alexon1978

    alexon1978 Нуб

    Дак код я прошиваю в Arduino но он не работает. Может ли быть проблема в том, что у автора другая версия платы?
     
  4. fixedip

    fixedip Гик

    Добрый день.
    Попробуйте вставить вывод сообщений в компорт на важных этапах программы( запрос с фоторезистора, датчик температуры/влажности и включение реле) и тогда поймете в чем у Вас проблема.
    Возможно не состыковка по портам (предназночение)
     
  5. alexon1978

    alexon1978 Нуб

    Проблема в том что я не силен в программировании Arduino. Отдельно я пробовал загружать скетчи для фотоэлемента и датчика температуры. Все работает. Вывод в порт идет. Как выглядит код для вывода в порт который нужно вставить?
     
  6. fixedip

    fixedip Гик

  7. alexon1978

    alexon1978 Нуб

    Вот код. В нем вроде уже есть вывод
    /*
    Board int.0 int.1 int.2 int.3 int.4 int.5
    Uno, Ethernet 2 3
    Mega2560 2 3 21 20 19 18
    Leonardo 3 2 0 1
    Due (any pin, more info http://arduino.cc/en/Reference/AttachInterrupt)
    This example, as difference to the other, make use of the new method acquireAndWait()
    */

    #include <idDHT11.h>

    int idDHT11pin = 2; //Digital pin for comunications
    int idDHT11intNumber = 0; //interrupt number (must be the one that use the previus defined pin (see table above)

    //declaration
    void dht11_wrapper(); // must be declared before the lib initialization

    // Lib instantiate
    idDHT11 DHT11(idDHT11pin,idDHT11intNumber,dht11_wrapper);

    int hidr = 0;
    int temp = 0;
    unsigned long period = 60000*20;
    unsigned long time_dif = 0;
    int LightPin = 12;
    int RedLedPin = 11;
    int GreenLedPin = 10;
    int VentPin = 7;
    boolean vent = 0;
    boolean Hidrvent = 0;
    boolean Lightvent = 0;
    boolean Light = 0;
    boolean PrevLight = 0;
    boolean NextLight = 0;
    boolean bool1 = 0;
    boolean bool2 = 0;
    unsigned long curMillis = 0;
    unsigned long LightcurMillis = 0;
    unsigned long LightVentMillis = 0;

    void setup()
    {
    Serial.begin(9600);
    Serial.println("idDHT11 Example program");
    Serial.print("LIB version: ");
    Serial.println(IDDHT11LIB_VERSION);
    Serial.println("---------------");
    pinMode(VentPin, OUTPUT);
    pinMode(RedLedPin, OUTPUT);
    pinMode(GreenLedPin, OUTPUT);
    pinMode(LightPin, INPUT);
    }
    // This wrapper is in charge of calling
    // mus be defined like this for the lib work
    void dht11_wrapper() {
    DHT11.isrCallback();
    }
    void loop()
    {
    DHT11.acquireAndWait();
    hidr = DHT11.getHumidity();
    NextLight = !digitalRead(LightPin);

    if (NextLight == 1)
    {
    vent = 0;
    Lightvent = 0;
    if (NextLight != PrevLight) PrevLight = NextLight;
    }
    else
    {
    if (PrevLight == 1)
    {
    time_dif = millis() - LightcurMillis;
    if (vent == 0)
    {
    vent = 1;
    LightcurMillis = millis();
    Lightvent = 1;
    //if (NextLight != PrevLight) PrevLight = NextLight;
    }
    else if ((millis() - LightcurMillis) > period)
    {
    vent = 0;
    Lightvent = 0;
    if (NextLight != PrevLight) PrevLight = NextLight;
    }

    }
    //if (NextLight != PrevLight) PrevLight = NextLight;


    if (!Lightvent && (hidr >= 40) )
    {
    vent = 1;
    Hidrvent = 1;
    }
    else if (!Lightvent && (hidr < 37))
    {
    vent = 0;
    Hidrvent = 0;
    }
    }

    digitalWrite(VentPin, vent);
    digitalWrite(GreenLedPin, Lightvent);
    digitalWrite(RedLedPin, Hidrvent);



    Serial.print("\nRetrieving information from sensor: ");
    Serial.print("Read sensor: ");
    //delay(100);

    Serial.print("Humidity (%): ");
    Serial.println(DHT11.getHumidity(), 2);

    Serial.print("Temperature (oC): ");
    Serial.println(DHT11.getCelsius(), 2);

    Serial.print("T: ");
    Serial.println(vent);
    Serial.print("Lightvent: ");
    Serial.println(Lightvent);
    Serial.print("Hidrvent: ");
    Serial.println(Hidrvent);
    Serial.print("NextLight: ");
    Serial.println(NextLight);
    Serial.print("PrevLight: ");
    Serial.println(PrevLight);
    Serial.print("time_dif: ");
    Serial.println(time_dif);
    Serial.print("LightcurMillis: ");
    Serial.println(LightcurMillis);
    Serial.print("Millis: ");
    Serial.println(millis());

    delay(1000);
    }
     
  8. alexon1978

    alexon1978 Нуб

    У автора плата Arduino Pro mini, а у меня плата Arduino Leonardo pro micro. Может что то править нужно в коде? Выводы 12, 11, 10 я перекинул на соответствующие.
     
  9. parovoZZ

    parovoZZ Гуру

    Любой код работает. Проблема в том, что код работает по правилам МК, а не по твоим. Про твои правила он ничего не знает.
     
  10. alexon1978

    alexon1978 Нуб

    Я свои правила и не навязываю. А задаю вопрос. Будет ли скетч созданный для платы Arduino Pro mini работать без доработки на Arduino Leonardo pro micro.
     
  11. parovoZZ

    parovoZZ Гуру

    работать будет, если нет специфических инструкций
     
  12. fixedip

    fixedip Гик

  13. DavidRip

    DavidRip Нуб

    Правильно. Но ток, за счет индуктивности, не падает до нуля и сглаживает провал.

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