нужна помощь с кодом!!

Тема в разделе "Arduino & Shields", создана пользователем Evgeny, 3 июн 2013.

  1. Evgeny

    Evgeny Нерд

    описание следующее: есть 2 пары клапанов! которые переключают 2 типа жидкости!! при нагреве одной жидкости до определенной температуры и срабатывания индукционного датчика происходит открытие клапанов! почему пары клапанов? - они работают на слив! (клапаны все нормально закрытые - других не нашел) написал скетч (так как чайник , учился в ВИКИ и пытался писать аналогию) к сожалению не могу доделать код так как запутался!!! проблема в том, что в схеме есть кнопки переключения режимов, я их не знаю как прописать!!!

    #define TEMP_SENSOR_PIN A0 // Датчик температуры
    #define MOTION_SENSOR_PIN 2 // датчик положения рейки

    #define RELAY_SV_PIN 6 //реле подачи
    #define RELAY_DV_PIN 7 //реле слив
    #define BUTTON_A_PIN 8 //кнопка переключения режимов Автомат
    #define BUTTON_H_PIN 9 //кнопка переключения режимов Ручной
    #define SCREEN_A_PIN 10 //табло Автомат
    #define SCREEN_D_PIN 11 //табло Д
    #define SCREEN_R_PIN 12 //табло Р

    #define TEMP_LEVEL_THRESHOLD 687 // показания термометра при температуре 55 градусов
    #define MOTION_TIMEOUT 3 // задержка на 3 секунды, сигнал с датчика положения рейки
    #define TEMP_TIMEOUT 5 // задержка на 5 секунд, сигнал с датчика температуры при появлении значения 687


    void setup()
    {
    pinMode(TEMP_SENSOR_PIN, INPUT);
    pinMode(MOTION_SENSOR_PIN, INPUT);
    pinMode(RELAY_SV_PIN, OUTPUT);
    pinMode(RELAY_DV_PIN, OUTPUT);
    pinMode(BUTTON_A_PIN , INPUT);
    pinMode(BUTTON_H_PIN , INPUT);
    pinMode(SCREEN_A_PIN , OUTPUT);
    pinMode(SCREEN_D_PIN , OUTPUT);
    pinMode(SCREEN_R_PIN , OUTPUT);
    }

    void loop()
    {
    int tempLevel = analogRead(TEMP_SENSOR_PIN);
    bool motionDetected = digitalRead(MOTION_SENSOR_PIN); // датчик положения рейки
    bool tooClose = tempLevel > TEMP_LEVEL_THRESHOLD; // если температура ниже нужной, клапаны на р и слив д закрыты
    bool closetRequired = tooClose && motionDetected; // клапаны не откроются, пока что не будет выполнены 2 условия(тмпература и датчик положения рейки)
    digitalWrite(MOTION_SENSOR_PIN, closetRequired ? HIGH : LOW); //


    if (tooClose && motionDetected) {
    digitalWrite(RELAY_DV_PIN, HIGH);
    delay(20000); //
    } else {
    digitalWrite(RELAY_DV_PIN, LOW);
    }
    if (!digitalRead(MOTION_SENSOR_PIN)) {
    digitalWrite(RELAY_SV_PIN, HIGH);
    } else {
    digitalWrite(RELAY_SV_PIN, LOW);
    }
    bool dieselFuel = !digitalRead(RELAY_SV_PIN); // режим - д

    if (dieselFuel) {
    digitalWrite(RELAY_DV_PIN, HIGH);
    delay(20000);
    bool ScreenAEnabled = digitalRead(MOTION_SENSOR_PIN);
    if (ScreenAEnabled) {
    digitalWrite(SCREEN_A_PIN, HIGH);
    }
    } else {
    digitalWrite(RELAY_DV_PIN, LOW);

    }
    }
     

    Вложения:

  2. roggedhorse

    roggedhorse Гик

    Судя по схеме у вас слаботочные реле подключены одним контактом на пины 5 и 6, а вторым на +5 (а должно быть на минус (он же GND))
    А пины 7-10 включены в индикатор.
    Кнопки включены в пины 2 и 3

    В вашем же коде объявлено все иначе

    Код (C):
    #define RELAY_SV_PIN     6   //реле подачи
    #define RELAY_DV_PIN     7   //реле слив
    #define BUTTON_A_PIN     8   //кнопка переключения режимов Автомат
    #define BUTTON_H_PIN     9   //кнопка переключения режимов Ручной
    #define SCREEN_A_PIN     10  //табло Автомат
    #define SCREEN_D_PIN     11  //табло Д
    #define SCREEN_R_PIN     12  //табло Р
     
    Думаю, сначала нужно понять как работает схема и привести объявления в соответствие со схемой

    P.S. !!
     
  3. Evgeny

    Evgeny Нерд

  4. roggedhorse

    roggedhorse Гик

    Вот смотрите, Evgeny

    В вашей схеме есть исполнительные механизмы. Это слаботочные реле. Они стоят в цепи катушек 12-вольтовых реле.
    Каждое реле управляется.
    Если один контакт реле подключить к минусу пятивольтового блока питания (обычно его еще называют GND), а другой контакт подключить к плюсу блока питания, то реле включится.
    Если в разрыв плюсового провода между реле и блоком питания вставить выключатель, то с его помощью вы сможете включать и выключать реле вручную по собственному усмотрению.
    А теперь замените выключатель на Arduino Uno. Если убрать выключатель из схемы, у вас будет 2 свободных конца провода. Один - от блока питания. Второй - от реле. Свободный конец провода от пятивольтового блока питания подключите к разъему питания Arduino, а свободный конец от реле подключите к контакту Digital 5 ардуино.
    Теперь роль выключателя выполняет Ардуино. И вы можете программно управлять реле:

    в функции setup нужно объявить
    #define RELAY_SV_PIN 5 // соответствие контакта ардуино элементу вашей системы

    pinMode(RELAY_SV_PIN, OUTPUT); // режим работы контакта ардуино. OUTPUT - на выход. То есть "будем управлять чем-либо"

    и затем написать
    digitalWrite(RELAY_SV_PIN, LOW); // если вы хотите выключить реле
    и
    digitalWrite(RELAY_SV_PIN, HIGH);// если хотите включить
     
    nailxx нравится это.
  5. Evgeny

    Evgeny Нерд

    спасибо ГРОМАДНОЕ! сделаю как Вы сказали! о результатах доложу!
     
  6. Evgeny

    Evgeny Нерд

  7. roggedhorse

    roggedhorse Гик

    Что за элементы Q1, Q2 и S2 ? Каково их назначение ?
    Какая маркировка на реле К2 ?
     
  8. Evgeny

    Evgeny Нерд

    S2 - индуктивный датчик
    Q1, Q2 - кнопки
    К2- реле 5 В
     
  9. roggedhorse

    roggedhorse Гик

    Евгений, вы ведь просите помощи. Почему бы вникнув в вопросы не постараться ответить на них ?
     
  10. Evgeny

    Evgeny Нерд

    простите, был не прав!!! S2- индуктивный датчик, срабатывает от приближения металлической рейки., К2- реле HLS8L - DC5V- S-C
    Одна кнопка выполняет функцию переключение режимов - ручной/автоматический
    Вторая кнопка выполняет переключение подачи одной жидкости на другую при ручном режиме!
    еще раз извиняюсь!
     
  11. roggedhorse

    roggedhorse Гик

    Документация на реле file:///C:/Users/Roggedhorse/Downloads/HLS8L_SPEC.pdf
    у вас тип L - high sensitive
    сопротивление обмотки 70 Ом
    ток через обмотку 70 мА

    Согласно документации на микроконтроллер ATMega 328
    27.1 Absolute Maximum Ratings
    DC Current per I/O Pin = 40.0 mA

    То есть рабочий ток на ноге микроконтроллера превышает максимально допустимый почти вдвое.

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

    Рекомендую вам пойти от простого к сложному:
    - Полностью разберите всю схему
    - Найдите реле с током не более 40 мА. А еще лучше примените твердотельное реле или транзистор
    - Подключите к микроконтроллеру одно единственное реле и научите вашу программу включать/выключать (переключать) его
    - Потом только собирайте схему дальше, постепенно усложняя ее
     
    Последнее редактирование: 13 мар 2014
  12. Evgeny

    Evgeny Нерд

    ну даже не знаю как Вас благодарить! от всего миокарда спасибо БОЛЬШОЕ! сделаю как Вы сказали! извините если что не так!!!