Projekt Türüberwachung

Gast #3907850
Lesenswert?

Hallo,

ich bin am verzweifeln. Zur Zeit bin ich dabei eine kleine 
Türüberwachung zu entwickeln.
Ablauf: Die Tür ist geschlossen. Alle 12h gibt es über ein GSM Shield 
(SIM900) einen Kontrollanruf. Zwischen diesen 12h lege ich den Atmega 
328 schlafen. Wird die Tür in der Zwischenzeit geöffnet, gibt es 
ebenfalls einen Anruf. Der normalerweise darauf folgende Anruf (12h 
Takt) bleibt ab dann aus.
Alles funktioniert wunderbar bis hier hin:
1. Der 12h Stunden-Takt, wobei ich hoffe diesen mit einem DS3231 RTC 
hinzubekommen.

2. Da das Ganze batteriebetrieben läuft, möchte ich den Atmega natürlich 
nicht, so wie jetzt, auf einem Arduino UNO laufen lassen, sondern als 
Bareboard. Sprich nur die min. Bauteile werden verbaut. (Um Strom zu 
sparen.)
Mein Bareboard sollte soweit funktionieren. Ich habe ein kleines Projekt 
(Blink) übertragen und das hat soweit funktioniert. Wenn ich jetzt die 
nötigen Verbindungen (RX, TX, GND, 5V, Pin9 (Um das SIM900 Shield 
anzuschalten)) verbinde, funktioniert der Anruf vom Arduino Uno 
einwandfrei aber vom Bareboard nicht. Selbst wenn ich den auf den UNO 
gesteckten Atmega328 direkt von den Pins zum SIM900 verbinde gehts.
Wenn ich aber die Pins direkt vom Bareboard zum SIm900 verbinde geht es 
nicht.

Ich habe auf dem Bareboard leider einen 12er Quarz und keinen 16er 
verbaut könnte dies damit zusammen hängen?

Mein Code im Anhang..
Angehängte Dateien:
Gast #3908514
Lesenswert?

Im Anhang mal der Schaltplan vom Bareboard und hier der Code:

#include <SoftwareSerial.h>                            //SoftwareSerial 
Library
#include <avr/sleep.h>                                 //Sleep Modus 
Library
SoftwareSerial SIM900(7, 8);                           // Konfiguriert 
die Software Schnittstelle zwischen den Boards

int counter=0;                                         // Counter wird 
initialisiert
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
+++++++++++++++++++++++++++++++++++++++++++++++++
void setup(){

   Serial.begin(9600);
   SIM900.begin(19200);
   SIM900power();                                     // GSM Shield wird 
eingeschaltet
   delay(2000);
   //configure pin3 as an input and enable the internal pull-up resistor
   pinMode(3, INPUT_PULLUP);
   pinMode(13, OUTPUT);                               //LED13
   pinMode(2, INPUT_PULLUP);
   digitalWrite(2, HIGH);
}
void SIM900power()
{
  digitalWrite(9, HIGH);
  delay(1000);
  digitalWrite(9, LOW);
  delay(2000);
}
void pinInterrupt() {
  sleep_disable();
  detachInterrupt(0);  //Pin 2
  detachInterrupt(1);  //Pin 3
}
void sleepSetup(){
  sleep_enable();
  attachInterrupt(0, pinInterrupt, LOW);
  attachInterrupt(1, pinInterrupt, HIGH);
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  digitalWrite(13, LOW);
  sleep_cpu();
  Serial.println("Aufgewacht");
  digitalWrite(13, HIGH);
}


void loop(){
   Serial.println("Geht zu Bett");
   SIM900power();
   sleepSetup();
   delay(500);
   //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
+++++++++++++++++++++++++++++++++++++++++++++++++
//                                                 Hier wird 
kontrolliert:
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
+++++++++++++++++++++++++++++++++++++++++++++++++
//                                                      Falle offen
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
+++++++++++++++++++++++++++++++++++++++++++++++++


   int sensorVal = digitalRead(3);
    if ((sensorVal==LOW)&&(counter==0)) {
     Serial.println("Tür Zu");
     SIM900power();
     delay(20000);
     Serial.println("Anruf...");
     SIM900.println("ATD + +49151xxxxxx;");
     delay(100);
     SIM900.println();
     delay(12000);
     SIM900.println("ATH");
     Serial.println("Tür war zu ");
     delay(500);

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
+++++++++++++++++++++++++++++++++++++++++++++++++
//                                                      Tür auf!
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
+++++++++++++++++++++++++++++++++++++++++++++++++

   }

   else if ((sensorVal==HIGH)&&(counter==0)) {
           Serial.println("Tür Auf!");
           SIM900power();
           delay(20000);
           Serial.println("Anruf...");
           SIM900.println("ATD + +4915152518358;");             // wähle 
deutsche Vorwahl und dann die Telefonnr. ohne 0
           delay(100);
           SIM900.println();
           delay(12000);                                        // Ruft 
an
           SIM900.println("ATH");
           counter=1;
           Serial.println("Tür war auf!");
           delay(500);
   }

   else     {
     SIM900power();
}
}
Angehängte Dateien:
Gast #3912435
Lesenswert?

Nabend,

ich habe jetzt einen 16er Quarz verbaut und das Bareboard nocheinmal neu 
aufgebaut und siehe da, die Kommunikation zum SIM900 funktioniert 
einwandfrei.

Nun habe ich das nächste Problem. Um einen 12h Takt (für die 
Kontrollanrufe zu bekommen) nutze ich einen DS3231 RTC.
Zurzeit bekomme ich jede Sekunde vom RTC ein Ausgangssignal 
(Alarmsignal). Sinn der Geschichte ist es ja aber alle 12h (oder zum 
Test jede Minute) ein Signal heraus zu bekommen.

Ich kann den Fehler nicht finden. Hier mein Sketch:

Danke für jede Hilfe im voraus!


#include <Wire.h>
#include <DS3231.h>

DS3231 clock;
RTCDateTime dt;
boolean isAlarm = false;
boolean alarmState = false;
int alarmLED = 13;

void alarmFunction()
{
  Serial.println("ALARM");
  isAlarm = true;
}

void setup()
{
  Serial.begin(9600);

  // Initialize DS3231
  Serial.println("Initialize DS3231");;
  clock.begin();

  // Disarm alarms and clear alarms for this example, because alarms is 
battery backed.
  // Under normal conditions, the settings should be reset after power 
and restart microcontroller.
  clock.armAlarm1(false);
  clock.armAlarm2(false);
  clock.clearAlarm1();
  clock.clearAlarm2();

  // Manual (Year, Month, Day, Hour, Minute, Second)
  clock.setDateTime(2014, 4, 25, 0, 0, 0);

  // Set Alarm2 - Every 01m in each hour
  // setAlarm2(Date or Day, Hour, Minute, Mode, Armed = true)
  clock.setAlarm2(0, 0, 1,     DS3231_MATCH_M);

  // Attach Interrput 0. In Arduino UNO connect DS3231 INT to Arduino 
Pin 2
  attachInterrupt(0, alarmFunction, FALLING);

  // Setup LED Pin
  pinMode(alarmLED, OUTPUT);
}

void loop()
{
  dt = clock.getDateTime();
  Serial.println(clock.dateFormat("d-m-Y H:i:s - 1", dt));

  if (isAlarm)
  {
    digitalWrite(alarmLED, alarmState);
    alarmState = !alarmState;
    clock.clearAlarm2();
  }

  delay(1000);
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren