Alarmanlage

Hallo werte Arduino Gemeinde,

ich möchte mit dem Arduino UNU oder Arduino Mega eine Alarmanlage realisieren.
Hierbei sollen 3 Türen oder Fenster auf Öffnung Überwacht werden. Diese Eingänge sollen Ohmisch z.B mit 10 KOhm überwacht werden. Wird dann einer der Eingänge z.B größer oder kleiner 10 KOhm oder offen, sollen 2 Ausgänge vom Arduino den alarm geben. Beide Ausgänge sollen unabhängig nach Zeit die Alarmgeber
ansteuern, z.B eine Sirene(Zeit X) und eine Signalleuchte (Zeit Y). Desweiteren muss diese Alarmanlage über einen Eingang (Code Schloss oder Blockschloss) geschärft werden. Wenn z.B die Kriterien der 3 Eingänge nicht gegeben sind (z.B es liegen keine 10 KOhm der 3 Eingänge an)kann die Anlage nicht geschärft werden.

Da ich noch purer Anfänger bin würde ich mich über jede Hilfe bzw. auch Ansatz zu diesem Thema freuen.

Besten Dank vorab

Hallo savana

Ich rate Dir eine komerzielle Alarmanlage zu kaufen. Das macht weniger Stress und funktioniert auf Anhieb. (es gibt solche zum Selbsteinbau mit den Sensoren die über Funk miteinander komunizieren). Da entfällt auch das Kabelziehen und schont die Nachbarn vor Fehlalarmen.

Viele Grüße Uwe

Hallo Uwe,

Ich habe schon 2 Alarmanlagen Zuhause, zudem komme ich aus
diesem Bereich habe dies über viele Jahre Praktiziert .
Mir Persönlich geht es um das doing mit dem Arduino, ob dies möglich
Ist. Brauche ich vieleicht weitere Hardware um dies zu realisieren?
Wie sieht die programmier Logik dazu aus usw usw...
Ich möchte den Arduino nicht wirklich als Alarmanlage gebrauchen.
Ich würde mich über jeden Vorschlag zum realisieren einer Alarmanlage
freuen .
Besten Dank vorab.

savage

Hallo savana

Ok, das ist was anderes, als Programmierübung ist es akzeptabel.
Es ist schwierig eine 100% sichere Anwendung zu schreiben und bei sicherheitsrilevanten Anwendungen, wie ein Alarmanlage, braucht es viel Erfahrung in Programmierung und Elektronik.

Um die Sensoren auf Kurzschluß oder Unterbrechung kontrollieren zu können braucht es, wie Du sagst einen Widerstand im Meßkreis in Serie zum Schalter, der ein Öffnen oder Glasbruch anzeigt. Mit einem 2. Widerstand machst Du einen Spannungsteiler und mißt den Wert an einem analogen Eingang. So hast Du 3 Werte (ca 0V, ca 5V und einen Wert zwischendrin).
Es gibt das das Multiplexboard das 6 Analoge Eingänge in 48 Eingänge multiplext. So kannst Du reichlich Sensoren anschließen.
Einfach der Reihe nach die Eingänge abfragen.
Viele Grüße Uwe

Hallo Savana,
ich finde das Thema interessant, hab mir auch schon mal Gedanken darüber gemacht, allerdings wollte ich die Räume
über Bewegungsmelder überwachen. Wenn ich mir ansehe, wie Alarmanlagen vor 10 oder 15 Jahren aussahen und dann
überlege, das dies heute über einen Arduino nur mit Programmierung möglich ist. Reizt mich schon, so was mal umzusetzen.
Man kann sich ja mal austauschen, welche "Eventualitäten" man beim Programmieren berücksichtigen muß.

finde ich gut dass Du auch zu diesem Thema Interesse hast.
Bewegungsmelder sind kein Problem haben ja einen Kontakt wenn dieser sich ändert, wird Alarm ausgelöst.
Hast du auf dem Gebiet Programmierung Erfahrung sammeln können ??
Ich Denke die Vorgabe die ich zu Anfangs gemacht habe dürfte schon viel Know-how benötigen.
Eine Konventionelle Alarmanlage der VDS Klasse A,B, oder gar C zu realisieren ist eine sehr große Herausforderung .
Für mich Persönlich soll es mehr rudimentär sein, soll also relativ einfach aufgebaut sein.
Vielleicht sollte zu Anfangs die Widerstandsüberwachung weggelassen werden, und mehr der Programmier Logik zuwenden. Wenn Eingang 2 aktiviert wird soll die Anlage in einen Scharf Zustand gesetzt werden, wenn während des Scharf Zustands Eingang 1(Bewegungsmelder) geöffnet wird, muss Ausgang 1 (Sirene) angesteuert werden, danach kann der Alarm gelöscht werden durch Eingang 3(Löschtaster) die Anlage wird dadurch in den Zustand unscharf gebracht und der Spaß kann von neuem beginnen usw usw..
Nenne mir bitte auch deine Vorstellung von einer Alarmanlage.

