Hallo
Schon vor längerer Zeit habe ich mir mithilfe eines Arduinos ein Automatisches Türschloss für mein Zimmer gebaut.
Die Schaltung hat 4 Taster zum Aufsperren und 1 Taster zum anläuten und einen "Code" damit man von außen rein kann. Am Türschloss ist ein Servo befestigt der über ein Relay geschalten wird. 2 LED's sind noch verbaut als Signalisierung, wenn außen wer "anläutet".
Es handelt sich um ein nicht originales Arduino Board von Velleman (gekauft bei Conrad). Betrieben über den Strom Eingang (der runde Stecker am Board) und mit einem 230V auf 5V Trafo.
LED's sind rote 5mm.
Relay ist ein SainSmart 2-CH 5V 2 Kanäle Relais.
Das ganze ist zusammengelötet auf einer Lochrasterplatine und zu den Tastern mit CAT7 Netzwerkkabeln im Zimmer verlegt. Zu 3 Tastern und den LED's ist das Kabel ca. 7m lang und zu den anderen Tastern und zum Servo 3m. Die Abschirmung ist geerdet.
Schaltplan ist im Anhang und Code kommt jetzt.
#include <Servo.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>
const int buttonPin1 = 11;
const int buttonPin2 = 7;
const int ledPin = 5;
const int RelaisPin = 3;
const int RelaisPin2 = 2;
int buttonPushCounter1 = 0;
int buttonState1 = 0;
int lastButtonState1 = 0;
int buttonPushCounter2 = 0;
int buttonState2 = 0;
int lastButtonState2 = 0;
int i=0;
int x=2;
int buttonCounter = 0 ;
Servo servo;
void button1(); //Funktionen
void button2();
void LED();
void servo_decide();
void servo_open();
void servo_close();
void code();
void setup()
{
servo.attach(9);
pinMode(buttonPin1, INPUT); //_PULLUP
pinMode(buttonPin2, INPUT); //INPUT_PULLUP
pinMode(ledPin, OUTPUT);
pinMode(RelaisPin, OUTPUT);
pinMode(RelaisPin2, OUTPUT);
Serial.begin(9600);
digitalWrite(RelaisPin, LOW); //Servo macht Tür zu
digitalWrite(RelaisPin2, LOW);
delay(100);
servo.write(105);
delay(800);
digitalWrite(RelaisPin, HIGH);
digitalWrite(RelaisPin2, HIGH);
delay(200);
}
void loop()
{
button1();
button2();
LED();
if(buttonPushCounter1==1)
servo_decide();
if(buttonPushCounter2 > 3)
code();
}
void button1()
{
buttonState1 = digitalRead(buttonPin1);
if (buttonState1 != lastButtonState1)
{
if (buttonState1 == LOW)
buttonPushCounter1++;
}
lastButtonState1 = buttonState1;
}
void button2()
{
buttonState2 = digitalRead(buttonPin2);
if (buttonState2 != lastButtonState2)
{
if (buttonState2 == LOW)
buttonPushCounter2++;
}
lastButtonState2 = buttonState2;
}
void LED()
{
if(buttonPushCounter2 != 0)
{
digitalWrite(ledPin, HIGH);
}
else
{
digitalWrite(ledPin, LOW);
}
}
void servo_decide()
{
if(x==2)
servo_open();
else if(x==-2)
servo_close();
else
return;
}
void servo_open()
{
digitalWrite(RelaisPin, LOW); //Servo macht Tür zu
digitalWrite(RelaisPin2, LOW);
delay(100);
servo.write(25);
delay(800);
digitalWrite(RelaisPin, HIGH);
digitalWrite(RelaisPin2, HIGH);
delay(200);
digitalWrite(ledPin, HIGH); //Blinken
delay(200);
digitalWrite(ledPin, LOW);
delay(200);
digitalWrite(ledPin, HIGH);
delay(200);
digitalWrite(ledPin, LOW);
x=x*-1;
buttonPushCounter1=0;
buttonPushCounter2=0;
loop();
}
void servo_close()
{
digitalWrite(RelaisPin, LOW); //Servo macht Tür zu
digitalWrite(RelaisPin2, LOW);
delay(100);
servo.write(105);
delay(800);
digitalWrite(RelaisPin, HIGH);
digitalWrite(RelaisPin2, HIGH);
delay(200);
digitalWrite(ledPin, HIGH); //Blinken
delay(200);
digitalWrite(ledPin, LOW);
delay(200);
digitalWrite(ledPin, HIGH);
delay(200);
digitalWrite(ledPin, LOW);
x=x*-1;
buttonPushCounter1=0;
buttonPushCounter2=0;
}
void code()
{
while (digitalRead(buttonPin2) == ( HIGH ))
{
buttonCounter++;
delay( 100 );
}
if(buttonCounter > 23)
{
servo_decide();
}
else buttonCounter=0;
}
Der Code funktioniert so: Bei einmal drücken im Zimmer geht die Tür auf oder zu und bei einmal drücken von außen leuchten innen die LED's. Bei 3mal von außen drücken und dann 3s halten geht die Tür auch auf oder zu.
Und beim öffnen und schließen blinken die LED's kurz.
Nun zu meinem Problem: Da die Kabel ziemlich lang sind habe ich das Problem, dass wenn man vor meiner Zimmer Tür im Gang das Licht ein oder aus schaltet sich sich auch manchmal die Tür von meinem Zimmer öffnet.
Was ich schon alles versucht habe: von normalen Drähten auf das CAT7 Kabel gewechselt, die Abschirmung geerdet, die Taster über Pulldown zu schalten, dann über Pullup, dann mit unterschiedlichen Widerständen (1k, 2,2k, 10k), dann über internen Pullup.
Ich weiß nicht was ich sonst noch alles probieren soll. Daher bitte ich um Hilfe für mein Problem und hoffe das ich nichts vergessen habe zu erwähnen.
LG
Technische Daten.pdf (66.6 KB)