EPIDINO
For Table of Contents please click dk2os logo above
(Aktualisiert
2017-03-22 ) Neue Version / New Version----> [ The most part is in German, but I'll add more and more English whenever I have time.] Die Idee, ein Epi-Alarmgeraet mit dem Arduino zu bauen kam, als der Sensor des Epi-Care Geraetes nicht mehr arbeitete und eine schnelle Loesung gefunden werden musste. Und so entstand das Epidino. Ein Epi-Alarmgeraet mit Uebertragung des Alarms ins Handy-Netz. Die erste Version ist mit einem ARDUINO UNO, ein Shield fuer die Bauteile und einem GSM-Shield. Hier wird ein neues mit einer einheitlichen Platine gezeigt, mit dem sich verschiedene Loesungsmoeglichkeiten verwirklichen lassen. Es koennen zwei Sensoren, Beschleunigungssensoren oder Piezo-Sensoren, angeschlossen werden. Der Sensor liegt unter der Matratze. Ein Beschleunigungssensor macht natuerlich nur Sinn bei Bewegungen, wobei der Piezosensor auf Druck reagiert und auch bei fester Unterlage gute Ergebnisse liefert. Darueber hinaus sind zwei Eingaenge vorhanden, an die beispielsweise ein Epi-Care free (mit Handsensor) oder ein SOS-Taster angeschlossen werden koennen. Es kann ein GSM shield zum Senden einer SMS aufgesteckt werden. Hat man kein GSM shield zur Verfuegung, so kann auch ein GSM Funk-Telefon-Wahlgeraet (z.B. der Firma AMG Sicherheitstechnik) angeschlossen werden. Oder auch einfach nur ein Buzzer ueber eine Leitung ins Zimmer nebenan. Zurzeit werden drei Piezo-Sensoren verwendet, und es funktioniert problemlos. Mit den drei Potentiometern ist eine gute Einstellung der Empfindlichkeit, der Dauer und der Anzahl der Bewegungen moeglich. Rechts der Ein-/Ausschalter, links daneben die orangefarbene Stopptaste, ganz links, kaum zu erkennen, die zweifarbene LED. Sobald Bewegungen festgestellt werden, beginnt der Timer an zu zaehlen. Dies wird durch eine gruene LED signalisiert. Bewegungen werden durch die rote LED signalisiert. Zweifarbige LED 2 coloured LED Ohne GSM shield. Without GSM shield. Das Epi-Care free kann im Koffer integriert werden. (Epi-Care free = ein Epilepsie-Alarm, den man als Armband tragen kann.) Epi-Care free (armband sensor) can be integrated. Epi-Care free Sensor Mit GSM shield. With GSM shield. If a GSM shield is to be used you must put a jumper here. Wenn ein GSM shield verwendet wird, dann muss hier (orangefarbener Kreis) ein Jumper gesetzt werden. Im freien Platz rechts koennen die Sensoren, Netzadapter usw. (in einem Beutel) verstaut werden, sollte das Epidino mal mit auf die Reise gehen. Als "Klingel" wird ein Prepaid Handy verwendet. Das Mitteilungssignal ist auf "Rufton" "Destiny" (oder anderes Klangmuster) eingestellt, so dass bei Empfang der SMS ein laengeres Signal ertoent. (Bei "Standard" oder "Einzelton" kommt es vor, dass das kurze Signal ueberhoert wird.) The reset button corresponds to the reset button on the board. An der Rueckseite des Koffers befinden sich die Anschluesse fuer die Sensoren. Hier ist nur ein Sensor angeschlossen. Statt eines zweiten Sensors ist ein Stecker eingesteckt, der den analogen Eingang auf HIGH (+5V) setzt. Ganz rechts der 12V-Netzadapter-Anschluss. Links sind drei Buchsen: eine fuer die Tuerlampe, eine fuer den Alarmausgang (beispielsweise zum Anschluss einer Klingel im Zimmer nebenan oder auch zum Anschluss eines Telefon-Wahlgeraetes, wenn kein GSM shield vorhanden ist) und eine zum Anschluss eines Tasters zum Rufen einer Betreuungsperson. Bei Alarm wird eine SMS geschickt, in der auch mitgeteilt wird, ob Sensor1, Sensor 2 oder die Ruftaste den Alarm ausgeloest hat. In case of an alarm a SMS will be sent with the message whether Sensor 1, Sensor 2 or the SOS button unit triggered the alarm. Die Sensoren Der Piezo-Sensor An den Piezo-Sensor koennen weitere Piezo-Sensoren angeschlossen werden. RC-Glied (siehe unten unter "Anschluss der Sensoren" See "How to connect the sensors" below) (non-polar (NP) electrolytic Condensor) Der Beschleungigungssensor Accelerometer sensor) Der Beschleunigungs-Sensor ADXL335 Beschleunigungssensor mit analogem Ausgang. Betriebsspannung: 3.3V. Verwendet man einen Beschleunigungssensor mit einer Betriebsspannung von 5 V, so muss man Vcc des Sensors mit dem 5V-Pin verbinden. Der Beschleunigungssensor ist in einem kleinen Plastikkaestchen untergebracht, das mit Styropor aufgefuellt ist. SOS-Knopf SOS button Kann an einen Eingang (Alarm IN1 oder Alarm IN2) angeschlossen werden. Auch Mitbewohner koennen durch einfaches Druecken der Taste Hilfe rufen. Everybody can call for help just by pushing the button. Tuerlampe Door LED Zwei LEDs sind ueber der Tuer angebracht und ueber ein Kabel und Stecker am Epidino angeschlossen. Bei eingeschaltetem Epidino leuchten sie und signalisieren der Nachtwache, dass das Geraet in Betrieb ist. The two LEDs at the door signal the persons in charge that the Epidino is switched on. Damit die Stopptaste im Dunkeln besser zu erkennen ist, ist diese mit einer unten angeklebten LED beleuchtet. Stop button with LED Epidino ausgeschaltet (OFF) Epidino eingeschaltet (ON) Schaltplan und Platine, erstellt mit TARGET 3001! Circuit and PCB designed with TARGET 3001! Die Platine Parts list for PCB Teileliste fuer Platine
Ausserdem: Furthermore: Koffer Case Taster Push button ON/OFF switch AC adapter 12 V DC LAN cable for sensors Piezo element Accelerometer Beschleunigungs-Sensor ADXL335 Various small material Anschluss der Sensoren How to connect the sensors Das RC-Glied (Kondensator/Widerstand) ist in einem Plastikkaestchen in der Zuleitung des Piezo-Sensors untergebracht (siehe Bild oben). The reset button corresponds to the reset button on the board. AVR Programmer, There are two types of LAN cables. I more like "T568A" (left) ISP-Programmer (FT232 USB to Serial Communication Board)zum Flashen des ATmega328.for flashing the ATmega328. Reset-Taster Der Reset-Taster entspricht dem Reset-Taster auf der Epidino-Platine. The reset button corresponds to the reset button on the Epidino board. For more information see: FT232RL USB to Serial Breakout Board https://www.arduino.cc/en/Main/Standalone Hier wird der Programmer angeschlossen (orangefarben gekennzeichnet) The Programmer is to be connected to the 6pin connector. Man drueckt die Reset-Taste, klickt "Hochladen" (Pfeil nach rechts) und laesst die Reset-Taste los, sobald unten in der Info-Leiste "Hochladen" angezeigt wird. Press the Reset button and click "Upload" (right arrow). Release the Reset button when "Upload" is shown in the info line. Open-source Arduino Software (IDE) Einstellung im Menue "Werkzeuge": Arduino Uno, Port xx, AVRISP mkII Man kann natuerlich auch einfach den ATmega328 in einem Arduino Uno flashen und dann in die Epidino-Platine stecken. Of course, you can also simply flash the ATmega328 in an Arduino Uno and then insert it into the socket of the Epidino board. Und hier der Code. [ Aktualisiert: 2017-01-31 ] To monitor the values set by the three pots please set "mon1" to 1 as shown below. (Locate mon1 in the code.) [Um die mit den drei Potentiometern eingestellten Werte auf dem Monitor zu sehen, setzt man "mon1" auf 1 wie hier gezeigt: (Bitte im Code aufsuchen.)] byte mon0 = 0; byte mon1 = 1; -------------------------------------------- Anfang ------------------------------------------------------------ char remoteNumber[20] = "xxxxxxxxxxxxxx"; // phone number [Handy-Nummer, an die die SMS geschickt werden soll] String SmsText = "Epidino"; /* Epidino Source Version: 17011 INFO: AVR ISP Adjustable with.... [Einstellbar mit...] ...Pot3 Duration of movement [Dauer der Bewegungsphase] ...Pot2 alarm threshold [Alarm-Schwelle, bei der ein Alarm ausgeloest wird.] ...Pot1 sensor sensitivity [Sensor-Empfindlichkeit zur Anpassung an die Matratze] <#>: Parameters to be changed [Mit <#> sind die Stellen markiert, die geaendert werden koennen] Connection for Accelerometer and/or piezo sensor [Anschlussmoeglichkeit von Beschleunigungssensor und/oder PiezoSensor] Duration: Duration of sensor activity registration [Legt fest, wie lange Sensoraktivitaet registriert wird] Pause: Wenn waehrend der Sensoraktivierungs-Dauer eine laengere Pause registriert wird, wird die Ueberwachungsphase abgebrochen. AlarmShreshold: At which counter value alarm is to be triggered [Bei welchem Zaehlerstand der Alarm ausgeloest werden soll] Piezo sensor:if the matress is on a hard surface (floor) an accelerometer doesn't make any sense because there are no movements. In this case a piezo sensor is useful because it registers pressure differences. [Wenn die Matratze auf einer harten Unterlage liegt (kein Lattenrost) wie beispielsweise bei einem Futon, macht ein Bewegungssensor unter der Matratze keinen Sinn, da er sich ja nicht bewegt. Mit einem Piezosensor allerdings koennen Druckunterschiede registriert werden.] The parameters marked with <#> can be changed to get best results according to the type of matress/bed. [Je nach Sensor und Bett/Matratze muessen die mit <#> gekennzeichneten Parameter evtl. veraendert werden.] <<< GSM Shield and Relay output >>> <<< GSM Shield >>> Advantage: Easy to use. You can program it as you like. For example to send a SMS again if stop button was not pressedV5pic/ Disadvantage: The phone number must be in the code and can not be changed by others. [Vorteil: Kompakt, einfach aufstecken und schon fertig. Es kann selbst so programmiert werden, wie man es wuenscht. Zum Beispiel nach einer gewissen Zeit noch einmal waehlen lassen, falls niemand gekommen ist (Stopp-Taste wurde nicht gedrueckt) Es kann ein Handy oder auch ein Festnetz-Telefon angerufen werden.] Nachteil: Soll ein anderes Telefon/Handy angerufen werden, so muss die Nummer hier im Code geaendert und der Arduino neu geflashed werden] <<< Relay output>>> Advantage: You can use any GSM dialler or just a buzzer which is connected via a cable to another room. If you use the GSM-Wahlgeraet GW-02/NO from "AMG Alarmtechnik" for example you can change the phone number to be called just by sending a SMS to the dialler [Vorteil: Es kann ein beliebiges GSM-Wahlgeraet verwendet oder auch nur eine einfache Klingel angeschlossen werden. Bei Verwendung des GSM-Wahlgeraet GW-02/NO der Firma AMG Alarmtechnik beispielsweise kann die Nummer des anzurufenden Handys auf einfache Weise geaendert werden: Es braucht lediglich von dem anzurufenden Handy aus eine SMS an das Wahlgeraet gesendet zu werden.] Ein anderes Alarmgeraet kann angeschlossen werden (z.B. Epi-Care free). Wenn bei Einschalten dieses Geraetes am Ausgang ein Impuls auftritt, muss verhindert werden, dass dieser einen Alarm ausloest (bei Einschalten des Epidinos und auch bei Stoppen eines Fehlalarms). Hierfuer ist die "ResetPause": Nach Aus- und Wiedereinschalten des Relais (bei Druecken der Stopptaste) wird bis nach dem Ausgangsimpuls gewartet. */ #include <GSM.h> #define PINNUMBER "" // Initialisation of the library [Initialsieren der Library] GSM gsmAccess; GSM_SMS sms; /* ---- GSM and/or Relay --------------------------------------- Jumper [k2]: With GSM Shield No jumper: No GSM Shield [Jumper: Mit GSM Shield, Kein Jumper: Ohne GSM Shield ] */ byte GsmYN = 1; // 1:GSM Shield is used 0:GSM Shield is not used [ 1: Mit GSM Shield 0: Ohne GSM Shield ] int AlarmDelay = 15000; // <#> Wait until the alarm is triggered [Wartezeit bis der Alarm ausgeloest wird] int RelayOnDuration = 10000; // <#> How long the alarm relay should remain ON [Wie lange das AlarmRelais anbleiben soll] byte RelayActive = 0; // Whether Relay is active or not [Ob Relay aktiv ist oder nicht] (0=Nicht aktiv 1=Aktiv) byte GsmActive = 0; // 0:GSM shield is not active, 1:GSM shield is active [0:GSM ist nicht aktiv 1:aktiv] int ResetPause = 2000; // <#> Wait after ResetRelay has resetted the connected Alarm Unit (e.g. Epi-Care free) to supress output signal of this unit. // [Wartezeit nach Zuruecksetzen des angeschlossenen Alarmgereats (z.B. Epi-Care free)] byte PauseOnOff = 0; // <#> Es wird festgelegt, ob waehrend der Ueberwachungsphase eine laengere Bewegungspause zum Abbruch fuehren soll. // For monitoring 0=OFF 1=ON [ Monitor-Ausgabe waehlen (nur fuer Programmierungszwecke)] byte mon0 = 0; byte mon1 = 1; // <<<<< Digital In and Outputs >>>>> //byte GsmRxPin = 2; // P4 Pin2 ist fuer GSM festgelegt //byte GsmTxPin = 3; // P5 Pin3 ist fuer GSM festgelegt //byte ModemResetPin = 7; // P13 GSM Shield Reset byte ModemResetPin = 7; // P13 GSM Shield Reset byte ModePin = 5; // P11 for selecting GSM Shield byte RelayPin = 6; // P12 AlarmRelay byte ResetRelayPin = 9; // P15 Relay for resetting the connected Alarm Unit (e.g. Epi-Care free) [Relay zum Zuruecksetzen des angeschlossenen Alamgeraets (z.B. Epi-Care free] byte AlarmIN1pin = 8; // P14 Alarm 1 byte AlarmIN2pin = 4; // P6 Alarm 2 byte SpeakerPin = 10; // P16 Lautsprecher (Buzzer) byte StopButtonPin = 11; // P17 Stopp-Taste byte RedLedPin = 12; // P18 shows sensor activity, lights up when alarm is triggered [zeigt Sensoraktivitaet an, leuchtet stetig bei Alarm] byte GreenLedPin = 13; // P19 lights up at first sensor activity [Leuchtet bei der ersten Sensoraktivitaet auf] // <<<<< Analog Inputs >>>>> int Pot1Pin = A1; // P24 Sensitivity of the Sensor int Pot2Pin = A2; // P25 Alarm Threshold (counter value) [Alarmschwelle (Zaehlerwert)] int Pot3Pin = A0; // P23 Duration of movement registration [Dauer der Bewegungsregistrierung] byte Sens1Pin = A4; // P27 byte Sens2Pin = A5; // P28 byte ST = 0; // 0:Initial status (Timer OFF) 2:Sensor activated, 1:Red/Green-LED reset, 9:Alarm byte LD = 0; // for LED control // 0:RedLed=OFF GreenLed=OFF 1 to 5:RedLed=ON GreenLed=OFF 6...: RedLed=OFF GreenLed=ON int BZ = 0; // for speaker control unsigned long TimerStart; // Timer start time of monitoring period [Startzeit des Timers fuer Ueberwachungsphasendauer] unsigned long TimerEnd; // Timer end time of monitoring period [Endzeit des Timers fuer Uberwachungsphasendauer] unsigned long Pause; // pause during monitoring period [Pause innerhalb der Ueberwachungsphase] unsigned long PauseEnd; // Stopp des Timers bei Nicht-Aktivitaet waehrend der Aktivitaets-Registrierdauer int Sens1Val = 0; // read sensor values [eingelesene Sensorwerte] int Sens2Val = 0; byte Sens1yn = 1; // Sensor1: 1:Sensor connected 0:No sensor connected byte Sens2yn = 1; // Sensor2: 1:Sensor connected 0:No sensor connected int Duration; // Zeitspanne, in der die eingelesenen Werte aufsummiert werden int Sens1Threshold = 350; // Sensor sensitivity, determins at which threshold the counter should be increased int Sens2Threshold = 350; // = Sens1Threshold int AlarmThreshold1 = 12; // Schwelle1, die vorgibt, bei welchem Zaehlerstand der Alarm von Sensor1 ausgeloest werden soll int AlarmThreshold2 = 12; // = AlarmThreshold1 int Counter1 = 0; int Counter2 = 0; int vvv = 0; // general variable [allgemeine Variable] void setup() { pinMode(GreenLedPin, OUTPUT); pinMode(RedLedPin, OUTPUT); pinMode(SpeakerPin, OUTPUT); // pinMode(ModemResetPin, OUTPUT); // GSM-Reset pinMode(RelayPin, OUTPUT); // Relay digitalWrite(RelayPin, HIGH); pinMode(AlarmIN1pin, INPUT); // Alarm von Alarm IN1 pinMode(AlarmIN2Pin, INPUT); pinMode(ResetRelayPin, OUTPUT); // ResetRelay to switch the connected Alarm Unit off and on again // [ResetRelay zum Aus- und Wiedereinschalten des angeschlossenen Alarmgeraets (z.B.Epi-Care free)] digitalWrite(ResetRelayPin, HIGH); // High, so that the connected Alarm Unit is supplied with 12V power pinMode(StopButtonPin, INPUT); pinMode(ModePin, INPUT); if ( digitalRead(Sens1Pin) == HIGH ) { // Check if a sensor is connected or not. If HIGH: no sensor connected Sens1yn = 0; } if ( digitalRead(Sens2Pin) == HIGH ) { Sens2yn = 0; } Serial.begin(250000); // 115200 if ( digitalRead(ModePin) == HIGH ) { // No GSM Shield when no Jumper [ Ohne GSM Shield, wenn der Jumper nicht gesetzt ist] GsmYN = 0; } if ( GsmYN == 1 ) { // Only if GSM Shield is connected [Nur wenn ein GSM shield vorhanden ist] // digitalWrite(ModemResetPin,LOW); Serial.println("SMS Messages Sender"); boolean notConnected = true; // connection status [Verbindungsstatus] while (notConnected) { if (gsmAccess.begin(PINNUMBER) == GSM_READY) { notConnected = false; } else { Serial.println("Not connected"); tone(SpeakerPin, 3000, 1000); delay(1000); } } Serial.println("GSM initialisiert"); tone(SpeakerPin, 100, 1000); digitalWrite(RedLedPin, HIGH); //SmsText = "Das Epidino wurde eingeschaltet"; // "The Epidino has been switched on"; //sendSMS(); } Reset(); } void loop() { StopButton(); AlarmIN1(); AlarmIN2(); Sens1Threshold = analogRead(Pot1Pin); // sensitivity of the sensor Sens2Threshold = Sens1Threshold; AlarmThreshold1 = analogRead(Pot2Pin) / 20; // Alarmschwelle AlarmThreshold2 = AlarmThreshold1; vvv = analogRead(Pot3Pin); // duration [Dauer] Duration = vvv * 100 / 1000; Pause = Duration * 0.1; if ( ST == 0 ) { // Initial status. Not active. Timer OFF digitalWrite(RedLedPin, LOW); digitalWrite(GreenLedPin, LOW); LD = 0; } if ( ST < 9 ) { ReadSensor(); // No alarm triggered yet [Alarm noch nicht ausgeloest] } if ( ST == 2 ) { // Sensor activated [ Sensor ist aktiviert] digitalWrite(RedLedPin, HIGH); digitalWrite(GreenLedPin, LOW); ++LD; } if ( LD == 50 ) { digitalWrite(RedLedPin, LOW); digitalWrite(GreenLedPin, HIGH); LD = 0; ST = 1; } if ( ST == 9 ) { // Alarm triggered [Alarm ausgeloest] Alarm! digitalWrite(GreenLedPin, LOW); digitalWrite(RedLedPin, HIGH); if ( GsmActive == 0 && RelayActive == 0 ) { // Waiting loop for Stop Button [ Warteschleife fuer Stoptaste ] vvv = 0; while (vvv < AlarmDelay) { // Loop for Stop button [Warteschleife fuer Stopptaste] tone(SpeakerPin, 800); StopButton(); if ( ST == 0 ) { vvv = AlarmDelay; // Stop button is pressed [Stopptaste gedrueckt] } ++vvv; } noTone(SpeakerPin); } if ( ST == 9 ) { // If Stop Button was not pressed if ( GsmYN == 1 && GsmActive == 0 ) { // if GSM shield is used and no SMS was sent yet [GSM Shield, noch keine SMS geschickt] sendSMS(); } if ( RelayActive == 0 ) { // if Alarm Relay is not activated yet [Alarm-Relais, noch nicht aktiviert] RelayOn(); } ++BZ; if ( BZ == 20000) { tone(SpeakerPin, 100, 40); // short beep BZ = 0; } } } } void ReadSensor() { Sens1Val = 0; Sens2Val = 0; if ( Sens1yn == 1 ) { vvv = analogRead(Sens1Pin); Sens1Val = abs(vvv); } if ( Sens2yn == 1 ) { vvv = analogRead(Sens2Pin); Sens2Val = abs(vvv); } if ( mon0 == 1 ) { Monitor0(); } if ( mon1 == 1 ) { Monitor1(); } if ( Sens1Val > Sens1Threshold || Sens2Val > Sens2Threshold ) { if ( Sens1Val > Sens1Threshold ) { ++Counter1; // increase counter1 } if ( Sens2Val > Sens2Threshold ) { ++Counter2; // increase counter2 } PauseEnd = TimerEnd; // reset PauseEnd time delay(200); if ( PauseOnOff == 1 ) { PauseEnd = millis() / 1000 + Pause; // new Pause End } if ( ST == 0 ) { // First sensor activity TimerOn(); ST = 2; } else { // Timer is already running (not first sensor activity) ST = 2; // T=2 must be before CheckCounter() [ T=2 muss vor CheckCounter() sein.] } } CheckCounter(); } void TimerOn() { // first sensor activation [bei der ersten Aktivierung des Sensors ] TimerStart = millis() / 1000; // store actual time [aktuelle Zeit abspeichern] TimerEnd = TimerStart + Duration; digitalWrite(GreenLedPin, HIGH); digitalWrite(RedLedPin, LOW); } void CheckCounter() { if ( millis() / 1000 > TimerEnd || millis() / 1000 > PauseEnd ) { Reset(); // Counter and Counter --> 0 T=0 // if ( mon1 == 1 ) { // Serial.print(" if (millis... "); // } } // if ( mon1 == 1 ) { // Monitor1(); // } if ( Sens1yn == 1 && Counter1 > AlarmThreshold1 ) { // Wenn der Counter groesser als der vorgegebene Wert ist Reset(); ST = 9; // Alarm! Activity LED leuchtet stetig SmsText = "Sensor1"; } if ( Sens2yn == 1 && Counter2 > AlarmThreshold2 ) { // Wenn der Counter groesser als der vorgegebene Wert ist Reset(); ST = 9; // Alarm! Activity LED leuchtet stetig SmsText = "Sensor2"; } StopButton(); } void AlarmIN1() { if ( digitalRead(AlarmIN1pin) == LOW ) { digitalWrite(GreenLedPin, HIGH); digitalWrite(RedLedPin, LOW); ST = 9; // activity LED is lit continuously [Aktivitaets-LED leuchtet stetig] SmsText = "Alarm1"; } } void AlarmIN2() { if ( digitalRead(AlarmIN2Pin) == LOW ) { digitalWrite(GreenLedPin, HIGH); digitalWrite(RedLedPin, LOW); ST = 9; // LED lights [LED leuchtet stetig] SmsText = "Alarm2"; } } void StopButton() { if ( digitalRead(StopButtonPin) == LOW ) { // StopButton was pushed vvv = 0; if ( RelayActive == 1 || GsmActive == 1 ) { vvv = 1; } digitalWrite(ResetRelayPin, LOW); // Switch off connected Alarm Unit Reset(); delay(120); digitalWrite(ResetRelayPin, HIGH); melodyStopp(); delay(ResetPause); // wait to ovoid alarm triggered by the output signal of a connected Alarm Unit // [Warten, um Alarmausloesung durch das Ausgangssignal eines angeschlossenen Alarmgeraetes (z.B Epi-Care free) zu verhindern.] tone(SpeakerPin, 100, 1000); } } void Reset() { digitalWrite(GreenLedPin, LOW); digitalWrite(RedLedPin, LOW); ST = 0; BZ = 0; Counter1 = 0; Counter2 = 0; digitalWrite(RelayPin, HIGH); // Switch off alarm relay immediately [Das AlarmRelais sofort abschalten] GsmActive = 0; // GSM shield is not active [GSM Shield ist nicht aktiv] RelayActive = 0; // Alarm relay is not active [AlarmRelais ist nicht aktiv] // digitalWrite(ModemResetPin, LOW); } void sendSMS() { digitalWrite(GreenLedPin, LOW); digitalWrite(RedLedPin, HIGH); Serial.println("SENDING"); Serial.print("SMS an Handy Nummer: "); Serial.println(remoteNumber); Serial.println("SENDING"); Serial.println(); Serial.print("Message:"); Serial.println(SmsText); noTone(SpeakerPin); sms.beginSMS(remoteNumber); sms.print(SmsText); sms.endSMS(); delay(1); Serial.println("\nCOMPLETE!\n"); GsmActive = 1; } void RelayOn() { // Activation of relay [Aktivieren des Relay ] (ST = 9) digitalWrite(RelayPin, LOW); // Relay einschalten (Relay schaltet, wenn Minus) RelayActive = 1; // Relay is activated [AlarmRelais ist aktiviert] } void RelayOff() { // Deaktivieren des Relay nach einer vorgegebenen Zeit vvv = 0; while (vvv < RelayOnDuration) { StopButton(); if ( ST == 0 ) { vvv = RelayOnDuration; // Wenn die StopButton gedrueckt wurde, Schleife sofort verlassen } tone(SpeakerPin, 1200); ++vvv; } // End of loop [Schleifenende] digitalWrite(RelayPin, HIGH); // turn off relay [Relay abschalten (Relay schaltet, wenn Minus)] RelayActive = 5; // AlarmRelais ist nach der vorgegebenen Zeit deaktiviert worden noTone(SpeakerPin); } void melodyStopp() { if ( vvv == 0 ) { // RelayActive = 0 tone(SpeakerPin, 300); delay(800); // warten tone(SpeakerPin, 1000); delay(800); // warten noTone(SpeakerPin); } if ( vvv == 1 ) { // RelayActive = 1 tone(SpeakerPin, 1000); delay(1000); // warten noTone(SpeakerPin); vvv = 0; } } void Monitor0() { Serial.print(" ST:"); Serial.print(ST); vvv = millis() / 1000; Serial.print(" Time:"); Serial.print(vvv); Serial.print(" Duration:" ); Serial.print(Duration); Serial.print(" TimerEnd:"); Serial.print(TimerEnd); Serial.print(" PauseEnd:"); Serial.print(PauseEnd); Serial.print(" AlarmThreshold1:"); Serial.print(AlarmThreshold1); Serial.print(" Sens1Val:"); Serial.print(Sens1Val); Serial.print(" Counter1:"); Serial.print(Counter1); Serial.print(" Counter2:"); Serial.print(Counter2); Serial.print(" AlarmThreshold2:"); Serial.print(AlarmThreshold2); Serial.print(" Sens2Val:"); Serial.print(Sens2Val); Serial.println(); } void Monitor1() { Serial.print(" Duration:" ); Serial.print(Duration); Serial.print(" AlarmThreshold1:"); Serial.print(AlarmThreshold1); Serial.print(" Sens1Threshold:"); Serial.print(Sens1Threshold); Serial.print(" Counter1:"); Serial.print(Counter1); Serial.print(" Sens1Val: "); Serial.print(Sens1Val); Serial.println(); } ---------------------------- Ende -------------------------------------- |