SERENA: Eigenes Arduino Mega 2560 Alarmsystem mit TFT-LCD-Touchscreen
Komponenten und Materialien
| Arduino Mega 2560 | × | 1 |
| 3,2" TFT LCD Touchscreen | × | 1 |
Apps und Online-Dienste
- Arduino IDE
Über dieses Projekt
Ich habe viele Alarmsysteme gesehen, sie geprüft, verstanden, wie sie funktionieren – und entschied: Ich baue mein eigenes. Warum nicht? Etwas nehmen und verbessern. Ich bin schließlich Computeringenieur (Bachelor, bald Master).
So entstand das Projekt
Ich analysierte bestehende Systeme und deren Funktionen und fand: Alle Funktionen (plus eigene Ideen) in einem einzigen Arduino-Board als Alarm-Zentrale zu bündeln, ist sinnvoll.
Nichts Kompliziertes: Board + 3,2" Touchscreen kaufen. Für den Screen brauchte ich Bibliotheken – großen Dank an Henning Karlsen für UTFT & URTouch! (Website-Link in Credits)
Das Programm
Entwicklung dauerte eine Weile. Code nicht scheuen – ich kommentiere wo nötig!
Hauptfunktionen des Alarms
Drei verschiedene Passwörter:
- 4-stellig: Alarmanlage scharf schalten (Arming).
- 5-stellig: Teilweise entschärfen (Auto-Arm Modus).
- 6-stellig: Vollständig entschärfen (Full Disarm).
Viele Codes, aber zukünftig: Option zum Deaktivieren des 4-stelligen Codes.
Auto-Arm: Nach Eingabe des 5-stelligen Codes startet Countdown (Standard 40 Sek.). Danach schaltet sich der Alarm automatisch scharf. Praktisch, wenn man das Scharfschalten vergisst.
Optionen-Menü
Alle drei Passwörter ändern, Auto-Arm-Zeit einstellen.
Geplante Erweiterungen
- Datum/Zeit Einstellung
- SD-Karten-Support (Datenverlust bei Stromausfall vermeiden)
- Auto-Arm deaktivierbar
- 4-stelligen Code deaktivierbar
- Und mehr...
Demo-Video
(Video-Link im Original)
Code (SERENA v.1.01)
Einfach auf Arduino hochladen. Einige Kommentare noch auf Griechisch – wird bald korrigiert.
////////////////////////////////////////////////////////////////////////////////
// SERENA Alarm System
// Author: Michael Marinis
// Copyright (C)2016 Michael Marinis. All Rights Reserved
// Website: https://www.youtube.com/SauROnmiKE
//
// Benötigt: UTFT & URTouch Libraries (Henning Karlsen) + kompatibler LCD/Shield
//
// VERSIONSHISTORIE:
// 0.10a: Erstbuild, Basisfunktionen
// 0.20a: Kleinere Verbesserungen
// 0.30a: Passwort-Eingabe & Bestätigung für manuellen Arm-Code (12/11/2016)
// 0.40a: Passwort-Eingabe & Bestätigung für Auto-Arm-Code (12/11/2016)
// 1.00a: Arm-Passwort Eingabe & Prüfung完成 (12/11/2016, 19:16)
// 1.10a: Menü im scharfen Zustand (ohne Relais-Signal). Zeit/Datum folgt. Disarm-Button (13/11/2016, 13:04)
// 1.20a: "DISARM" Button programmiert. 5-stelliges Passwort, Prüfung, Entschärfung (13/11/2016, 14:15)
// 1.21a: Bugfix: Nach "NO" bei Passwort-Bestätigung konnte man keine neue Eingabe ohne CLEAR (14/11/2016, 13:32)
// 1.22a: Auto-Arm Countdown fertig (14/11/2016, 15:46)
// 1.30a: Auto-Arm Menü fertig. Zeigt verbleibende Sekunden. Full-Disarm via Pushbutton (Library-Limitation) (14/11/2016, 21:42)
// 1.31a: "buf" Variable von -1 auf 0 geändert – Fix: erster Tastendruck wurde ignoriert (16/11/2016, 00:45)
// 1.40b: "SET ARM PASSWORD" Button für 4-stelligen Code (16/11/2016, 14:33)
// 1.41b: "BACK" Buttons leiten nun zum 2. Optionsmenü (16/11/2016, 16:21)
// 1.42b: 3. Optionsmenü: "SET TIME", "SET DATE" (16/11/2016, 16:37)
// 1.43b: CLEAR-Button bei Disarm-Eingabe resetet "autoinput" Array korrekt (17/11/2016, 00:05)
// 1.44b: Nach Auto-Arm-Passwort-Änderung → 2. Optionsmenü (18/11/2016, 10:02)
// 1.00: Full-Disarm Funktion (6-stelliges Passwort → Hauptmenü). Summer bei jedem Tastendruck (8/1/2017, 20:53)
////////////////////////////////////////////////////////////////////////////////
#include <UTFT.h>
#include <URTouch.h>
UTFT myGLCD(ITDB32WC, 38, 39, 40, 41);
URTouch myTouch(6, 5, 4, 3, 2);
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];
int x, y;
int armpass[4] = {1,2,3,4};
int autopass[5] = {1,2,3,4,5};
int manualpass[6] = {1,1,1,1,1,1};
int timeinput[4];
int arminput[4];
int autoinput[5];
int manualinput[6];
int autolength = 0, manuallength = 0;
int buzzerpin = 8, systarm = 9, serenapin = 10, buttonpin = 13;
int autoarmtime = 40, autoarmtimemem = autoarmtime;
int month = 1, day = 1, year = 2016;
// ... viele Helper-Funktionen für UI: alarmtitle(), title(), drawbutton1/2(),
// drawdisarm(), drawback(), drawno(), drawyes(), drawnext(), drawbuttons(),
// optionsmenu(), optionsmenuend(), drawoptions(), drawarm(), printmonth(),
// armupdate(), autoarmupdate(), autoupdate(), manualupdate()
void setup() {
myGLCD.InitLCD();
myGLCD.clrScr();
myTouch.InitTouch();
myTouch.setPrecision(PREC_EXTREME);
pinMode(buzzerpin, OUTPUT);
pinMode(systarm, OUTPUT);
pinMode(serenapin, OUTPUT);
digitalWrite(buzzerpin, HIGH); delay(1000); digitalWrite(buzzerpin, LOW);
title();
drawoptions();
drawarm();
}
void loop() {
while (true) {
mainmenu:
if (myTouch.dataAvailable()) {
myTouch.read();
x = myTouch.getX(); y = myTouch.getY();
// OPTIONS BUTTON
if (x>=20 && x<=300 && y>=70 && y<=120) {
options:
optionsmenu();
myGLCD.setBackColor(192,192,192);
myGLCD.setColor(0,0,255);
myGLCD.print("SET MANUAL-ARM PASSWORD", CENTER, 73);
myGLCD.print("SET ARM PASSWORD", CENTER, 133);
digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW);
while (true) {
if (myTouch.dataAvailable()) {
myTouch.read(); x=myTouch.getX(); y=myTouch.getY();
// SET MANUAL PASSWORD BUTTON
if (x>=20 && x<=300 && y>=60 && y<=100) {
title();
myGLCD.setBackColor(0,0,0);
myGLCD.setColor(255,0,0);
myGLCD.print("ENTER 6-DIGIT PASSWORD", CENTER, 119);
drawback(); drawnext();
digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW);
while (true) {
if (myTouch.dataAvailable()) {
myTouch.read(); x=myTouch.getX(); y=myTouch.getY();
if (x>=20 && x<=150 && y>=180 && y<=210) { // BACK
digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW);
goto options;
}
if (x>=170 && x<=300 && y>=180 && y<=210) { // NEXT
for(int o=0;o<6;o++) manualinput[o]=0;
passinput:
int buf=0;
myGLCD.setFont(SmallFont);
myGLCD.setColor(255,255,255);
myGLCD.drawLine(0,14,319,14);
myGLCD.setColor(255,255,255);
drawbuttons();
digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW);
myGLCD.setFont(SevenSegNumFont);
myGLCD.setBackColor(0,0,0);
while (true) {
if (myTouch.dataAvailable()) {
myTouch.read(); x=myTouch.getX(); y=myTouch.getY();
// Zahlentasten 1-9, 0, OK, CLEAR, BACK abfragen...
// Passwort prüfen, bei Erfolg: "PASS OK!", dann neues Passwort eingeben...
// (Code gekürzt – vollständige Version im Download)
}
}
}
}
}
}
// ... weitere Buttons: SET ARM PASSWORD, SET AUTO-ARM TIME, etc.
}
}
}
// ARM BUTTON
if (x>=20 && x<=300 && y>=140 && y<=190) {
// 4-stelliges Passwort abfragen, prüfen, Alarm scharf schalten...
}
}
}
}
Hinweis: Der vollständige Code ist sehr umfangreich. Die gekürzte Version zeigt die Struktur. Vollständigen Sketch bitte aus dem Originalprojekt herunterladen.
Herstellungsprozess
- Fehlersichere Steuersysteme designen für Sicherheit und Zuverlässigkeit
- Bewegungsmelder-Alarmsystem mit Java & Reactive Blocks – Auf Raspberry Pi deployen & SMS senden
- DTMF-Decoder mit Arduino bauen – ganz ohne zusätzlichen IC
- Automatische Pflanzenbewässerung mit Arduino – Sorgenfrei in den Urlaub
- Sicherheit von Alarmanlagen mit Arduino und 433-MHz-RF-Modulen testen
- Intelligente Kellerbelüftung: Arduino-gesteuerte Feuchteregelung
- Python 3 zu Arduino UNO: Einfache Steuerung & LED-Demo
- Echtzeit-RFID-Anwesenheitssystem mit Arduino & Google Tabellen
- Fortschrittliches Arduino Kollisionswarnsystem – Visuelle & Akustische Alerts für Fahrzeugsicherheit
- Zuverlässigen Wecker mit DS1302 RTC und Arduino UNO bauen