Gruß savana

Die Kontrolle des Widerstands ist nicht schwer. Sagen wir Du hast einen Widerstand von 10kOhm in Reihe zum Schalter der das Fenster überwacht. Der Schalter ist bei geschlossenem Schalter auch geschlossen. Der Schalter ist zwischen Masse und einen Analogen Eingang geschaltet. Vom Eingang geht noch ein Widerstand von 10kOhm auf +5V.
Bei geschlossenem Schalter hast Du ca 2,4V und liest auf dem analogen Eingang etwas um die 512.

StatusEingang1 = analogRead(Eingang1);
If( StatusEingang1 <400 || StatusEingang1>620)
{
// Fenster geöffnet -> Alarmbearbeitung
}

Grüße Uwe

Hallo Uwe,
zunächst besten Dank für Deine Hilfe.
Habe mir deinen Ansatz angeschaut und versucht diesen umzusetzen, beim kompilieren des Quell Code Ist kein Fehler aufgetreten, aber beim Testen der Funktion Alarm am Analog Eingang wurde kein Alarm ausgelöst an Pin13.
Programm Logik ??

Vielleicht hast Du eine Idee dazu.

Besten Dank vorab

Gruß savana

/*******************

  • Alarmanlage *
    ********************/

int StatusEingang1 = A0;
int ledPinAlarm = 13;
int Alarmlinie1 = 0;

void setup() // Initialisierung
{
pinMode(ledPinAlarm,OUTPUT); // LED-Pin als Alarm
}

void loop() // Endlosschleife
{
Alarmlinie1=analogRead(StatusEingang1); // Alarmlinie wird eingelesen Widerstandswert

if (StatusEingang1 <400 || StatusEingang1>620) // Abfrage ob kleiner oder größer Wert 512
{
digitalWrite(ledPinAlarm, HIGH); // Alarm LED einschalten für 5 sec
delay(5000);
}

else
{
digitalWrite(ledPinAlarm, LOW); // Alarm LED Aus
}

}

2 Vorschläge fürs Debuguing:

  • Gib den gelesenen Wert des Analogeingangs über serielle Schnittstelle auf das Terminal aus; so weißt du wo du bist.
  • Verwende ein Potentiometer um ein Alarmquelle zu simulieren und so einfach alle Analogwerte produzieren zu können; 10 Kohm Poti an Masse und +5V; Schleifer auf AnalogEingang.

Code-Vorschlag:

/*******************
*   Alarmanlage    *
********************/

int StatusEingang1 = A0;
int ledPinAlarm = 13;
int Alarmlinie1 = 0;
 
void setup()         // Initialisierung 
{                             
 pinMode(ledPinAlarm,OUTPUT);  // LED-Pin als Alarm
 Serial.begin(9600);
} 

void loop()           // Endlosschleife
{ 
   Alarmlinie1=analogRead(StatusEingang1);   // Alarmlinie wird eingelesen Widerstandswert
  Serial.println (Alarmlinie1); 
 
  if (StatusEingang1 <400 || StatusEingang1>620) // Abfrage ob kleiner oder größer Wert 512
  {
   digitalWrite(ledPinAlarm, HIGH);   // Alarm LED einschalten für 5 sec
   delay(5000);       
  } 
  else
  {
   digitalWrite(ledPinAlarm, LOW);   // Alarm LED Aus
  }
}

Da wirst Du sehen, daß die Werte korrekt eingelesen werden.

Dann nach einiger Fustration, noch 2 Posts wird die jemad sagen, daß die Variable Alarmlinie1 nicht die gleiche Variable ist wie StatusEingang1 (die Du in der if anweisung kontrollierst). :wink: :wink: :wink:

Noch 1 Vorschlag:

digitalWrite(ledPinAlarm, HIGH);   // Alarm LED einschalten für 5 sec
   delay(5000);

Das delay(5000) blockiert die das Programm an dieser stelle für 5 Sekunden.

Viele Grüße Uwe 8)

Hallo Uwe,

