Forum: Mikrocontroller und Digitale Elektronik Projekt Türüberwachung


von Eplan (Gast)


Angehängte Dateien:

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..

von AVR32 (Gast)


Lesenswert?

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

Bestimmt!

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Ohne Schaltplan wird das hier nichts. Ohne formatierten Code auch nicht.

von Oliver R. (orb)


Lesenswert?

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

Das mußt Du dem Programm irgendwo mitteilen sonst stimmt die Berechnung 
der Baudrate für die serielle Schnittstelle nicht.

von Eplan (Gast)


Angehängte Dateien:

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();
}
}

von Eplan (Gast)


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);
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.