описание следующее: есть 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); } }
Судя по схеме у вас слаботочные реле подключены одним контактом на пины 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. !!
Вот смотрите, 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);// если хотите включить
простите, был не прав!!! S2- индуктивный датчик, срабатывает от приближения металлической рейки., К2- реле HLS8L - DC5V- S-C Одна кнопка выполняет функцию переключение режимов - ручной/автоматический Вторая кнопка выполняет переключение подачи одной жидкости на другую при ручном режиме! еще раз извиняюсь!
Документация на реле 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 мА. А еще лучше примените твердотельное реле или транзистор - Подключите к микроконтроллеру одно единственное реле и научите вашу программу включать/выключать (переключать) его - Потом только собирайте схему дальше, постепенно усложняя ее
ну даже не знаю как Вас благодарить! от всего миокарда спасибо БОЛЬШОЕ! сделаю как Вы сказали! извините если что не так!!!