При подключенном замке гардиан, посылаются лишние сигналы.
- Войдите на сайт для отправки комментариев
Здравствуйте, недавно понадобилось подключить єм замок гардиан к системе ajax, и так как мои знания заканчиваются на лабораторных института 10 летней давности, то сам проект может выглядеть довольно странно, не правильно итд. Так как замок и целую коробку всякой всячины я уже купил ) то придется делать до конца и понимать по ходу. Проблема заключается в следующем:
У меня есть nodemcu v3 он собирает сигналы с ajax реле путем разрыва GND и контакта D1 через транзистор и на основе этого открывает или закрывает замок сменой полярности на проводах, через два пятиконтактных реле которые включаются через транзисторы, тк своего питания не хватит чтобы реле открылось. Вот все бы хорошо, и все вроде работает, но прочитав что для корректной работы замок должен посылать сигнал от 0,3-1с я понял что отправлял всего 50мс, и хотелось чтобы по правильному все было. Увеличив время до 300мс, замок стал открыватся и закрыватся пока не выключишь с ajax, а в логах я увидел что отрабатывает все тот же D1 вход с ajax, но сигнал никто не посылал... если отключить замок, а релюшки оставить то в логах все нормально.
Замок немного модернизировал добавил геркон, чтобы знать состояния и просто так сигналы не слать.
Вот схема(надеюсь я правильно ее составил с макета), а так же фото самого макета, ну и код.
Надеюсь на вашу помощ, тк сам я уже не понимаю...
#include <stdio.h> #include "lockFunctions.h" //https://randomnerdtutorials.com/esp8266-pinout-reference-gpios/ int InputAjaxPin = D1; int InputLockPin = D2; int InputButtonPin = D4; int OutputLockLedPin = D6; int OutputCtrlLedPin = D3; int OutputCtrlPinBlue = D7; int OutputCtrlPinGreen = D8; int InputAjaxDigitalValue; int InputLockDigitalValue; int InputButtonDigitalValue; bool SignalAjaxDuplicatePreventFlag = true; bool SignalButtonDuplicatePreventFlag = true; bool ButtonToggle = false; int FirstTimeFlag = true; bool time_stop = false; unsigned long time_cycle, time_temp = 0; void setup() { // Initializing serial port for debugging purposes Serial.begin(115200); pinMode(OutputCtrlLedPin, OUTPUT); pinMode(OutputCtrlPinBlue, OUTPUT); pinMode(OutputCtrlPinGreen, OUTPUT); pinMode(OutputLockLedPin, OUTPUT); pinMode(InputAjaxPin, INPUT_PULLUP); pinMode(InputLockPin, INPUT_PULLUP); pinMode(InputButtonPin, INPUT_PULLUP); Serial.println(); } void loop() { InputAjaxDigitalValue = (digitalRead(InputAjaxPin) == 1) ? 0 : 1; InputButtonDigitalValue = (digitalRead(InputButtonPin) == 1) ? 0 : 1; InputLockDigitalValue = digitalRead(InputLockPin); //analogWrite(OutputCtrlPinGreen,0); //analogWrite(OutputCtrlPinBlue,0); if (FirstTimeFlag == true){ FirstTimeFlag = false; //if lock locked and ajax is locked if (InputLockDigitalValue == 1 && InputAjaxDigitalValue == 1){ SignalAjaxDuplicatePreventFlag = true; analogWrite(OutputCtrlLedPin,1024); //DO nothing bc all locked } //if lock unlocked but ajax is locked if (InputLockDigitalValue == 0 && InputAjaxDigitalValue == 1){ SignalAjaxDuplicatePreventFlag = true; analogWrite(OutputCtrlLedPin,1024); //send singnal to lock lock(OutputCtrlPinBlue, OutputCtrlPinGreen, time_cycle, time_stop); } //if lock unlocked and ajax is unlocked if (InputLockDigitalValue == 0 && InputAjaxDigitalValue == 0){ SignalAjaxDuplicatePreventFlag = false; analogWrite(OutputCtrlLedPin,0); //DO nothing bc all unlocked } //if lock locked and ajax is unlocked if (InputLockDigitalValue == 1 && InputAjaxDigitalValue == 0){ SignalAjaxDuplicatePreventFlag = false; analogWrite(OutputCtrlLedPin,0); //send singnal to unlock unlock(OutputCtrlPinBlue, OutputCtrlPinGreen, time_cycle, time_stop); } Serial.print("FIRST RUN TIME, LOCK INIT STATE : "); Serial.print(InputLockDigitalValue); Serial.println(); Serial.println("------------------"); Serial.println(); } else { time_temp = millis(); //instead delay if (time_stop){ if ((time_temp-time_cycle) >= 100){ time_stop = false; analogWrite(OutputCtrlPinGreen,0); analogWrite(OutputCtrlPinBlue,0); Serial.println(); Serial.print(time_temp-time_cycle); Serial.print("===="); Serial.println(); } } //ON AJAX UNLOCK if (InputAjaxDigitalValue == 0 && SignalAjaxDuplicatePreventFlag == true){ SignalAjaxDuplicatePreventFlag = false; Serial.println(); Serial.println("---------AJAX UNLOCK:---------"); Serial.print(InputAjaxDigitalValue); Serial.println(); //IF LOCK LOCKED analogWrite(OutputCtrlLedPin,0); if (InputLockDigitalValue == 1){ //send lock singnal to unlock it unlock(OutputCtrlPinBlue, OutputCtrlPinGreen, time_cycle, time_stop); } } //ON AJAX LOCK if (InputAjaxDigitalValue == 1 && SignalAjaxDuplicatePreventFlag == false){ SignalAjaxDuplicatePreventFlag = true; Serial.println(); Serial.println("---------AJAX LOCK:---------"); Serial.print(InputAjaxDigitalValue); Serial.println(); //IF LOCK UNLOCKED analogWrite(OutputCtrlLedPin,1024); if (InputLockDigitalValue == 0){ //send lock singnal to lock it lock(OutputCtrlPinBlue, OutputCtrlPinGreen, time_cycle, time_stop); } } //ON BUTTON DOWN if (InputButtonDigitalValue == 1 && SignalButtonDuplicatePreventFlag == true){ SignalButtonDuplicatePreventFlag = false; Serial.println(); Serial.println("---------BUT---------"); Serial.println(); if (InputLockDigitalValue == 1){ //send lock singnal to unlock it unlock(OutputCtrlPinBlue, OutputCtrlPinGreen, time_cycle, time_stop); }else { lock(OutputCtrlPinBlue, OutputCtrlPinGreen, time_cycle, time_stop); } } //ON BUTTON UP if (InputButtonDigitalValue == 0 && SignalButtonDuplicatePreventFlag == false){ SignalButtonDuplicatePreventFlag = true; } } //IF LOCK LOCKED if (InputLockDigitalValue == 1){ analogWrite(OutputLockLedPin,1024); } //IF LOCK UNLOCKED else { analogWrite(OutputLockLedPin,0); } }
Функция лок в дргом файле
/* To unlock - blue - zero To lock - blue - +12v */ void lock(int OutputCtrlPinBlue, int OutputCtrlPinGreen, unsigned long &time_cycle, bool &time_stop) { analogWrite(OutputCtrlPinBlue,1024); analogWrite(OutputCtrlPinGreen,0); Serial.println(); Serial.println("---------LOCK---------"); Serial.println(); time_cycle = millis(); time_stop = true; //delay(300); //default ctrl signal 0 till ajax send signal //analogWrite(OutputCtrlPinBlue,0); //analogWrite(OutputCtrlPinGreen,0); } void unlock(int OutputCtrlPinBlue, int OutputCtrlPinGreen, unsigned long &time_cycle, bool &time_stop) { analogWrite(OutputCtrlPinBlue,0); analogWrite(OutputCtrlPinGreen,1024); Serial.println(); Serial.println("---------UNLOCK---------"); Serial.println(); time_cycle = millis(); time_stop = true; //delay(300); //default ctrl signal 0 till ajax send signal //analogWrite(OutputCtrlPinGreen,0); //analogWrite(OutputCtrlPinBlue,0); }
Поправил транзисторы на схеме