Banner Ausblenden
Kleines Logo

Willkommen auf PSI-Online

Alarmanlage

/*
Das zentrale Element für meine Alarmanlage ist ein Komponent mit 16 Tastern, die mit 8 Pins angesteuert werden.
Um zu erkennen, wann welcher Knopf gedrückt wird, gebe ich auf jede der vier Reihen einzeln Strom und lese dann aus, an welchem Pin der Strom ankommt. Somit wird ermittelt, welcher Taster gedrückt wurde.
In der Tabelle kann abgelesen werden, auf welche Reihe Strom gegeben werden muss und an welchem Pin
dieser ankommen muss. Damit wird ermittelt, welcher Taster gedrückt ist.(die Nummer ist die letzte Zahl von der toaster Variable)
Wenn man die richtige Tastenkompination drückt, leuchtet die grüne Lampe(LedG) und der Servo dreht sich. (Der Servo ist dafür gedacht,
einen schlüssel umzudrehen und die Tür ,an dem Raum für den die Alarmanlage gedacht ist, abzuschließen). Mit dem Feld S13 bringt man den Servo in
seine Ursprungsposition zurück.(abgeschlossene Tür) Mit dem Feld S9 mache ich jegliche Sensoren scharf, die einen Alarm auslösen sollen, wenn jemand den Raum betritt.
Das Display ist nur für die Benutzerfreundlichkeit gedacht.

S4 1/7        S8 1/6        S12 1/5        S16 1/8
S3 2/7        S7 2/6        S11 2/5        S15 2/8
S2 3/7        S6 3/6        S10 3/5        S14 3/8
S1 4/7        S5 4/&        S9  4/5        S13 4/8
Quelle aus der ich Teile entnommen habe, um das Display zu bedienen:
https://funduino.de/nr-19-i%c2%b2c-display


*/
#include // Wire Bibliothek einbinden
#include // Vorher hinzugefügte LiquidCrystal_I2C Bibliothek einbinden
#include   //Servo Bibliothek einbinden
Servo myservo;  
 int posopen = 0;       //Variablen für Werte und Pins werden festgelegt
 int posclosed = 180;
int trig = 14;
int echo = 15;
int buzzer =3;
int toaster1 =7;
int toaster2 =6;
int toaster3 =5;
int toaster4 =4;
int toaster5 =9;
int toaster6 =10;
int toaster7 =11;
int toaster8 =8;
int ledG = 13;
int ledH = 12;
int codeSchlussel = 0;
int enterit = 0;
int zeitSpanne = 0;
int distanz = 0;
int alarm = 0;
int sensorAn = 0;
LiquidCrystal_I2C lcd(0x27, 16, 2); //Hier wird festgelegt um was für einen Display es sich handelt.
void setup() {
  // put your setup code here, to run once:
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(buzzer, OUTPUT);
pinMode(toaster2, OUTPUT);
pinMode(toaster1, OUTPUT);
pinMode(toaster8, INPUT);
pinMode(ledG, OUTPUT);
pinMode(toaster7, INPUT);
pinMode(toaster6, INPUT);
pinMode(toaster5, INPUT);
pinMode(ledH, OUTPUT);
pinMode(toaster3, OUTPUT);
pinMode(toaster4, OUTPUT);
Serial.begin(9600);
  myservo.attach(2); //der Pin für den Servo wird fesgelegt
    lcd.init(); //Im Setup wird der LCD gestartet
    lcd.backlight(); //Hintergrundbeleuchtung einschalten
}

