please give me some solutions my project.
so this is interlock door acces control using arduino uno. using relay module LOW trigger, Reed Switch doorsensor, Fingerprint standalone, diode 1n40007.
so this the pcb wiring of my project. the problem is why if i testing with 1 diode connected with FP each the door, validation from FP still okei. but if i testing with 2 diode 2 FP to one line pin arduino, serial monitor read finger validation validation where I haven't done finger. and if i use diode mode multimeter to diode that connected NC FP, EMLOCK switching without FP. give me some suggestion
this my schematic
const int reedPin1 = 8; // Sensor pintu 1 (NC)
const int reedPin2 = 9; // Sensor pintu 2 (NC)
const int fingerPin1 = 4; // Fingerprint 1 (NC COM via diode+MOSFET)
const int fingerPin2 = 5; // Fingerprint 2
const int relayPin1 = 2; // Relay pintu 1
const int relayPin2 = 3; // Relay pintu 2
unsigned long door1OpenTime = 0;
unsigned long door2OpenTime = 0;
const unsigned long relayOpenDuration = 3000; // Durasi relay ON (ms)
void setup() {
Serial.begin(9600);
pinMode(reedPin1, INPUT_PULLUP);
pinMode(reedPin2, INPUT_PULLUP);
pinMode(fingerPin1, INPUT_PULLUP);
pinMode(fingerPin2, INPUT_PULLUP);
pinMode(relayPin1, OUTPUT);
pinMode(relayPin2, OUTPUT);
digitalWrite(relayPin1, LOW);
digitalWrite(relayPin2, LOW);
}
void loop() {
unsigned long currentMillis = millis();
// Handle pintu 1 dan pintu 2
handleDoor(reedPin1, fingerPin1, relayPin1, reedPin2, door1OpenTime);
handleDoor(reedPin2, fingerPin2, relayPin2, reedPin1, door2OpenTime);
// Interlock safety: jika dua pintu terbuka bersamaan → matikan relay
bool door1Open = digitalRead(reedPin1) == HIGH;
bool door2Open = digitalRead(reedPin2) == HIGH;
if (door1Open && door2Open) {
Serial.println("❌ INTERLOCK VIOLATION: Kedua pintu terbuka!");
digitalWrite(relayPin1, LOW);
digitalWrite(relayPin2, LOW);
}
}
// ======== FUNCTION UNTUK HANDLE TIAP PINTU ========
void handleDoor(int doorSensorPin, int fingerPin, int relayPin,
int otherDoorSensorPin, unsigned long &lastOpenTime) {
unsigned long currentMillis = millis();
bool doorOpen = digitalRead(doorSensorPin) == HIGH;
bool otherDoorOpen = digitalRead(otherDoorSensorPin) == HIGH;
bool fingerValid = digitalRead(fingerPin) == HIGH; // HIGH = fingerprint valid
// Jika fingerprint valid dan pintu lain TERTUTUP, buka relay
if (fingerValid && !otherDoorOpen) {
Serial.print("✅ Finger valid di pin ");
Serial.print(fingerPin);
Serial.println(" → Buka pintu");
digitalWrite(relayPin, HIGH);
lastOpenTime = currentMillis;
}
// Matikan relay setelah durasi
if (currentMillis - lastOpenTime > relayOpenDuration) {
digitalWrite(relayPin, LOW);
}
}
here my interlock code