Подключение концевика к ардуино

Тема в разделе "Arduino & Shields", создана пользователем Zodiak, 14 мар 2017.

  1. Zodiak

    Zodiak Нуб

    неа, нет такого
     
  2. mcureenab

    mcureenab Гуру



    Выкладывайте весь код и кнопку <> не забудьте!!!
     
  3. Tomasina

    Tomasina Сушитель лампочек Модератор

    приведите код, на словах нифига непонятно.
     
  4. Zodiak

    Zodiak Нуб

    А выше, чем не код?
     
  5. Tomasina

    Tomasina Сушитель лампочек Модератор

    ЭТО?
    нет, конечно. Код должен быть читаемым, иначе и смотреть желания не возникает.
     
  6. mcureenab

    mcureenab Гуру

    это заблуждение.
     
  7. mcureenab

    mcureenab Гуру

    Тут трижды один и тот же пин 5 читается.

    Код (C++):
    DatV=(map(((analogRead(5))), (0), (1023), (100), (0)));
    DatS=(map(((analogRead(5))), (0), (1023), (10000), (0)));
    DatT=(map(((analogRead(5))), (0), (1023), (90), (-50)));
    В какие переменные он читается, это еще один вопрос.

    Код (C++):
    #define DatV A1 //датчик влажности почвы

    int DatV;

    DatV=(map(((analogRead(5))), (0), (1023), (100), (0)));

    // И что в итоге?

    analogRead(DatV)

     
     
  8. Zodiak

    Zodiak Нуб


    Ну и успехов
     
  9. Zodiak

    Zodiak Нуб

    Почему, он ведь промасштабировал значения с датчик и показывает температуру
     
  10. mcureenab

    mcureenab Гуру

    Температура с датчика света?

    Код (C++):
    #define DatS A5 //датчик света
    DatT=(map(((analogRead(5))), (0), (1023), (90), (-50)));
     
  11. Zodiak

    Zodiak Нуб


    Однако через отладочный порт условие верно t > 35...
    Ок изменю проверю.
    Вы еще говорили ранее о

    conc_o = digitalRead(????

    conc_z = digitalRead(????

    Это для чего нужно и куда его внести
     
  12. mcureenab

    mcureenab Гуру

    Код (C++):

    #define DAT_V A1 //датчик влажности почвы
    #define DAT_S A5 //датчик света
    #define DAT_T A3 //датчик температуры
    #define DAT_D 12 //датчик уровня воды(дождя)
    #define poliv 11 // полив
    #define rele_o 10 //открытие двери
    #define rele_z 9 //закрытие двери
    #define nabor 8 //набор воды для полива
    #define conc_o 7 //концевик открытия двери
    #define conc_z 6 //концевик закрытия двери
    #define conc 5 //вход концевиков

    void setup()
    {

    Serial.begin(9600); //Запускаем отладочный порт
    pinMode(DAT_V,INPUT);
    pinMode(DAT_S,INPUT);
    pinMode(DAT_T,INPUT);
    pinMode(DAT_D,INPUT); // тут вероятно нужен или INPUT_PULLUP или зануляющий резистор на входе
    pinMode(conc,OUTPUT);
    pinMode(poliv,OUTPUT);
    pinMode(rele_o,OUTPUT);
    pinMode(rele_z,OUTPUT);
    pinMode(nabor,OUTPUT);
    pinMode(conc_o,INPUT); // тут нужен или INPUT_PULLUP или зануляющий резистор на входе
    pinMode(conc_z,INPUT); // тут нужен или INPUT_PULLUP или зануляющий резистор на входе
    }

    void loop(){

    const int DatV(map(((analogRead(DAT_V))), (0), (1023), (100), (0)));
    const int DatS(map(((analogRead(DAT_S))), (0), (1023), (10000), (0)));
    const int DatT(map(((analogRead(DAT_T))), (0), (1023), (90), (-50)));

    Serial.print("Vlaga: "); //Выводим значение влажности в отладочный порт
    Serial.print(DatV);
    Serial.println(" %");

    Serial.print(" Svet: "); //Выводим значение влажности в отладочный порт
    Serial.print(DatS);
    Serial.println(" lum");
    delay(1000); // Опрашиваем датчик раз в 1 сек

    Serial.print(" Temp: "); //Выводим значение температуры в отладочный порт
    Serial.print(DatT);
    Serial.println(" C");
    Serial.println( );
    Serial.println(" *** ");
    Serial.println( );

    //ВКЛЮЧЕНИЕ ПОЛИВА

    if (DatV < 20 && DatS < 20) // условие срабатывания
    {
    digitalWrite(poliv,HIGH); // включение помпы
    delay(50000); //на 5 минут
    digitalWrite(poliv,LOW); //помпа выключена
    delay(50000); //на 5 минут, что стоим? кого ждем?
    }
    else
    {
    digitalWrite(poliv,LOW); //помпа выключена
    }



    ///ДАТЧИК ТЕМПЕРАТУРЫ(ОТКРЫТИЕ ДВЕРИ)


    if (DatT > 35 && digitalRead(conc_o)==LOW)//условие:если темперетура больше 35 С то...
    {
    digitalWrite(rele_z,LOW);//отключается реле закрытие двери
    digitalWrite(conc,HIGH);//подачана концевик двери включена
    digitalWrite(rele_o,HIGH);//включается реле открытие двери
    }
    else
    {
    digitalWrite(rele_o,LOW);//реле открытия двери не активно
    }
    if ( DatT < 25 && digitalRead(conc_z)==LOW)//условие:если темперетура меньше 25 С то...
    {
    digitalWrite(rele_o,LOW);//выключается реле открытия двери
    digitalWrite(conc,HIGH);//подачана концевик двери включена
    digitalWrite(rele_z,HIGH);//включается реле закрытия двери

    // и все бросили. дверь вынесло!
    }
    else
    {
    digitalWrite(rele_z,LOW);//реле закрытия двери не активно
    }



    ///НАПОЛНЕНИЕ ВОДОЙ

    if( DatS > 800 && digitalRead(DAT_D)==LOW)//условие:если света достаточно и датчик дождя сухой
    {
    digitalWrite(nabor,HIGH);//включить потоп!
    }
    else
    {
    digitalWrite(nabor,HIGH);//выключить наполнение, когда???
    }

    delay(1000); // Опрашиваем датчик раз в 1 сек

    }
     
     
  13. mcureenab

    mcureenab Гуру

    Я поправил опрос датчиков. Но с такой логикой исполнения вас ждет сломаная дверь и потоп. Лучше закажите проект.
     
  14. mcureenab

    mcureenab Гуру

    delay(50000);//на 5 минут

    это не 5 минут.
     
  15. Zodiak

    Zodiak Нуб

    50 сек, знаю там коменты некоторые не верные
     
  16. mcureenab

    mcureenab Гуру

    вы запускаете мотор закрывать дверь и тут срабатывает помпа, которая замораживает работу на > 50 сек. как мотор узнает что концевик уже нажат и сломан и дверь сломана?
     
  17. Zodiak

    Zodiak Нуб


    заказывать не хочу, хочу сам разобраться и в последствии делать изменения

    вот смотрите

    if ( DatT < 25 && digitalRead(conc_z)==LOW)//условие:если темперетура меньше 25 С то...
    {
    digitalWrite(rele_o,LOW);//выключается реле открытия двери
    digitalWrite(conc,HIGH);//подачана концевик двери включена
    digitalWrite(rele_z,HIGH);//включается реле закрытия двери

    // и все бросили. дверь вынесло!
    }
    else
    {
    digitalWrite(rele_z,LOW);//реле закрытия двери не активно
    }

    почему должно вынести дверь... условие ведь температура И концевик без сигнала...срабатывает реле и дверь закрыватся пока не сработает концевик и значение на нем поменяется на HIGH и значит условие дальше не выпоняется и реле отключается или я не прав...
     
  18. mcureenab

    mcureenab Гуру

    Это только часть кода. А перед ним:
    Код (C++):
    //ВКЛЮЧЕНИЕ ПОЛИВА

    if (DatV < 20 && DatS < 20) // условие срабатывания
    {
    digitalWrite(poliv,HIGH); // включение помпы
    delay(50000); //на 5 минут
    digitalWrite(poliv,LOW); //помпа выключена
    delay(50000); //на 5 минут, что стоим? кого ждем?
    }
    else
    {
    digitalWrite(poliv,LOW); //помпа выключена
    }
     
    и общая пауза между циклами
    Код (C++):
    delay(1000); // Опрашиваем датчик раз в 1 сек
     
     
  19. Zodiak

    Zodiak Нуб

    верно, как-то не учел, задумывал, что полив будет осуществяться в темное вемя суток, а закрытие осуществлялось вечеромюююв смысле, что они не должнв пересекаться
     
    Последнее редактирование: 15 мар 2017
  20. mcureenab

    mcureenab Гуру

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