// NanoAlarm v1.00.00 (13.12.2024)
// 2 Laserlichtschranken, gepulst
// 5 Tür oder Fensterschalter (Spannungsteiler für höhere Sicherheit)
// 1 Bewegungsmelder
// Alle Melder an- und abschaltbar per Menü
// Alarm per Bluetooth (HC-05) an ein Handy und dann per WiFi
// Alarm wird abgeschaltet, sobald Handy in der Nähe ost (Bluetooth)
// Alarm auch per Buzzer, nachdem Email versendet wurde
// Testmodus für alle Komponenten (Schalter, Display, Buzzer, HC-05, Laser, Empfänger,
#define pinLaserLed1 3
#define pinLaserLed2 4
#define pinMotionSensor 5
#define pinBuzzer 6
#define pinAlarmOff 7
#define pinLDR1 A0
#define pinLDR2 A1
#define pinSwitsh1 A2
#define pinSwitsh2 A3
#define pinSwitsh3 A4
#define pinSwitsh4 A6
#define pinSwitsh5 A7
#define displayWidth 20
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
void setup()
{
lcd.init();
lcd.backlight();
emptyBorder();
lcd.setCursor(0,1);
lcd.print(F("* NANO ALARM *"));
lcd.setCursor(0,2);
lcd.print(F("* v1.00.1 18.12.24 *"));
delay(3000);
pinMode(pinLaserLed1, OUTPUT);
pinMode(pinLaserLed2, OUTPUT);
pinMode(pinAlarmOff, INPUT_PULLUP);
emptyBorder();
lcd.setCursor(0, 1);
lcdCenter(1, F("Selbsttest..."));
checkLaser1();
checkLaser2();
}
void loop()
{
}
void emptyBorder()
{
lcd.setCursor(0, 0);
lcd.print(F("********************"));
lcd.setCursor(0, 1);
lcd.print(F("* *"));
lcd.setCursor(0, 2);
lcd.print(F("* *"));
lcd.setCursor(0, 3);
lcd.print(F("********************"));
}
void lcdCenter(byte row, String text)
{
byte pos = (displayWidth - text.length()) / 2;
lcd.setCursor(0,row);
lcd.print(F(" "));
lcd.setCursor(pos ,row);
lcd.print(text);
for (byte i = pos; i < displayWidth; i++)
lcd.print(F(" "));
}
void checkLaser1()
{
lcd.setCursor(0, 0);
lcd.print(F("********************"));
lcd.setCursor(0, 1);
lcd.print(F("* Selbsttest... *"));
lcd.setCursor(0, 2);
float valOff = 0;
float valOn = 0;
lcd.print(F("* Laser #1: *"));
lcd.setCursor(0, 3);
lcd.print(F("********************"));
lcd.setCursor(12, 2);
for (byte i = 0; i < 5; i++)
{
//lcd.print(F("."));
digitalWrite(pinLaserLed1, HIGH);
delay(100);
valOn += analogRead(pinLDR1);
lcd.setCursor(12, 2);
lcd.print(valOn);
digitalWrite(pinLaserLed1, LOW);
delay(900);
valOff += analogRead(pinLDR1);
}
lcd.setCursor(12, 1);
if(valOff > 700 && valOn < 500)
lcd.print(F("Ok"));
else
{
while (digitalRead(pinAlarmOff) == HIGH)
{
lcd.setCursor(12, 2);
lcd.print(F("Fehler"));
delay(250);
lcd.setCursor(12, 2);
lcd.print(F(" "));
delay(250);
}
emptyBorder();
}
}
void checkLaser2()
{
lcd.setCursor(0, 0);
lcd.print(F("********************"));
lcd.setCursor(0, 1);
lcd.print(F("* Selbsttest... *"));
lcd.setCursor(0, 2);
float valOff = 0;
float valOn = 0;
lcd.print(F("* Laser #2: *"));
lcd.setCursor(0, 3);
lcd.print(F("********************"));
lcd.setCursor(12, 2);
for (byte i = 0; i < 5; i++)
{
lcd.print(F("."));
digitalWrite(pinLaserLed2, HIGH);
delay(100);
valOn += analogRead(pinLDR1);
digitalWrite(pinLaserLed2, LOW);
delay(900);
valOff += analogRead(pinLDR2);
}
lcd.setCursor(12, 1);
if(valOff > 700 && valOn < 500)
lcd.print(F("Ok"));
else
{
while (digitalRead(pinAlarmOff) == HIGH)
{
lcd.setCursor(12, 2);
lcd.print(F("Fehler"));
delay(250);
lcd.setCursor(12, 2);
lcd.print(F(" "));
delay(250);
}
emptyBorder();
}
}