habe die Fehler behoben, habe mir mit Serial Monitor die Werte angesehen und mit mit einem 10 KOhm Poti abgeglichen auf den Wert 512.
Soweit so gut danach habe ich im Quell Code noch die Fehler beseitigt.
Und siehe da es Funktioniert je nach dem wie ich das Poti eingestellt habe hatte ich einen Alarm an Pin13.
Habe auch dazu die Spannung Parallel gemessen bei ca 2.5V ist kein Alarm wie Du schon gesagt hast.
Was mir aber beim Serial Monitor aufgefallen ist, das nach der Änderung an meinem Quell code der Serial Monitor nur noch 0 anzeigt, egal wie das Poti eingestellt ist.

anbei den aktualisierten Quell Code

Gruss savana

/*******************
*   Alarmanlage    *
********************/

int StatusEingang1 = A0;
int ledPinAlarm = 13;
int Alarmlinie1 = 0;

 
void setup()         // Initialisierung 
{                             
 pinMode(ledPinAlarm,OUTPUT);  // LED-Pin als Alarm
 Serial.begin(9600);
} 

void loop()           // Endlosschleife
{ 
   StatusEingang1=analogRead(Alarmlinie1);   // Alarmlinie wird eingelesen Widerstandswert
   Serial.println (Alarmlinie1); 
 
  if (StatusEingang1 <400 || StatusEingang1>620) // Abfrage ob kleiner oder größer Wert 512
  {
   digitalWrite(ledPinAlarm, HIGH);   // Alarm LED einschalten für 5 sec
          
  } 
  else
  {
   digitalWrite(ledPinAlarm, LOW);   // Alarm LED Aus
  }
}

Hallo Uwe,

habe soeben den Quell Code nochmals überflogen, habe jetzt auch diesen Gefunden habe die Variable StatusEingang1 geändert sie Code unten.

besten Dank nochmal für die Hilfe

Gruss savana

Serial.println (StatusEingang1);

savana, Du bist mir heute etwas zu kryptisch, daß ich Dich verstehen könnte. :wink: :wink: :wink:
Grüße Uwe

Hallo Uwe,

sorry, ich glaube ich muss jetzt schlafen hatte nur 2 Stunden Schlaf die letzte Nacht.

Besten dank nochmal für die Hilfe.

Gruss savana

:wink: :wink: :wink:
Gute Nacht

Hallo Savana,
was man auch noch berücksichtigen sollte, z.B. das scharf stellen an mehreren Stellen und vor
allem auch eine gewisse Zeitverzögerung beim Auslösen des Alarms. Ich will ja wenigstens Zeit genug
haben, die Anlage zu starten oder zu beenden, wenn ich das Haus betrete oder verlasse.
Ich setzt man voraus, das der Schalter dafür im Haus ist und nicht draußen angebracht ist.

Hallo savana!

Bei einer selbstgebauten Alarm-Anlage nimmt dir die Versicherung nicht den Schaden ab ( Wenn es dann doch zum Schaden kommt ).

Wenn du es dennoch versuchen willst: empfehle ich Hall-ICs und Magnete. ( Den Magnet klebst du auf einer Seite an, den Hall-IC auf der anderen. )

Damit hast du digitale Signale. Keine Rost-Stellen, keine "in etwa Alarme" etc. , weil das alles kontaktlos funktioniert.

MfG

Hallo Gurkengraeber
Wenn Du Deine Beitrag geben willst rate ich Dir alle bisherigen Diskussionsbeiträge zu lesen. savana hatte schon gesagt, daß er die Alarmanlage nicht als solche einsetzen will, sondern sie aus didaktischen Gründen bauen will..

savana:
... Ich habe schon 2 Alarmanlagen Zuhause, zudem komme ich aus diesem Bereich habe dies über viele Jahre Praktiziert .
Mir Persönlich geht es um das Ding mit dem Arduino, ob dies möglich Ist. Brauche ich vieleicht weitere Hardware um dies zu realisieren? Wie sieht die programmier Logik dazu aus usw usw...
Ich möchte den Arduino nicht wirklich als Alarmanlage gebrauchen.
...

Da savana aus dem Metier kommt glaube ich, daß er sich auskennt.
Darum ist Dein Beitrag für savana überflüssig.

Was dann maverick1509 machen will ist eine andere Sache.

Einen Hall-Sensor oder Magnetsensor als Tür-Fensteröffnungssensor zu nehmen sehe ich nicht sinnvoll da dieser eine Versorgungsspannung benötigt. Ein Reedkontakt ist da effektiver und einfacher.

Viele Grüße Uwe

Wenn Du Deine Beitrag geben willst rate ich Dir alle bisherigen Diskussionsbeiträge zu lesen.

Vielleicht schreibt Uwe schneller, als er lesen kann.

Einen Hall-Sensor oder Magnetsensor als Tür-Fensteröffnungssensor zu nehmen sehe ich nicht sinnvoll da dieser eine Versorgungsspannung benötigt. Ein Reedkontakt ist da effektiver und einfacher.

