Guten Tag,
ich habe den Plan eine kleine simple Alarmanlage zu bauen mithilfe eines
Microcontrollers. Allerdings bin ich noch ein ziemlicher Anfänger auf
dem Bereich. Das Grundprogrammieren bekomme ich schon hin.
Mein Plan ist es an Türen und Fenstern Reed-Kontakte zu verbauen, die an
einem Microcontroller angeschlossen werden. Dieser soll dann jeweils
eine RGB schalten ob die Tür bzw. das Fenster offen oder geschlossen
ist. Also meinetwegen geschlossen soll die RGB grün leuchten und offen
rot.
Meine erste Frage kann mir jemand einen Microcontroller empfehlen?
Ich bräuchte ca. 24 Eingänge und dementsprechend auch 24 Ausgänge. Ich
habe Zuhause allerdings nur einen Atmega32 beidem ich nicht genügend
PIN´s besitze wenn ich richtig gelesen habe. Oder gibt es bestimmte
Zusatzboards mit dem ich das erweitern kann?
warum willst du soetwas simples über ein Mikrocontroller steuern lassen?
kannst doch die Reedkontakte mit Transistoren direkt mit den LED's
Verbinden...
Bin derzeit sehr begeistert von der Technik. Also aus dem ersten Grund
aus reinem Interesse.
Desweitern möchte es ich an einem vorhandenen GSM-Modul anschließen mit
dem ich dann einen Anruf bzw. eine Textnachricht auf mein Handy bekomme.
Phil schrieb:> Also meinetwegen geschlossen soll die RGB grün leuchten und offen> rot.
Und dann sitzt du vor dem Fernseher und schielst immer mit einem Auge
auf deine LED-Anzeige?
Georg
Phil schrieb:> Meine erste Frage kann mir jemand einen Microcontroller empfehlen
Völlig egal, als Anfänger tut es ein Arduino. Man braucht nicht für
jeden Reed-Kontakt einen Eingang, Stichwort Meldeschleife.
Aber kommerzielle Anlagen haben Vorteile: Manipulationssichere
Meldeschleifen durch Wechselspannung und Widerstandsmessung, hoffentlich
robust gegen einen Blitzeinschlag in der Nähe oder Funkstörungen,
Betrieb auch wenn jemand den Strom abstellt durch Erdschluss an der
Aussensteckdose durch Akkubetrieb (Arduinos sind nicht so toll bei
Akkubetrieb).
Andere Features, wie Alarmmeldung und Scharfschalten über Handy oder
gesetzlich zulässige begrenzte Sirenentöne und natürlich die übliche
Sicherheitsschaltung: nie auslösen wenn nur 1 Sensor anspricht, sondern
erst Alarm schlagen wenn 2 unterschiedliche (z.B. Bewegungsmelder und
Glasbruchmelder) angeschlagen haben zur Vermeidung von Fehlalarmen,
kannst du natürlich passend programmieren.
Moin, -
wenn Du zuwenig Input/Output hast, kannst Du sie mit:
1) Shift-In und Shift-out erweitern (google: 74ls595 arduino)
und CD4021BE.
2) I2c-Portextender MCP23017 oder PCF8574.
Der Trick ist in jedem Fall, die Daten seriel mit wenigen
Leitungen zu einem Port (der dann mehr I/O-Leitungen hat) zu
transferieren.
Gruesse
Th.
Phil schrieb:> Ich möchte aber wissen welche Tür jetzt sag ich mal offen ist und> nicht nur das irgendeine Tür offen ist.
Bloss wozu dann einen Mikrocontroller ? Leitungen tuns auch.
Thomas W. schrieb:> wenn Du zuwenig Input/Output hast, kannst Du sie mit:> 1) Shift-In und Shift-out erweitern (google: 74ls595 arduino)> und CD4021BE.
Wie funktioniert das genau?
Thomas W. schrieb:> Du kannst auch einfach google benutzen
Er kann auch ohne solche Zusatzbauteile problemlos 24 Schalter mit einem
Arduino Uno auswerten und 24 R/G LEDs schalten, Matrixansteuerung
macht es möglich.
Aber das alles gehört zur Mikrocontroller-Lernkurve, die manche hier ja
auch noch vor sich haben.
Hi
MaWin schrieb:> Er kann auch ohne solche Zusatzbauteile problemlos 24 Schalter mit einem> Arduino Uno auswerten und 24 R/G LEDs schalten, Matrixansteuerung> macht es möglich.
Ich hab dir mal so eine Matrix skizziert. Port A wird mit "1"-Signalen
angesteuert. Um den Controller nicht zu überlasten einfach mit 8
Transistoren Ausgänge des Controllers verstärken. An Port C gibst du z.
B. über einen ULN 28xx "0"-Signale aus, dabei ist natürlich der Ausgng
vom Port C eine "1". Der ULN invertiert das Signal. Das ist ganz
praktisch, denn auch dieses Signal kannst du zu Tastergruppen führen und
somit auf einen Eingang von Port B ein "0" Signal über die
Taster/Schalter schalten. Somit kannst du die internen Pull-Up
Widerstände nutzen.
Im Programm läuft das dann in etwa so ab:
In einer Variablen "Group_Select" (1 Byte) setzt du Bit 0 und in einer
zweiten Variablen "Group_Count" (1 Byte) setzt du einen Zähler auf 0
(Initialisierung)
In einer Timer-ISR (1 msek) Setzt du Ausgänge Port C auf 0
Anschließend liest du aus einem Variablen-Array "LED_Group_n" (n-Bytes
für Gruppen LED-Ausgänge) Byte 0 und schaltest dieses auf Port A. Dann
schaltest du die Variable mit dem gesetzten Bit auf Port C. Nun liest du
Port B ein und schreibst den gelesenen Wert invertiert !! in die erste
Array-Variable eines zweiten Arrays "Group_In_New_n" für Eingänge. Auch
hier dient die Zählervariable zur Adressierung. Abschließend schiebst du
das Bit in der ersten Variable ein Bit höher und incrementierst den
Zähler bis die Anzahl der vorhandenen Gruppen erreicht ist. Wenn das der
Fall ist, setzt du den Zähler auf 0 und wieder das erte Bit in der
Variablen für Port C.
Was noch fehlt, ist eine Entprellung der Eingänge. Dafür benötigst du
eine "Wartezeit", bis die Eingänge gültig sind.
Mein Vorschlag dafür, ein Array "Group_In_New_n" für die Eingänge, die
direkt vom Port gelesen werden. Das ist oben beschrieben
Ein weiteres Array "Group_In_Old_n" in der gleichen Größe, um diesen
Status zu merken (alt) und ein drittes Array "Group_In_Act_n", um
gültige Eingänge abzulegen.
Bei den Tastern wäre eine Flankenerkennung angebracht. Auch dafür
brauchst du einen "alten" Status gültiger Eingänge.
Und so läuft es dann ab:
Eine Zeitvariable auf einen Wert setzen, vielleicht 20.
(Initialisierung)
Einmal je Zyklus aufrufen oder in der Timer-ISR (1 mSek) ein Flag
setzen, um mit diesem dann in der Programmschleife die Entprellroutine
aufzurufen.
In der Entprellroutine die aktuiellen Portbits mit den gemerkten
exclusiv verodern. Ist das Ergebnis 0, dann gibt es keine Veränderung.
In diesem Fall wird geprüft, ob die Zeitvariable 0 ist. Wenn ja, dann
die nächste Gruppe prüfen. Wenn nicht, den Zähler herunter zählen und
wenn er auf 0 geht, den aktuellen Status auf den gültigen Status
übertragen.
Ist das Ergebnis der Exclusiv-Veroderung nicht 0, dann die Zeitvariable
wieder auf den Anfangswert setzen.
Zum Abschluß dieses Durchganges noch den aktuellen Status von Port B in
die Ablage kopieren.
Sinnvoll ist es für jede Gruppe eine Zeitvariable einzurichten und das
wieder in einem Array ("Delay_Group_n").
Auch bei der Flankenerkennung wird eine Exclusiv-Veroderung des neuen
Status mit einer Ablage (Array "Last_Act_Status_n") durchgeführt.
Anschließend das Ergebnis mit dem Ablagestatus Verundet. (eine "1" ist
fallende Flanke) oder eine Und-Verknüpfung Ergebnis mit dem neuen Wert
(eine "1" ist steigende Flanke).
Diese Bits sind dann die Ereignisbits, die du in deinem Programmzyklus
abfragen, bearbeiten und nach der Bearbeitung löschen kannst. Somit wird
ein Tastendruck auch nur einmal bearbeitet und nicht solange er betätigt
wird.
Ich hoffe, du kannst nach dieser groben Anleitung dein Programm
zusammenstricken. Da ich "C" nicht beherrsche, kann ich dir auch keine
Programmschnipsel liefern, aber die Stichworte sollten dir da weiter
helfen.
Gruß oldmax
Phil schrieb:> Meine erste Frage kann mir jemand einen Microcontroller empfehlen?
Dazu ist siecher fast jeder Mikrocontroller geeignet. Wegen der guten
Verfügbarkeit fertiger Module und Anleitungen empfehle ich dir den
ATmega328 in Form eines Arduino Nano Moduls. Dein Atmega32 ist auch
nicht schlecht, wenn auch ziemlich alt.
> Ich bräuchte ca. 24 Eingänge und dementsprechend auch 24 Ausgänge.
Um das alles direkt an einen Mikrocontroller anzuschließen muss es dann
schon ein größeres Modell wie der ATmega2560 sein. Ich würde hier aber
lieber auf Schieberegister in IC Sockeln setzen, denn die kannst du
beliebig erweitern und sie beschützen deinen Mikrocontroller.
Ich habe dazu mal Bilder angehängt. Für die Eingänge kannst du 74HC165
nehmen. Für die Ausgänge eintspricht der TPIC6B595 dem 74HC595, nur dass
er stärkere Ausgänge hat. Er kann Relais direkt ansteuern.
> Oder gibt es bestimmte Zusatzboards mit dem ich das erweitern kann?
Ja gibt es, man nennt sie Port-Expander. Beliebte Kandidaten sind
PCF8574 und MCP23017. Ich würde aber den TPIC6B595 bevorzugen, falls du
Relais ansteuern wirst.
Dein Konzept mit den digitalen Eingängen ist einfach. Das ganze wird
jedoch deutlich sabotage-sicherer wenn deine Kabel ganz am Ende einen
Widerstand haben, der überwacht wird. Wenn der Wert deutlich steigt oder
sinkt, wird Alarm ausgelöst. Für mehr analoge Eingänge kann ich Dir den
MCP3208 (8 Eingänge) empfehlen. Davon kannst du ganz viele an den
Mikrocontroller anschließen.
Phil schrieb:> Ich möchte aber wissen welche Tür jetzt sag ich mal offen ist und nicht> nur das irgendeine Tür offen ist.
Dafür ist vielleicht ein Tablet mit einer App eleganter. Die Sensoren
kannst du über solche Module anbinden:
http://stefanfrings.de/net_io/index.html
Oder ein PC/Laptop/Raspberry Pi, darauf würde dieses
Alarmanlagen-Projekt laufen: http://stefanfrings.de/bfAlarm/index.html
Hi
Phil schrieb:> Bin derzeit sehr begeistert von der Technik. Also aus dem ersten Grund> aus reinem Interesse.>> Desweitern möchte es ich an einem vorhandenen GSM-Modul anschließen mit> dem ich dann einen Anruf bzw. eine Textnachricht auf mein Handy bekomme.
Wenn das kein Grund ist, mit einer einfachen Erfassung von Zuständen
eine kleine Alarmanlage zu bauen, weiß ich auch nicht weiter.
Stefan ⛄ F. schrieb:> Wenn du keinen Wachschutz hast, ist die ganze Anlage sinnlos. Da nützen> automatische Videoaufzeichnungen (auf einem unzugänglichen Server, z.B.> in der Cloud) viel mehr um den Einbruch aufzuklären. Dafür brauchst du> aber keine Alarmanlage.
Damit hat Stefan sicherlich nicht unrecht, trotzdem gibt es vielerlei
Möglichkeiten, Objekte mit einer stillen Alarmanlage zu überwachen und
im Ernstfall kann man dann die Polizei zum Geschehen rufen, wenn dann so
Ein Brecher noch aktiv ist.
Ist schon ein Weilchen her, das ich mit einem uralten Handy Holzlager
überwachen wollte. Ein Controller hatte die Aufgabe, Akkuzustand,
Bereitschaft, Fehlalarme und echte Alarme über eine Anrufliste zu
melden. Gar nicht so kompliziert, mit ATD-Befehlen Nummern wählen zu
lassen und durch Telefonbucheinträge war immer klar, das sich Holzstapel
35 bedroht fühlt.
Gruß oldmax
Martin V. schrieb:> Was noch fehlt, ist eine Entprellung der Eingänge.
Eigentlich nicht.
Wenn er bloss Taster auf LEDs abbilden will, ist das alles überflüssig.
Und während ich ein grosser Freund vor Stromverstärkern an uC Ausgängen
bei Matrixanzeigen bin, z.B. bei 8 x 6 auf 120mA für die Spalten und
960mA für die Zeilen, ist in der Anwendung auch fraglich, ob er das
braucht, oder mit 2mA pro LED auskommt.
Aber bisher sehe ich nichtmal einen Grund für einen uC.
Hi
MaWin schrieb:> Aber bisher sehe ich nichtmal einen Grund für einen uC.
ich schon
Phil schrieb:> Bin derzeit sehr begeistert von der Technik. Also aus dem ersten Grund> aus reinem Interesse.
Wenn du mal ein wenig Phantasie walten läßt... wie sieht es denn dann
aus mit Zeitstempeln für Tür auf, Tür zu ?
Oder Bedienung, um die Alarmanlage scharf zu schalten, oder auch frei zu
geben? Da ist dann schon mal Flankenerkennung nicht ganz unwichtig.
Deshalb hab ich in meine Zeichnung mal Taster eingezeichnet, könnt ja
sein, das Phil auch mal was bedienen möchte. Schalter für Fenster und
Türen brauchen das natürlich nicht, es sei denn, du willst wissen, wie
spät es war, als dir die Tür ins Kreuz schlug.
Aber ich kann auch wie du der Meinung sein, Drähte reichen auch. Aber
dann brauch ich hier nicht schreiben, weil, es hilft nicht. Das kann
vermutlich jeder, der in der 5. Klasse nicht gepennt hat.
Gruß oldmax