void loop() {
  // put your main code here, to run repeatedly:
  lcd.setCursor(0, 0);//Hier wird die Position des ersten Zeichens festgelegt. In diesem Fall bedeutet (0,0) das erste Zeichen in der ersten Zeile.
  lcd.print("Pin eingeben:");
 digitalWrite(trig, LOW); //der Ultraschallsensor wird ausgelesen und der Wert in cm umgerechnet
 delay(5);
 digitalWrite(trig, HIGH);
 delay(10);
 digitalWrite(trig, LOW);
 zeitSpanne = pulseIn(echo, HIGH);
 distanz = (zeitSpanne/2)*0.03432;
 Serial.println(distanz);
digitalWrite(ledG, LOW);
//erste Reihe Taster
digitalWrite(toaster1, HIGH);
if(digitalRead(toaster8) == HIGH){
  digitalWrite(ledH, HIGH);
  delay(2000);
  digitalWrite(ledH, LOW);
  codeSchlussel = 9; //die Variable codeschlussel wird auf neun gesetzt, damit egal welche Tasten anschließend
}                    //gedrückt werden, nicht der Wert 1234 raus kommt
if(digitalRead(toaster5)== HIGH){
  digitalWrite(ledG, HIGH);
  delay(500);
  digitalWrite(ledG, LOW);
  codeSchlussel = codeSchlussel+1;
  delay(500);
}
if(digitalRead(toaster6)== HIGH){
/*  digitalWrite(ledH, HIGH);
  delay(2000);
  digitalWrite(ledH, LOW);*/
  codeSchlussel = 9;
}
if(digitalRead(toaster7)== HIGH){
  /*digitalWrite(ledG, HIGH);
  delay(500);
  digitalWrite(ledG, LOW);*/
  codeSchlussel = codeSchlussel*10+2;
  delay(500);
}
//zweite Reihe Taster
digitalWrite(toaster1,LOW);
digitalWrite(toaster2, HIGH);
if(digitalRead(toaster8) == HIGH){
/*  digitalWrite(ledH, HIGH);
  delay(2000);
  digitalWrite(ledH, LOW);*/
  codeSchlussel = 9;
}
if(digitalRead(toaster5)== HIGH){
  /*digitalWrite(ledG, HIGH);
  delay(500);
  digitalWrite(ledG, LOW);*/
  codeSchlussel = codeSchlussel*10+3;
  delay(500);
}
if(digitalRead(toaster6)== HIGH){
/*  digitalWrite(ledH, HIGH);
  delay(2000);
  digitalWrite(ledH, LOW);*/
  codeSchlussel = 9;
}
if(digitalRead(toaster7)== HIGH){
 /* digitalWrite(ledH, HIGH);
  delay(2000);
  digitalWrite(ledH, LOW);*/
  codeSchlussel = 9;
}
//dritte Reihe Taster
digitalWrite(toaster2,LOW);
digitalWrite(toaster3, HIGH);
if(digitalRead(toaster8) == HIGH){
 /* digitalWrite(ledH, HIGH);
  delay(2000);
  digitalWrite(ledH, LOW);*/
  codeSchlussel = 9;
}
if(digitalRead(toaster5)== HIGH){
  /*digitalWrite(ledH, HIGH);
  delay(2000);
  digitalWrite(ledH, LOW);*/
  codeSchlussel = 9;
 
}
if(digitalRead(toaster6)== HIGH){
  /*digitalWrite(ledG, HIGH);
  delay(500);
  digitalWrite(ledG, LOW);*/
  codeSchlussel = codeSchlussel*10+4;
  delay(500);
}
if(digitalRead(toaster7)== HIGH){
/*  digitalWrite(ledH, HIGH);
  delay(2000);
  digitalWrite(ledH, LOW);*/
  codeSchlussel = 9;
}
//vierte Reihe Taster
digitalWrite(toaster3,LOW);
digitalWrite(toaster4, HIGH);
if(digitalRead(toaster8) == HIGH){
   lcd.setCursor(0, 1);//Hier wird die Position des ersten Zeichens festgelegt.
lcd.print("Geschlossen");
digitalWrite(ledH, HIGH);//Wenn dieser Knopf gedrückt ist dreht sich der Servo in die closed Position
   myservo.write(posclosed);
   delay(5000);
  digitalWrite(ledH, LOW);

}
if(digitalRead(toaster5)== HIGH){
  /*digitalWrite(ledH, HIGH);
  delay(2000);
  digitalWrite(ledH, LOW);*/
  codeSchlussel = 9;
  sensorAn = 1;
}
if(digitalRead(toaster6)== HIGH){
/*  digitalWrite(ledH, HIGH);
  delay(2000);
  digitalWrite(ledH, LOW);*/
  codeSchlussel = 9;
}
if(digitalRead(toaster7)== HIGH){
  /*digitalWrite(ledH, HIGH);
  delay(2000);
  digitalWrite(ledH, LOW);*/
  enterit = 1;
}
digitalWrite(toaster4,LOW);

if(enterit  == 1){
  Serial.println(codeSchlussel);
  if(codeSchlussel == 1234){
    lcd.setCursor(0, 1);//Hier wird die Position des ersten Zeichens festgelegt.
    lcd.print("Geoeffnet**");
    noTone(buzzer);
    digitalWrite(ledH, LOW);
      myservo.write(posopen);
      digitalWrite(ledG,HIGH);
    delay(2500);
    digitalWrite(ledG,LOW);
    noTone(buzzer);
    alarm = 0;
  }
  else{
    alarm = 1;
     
  }
  codeSchlussel = 0;
  enterit = 0;
}
if(sensorAn ==1){   //Wenn die Variable SensorAn auf 1 gestellt ist, wird überprüft, ob der Abstand vom Ultraschall-
   if(distanz <80){ //sensor zum nächsten Gegenstand unter 80cm liegt, wird der Alarm ausgelöst.
    alarm =1;
   }
}
if(alarm == 1){
    lcd.setCursor(0, 1);//Hier wird die Position des ersten Zeichens festgelegt.
    lcd.print("AAAlarm****");
    digitalWrite(ledH, HIGH); //Alarm signal
    tone(buzzer,200);
    delay(1000);
    digitalWrite(ledH, LOW);
    noTone(buzzer);
    delay(500);
    tone(buzzer,200);
    alarm = 0;
    sensorAn = 0;
    zeitSpanne = 0;
    distanz = 0;
    codeSchlussel = 0;
}
}

Erstellt: Dominik Hartung (13.11.2019) Letzte Änderung: Jakob Kalff (20.11.2019)