Hall-Sensoren lassen sich durch das Magnetfeld beeinflussen. Permanent-Magnete brauchen keinen Strom. Ein Reed-Relais ist natürlich auch eine Lösung, aber der Abstand zwischen Reed-Relais und Magnet muss dazu sehr gering sein. Hall-Sensoren haben da eine größere Toleranz.

http://imperia.mi-verlag.de/imperia/md/content/ai/ae/fachartikel/ei/2006/07/ei06_07_067.pdf

MfG

Hallo maverick1509,

Zum Thema Scharfschalten der Alarmanlage gibt es zwei Möglichkeiten zum einen die externe Schärfung oder die interne Schärfung.
Bei der externen Schärfung befinden sich die Scharfschalteinrichtungen außen z.B vorderer Eingang oder auch Kellertür als Eingang von beiden Stellen aus kannst du dann scharf oder unscharf schalten.
Wenn du also extern schärfen möchtest sind die Scharschalteinrichtungen meistens am Eingang bzw. Ausgang angebracht. Eine Scharfschalteinrichtung kann z.B ein Berührungsloser Leser sein der mit einem Transponder geschärft wird.
Scharfschalteinrichtungen als solches viele.
Sollte dann jemand versuchen bei dir einzubrechen um deinen Arduino zu klauen, geht dann sofort der Alarm los.
Bei der internen Schärfung wie es der Name schon sagt, schärfst du, während Du im Haus bist die Anlage intern scharf, z.B dein Haus ist sehr groß und möchtest Nachts wenn du schon im Bett liegst
mitbekommen ob jemand versucht in deinen Keller einzubrechen.
Gewisse Räume in denen du dich bewegst, müssen natürlich deine IR Melder aus deinem internen Bereich deaktiviert sein wie auch z.B das Fenster im Schlafzimmer wenn du vielleicht Nachts lüften möchtest.
Der Platz der internen Scharfschalteinrichtung sollte gut platziert sein wenn möglich nicht im
gesicherten Bereich, wenn ja muss dein Alarm Zeitverzögert sein (meistens sind das so 30 – 60 sec.) so dass du die Möglichkeit hast zu entschärfen bevor deine Interne Sirene Alarm gibt.
Kommst du vielleicht trotzdem in deinen überwachten Bereich hinein wird von der Alarmanlage ein sogenannter Voralarm gestartet dieser wiederum ist nur ein Warnsignal (Summer) das gleich die Interne Sirene losgeht. In 30-60 sec.
Ich hoffe ich konnte deine Frage(n) beantworten.

Gruss savana

Hallo an Alle,

habe versucht meine Alarmanlage zu erweitern, mit einer 2ten Alarmlinie.
Habe dazu meinen bestehenden Quell Code angepasst.
Beim Komplilieren ist kein Fehler aufgetreten trotz alle dem löst die 2te Alarmlinie nicht aus.
Komme momentan nicht weiter.
Vieleicht hat jemand eine Idee was im Quellcode nicht stimmt.

/*******************
*   Alarmanlage    *
********************/
int StatusEingang1 = A0;
int ledPinAlarm = 13;
int Alarmlinie1 = 0;
int StatusEingang2 = A1;
int ledPinAlarm2 = 12;
int Alarmlinie2 = 0;

void setup()         // Initialisierung 
{                             
 pinMode(ledPinAlarm,OUTPUT); // LED-Pin als Alarm
 pinMode(ledPinAlarm2,OUTPUT);
 Serial.begin(9600);
} 

void loop()           // Endlosschleife
{ 
   StatusEingang1=analogRead(Alarmlinie1);   // Alarmlinie wird eingelesen Widerstandswert
   StatusEingang2=analogRead(Alarmlinie2);
   Serial.println (StatusEingang1); 
   Serial.println (StatusEingang2);
 
  if (StatusEingang1 <400 || StatusEingang1>620) // Abfrage ob kleiner oder größer Wert 512
  {
   digitalWrite(ledPinAlarm, HIGH);   // Alarm LED einschalten für 5 sec
          
  } 
   else 
  {
   digitalWrite(ledPinAlarm, LOW);   // Alarm LED Aus
  }
  
  if (StatusEingang2 <400 || StatusEingang2>620) // Abfrage ob kleiner oder größer Wert 512
  {
   digitalWrite(ledPinAlarm2, HIGH);   // Alarm LED einschalten für 5 sec
          
  } 
  else
  {
   digitalWrite(ledPinAlarm2, LOW);   // Alarm LED Aus
  }
  
}

besten Dank vorab

Gruss savana