Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

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

Ü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:

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

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

  1. Fehlersichere Steuersysteme designen für Sicherheit und Zuverlässigkeit
  2. Bewegungsmelder-Alarmsystem mit Java & Reactive Blocks – Auf Raspberry Pi deployen & SMS senden
  3. DTMF-Decoder mit Arduino bauen – ganz ohne zusätzlichen IC
  4. Automatische Pflanzenbewässerung mit Arduino – Sorgenfrei in den Urlaub
  5. Sicherheit von Alarmanlagen mit Arduino und 433-MHz-RF-Modulen testen
  6. Intelligente Kellerbelüftung: Arduino-gesteuerte Feuchteregelung
  7. Python 3 zu Arduino UNO: Einfache Steuerung & LED-Demo
  8. Echtzeit-RFID-Anwesenheitssystem mit Arduino & Google Tabellen
  9. Fortschrittliches Arduino Kollisionswarnsystem – Visuelle & Akustische Alerts für Fahrzeugsicherheit
  10. Zuverlässigen Wecker mit DS1302 RTC und Arduino UNO bauen